]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: menz127: add support for 16Z034 and 16Z037 GPIO controllers
authorJose Javier Rodriguez Barbarin <dev-josejavier.rodriguez@duagon.com>
Tue, 18 Nov 2025 08:31:15 +0000 (09:31 +0100)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 20 Nov 2025 13:15:04 +0000 (14:15 +0100)
The 16Z034 and 16Z037 are 8 bits GPIO controllers that share the
same registers and features of the 16Z127 GPIO controller.

Signed-off-by: Jose Javier Rodriguez Barbarin <dev-josejavier.rodriguez@duagon.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20251118083115.9545-1-dev-josejavier.rodriguez@duagon.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-menz127.c

index da2bf9381cc43cd489f6a8593636bbbc95ab5660..52b13c6ae49692469857778707fd6857f2a43837 100644 (file)
 #define MEN_Z127_ODER  0x1C
 #define GPIO_TO_DBCNT_REG(gpio)        ((gpio * 4) + 0x80)
 
+/* MEN Z127 supported model ids*/
+#define MEN_Z127_ID    0x7f
+#define MEN_Z034_ID    0x22
+#define MEN_Z037_ID    0x25
+
 #define MEN_Z127_DB_MIN_US     50
 /* 16 bit compare register. Each bit represents 50us */
 #define MEN_Z127_DB_MAX_US     (0xffff * MEN_Z127_DB_MIN_US)
@@ -140,6 +145,7 @@ static int men_z127_probe(struct mcb_device *mdev,
        struct men_z127_gpio *men_z127_gpio;
        struct device *dev = &mdev->dev;
        int ret;
+       unsigned long sz;
 
        men_z127_gpio = devm_kzalloc(dev, sizeof(struct men_z127_gpio),
                                     GFP_KERNEL);
@@ -163,9 +169,21 @@ static int men_z127_probe(struct mcb_device *mdev,
 
        mcb_set_drvdata(mdev, men_z127_gpio);
 
+       switch (mdev->id) {
+       case MEN_Z127_ID:
+               sz = 4;
+               break;
+       case MEN_Z034_ID:
+       case MEN_Z037_ID:
+               sz = 1;
+               break;
+       default:
+               return dev_err_probe(&mdev->dev, -EINVAL, "no size found for id %d", mdev->id);
+       }
+
        config = (struct gpio_generic_chip_config) {
                .dev = &mdev->dev,
-               .sz = 4,
+               .sz = sz,
                .dat = men_z127_gpio->reg_base + MEN_Z127_PSR,
                .set = men_z127_gpio->reg_base + MEN_Z127_CTRL,
                .dirout = men_z127_gpio->reg_base + MEN_Z127_GPIODR,
@@ -186,7 +204,9 @@ static int men_z127_probe(struct mcb_device *mdev,
 }
 
 static const struct mcb_device_id men_z127_ids[] = {
-       { .device = 0x7f },
+       { .device = MEN_Z127_ID },
+       { .device = MEN_Z034_ID },
+       { .device = MEN_Z037_ID },
        { }
 };
 MODULE_DEVICE_TABLE(mcb, men_z127_ids);
@@ -201,7 +221,7 @@ static struct mcb_driver men_z127_driver = {
 module_mcb_driver(men_z127_driver);
 
 MODULE_AUTHOR("Andreas Werner <andreas.werner@men.de>");
-MODULE_DESCRIPTION("MEN 16z127 GPIO Controller");
+MODULE_DESCRIPTION("MEN GPIO Controller");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("mcb:16z127");
 MODULE_IMPORT_NS("MCB");