Re: [PATCH 1/1] leds: simatic-ipc-leds-gpio: add new model BX-21A

From: Henning Schild
Date: Wed Jul 05 2023 - 06:48:56 EST


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)
>