Re: [PATCH net-next + leds v2 2/7] leds: add generic API for LEDs that can be controlled by hardware
From: Pavel Machek <hidden>
Date: 2020-09-09 20:48:23
Also in:
linux-leds, lkml
Hi!
Many an ethernet PHY (and other chips) supports various HW control modes for LEDs connected directly to them.
I guess this should be "Many ethernet PHYs (and other chips) support various HW control modes for LEDs connected directly to them."
This API registers a new private LED trigger called dev-hw-mode. When this trigger is enabled for a LED, the various HW control modes which are supported by the device for given LED can be get/set via hw_mode sysfs file. Signed-off-by: Marek Behún <redacted> --- .../sysfs-class-led-trigger-dev-hw-mode | 8 + drivers/leds/Kconfig | 10 +
I guess this should live in drivers/leds/trigger/ledtrig-hw.c . I'd call the trigger just "hw"...
+Contact: Marek Behún [off-list ref] + linux-leds@vger.kernel.org +Description: (W) Set the HW control mode of this LED. The various available HW control modes + are specific per device to which the LED is connected to and per LED itself. + (R) Show the available HW control modes and the currently selected one.
80 columns :-) (and please fix that globally, at least at places where it is easy, like comments).
+ return 0; +err_free: + devm_kfree(dev, led); + return ret; +}
No need for explicit free with devm_ infrastructure?
+ cur_mode = led->ops->led_get_hw_mode(dev->parent, led);
+
+ for (mode = led->ops->led_iter_hw_mode(dev->parent, led, &iter);
+ mode;
+ mode = led->ops->led_iter_hw_mode(dev->parent, led, &iter)) {
+ bool sel;
+
+ sel = cur_mode && !strcmp(mode, cur_mode);
+
+ len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s%s ", sel ? "[" : "", mode,
+ sel ? "]" : "");
+ }
+
+ if (buf[len - 1] == ' ')
+ buf[len - 1] = '\n';Can this ever be false? Are you accessing buf[-1] in such case?
+int of_register_hw_controlled_leds(struct device *dev, const char *devicename, + const struct hw_controlled_led_ops *ops); +int hw_controlled_led_brightness_set(struct led_classdev *cdev, enum led_brightness brightness); +
Could we do something like hw_controlled_led -> hw_led to keep verbosity down and line lengths reasonable? Or hwc_led?
+extern struct led_hw_trigger_type hw_control_led_trig_type; +extern struct led_trigger hw_control_led_trig; + +#else /* !IS_ENABLED(CONFIG_LEDS_HW_CONTROLLED) */
CONFIG_LEDS_HWC? Or maybe CONFIG_LEDTRIG_HW? Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Attachments
- signature.asc [application/pgp-signature] 181 bytes