Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Javier Carrasco and committed by
Greg Kroah-Hartman
dd84ac97 70ab96e9

+35 -1
+24 -1
drivers/usb/misc/onboard_usb_dev.c
··· 261 261 &dev_attr_always_powered_in_suspend.attr, 262 262 NULL, 263 263 }; 264 - ATTRIBUTE_GROUPS(onboard_dev); 264 + 265 + static umode_t onboard_dev_attrs_are_visible(struct kobject *kobj, 266 + struct attribute *attr, 267 + int n) 268 + { 269 + struct device *dev = kobj_to_dev(kobj); 270 + struct onboard_dev *onboard_dev = dev_get_drvdata(dev); 271 + 272 + if (attr == &dev_attr_always_powered_in_suspend.attr && 273 + !onboard_dev->pdata->is_hub) 274 + return 0; 275 + 276 + return attr->mode; 277 + } 278 + 279 + static const struct attribute_group onboard_dev_group = { 280 + .is_visible = onboard_dev_attrs_are_visible, 281 + .attrs = onboard_dev_attrs, 282 + }; 283 + __ATTRIBUTE_GROUPS(onboard_dev); 284 + 265 285 266 286 static void onboard_dev_attach_usb_driver(struct work_struct *work) 267 287 { ··· 305 285 onboard_dev->pdata = device_get_match_data(dev); 306 286 if (!onboard_dev->pdata) 307 287 return -EINVAL; 288 + 289 + if (!onboard_dev->pdata->is_hub) 290 + onboard_dev->always_powered_in_suspend = true; 308 291 309 292 onboard_dev->dev = dev; 310 293
+11
drivers/usb/misc/onboard_usb_dev.h
··· 12 12 unsigned long reset_us; /* reset pulse width in us */ 13 13 unsigned int num_supplies; /* number of supplies */ 14 14 const char * const supply_names[MAX_SUPPLIES]; 15 + bool is_hub; 15 16 }; 16 17 17 18 static const struct onboard_dev_pdata microchip_usb424_data = { 18 19 .reset_us = 1, 19 20 .num_supplies = 1, 20 21 .supply_names = { "vdd" }, 22 + .is_hub = true, 21 23 }; 22 24 23 25 static const struct onboard_dev_pdata microchip_usb5744_data = { 24 26 .reset_us = 0, 25 27 .num_supplies = 2, 26 28 .supply_names = { "vdd", "vdd2" }, 29 + .is_hub = true, 27 30 }; 28 31 29 32 static const struct onboard_dev_pdata realtek_rts5411_data = { 30 33 .reset_us = 0, 31 34 .num_supplies = 1, 32 35 .supply_names = { "vdd" }, 36 + .is_hub = true, 33 37 }; 34 38 35 39 static const struct onboard_dev_pdata ti_tusb8020b_data = { 36 40 .reset_us = 3000, 37 41 .num_supplies = 1, 38 42 .supply_names = { "vdd" }, 43 + .is_hub = true, 39 44 }; 40 45 41 46 static const struct onboard_dev_pdata ti_tusb8041_data = { 42 47 .reset_us = 3000, 43 48 .num_supplies = 1, 44 49 .supply_names = { "vdd" }, 50 + .is_hub = true, 45 51 }; 46 52 47 53 static const struct onboard_dev_pdata cypress_hx3_data = { 48 54 .reset_us = 10000, 49 55 .num_supplies = 2, 50 56 .supply_names = { "vdd", "vdd2" }, 57 + .is_hub = true, 51 58 }; 52 59 53 60 static const struct onboard_dev_pdata cypress_hx2vl_data = { 54 61 .reset_us = 1, 55 62 .num_supplies = 1, 56 63 .supply_names = { "vdd" }, 64 + .is_hub = true, 57 65 }; 58 66 59 67 static const struct onboard_dev_pdata genesys_gl850g_data = { 60 68 .reset_us = 3, 61 69 .num_supplies = 1, 62 70 .supply_names = { "vdd" }, 71 + .is_hub = true, 63 72 }; 64 73 65 74 static const struct onboard_dev_pdata genesys_gl852g_data = { 66 75 .reset_us = 50, 67 76 .num_supplies = 1, 68 77 .supply_names = { "vdd" }, 78 + .is_hub = true, 69 79 }; 70 80 71 81 static const struct onboard_dev_pdata vialab_vl817_data = { 72 82 .reset_us = 10, 73 83 .num_supplies = 1, 74 84 .supply_names = { "vdd" }, 85 + .is_hub = true, 75 86 }; 76 87 77 88 static const struct of_device_id onboard_dev_match[] = {