Messages in this thread | | | Date | Wed, 9 Sep 2020 22:48:15 +0200 | From | Pavel Machek <> | Subject | Re: [PATCH net-next + leds v2 2/7] leds: add generic API for LEDs that can be controlled by hardware |
| |
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 <marek.behun@nic.cz> > --- > .../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 <marek.behun@nic.cz> > + 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 [unhandled content-type:application/pgp-signature] | |