On Wed, Aug 19, 2015 at 04:03:19PM +0200, Jacek Anaszewski wrote: > On 08/14/2015 09:57 AM, Jacek Anaszewski wrote: > >H Andrew, > > > >On 08/13/2015 04:15 PM, Andrew Lunn wrote: > >>On Tue, Aug 11, 2015 at 11:37:14AM +0200, Jacek Anaszewski wrote: > >>>This patch adds a new brightness_set_nonblocking op to the LED > >>>subsystem. > >>>The op is intended for drivers that set brightness in a non-blocking > >>>way, > >>>i.e. they neither sleep nor use delays while setting brightness. > >>> > >>>Signed-off-by: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx> > >>>Cc: Bryan Wu <cooloney@xxxxxxxxx> > >>>Cc: Andrew Lunn <andrew@xxxxxxx> > >>>Cc: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > >>>Cc: Pavel Machek <pavel@xxxxxx> > >>>Cc: Stas Sergeev <stsp@xxxxxxxxxxxxxxxxxxxxx> > >>>--- > >>> include/linux/leds.h | 3 +++ > >>> 1 file changed, 3 insertions(+) > >>> > >>>diff --git a/include/linux/leds.h b/include/linux/leds.h > >>>index b122eea..c32f1b8 100644 > >>>--- a/include/linux/leds.h > >>>+++ b/include/linux/leds.h > >>>@@ -53,6 +53,9 @@ struct led_classdev { > >>> /* Must not sleep, use a workqueue if needed */ > >>> void (*brightness_set)(struct led_classdev *led_cdev, > >>> enum led_brightness brightness); > >>>+ /* Intended for drivers that set brightness in a non-blocking > >>>way */ > >>>+ void (*brightness_set_nonblocking)(struct led_classdev *led_cdev, > >>>+ enum led_brightness brightness); > >> > >>Hi Jacek > >> > >>>From an API design point of view, i'm not sure this is the best way to > >>go. You now have two calls which do the same thing, with the plan that > >>you want to invert the meaning of brightness_set, the old well known > >>API call, sometime later. This inverting the meaning is going to catch > >>people out and introduce bugs. > >> > >>I would rather add a brightness_set_blocking op. Then as you go > >>thought the drivers stripping out the work queue, move the driver to > >>use this brightness_set_blocking. > > > >There are around 60 drivers in the other kernel subsystems that register > >LED class devices. If we chose the way you proposed then we would have > >to adjust all of them to the LED core changes, which could complicate > >the situation during merge window if there were other modifications in > >the affected drivers. You don't need to change anything, if the semantics of brightness_set() does not change. All current drivers don't sleep. They use a work queue if needed to ensure they don't sleep. Hence they are correct. By adding a new operation, brightness_set_blocking(), you can strip out this work queue and move to the new op member one driver at a time. And you can take as long as you want doing this. No flag day when an API suddenly means something totally different. Andrew -- To unsubscribe from this list: send the line "unsubscribe linux-leds" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html