Lines Matching +full:led +full:- +full:sources
1 // SPDX-License-Identifier: GPL-2.0
3 * USB port LED trigger
38 * usbport_trig_usb_dev_observed - Check if dev is connected to observed port
45 if (!usb_dev->parent) in usbport_trig_usb_dev_observed()
48 list_for_each_entry(port, &usbport_data->ports, list) { in usbport_trig_usb_dev_observed()
49 if (usb_dev->parent == port->hub && in usbport_trig_usb_dev_observed()
50 usb_dev->portnum == port->portnum) in usbport_trig_usb_dev_observed()
51 return port->observed; in usbport_trig_usb_dev_observed()
62 usbport_data->count++; in usbport_trig_usb_dev_check()
68 * usbport_trig_update_count - Recalculate amount of connected matching devices
72 struct led_classdev *led_cdev = usbport_data->led_cdev; in usbport_trig_update_count()
74 usbport_data->count = 0; in usbport_trig_update_count()
76 led_set_brightness(led_cdev, usbport_data->count ? LED_FULL : LED_OFF); in usbport_trig_update_count()
90 return sprintf(buf, "%d\n", port->observed) + 1; in usbport_trig_port_show()
102 port->observed = 0; in usbport_trig_port_store()
104 port->observed = 1; in usbport_trig_port_store()
106 return -EINVAL; in usbport_trig_port_store()
108 usbport_trig_update_count(port->data); in usbport_trig_port_store()
127 * usbport_trig_port_observed - Check if port should be observed
132 struct device *dev = usbport_data->led_cdev->dev; in usbport_trig_port_observed()
133 struct device_node *led_np = dev->of_node; in usbport_trig_port_observed()
152 /* Amount of trigger sources for this LED */ in usbport_trig_port_observed()
153 count = of_count_phandle_with_args(led_np, "trigger-sources", in usbport_trig_port_observed()
154 "#trigger-source-cells"); in usbport_trig_port_observed()
156 dev_warn(dev, "Failed to get trigger sources for %pOF\n", in usbport_trig_port_observed()
161 /* Check list of sources for this specific port */ in usbport_trig_port_observed()
165 err = of_parse_phandle_with_args(led_np, "trigger-sources", in usbport_trig_port_observed()
166 "#trigger-source-cells", i, in usbport_trig_port_observed()
187 struct led_classdev *led_cdev = usbport_data->led_cdev; in usbport_trig_add_port()
194 err = -ENOMEM; in usbport_trig_add_port()
198 port->data = usbport_data; in usbport_trig_add_port()
199 port->hub = usb_dev; in usbport_trig_add_port()
200 port->portnum = portnum; in usbport_trig_add_port()
201 port->observed = usbport_trig_port_observed(usbport_data, usb_dev, in usbport_trig_add_port()
205 port->port_name = kzalloc(len, GFP_KERNEL); in usbport_trig_add_port()
206 if (!port->port_name) { in usbport_trig_add_port()
207 err = -ENOMEM; in usbport_trig_add_port()
210 snprintf(port->port_name, len, "%s-port%d", hub_name, portnum); in usbport_trig_add_port()
212 sysfs_attr_init(&port->attr.attr); in usbport_trig_add_port()
213 port->attr.attr.name = port->port_name; in usbport_trig_add_port()
214 port->attr.attr.mode = S_IRUSR | S_IWUSR; in usbport_trig_add_port()
215 port->attr.show = usbport_trig_port_show; in usbport_trig_add_port()
216 port->attr.store = usbport_trig_port_store; in usbport_trig_add_port()
218 err = sysfs_add_file_to_group(&led_cdev->dev->kobj, &port->attr.attr, in usbport_trig_add_port()
223 list_add_tail(&port->list, &usbport_data->ports); in usbport_trig_add_port()
228 kfree(port->port_name); in usbport_trig_add_port()
241 for (i = 1; i <= usb_dev->maxchild; i++) in usbport_trig_add_usb_dev_ports()
243 dev_name(&usb_dev->dev), i); in usbport_trig_add_usb_dev_ports()
251 struct led_classdev *led_cdev = usbport_data->led_cdev; in usbport_trig_remove_port()
253 list_del(&port->list); in usbport_trig_remove_port()
254 sysfs_remove_file_from_group(&led_cdev->dev->kobj, &port->attr.attr, in usbport_trig_remove_port()
256 kfree(port->port_name); in usbport_trig_remove_port()
265 list_for_each_entry_safe(port, tmp, &usbport_data->ports, list) { in usbport_trig_remove_usb_dev_ports()
266 if (port->hub == usb_dev) in usbport_trig_remove_usb_dev_ports()
280 struct led_classdev *led_cdev = usbport_data->led_cdev; in usbport_trig_notify()
289 if (observed && usbport_data->count++ == 0) in usbport_trig_notify()
294 if (observed && --usbport_data->count == 0) in usbport_trig_notify()
309 return -ENOMEM; in usbport_trig_activate()
310 usbport_data->led_cdev = led_cdev; in usbport_trig_activate()
313 INIT_LIST_HEAD(&usbport_data->ports); in usbport_trig_activate()
314 err = sysfs_create_group(&led_cdev->dev->kobj, &ports_group); in usbport_trig_activate()
321 usbport_data->nb.notifier_call = usbport_trig_notify; in usbport_trig_activate()
323 usb_register_notify(&usbport_data->nb); in usbport_trig_activate()
336 list_for_each_entry_safe(port, tmp, &usbport_data->ports, list) { in usbport_trig_deactivate()
340 sysfs_remove_group(&led_cdev->dev->kobj, &ports_group); in usbport_trig_deactivate()
342 usb_unregister_notify(&usbport_data->nb); in usbport_trig_deactivate()