Lines Matching +full:zevio +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0-only
3 * GPIO controller in LSI ZEVIO SoCs.
5 * Author: Fabian Vogt <fabian@ritter-vogt.de>
18 #include <linux/gpio/driver.h>
22 * This chip has four gpio sections, each controls 8 GPIOs.
23 * Bit 0 in section 0 is GPIO 0, bit 2 in section 1 is GPIO 10.
26 …tp://hackspire.unsads.com/wiki/index.php/Memory-mapped_I/O_ports#90000000_-_General_Purpose_I.2FO_…
28 * 0x00-0x3F: Section 0
29 * +0x00: Masked interrupt status (read-only)
32 * +0x0C: W: Unmask interrupt (write-only)
35 * +0x18: Input (read-only)
37 * 0x40-0x7F: Section 1
38 * 0x80-0xBF: Section 2
39 * 0xC0-0xFF: Section 3
54 /* Bit number of GPIO in its section */
55 #define ZEVIO_GPIO_BIT(gpio) (gpio&7) argument
67 return readl(IOMEM(c->regs + section_offset + port_offset)); in zevio_gpio_port_get()
74 writel(val, IOMEM(c->regs + section_offset + port_offset)); in zevio_gpio_port_set()
83 spin_lock(&controller->lock); in zevio_gpio_get()
89 spin_unlock(&controller->lock); in zevio_gpio_get()
99 spin_lock(&controller->lock); in zevio_gpio_set()
107 spin_unlock(&controller->lock); in zevio_gpio_set()
117 spin_lock(&controller->lock); in zevio_gpio_direction_input()
123 spin_unlock(&controller->lock); in zevio_gpio_direction_input()
134 spin_lock(&controller->lock); in zevio_gpio_direction_output()
146 spin_unlock(&controller->lock); in zevio_gpio_direction_output()
158 return -ENXIO; in zevio_gpio_to_irq()
175 struct device *dev = &pdev->dev; in zevio_gpio_probe()
179 controller = devm_kzalloc(&pdev->dev, sizeof(*controller), GFP_KERNEL); in zevio_gpio_probe()
181 return -ENOMEM; in zevio_gpio_probe()
184 controller->chip = zevio_gpio_chip; in zevio_gpio_probe()
185 controller->chip.parent = &pdev->dev; in zevio_gpio_probe()
187 controller->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%pfw", dev_fwnode(dev)); in zevio_gpio_probe()
188 if (!controller->chip.label) in zevio_gpio_probe()
189 return -ENOMEM; in zevio_gpio_probe()
191 controller->regs = devm_platform_ioremap_resource(pdev, 0); in zevio_gpio_probe()
192 if (IS_ERR(controller->regs)) in zevio_gpio_probe()
193 return dev_err_probe(&pdev->dev, PTR_ERR(controller->regs), in zevio_gpio_probe()
196 status = devm_gpiochip_add_data(&pdev->dev, &controller->chip, controller); in zevio_gpio_probe()
198 dev_err(&pdev->dev, "failed to add gpiochip: %d\n", status); in zevio_gpio_probe()
202 spin_lock_init(&controller->lock); in zevio_gpio_probe()
205 for (i = 0; i < controller->chip.ngpio; i += 8) in zevio_gpio_probe()
208 dev_dbg(controller->chip.parent, "ZEVIO GPIO controller set up!\n"); in zevio_gpio_probe()
214 { .compatible = "lsi,zevio-gpio", },
220 .name = "gpio-zevio",