summaryrefslogtreecommitdiff
path: root/drivers/usb/misc/onboard_usb_dev.c
diff options
context:
space:
mode:
authorJavier Carrasco <javier.carrasco@wolfvision.net>2024-03-25 10:15:16 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-03-27 07:57:16 +0100
commitdd84ac9765410c4375f88457dcb86f126a5eb18d (patch)
treef4005fe7ad75b327b6ec90f28d1e10a91f2777cd /drivers/usb/misc/onboard_usb_dev.c
parent70ab96e92106ecd03b39a39ce58c6c237eb0be66 (diff)
usb: misc: onboard_dev: add support for non-hub devices
Most of the functionality this driver provides can be used by non-hub devices as well. To account for the hub-specific code, add a flag to the device data structure and check its value for hub-specific code. The 'always_powered_in_supend' attribute is only available for hub devices, keeping the driver's default behavior for non-hub devices (keep on in suspend). Acked-by: Matthias Kaehlcke <mka@chromium.org> Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net> Link: https://lore.kernel.org/r/20240325-onboard_xvf3500-v8-6-29e3f9222922@wolfvision.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/misc/onboard_usb_dev.c')
-rw-r--r--drivers/usb/misc/onboard_usb_dev.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/usb/misc/onboard_usb_dev.c b/drivers/usb/misc/onboard_usb_dev.c
index 6aee438962165..f72f47edd87ea 100644
--- a/drivers/usb/misc/onboard_usb_dev.c
+++ b/drivers/usb/misc/onboard_usb_dev.c
@@ -261,7 +261,27 @@ static struct attribute *onboard_dev_attrs[] = {
&dev_attr_always_powered_in_suspend.attr,
NULL,
};
-ATTRIBUTE_GROUPS(onboard_dev);
+
+static umode_t onboard_dev_attrs_are_visible(struct kobject *kobj,
+ struct attribute *attr,
+ int n)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct onboard_dev *onboard_dev = dev_get_drvdata(dev);
+
+ if (attr == &dev_attr_always_powered_in_suspend.attr &&
+ !onboard_dev->pdata->is_hub)
+ return 0;
+
+ return attr->mode;
+}
+
+static const struct attribute_group onboard_dev_group = {
+ .is_visible = onboard_dev_attrs_are_visible,
+ .attrs = onboard_dev_attrs,
+};
+__ATTRIBUTE_GROUPS(onboard_dev);
+
static void onboard_dev_attach_usb_driver(struct work_struct *work)
{
@@ -286,6 +306,9 @@ static int onboard_dev_probe(struct platform_device *pdev)
if (!onboard_dev->pdata)
return -EINVAL;
+ if (!onboard_dev->pdata->is_hub)
+ onboard_dev->always_powered_in_suspend = true;
+
onboard_dev->dev = dev;
err = onboard_dev_get_regulators(onboard_dev);