Am Thu, 1 Jun 2023 10:53:48 +0200 schrieb Hans de Goede <hdegoede@xxxxxxxxxx>: > Hi, > > On 5/31/23 17:54, Henning Schild wrote: > > This adds support for the Siemens Simatic IPC BX-21A. Its LEDs are > > connected to GPIO pins provided by the Intel Elkhart Lake pinctrl > > driver. > > > > Signed-off-by: Henning Schild <henning.schild@xxxxxxxxxxx> > > Thank you for the patch. > > Since this mostly touches files under drivers/leds I believe it would > be best for this to be merged through Lee's LEDs tree. Lee i saw that your tree got merged recently. This one was not yet part of it. Henning > Here is my ack for merging the pdx86 bits through that tree: > > Acked-by: Hans de Goede <hdegoede@xxxxxxxxxx> > > Regards, > > Hans > > > > > > --- > > drivers/leds/simple/Kconfig | 13 +++++ > > drivers/leds/simple/Makefile | 1 + > > .../leds/simple/simatic-ipc-leds-gpio-core.c | 4 ++ > > .../simatic-ipc-leds-gpio-elkhartlake.c | 57 > > +++++++++++++++++++ drivers/platform/x86/simatic-ipc.c | > > 3 + .../platform_data/x86/simatic-ipc-base.h | 1 + > > include/linux/platform_data/x86/simatic-ipc.h | 3 +- > > 7 files changed, 81 insertions(+), 1 deletion(-) > > create mode 100644 > > drivers/leds/simple/simatic-ipc-leds-gpio-elkhartlake.c > > > > diff --git a/drivers/leds/simple/Kconfig > > b/drivers/leds/simple/Kconfig index 44fa0f93cb3b..626ab18ac09d > > 100644 --- a/drivers/leds/simple/Kconfig > > +++ b/drivers/leds/simple/Kconfig > > @@ -34,3 +34,16 @@ config LEDS_SIEMENS_SIMATIC_IPC_F7188X > > > > To compile this driver as a module, choose M here: the > > module will be called simatic-ipc-leds-gpio-f7188x. > > + > > +config LEDS_SIEMENS_SIMATIC_IPC_ELKHARTLAKE > > + tristate "LED driver for Siemens Simatic IPCs based on > > Intel Elkhart Lake GPIO" > > + depends on LEDS_GPIO > > + depends on PINCTRL_ELKHARTLAKE > > + depends on SIEMENS_SIMATIC_IPC > > + default LEDS_SIEMENS_SIMATIC_IPC > > + help > > + This option enables support for the LEDs of several > > Industrial PCs > > + from Siemens based on Elkhart Lake GPIO i.e. BX-21A. > > + > > + To compile this driver as a module, choose M here: the > > module > > + will be called simatic-ipc-leds-gpio-elkhartlake. > > diff --git a/drivers/leds/simple/Makefile > > b/drivers/leds/simple/Makefile index e3e840cea275..783578f11bb0 > > 100644 --- a/drivers/leds/simple/Makefile > > +++ b/drivers/leds/simple/Makefile > > @@ -2,3 +2,4 @@ > > obj-$(CONFIG_LEDS_SIEMENS_SIMATIC_IPC) += > > simatic-ipc-leds.o > > obj-$(CONFIG_LEDS_SIEMENS_SIMATIC_IPC_APOLLOLAKE) += > > simatic-ipc-leds-gpio-core.o simatic-ipc-leds-gpio-apollolake.o > > obj-$(CONFIG_LEDS_SIEMENS_SIMATIC_IPC_F7188X) += > > simatic-ipc-leds-gpio-core.o simatic-ipc-leds-gpio-f7188x.o > > +obj-$(CONFIG_LEDS_SIEMENS_SIMATIC_IPC_ELKHARTLAKE) += > > simatic-ipc-leds-gpio-core.o simatic-ipc-leds-gpio-elkhartlake.o > > diff --git a/drivers/leds/simple/simatic-ipc-leds-gpio-core.c > > b/drivers/leds/simple/simatic-ipc-leds-gpio-core.c index > > 2a21b663df87..c552ea73ed9d 100644 --- > > a/drivers/leds/simple/simatic-ipc-leds-gpio-core.c +++ > > b/drivers/leds/simple/simatic-ipc-leds-gpio-core.c @@ -57,6 +57,7 > > @@ int simatic_ipc_leds_gpio_probe(struct platform_device *pdev, > > switch (plat->devmode) { case SIMATIC_IPC_DEVICE_127E: case > > SIMATIC_IPC_DEVICE_227G: > > + case SIMATIC_IPC_DEVICE_BX_21A: > > break; > > default: > > return -ENODEV; > > @@ -72,6 +73,9 @@ int simatic_ipc_leds_gpio_probe(struct > > platform_device *pdev, goto out; > > } > > > > + if (!table_extra) > > + return 0; > > + > > table_extra->dev_id = dev_name(dev); > > gpiod_add_lookup_table(table_extra); > > > > diff --git > > a/drivers/leds/simple/simatic-ipc-leds-gpio-elkhartlake.c > > b/drivers/leds/simple/simatic-ipc-leds-gpio-elkhartlake.c new file > > mode 100644 index 000000000000..6ba21dbb3ba0 --- /dev/null > > +++ b/drivers/leds/simple/simatic-ipc-leds-gpio-elkhartlake.c > > @@ -0,0 +1,57 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* > > + * Siemens SIMATIC IPC driver for GPIO based LEDs > > + * > > + * Copyright (c) Siemens AG, 2023 > > + * > > + * Author: > > + * Henning Schild <henning.schild@xxxxxxxxxxx> > > + */ > > + > > +#include <linux/gpio/machine.h> > > +#include <linux/gpio/consumer.h> > > +#include <linux/leds.h> > > +#include <linux/module.h> > > +#include <linux/platform_device.h> > > +#include <linux/platform_data/x86/simatic-ipc-base.h> > > + > > +#include "simatic-ipc-leds-gpio.h" > > + > > +static struct gpiod_lookup_table simatic_ipc_led_gpio_table = { > > + .dev_id = "leds-gpio", > > + .table = { > > + GPIO_LOOKUP_IDX("INTC1020:04", 72, NULL, 0, > > GPIO_ACTIVE_HIGH), > > + GPIO_LOOKUP_IDX("INTC1020:04", 77, NULL, 1, > > GPIO_ACTIVE_HIGH), > > + GPIO_LOOKUP_IDX("INTC1020:04", 78, NULL, 2, > > GPIO_ACTIVE_HIGH), > > + GPIO_LOOKUP_IDX("INTC1020:04", 58, NULL, 3, > > GPIO_ACTIVE_HIGH), > > + GPIO_LOOKUP_IDX("INTC1020:04", 60, NULL, 4, > > GPIO_ACTIVE_HIGH), > > + GPIO_LOOKUP_IDX("INTC1020:04", 62, NULL, 5, > > GPIO_ACTIVE_HIGH), > > + {} /* Terminating entry */ > > + }, > > +}; > > + > > +static int simatic_ipc_leds_gpio_elkhartlake_probe(struct > > platform_device *pdev) +{ > > + return simatic_ipc_leds_gpio_probe(pdev, > > &simatic_ipc_led_gpio_table, > > + NULL); > > +} > > + > > +static int simatic_ipc_leds_gpio_elkhartlake_remove(struct > > platform_device *pdev) +{ > > + return simatic_ipc_leds_gpio_remove(pdev, > > &simatic_ipc_led_gpio_table, > > + NULL); > > +} > > + > > +static struct platform_driver > > simatic_ipc_led_gpio_elkhartlake_driver = { > > + .probe = simatic_ipc_leds_gpio_elkhartlake_probe, > > + .remove = simatic_ipc_leds_gpio_elkhartlake_remove, > > + .driver = { > > + .name = KBUILD_MODNAME, > > + }, > > +}; > > +module_platform_driver(simatic_ipc_led_gpio_elkhartlake_driver); > > + > > +MODULE_LICENSE("GPL v2"); > > +MODULE_ALIAS("platform:" KBUILD_MODNAME); > > +MODULE_SOFTDEP("pre: simatic-ipc-leds-gpio-core > > platform:elkhartlake-pinctrl"); +MODULE_AUTHOR("Henning Schild > > <henning.schild@xxxxxxxxxxx>"); diff --git > > a/drivers/platform/x86/simatic-ipc.c > > b/drivers/platform/x86/simatic-ipc.c index > > c773995b230d..4402cd354104 100644 --- > > a/drivers/platform/x86/simatic-ipc.c +++ > > b/drivers/platform/x86/simatic-ipc.c @@ -48,6 +48,7 @@ static > > struct { {SIMATIC_IPC_IPC477E, SIMATIC_IPC_DEVICE_NONE, > > SIMATIC_IPC_DEVICE_427E}, {SIMATIC_IPC_IPCBX_39A, > > SIMATIC_IPC_DEVICE_227G, SIMATIC_IPC_DEVICE_227G}, > > {SIMATIC_IPC_IPCPX_39A, SIMATIC_IPC_DEVICE_NONE, > > SIMATIC_IPC_DEVICE_227G}, > > + {SIMATIC_IPC_IPCBX_21A, SIMATIC_IPC_DEVICE_BX_21A, > > SIMATIC_IPC_DEVICE_NONE}, }; > > > > static int register_platform_devices(u32 station_id) > > @@ -72,6 +73,8 @@ static int register_platform_devices(u32 > > station_id) pdevname = KBUILD_MODNAME "_leds_gpio_apollolake"; > > if (ledmode == SIMATIC_IPC_DEVICE_227G) > > pdevname = KBUILD_MODNAME > > "_leds_gpio_f7188x"; > > + if (ledmode == SIMATIC_IPC_DEVICE_BX_21A) > > + pdevname = KBUILD_MODNAME > > "_leds_gpio_elkhartlake"; platform_data.devmode = ledmode; > > ipc_led_platform_device = > > platform_device_register_data(NULL, > > diff --git a/include/linux/platform_data/x86/simatic-ipc-base.h > > b/include/linux/platform_data/x86/simatic-ipc-base.h index > > 57d6a10dfc9e..00bf18ecb160 100644 --- > > a/include/linux/platform_data/x86/simatic-ipc-base.h +++ > > b/include/linux/platform_data/x86/simatic-ipc-base.h @@ -20,6 +20,7 > > @@ #define SIMATIC_IPC_DEVICE_127E 3 > > #define SIMATIC_IPC_DEVICE_227E 4 > > #define SIMATIC_IPC_DEVICE_227G 5 > > +#define SIMATIC_IPC_DEVICE_BX_21A 6 > > > > struct simatic_ipc_platform { > > u8 devmode; > > diff --git a/include/linux/platform_data/x86/simatic-ipc.h > > b/include/linux/platform_data/x86/simatic-ipc.h index > > a48bb5240977..1a8e4c1099e3 100644 --- > > a/include/linux/platform_data/x86/simatic-ipc.h +++ > > b/include/linux/platform_data/x86/simatic-ipc.h @@ -2,7 +2,7 @@ > > /* > > * Siemens SIMATIC IPC drivers > > * > > - * Copyright (c) Siemens AG, 2018-2021 > > + * Copyright (c) Siemens AG, 2018-2023 > > * > > * Authors: > > * Henning Schild <henning.schild@xxxxxxxxxxx> > > @@ -34,6 +34,7 @@ enum simatic_ipc_station_ids { > > SIMATIC_IPC_IPC227G = 0x00000F01, > > SIMATIC_IPC_IPCBX_39A = 0x00001001, > > SIMATIC_IPC_IPCPX_39A = 0x00001002, > > + SIMATIC_IPC_IPCBX_21A = 0x00001101, > > }; > > > > static inline u32 simatic_ipc_get_station_id(u8 *data, int > > max_len) >