On Sat, Jan 20, 2024 at 10:26:43PM +0100, Duje Mihanović wrote: > The ExpressWire protocol is shared between at least KTD2692 and KTD2801 > with slight differences such as timings and the former not having a > defined set of pulses for enabling the protocol (possibly because it > does not support PWM unlike KTD2801). Despite these differences the > ExpressWire handling code can be shared between the two, so move it into > a library in preparation for adding KTD2801 support. > > Suggested-by: Daniel Thompson <daniel.thompson@xxxxxxxxxx> > Signed-off-by: Duje Mihanović <duje.mihanovic@xxxxxxxx> > --- > MAINTAINERS | 7 +++ > drivers/leds/Kconfig | 3 ++ > drivers/leds/Makefile | 3 ++ > drivers/leds/flash/Kconfig | 1 + > drivers/leds/flash/leds-ktd2692.c | 91 +++++++++++---------------------------- > drivers/leds/leds-expresswire.c | 59 +++++++++++++++++++++++++ > include/linux/leds-expresswire.h | 35 +++++++++++++++ > 7 files changed, 132 insertions(+), 67 deletions(-) > > diff --git a/MAINTAINERS b/MAINTAINERS > index a7c4cf8201e0..87b12d2448a0 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -7902,6 +7902,13 @@ S: Maintained > T: git git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat.git > F: fs/exfat/ > > +EXPRESSWIRE PROTOCOL LIBRARY > +M: Duje Mihanović <duje.mihanovic@xxxxxxxx> > +L: linux-leds@xxxxxxxxxxxxxxx > +S: Maintained > +F: drivers/leds/leds-expresswire.c > +F: include/linux/leds-expresswire.h > + > EXT2 FILE SYSTEM > M: Jan Kara <jack@xxxxxxxx> > L: linux-ext4@xxxxxxxxxxxxxxx > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig > index 6292fddcc55c..d29b6823e7d1 100644 > --- a/drivers/leds/Kconfig > +++ b/drivers/leds/Kconfig > @@ -181,6 +181,9 @@ config LEDS_EL15203000 > To compile this driver as a module, choose M here: the module > will be called leds-el15203000. > > +config LEDS_EXPRESSWIRE > + bool > + Shouldn't there be a "select GPIOLIB" here? It seems odd to make the clients responsible for the dependencies. BTW there seems to be very little consistency across the kernel between "depends on GPIOLIB" and "select GPIOLIB".. but select is marginally more popular (283 vs. 219 in the kernel I checked). > diff --git a/drivers/leds/flash/leds-ktd2692.c b/drivers/leds/flash/leds-ktd2692.c > index 598eee5daa52..8c17de3d621f 100644 > --- a/drivers/leds/flash/leds-ktd2692.c > +++ b/drivers/leds/flash/leds-ktd2692.c > <snip> > static void ktd2692_expresswire_write(struct ktd2692_context *led, u8 value) > { > int i; > > - ktd2692_expresswire_start(led); > + expresswire_start(&led->props); > for (i = 7; i >= 0; i--) > - ktd2692_expresswire_set_bit(led, value & BIT(i)); > - ktd2692_expresswire_end(led); > + expresswire_set_bit(&led->props, value & BIT(i)); > + expresswire_end(&led->props); > } Is there any reason not to have an expresswire_write_u8() method in the library code? It is a concept that appears in both drivers. Daniel.