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

gpio: gemini: rename to match Faraday IP

The Gemini driver is actually a driver for the Faraday Technology
FTGPIO010 IP block. We rename the driver and the Kconfig symbol and
put in a a new compatible string for the Moxa ART SoC that is also
using this IP block.

Tested-by: Jonas Jensen <jonas.jensen@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

+44 -37
+4 -3
drivers/gpio/Kconfig
··· 204 204 and write pin state) for GPIO implemented in a number of GE single 205 205 board computers. 206 206 207 - config GPIO_GEMINI 208 - bool "Gemini GPIO" 207 + config GPIO_FTGPIO010 208 + bool "Faraday FTGPIO010 GPIO" 209 209 depends on ARCH_GEMINI 210 210 depends on OF_GPIO 211 211 select GPIO_GENERIC 212 212 select GPIOLIB_IRQCHIP 213 213 help 214 - Support for common GPIOs found in Cortina systems Gemini platforms. 214 + Support for common GPIOs from the Faraday FTGPIO010 IP core, found in 215 + Cortina systems Gemini platforms, Moxa ART and others. 215 216 216 217 config GPIO_GENERIC_PLATFORM 217 218 tristate "Generic memory-mapped GPIO controller support (MMIO platform device)"
+1 -1
drivers/gpio/Makefile
··· 48 48 obj-$(CONFIG_GPIO_ETRAXFS) += gpio-etraxfs.o 49 49 obj-$(CONFIG_GPIO_EXAR) += gpio-exar.o 50 50 obj-$(CONFIG_GPIO_F7188X) += gpio-f7188x.o 51 + obj-$(CONFIG_GPIO_FTGPIO010) += gpio-ftgpio010.o 51 52 obj-$(CONFIG_GPIO_GE_FPGA) += gpio-ge.o 52 - obj-$(CONFIG_GPIO_GEMINI) += gpio-gemini.o 53 53 obj-$(CONFIG_GPIO_GPIO_MM) += gpio-gpio-mm.o 54 54 obj-$(CONFIG_GPIO_GRGPIO) += gpio-grgpio.o 55 55 obj-$(CONFIG_HTC_EGPIO) += gpio-htc-egpio.o
+39 -33
drivers/gpio/gpio-gemini.c drivers/gpio/gpio-ftgpio010.c
··· 1 1 /* 2 - * Gemini gpiochip and interrupt routines 2 + * Faraday Technolog FTGPIO010 gpiochip and interrupt routines 3 3 * Copyright (C) 2017 Linus Walleij <linus.walleij@linaro.org> 4 4 * 5 5 * Based on arch/arm/mach-gemini/gpio.c: ··· 35 35 #define GPIO_DEBOUNCE_PRESCALE 0x44 36 36 37 37 /** 38 - * struct gemini_gpio - Gemini GPIO state container 38 + * struct ftgpio_gpio - Gemini GPIO state container 39 39 * @dev: containing device for this instance 40 40 * @gc: gpiochip for this instance 41 41 */ 42 - struct gemini_gpio { 42 + struct ftgpio_gpio { 43 43 struct device *dev; 44 44 struct gpio_chip gc; 45 45 void __iomem *base; 46 46 }; 47 47 48 - static void gemini_gpio_ack_irq(struct irq_data *d) 48 + static void ftgpio_gpio_ack_irq(struct irq_data *d) 49 49 { 50 50 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 51 - struct gemini_gpio *g = gpiochip_get_data(gc); 51 + struct ftgpio_gpio *g = gpiochip_get_data(gc); 52 52 53 53 writel(BIT(irqd_to_hwirq(d)), g->base + GPIO_INT_CLR); 54 54 } 55 55 56 - static void gemini_gpio_mask_irq(struct irq_data *d) 56 + static void ftgpio_gpio_mask_irq(struct irq_data *d) 57 57 { 58 58 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 59 - struct gemini_gpio *g = gpiochip_get_data(gc); 59 + struct ftgpio_gpio *g = gpiochip_get_data(gc); 60 60 u32 val; 61 61 62 62 val = readl(g->base + GPIO_INT_EN); ··· 64 64 writel(val, g->base + GPIO_INT_EN); 65 65 } 66 66 67 - static void gemini_gpio_unmask_irq(struct irq_data *d) 67 + static void ftgpio_gpio_unmask_irq(struct irq_data *d) 68 68 { 69 69 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 70 - struct gemini_gpio *g = gpiochip_get_data(gc); 70 + struct ftgpio_gpio *g = gpiochip_get_data(gc); 71 71 u32 val; 72 72 73 73 val = readl(g->base + GPIO_INT_EN); ··· 75 75 writel(val, g->base + GPIO_INT_EN); 76 76 } 77 77 78 - static int gemini_gpio_set_irq_type(struct irq_data *d, unsigned int type) 78 + static int ftgpio_gpio_set_irq_type(struct irq_data *d, unsigned int type) 79 79 { 80 80 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 81 - struct gemini_gpio *g = gpiochip_get_data(gc); 81 + struct ftgpio_gpio *g = gpiochip_get_data(gc); 82 82 u32 mask = BIT(irqd_to_hwirq(d)); 83 83 u32 reg_both, reg_level, reg_type; 84 84 ··· 123 123 writel(reg_level, g->base + GPIO_INT_LEVEL); 124 124 writel(reg_both, g->base + GPIO_INT_BOTH_EDGE); 125 125 126 - gemini_gpio_ack_irq(d); 126 + ftgpio_gpio_ack_irq(d); 127 127 128 128 return 0; 129 129 } 130 130 131 - static struct irq_chip gemini_gpio_irqchip = { 132 - .name = "GPIO", 133 - .irq_ack = gemini_gpio_ack_irq, 134 - .irq_mask = gemini_gpio_mask_irq, 135 - .irq_unmask = gemini_gpio_unmask_irq, 136 - .irq_set_type = gemini_gpio_set_irq_type, 131 + static struct irq_chip ftgpio_gpio_irqchip = { 132 + .name = "FTGPIO010", 133 + .irq_ack = ftgpio_gpio_ack_irq, 134 + .irq_mask = ftgpio_gpio_mask_irq, 135 + .irq_unmask = ftgpio_gpio_unmask_irq, 136 + .irq_set_type = ftgpio_gpio_set_irq_type, 137 137 }; 138 138 139 - static void gemini_gpio_irq_handler(struct irq_desc *desc) 139 + static void ftgpio_gpio_irq_handler(struct irq_desc *desc) 140 140 { 141 141 struct gpio_chip *gc = irq_desc_get_handler_data(desc); 142 - struct gemini_gpio *g = gpiochip_get_data(gc); 142 + struct ftgpio_gpio *g = gpiochip_get_data(gc); 143 143 struct irq_chip *irqchip = irq_desc_get_chip(desc); 144 144 int offset; 145 145 unsigned long stat; ··· 155 155 chained_irq_exit(irqchip, desc); 156 156 } 157 157 158 - static int gemini_gpio_probe(struct platform_device *pdev) 158 + static int ftgpio_gpio_probe(struct platform_device *pdev) 159 159 { 160 160 struct device *dev = &pdev->dev; 161 161 struct resource *res; 162 - struct gemini_gpio *g; 162 + struct ftgpio_gpio *g; 163 163 int irq; 164 164 int ret; 165 165 ··· 189 189 dev_err(dev, "unable to init generic GPIO\n"); 190 190 return ret; 191 191 } 192 - g->gc.label = "Gemini"; 192 + g->gc.label = "FTGPIO010"; 193 193 g->gc.base = -1; 194 194 g->gc.parent = dev; 195 195 g->gc.owner = THIS_MODULE; ··· 204 204 writel(0x0, g->base + GPIO_INT_MASK); 205 205 writel(~0x0, g->base + GPIO_INT_CLR); 206 206 207 - ret = gpiochip_irqchip_add(&g->gc, &gemini_gpio_irqchip, 207 + ret = gpiochip_irqchip_add(&g->gc, &ftgpio_gpio_irqchip, 208 208 0, handle_bad_irq, 209 209 IRQ_TYPE_NONE); 210 210 if (ret) { 211 211 dev_info(dev, "could not add irqchip\n"); 212 212 return ret; 213 213 } 214 - gpiochip_set_chained_irqchip(&g->gc, &gemini_gpio_irqchip, 215 - irq, gemini_gpio_irq_handler); 214 + gpiochip_set_chained_irqchip(&g->gc, &ftgpio_gpio_irqchip, 215 + irq, ftgpio_gpio_irq_handler); 216 216 217 - dev_info(dev, "Gemini GPIO @%p registered\n", g->base); 217 + dev_info(dev, "FTGPIO010 @%p registered\n", g->base); 218 218 219 219 return 0; 220 220 } 221 221 222 - static const struct of_device_id gemini_gpio_of_match[] = { 222 + static const struct of_device_id ftgpio_gpio_of_match[] = { 223 223 { 224 224 .compatible = "cortina,gemini-gpio", 225 + }, 226 + { 227 + .compatible = "moxa,moxart-gpio", 228 + }, 229 + { 230 + .compatible = "faraday,ftgpio010", 225 231 }, 226 232 {}, 227 233 }; 228 234 229 - static struct platform_driver gemini_gpio_driver = { 235 + static struct platform_driver ftgpio_gpio_driver = { 230 236 .driver = { 231 - .name = "gemini-gpio", 232 - .of_match_table = of_match_ptr(gemini_gpio_of_match), 237 + .name = "ftgpio010-gpio", 238 + .of_match_table = of_match_ptr(ftgpio_gpio_of_match), 233 239 }, 234 - .probe = gemini_gpio_probe, 240 + .probe = ftgpio_gpio_probe, 235 241 }; 236 - builtin_platform_driver(gemini_gpio_driver); 242 + builtin_platform_driver(ftgpio_gpio_driver);