Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: menz127: add support for 16Z034 and 16Z037 GPIO controllers

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>

authored by

Jose Javier Rodriguez Barbarin and committed by
Bartosz Golaszewski
5dd9332c 10c15296

+23 -3
+23 -3
drivers/gpio/gpio-menz127.c
··· 24 24 #define MEN_Z127_ODER 0x1C 25 25 #define GPIO_TO_DBCNT_REG(gpio) ((gpio * 4) + 0x80) 26 26 27 + /* MEN Z127 supported model ids*/ 28 + #define MEN_Z127_ID 0x7f 29 + #define MEN_Z034_ID 0x22 30 + #define MEN_Z037_ID 0x25 31 + 27 32 #define MEN_Z127_DB_MIN_US 50 28 33 /* 16 bit compare register. Each bit represents 50us */ 29 34 #define MEN_Z127_DB_MAX_US (0xffff * MEN_Z127_DB_MIN_US) ··· 145 140 struct men_z127_gpio *men_z127_gpio; 146 141 struct device *dev = &mdev->dev; 147 142 int ret; 143 + unsigned long sz; 148 144 149 145 men_z127_gpio = devm_kzalloc(dev, sizeof(struct men_z127_gpio), 150 146 GFP_KERNEL); ··· 169 163 170 164 mcb_set_drvdata(mdev, men_z127_gpio); 171 165 166 + switch (mdev->id) { 167 + case MEN_Z127_ID: 168 + sz = 4; 169 + break; 170 + case MEN_Z034_ID: 171 + case MEN_Z037_ID: 172 + sz = 1; 173 + break; 174 + default: 175 + return dev_err_probe(&mdev->dev, -EINVAL, "no size found for id %d", mdev->id); 176 + } 177 + 172 178 config = (struct gpio_generic_chip_config) { 173 179 .dev = &mdev->dev, 174 - .sz = 4, 180 + .sz = sz, 175 181 .dat = men_z127_gpio->reg_base + MEN_Z127_PSR, 176 182 .set = men_z127_gpio->reg_base + MEN_Z127_CTRL, 177 183 .dirout = men_z127_gpio->reg_base + MEN_Z127_GPIODR, ··· 204 186 } 205 187 206 188 static const struct mcb_device_id men_z127_ids[] = { 207 - { .device = 0x7f }, 189 + { .device = MEN_Z127_ID }, 190 + { .device = MEN_Z034_ID }, 191 + { .device = MEN_Z037_ID }, 208 192 { } 209 193 }; 210 194 MODULE_DEVICE_TABLE(mcb, men_z127_ids); ··· 221 201 module_mcb_driver(men_z127_driver); 222 202 223 203 MODULE_AUTHOR("Andreas Werner <andreas.werner@men.de>"); 224 - MODULE_DESCRIPTION("MEN 16z127 GPIO Controller"); 204 + MODULE_DESCRIPTION("MEN GPIO Controller"); 225 205 MODULE_LICENSE("GPL v2"); 226 206 MODULE_ALIAS("mcb:16z127"); 227 207 MODULE_IMPORT_NS("MCB");