From 054cc09c88c1d228e23577a79639ee5a3cae5991 Mon Sep 17 00:00:00 2001 From: Armin Brauns Date: Wed, 13 Mar 2024 09:14:28 +0000 Subject: [PATCH] drivers: add bindings for all existing mcp23xxx variants This allows getting rid of the ngpios property, which is implicit in the part number. It also prepares for configuring pins as open-drain on supporting chips in the next commit. Signed-off-by: Armin Brauns --- doc/releases/migration-guide-4.0.rst | 6 ++++++ drivers/gpio/Kconfig.mcp23xxx | 11 +++++++++-- drivers/gpio/gpio_mcp230xx.c | 22 +++++++++++++++++----- drivers/gpio/gpio_mcp23sxx.c | 20 +++++++++++++++----- dts/bindings/gpio/microchip,mcp23008.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23009.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23016.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23017.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23018.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp230xx.yaml | 12 ------------ dts/bindings/gpio/microchip,mcp23s08.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23s09.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23s17.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23s18.yaml | 11 +++++++++++ dts/bindings/gpio/microchip,mcp23sxx.yaml | 13 ------------- dts/bindings/gpio/microchip,mcp23xxx.yaml | 9 --------- 16 files changed, 146 insertions(+), 46 deletions(-) create mode 100644 dts/bindings/gpio/microchip,mcp23008.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23009.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23016.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23017.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23018.yaml delete mode 100644 dts/bindings/gpio/microchip,mcp230xx.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23s08.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23s09.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23s17.yaml create mode 100644 dts/bindings/gpio/microchip,mcp23s18.yaml delete mode 100644 dts/bindings/gpio/microchip,mcp23sxx.yaml diff --git a/doc/releases/migration-guide-4.0.rst b/doc/releases/migration-guide-4.0.rst index 72318442c8f..70d6bc2961e 100644 --- a/doc/releases/migration-guide-4.0.rst +++ b/doc/releases/migration-guide-4.0.rst @@ -45,6 +45,12 @@ Device Drivers and Devicetree * The ``compatible`` of the LiteX uart controller has been renamed from ``litex,uart0`` to :dtcompatible:`litex,uart`. (:github:`74522`) +* The devicetree bindings for the Microchip ``mcp23xxx`` series have been split up. Users of + ``microchip,mcp230xx`` and ``microchip,mcp23sxx`` should change their devicetree ``compatible`` + values to the specific chip variant, e.g. :dtcompatible:`microchip,mcp23017`. + The ``ngpios`` devicetree property has been removed, since it is implied by the model name. + (:github:`65797`) + Controller Area Network (CAN) ============================= diff --git a/drivers/gpio/Kconfig.mcp23xxx b/drivers/gpio/Kconfig.mcp23xxx index f825e5711da..55b775aaa81 100644 --- a/drivers/gpio/Kconfig.mcp23xxx +++ b/drivers/gpio/Kconfig.mcp23xxx @@ -12,7 +12,11 @@ config GPIO_MCP23XXX menuconfig GPIO_MCP230XX bool "MCP230XX I2C-based GPIO chip" default y - depends on DT_HAS_MICROCHIP_MCP230XX_ENABLED + depends on DT_HAS_MICROCHIP_MCP23008_ENABLED || \ + DT_HAS_MICROCHIP_MCP23009_ENABLED || \ + DT_HAS_MICROCHIP_MCP23016_ENABLED || \ + DT_HAS_MICROCHIP_MCP23017_ENABLED || \ + DT_HAS_MICROCHIP_MCP23018_ENABLED depends on I2C select GPIO_MCP23XXX help @@ -31,7 +35,10 @@ endif #GPIO_MCP230XX menuconfig GPIO_MCP23SXX bool "MCP23SXX SPI-based GPIO chip" default y - depends on DT_HAS_MICROCHIP_MCP23SXX_ENABLED + depends on DT_HAS_MICROCHIP_MCP23S08_ENABLED || \ + DT_HAS_MICROCHIP_MCP23S09_ENABLED || \ + DT_HAS_MICROCHIP_MCP23S17_ENABLED || \ + DT_HAS_MICROCHIP_MCP23S18_ENABLED depends on SPI select GPIO_MCP23XXX help diff --git a/drivers/gpio/gpio_mcp230xx.c b/drivers/gpio/gpio_mcp230xx.c index fabf0f00ce9..03126103d70 100644 --- a/drivers/gpio/gpio_mcp230xx.c +++ b/drivers/gpio/gpio_mcp230xx.c @@ -75,9 +75,7 @@ static int mcp230xx_bus_is_ready(const struct device *dev) return 0; } -#define DT_DRV_COMPAT microchip_mcp230xx - -#define GPIO_MCP230XX_DEVICE(inst) \ +#define GPIO_MCP230XX_DEVICE(inst, num_gpios) \ static struct mcp23xxx_drv_data mcp230xx_##inst##_drvdata = { \ /* Default for registers according to datasheet */ \ .reg_cache.iodir = 0xFFFF, .reg_cache.ipol = 0x0, .reg_cache.gpinten = 0x0, \ @@ -94,7 +92,7 @@ static int mcp230xx_bus_is_ready(const struct device *dev) }, \ .gpio_int = GPIO_DT_SPEC_INST_GET_OR(inst, int_gpios, {0}), \ .gpio_reset = GPIO_DT_SPEC_INST_GET_OR(inst, reset_gpios, {0}), \ - .ngpios = DT_INST_PROP(inst, ngpios), \ + .ngpios = num_gpios, \ .read_fn = mcp230xx_read_port_regs, \ .write_fn = mcp230xx_write_port_regs, \ .bus_fn = mcp230xx_bus_is_ready, \ @@ -103,4 +101,18 @@ static int mcp230xx_bus_is_ready(const struct device *dev) &mcp230xx_##inst##_config, POST_KERNEL, \ CONFIG_GPIO_MCP230XX_INIT_PRIORITY, &gpio_mcp23xxx_api_table); -DT_INST_FOREACH_STATUS_OKAY(GPIO_MCP230XX_DEVICE) +#define DT_DRV_COMPAT microchip_mcp23008 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP230XX_DEVICE, 8) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23009 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP230XX_DEVICE, 8) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23016 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP230XX_DEVICE, 16) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23017 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP230XX_DEVICE, 16) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23018 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP230XX_DEVICE, 16) +#undef DT_DRV_COMPAT diff --git a/drivers/gpio/gpio_mcp23sxx.c b/drivers/gpio/gpio_mcp23sxx.c index 0ee2f73070d..1735f8cfef6 100644 --- a/drivers/gpio/gpio_mcp23sxx.c +++ b/drivers/gpio/gpio_mcp23sxx.c @@ -113,9 +113,7 @@ static int mcp23sxx_bus_is_ready(const struct device *dev) return 0; } -#define DT_DRV_COMPAT microchip_mcp23sxx - -#define GPIO_MCP23SXX_DEVICE(inst) \ +#define GPIO_MCP23SXX_DEVICE(inst, num_gpios) \ static struct mcp23xxx_drv_data mcp23sxx_##inst##_drvdata = { \ /* Default for registers according to datasheet */ \ .reg_cache.iodir = 0xFFFF, .reg_cache.ipol = 0x0, .reg_cache.gpinten = 0x0, \ @@ -134,7 +132,7 @@ static int mcp23sxx_bus_is_ready(const struct device *dev) }, \ .gpio_int = GPIO_DT_SPEC_INST_GET_OR(inst, int_gpios, {0}), \ .gpio_reset = GPIO_DT_SPEC_INST_GET_OR(inst, reset_gpios, {0}), \ - .ngpios = DT_INST_PROP(inst, ngpios), \ + .ngpios = num_gpios, \ .read_fn = mcp23sxx_read_port_regs, \ .write_fn = mcp23sxx_write_port_regs, \ .bus_fn = mcp23sxx_bus_is_ready \ @@ -143,4 +141,16 @@ static int mcp23sxx_bus_is_ready(const struct device *dev) &mcp23sxx_##inst##_config, POST_KERNEL, \ CONFIG_GPIO_MCP23SXX_INIT_PRIORITY, &gpio_mcp23xxx_api_table); -DT_INST_FOREACH_STATUS_OKAY(GPIO_MCP23SXX_DEVICE) + +#define DT_DRV_COMPAT microchip_mcp23s08 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP23SXX_DEVICE, 8) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23s09 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP23SXX_DEVICE, 8) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23s17 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP23SXX_DEVICE, 16) +#undef DT_DRV_COMPAT +#define DT_DRV_COMPAT microchip_mcp23s18 +DT_INST_FOREACH_STATUS_OKAY_VARGS(GPIO_MCP23SXX_DEVICE, 16) +#undef DT_DRV_COMPAT diff --git a/dts/bindings/gpio/microchip,mcp23008.yaml b/dts/bindings/gpio/microchip,mcp23008.yaml new file mode 100644 index 00000000000..5a5497249fd --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23008.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23008 I2C GPIO Expander. + +compatible: "microchip,mcp23008" + +include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23009.yaml b/dts/bindings/gpio/microchip,mcp23009.yaml new file mode 100644 index 00000000000..5e8a50f8fd0 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23009.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23009 I2C GPIO Expander. + +compatible: "microchip,mcp23009" + +include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23016.yaml b/dts/bindings/gpio/microchip,mcp23016.yaml new file mode 100644 index 00000000000..b2735030218 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23016.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23016 I2C GPIO Expander. + +compatible: "microchip,mcp23016" + +include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23017.yaml b/dts/bindings/gpio/microchip,mcp23017.yaml new file mode 100644 index 00000000000..63bd108d401 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23017.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23017 I2C GPIO Expander. + +compatible: "microchip,mcp23017" + +include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23018.yaml b/dts/bindings/gpio/microchip,mcp23018.yaml new file mode 100644 index 00000000000..9af5bbe2575 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23018.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23018 I2C GPIO Expander. + +compatible: "microchip,mcp23018" + +include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp230xx.yaml b/dts/bindings/gpio/microchip,mcp230xx.yaml deleted file mode 100644 index fdc56ef1964..00000000000 --- a/dts/bindings/gpio/microchip,mcp230xx.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (c) 2021 metraTec GmbH -# -# SPDX-License-Identifier: Apache-2.0 -# - -description: | - This is a representation of the Microchip MCP230xx I2C Gpio Expander. - -compatible: "microchip,mcp230xx" - -include: ["microchip,mcp23xxx.yaml", i2c-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23s08.yaml b/dts/bindings/gpio/microchip,mcp23s08.yaml new file mode 100644 index 00000000000..f9b8a663830 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23s08.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23S08 SPI GPIO Expander. + +compatible: "microchip,mcp23s08" + +include: ["microchip,mcp23xxx.yaml", spi-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23s09.yaml b/dts/bindings/gpio/microchip,mcp23s09.yaml new file mode 100644 index 00000000000..c81ec0a87e8 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23s09.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23S09 SPI GPIO Expander. + +compatible: "microchip,mcp23s09" + +include: ["microchip,mcp23xxx.yaml", spi-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23s17.yaml b/dts/bindings/gpio/microchip,mcp23s17.yaml new file mode 100644 index 00000000000..7a2d7b84d84 --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23s17.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23S17 SPI GPIO Expander. + +compatible: "microchip,mcp23s17" + +include: ["microchip,mcp23xxx.yaml", spi-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23s18.yaml b/dts/bindings/gpio/microchip,mcp23s18.yaml new file mode 100644 index 00000000000..a308572c23c --- /dev/null +++ b/dts/bindings/gpio/microchip,mcp23s18.yaml @@ -0,0 +1,11 @@ +# +# Copyright (c) 2024 SILA Embedded Solutions GmbH +# +# SPDX-License-Identifier: Apache-2.0 +# + +description: This is a representation of the Microchip MCP23S18 SPI GPIO Expander. + +compatible: "microchip,mcp23s18" + +include: ["microchip,mcp23xxx.yaml", spi-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23sxx.yaml b/dts/bindings/gpio/microchip,mcp23sxx.yaml deleted file mode 100644 index afc7ecafe1c..00000000000 --- a/dts/bindings/gpio/microchip,mcp23sxx.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) 2020 Geanix ApS -# Copyright (c) 2021 Peter Johanson -# -# SPDX-License-Identifier: Apache-2.0 -# - -description: | - This is a representation of the Microchip MCP23SXX SPI Gpio Expander. - -compatible: "microchip,mcp23sxx" - -include: ["microchip,mcp23xxx.yaml", spi-device.yaml] diff --git a/dts/bindings/gpio/microchip,mcp23xxx.yaml b/dts/bindings/gpio/microchip,mcp23xxx.yaml index 9c0da2b433f..b9fc465b2fe 100644 --- a/dts/bindings/gpio/microchip,mcp23xxx.yaml +++ b/dts/bindings/gpio/microchip,mcp23xxx.yaml @@ -22,15 +22,6 @@ properties: description: | GPIO connected to the controller RESET pin. This pin is active-low. - ngpios: - type: int - enum: - - 8 - - 16 - required: true - description: | - Number of gpios supported by the chip. - gpio-cells: - pin - flags