2023-05-31 16:13:10

by Henning Schild

[permalink] [raw]
Subject: [PATCH 0/1] leds: simatic-ipc-leds-gpio: add new model BX-21A

This is a rather simple patch adding LED support for yet another Simatic
IPC model.

Note that this is based on
"[PATCH v4 0/4] leds: simatic-ipc-leds-gpio: split up"

Henning Schild (1):
leds: simatic-ipc-leds-gpio: add new model BX-21A

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

--
2.39.3



2023-05-31 16:36:48

by Henning Schild

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

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 <[email protected]>
---
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 <[email protected]>
+ */
+
+#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 <[email protected]>");
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 <[email protected]>
@@ -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)
--
2.39.3


2023-06-01 09:17:19

by Hans de Goede

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

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 <[email protected]>

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.

Here is my ack for merging the pdx86 bits through that tree:

Acked-by: Hans de Goede <[email protected]>

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 <[email protected]>
> + */
> +
> +#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 <[email protected]>");
> 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 <[email protected]>
> @@ -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)


2023-06-01 16:57:22

by Andy Shevchenko

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

On Wed, May 31, 2023 at 05:54:57PM +0200, 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.

...

> +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,

Just wondering if module name and hence device instance name (which may be
longer) can be so long.

Hint: you can use EHL/ehl for elkhartlake and in same way for the rest if any.

> + },
> +};

--
With Best Regards,
Andy Shevchenko



2023-07-05 11:24:49

by Henning Schild

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

Am Thu, 1 Jun 2023 10:53:48 +0200
schrieb Hans de Goede <[email protected]>:

> 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 <[email protected]>
>
> 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 <[email protected]>
>
> 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 <[email protected]>
> > + */
> > +
> > +#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
> > <[email protected]>"); 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 <[email protected]>
> > @@ -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)
>


2023-07-13 13:36:40

by Lee Jones

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

On Wed, 05 Jul 2023, Henning Schild wrote:

> Am Thu, 1 Jun 2023 10:53:48 +0200
> schrieb Hans de Goede <[email protected]>:
>
> > 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 <[email protected]>
> >
> > 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.

That's correct. Did I say that it would be?

--
Lee Jones [李琼斯]