Lines Matching +full:pin +full:- +full:val

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Author: Fabian Vogt <fabian@ritter-vogt.de>
23 …* http://hackspire.unsads.com/wiki/index.php/Memory-mapped_I/O_ports#90000000_-_General_Purpose_I.…
25 * 0x00-0x3F: Section 0
26 * +0x00: Masked interrupt status (read-only)
29 * +0x0C: W: Unmask interrupt (write-only)
32 * +0x18: Input (read-only)
34 * 0x40-0x7F: Section 1
35 * 0x80-0xBF: Section 2
36 * 0xC0-0xFF: Section 3
60 static inline u32 zevio_gpio_port_get(struct zevio_gpio *c, unsigned pin, in zevio_gpio_port_get() argument
63 unsigned section_offset = ((pin >> 3) & 3)*ZEVIO_GPIO_SECTION_SIZE; in zevio_gpio_port_get()
64 return readl(IOMEM(c->regs + section_offset + port_offset)); in zevio_gpio_port_get()
67 static inline void zevio_gpio_port_set(struct zevio_gpio *c, unsigned pin, in zevio_gpio_port_set() argument
68 unsigned port_offset, u32 val) in zevio_gpio_port_set() argument
70 unsigned section_offset = ((pin >> 3) & 3)*ZEVIO_GPIO_SECTION_SIZE; in zevio_gpio_port_set()
71 writel(val, IOMEM(c->regs + section_offset + port_offset)); in zevio_gpio_port_set()
75 static int zevio_gpio_get(struct gpio_chip *chip, unsigned pin) in zevio_gpio_get() argument
78 u32 val, dir; in zevio_gpio_get() local
80 spin_lock(&controller->lock); in zevio_gpio_get()
81 dir = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_DIRECTION); in zevio_gpio_get()
82 if (dir & BIT(ZEVIO_GPIO_BIT(pin))) in zevio_gpio_get()
83 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_INPUT); in zevio_gpio_get()
85 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_OUTPUT); in zevio_gpio_get()
86 spin_unlock(&controller->lock); in zevio_gpio_get()
88 return (val >> ZEVIO_GPIO_BIT(pin)) & 0x1; in zevio_gpio_get()
91 static void zevio_gpio_set(struct gpio_chip *chip, unsigned pin, int value) in zevio_gpio_set() argument
94 u32 val; in zevio_gpio_set() local
96 spin_lock(&controller->lock); in zevio_gpio_set()
97 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_OUTPUT); in zevio_gpio_set()
99 val |= BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_set()
101 val &= ~BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_set()
103 zevio_gpio_port_set(controller, pin, ZEVIO_GPIO_OUTPUT, val); in zevio_gpio_set()
104 spin_unlock(&controller->lock); in zevio_gpio_set()
107 static int zevio_gpio_direction_input(struct gpio_chip *chip, unsigned pin) in zevio_gpio_direction_input() argument
110 u32 val; in zevio_gpio_direction_input() local
112 spin_lock(&controller->lock); in zevio_gpio_direction_input()
114 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_DIRECTION); in zevio_gpio_direction_input()
115 val |= BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_direction_input()
116 zevio_gpio_port_set(controller, pin, ZEVIO_GPIO_DIRECTION, val); in zevio_gpio_direction_input()
118 spin_unlock(&controller->lock); in zevio_gpio_direction_input()
124 unsigned pin, int value) in zevio_gpio_direction_output() argument
127 u32 val; in zevio_gpio_direction_output() local
129 spin_lock(&controller->lock); in zevio_gpio_direction_output()
130 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_OUTPUT); in zevio_gpio_direction_output()
132 val |= BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_direction_output()
134 val &= ~BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_direction_output()
136 zevio_gpio_port_set(controller, pin, ZEVIO_GPIO_OUTPUT, val); in zevio_gpio_direction_output()
137 val = zevio_gpio_port_get(controller, pin, ZEVIO_GPIO_DIRECTION); in zevio_gpio_direction_output()
138 val &= ~BIT(ZEVIO_GPIO_BIT(pin)); in zevio_gpio_direction_output()
139 zevio_gpio_port_set(controller, pin, ZEVIO_GPIO_DIRECTION, val); in zevio_gpio_direction_output()
141 spin_unlock(&controller->lock); in zevio_gpio_direction_output()
146 static int zevio_gpio_to_irq(struct gpio_chip *chip, unsigned pin) in zevio_gpio_to_irq() argument
153 return -ENXIO; in zevio_gpio_to_irq()
174 controller = devm_kzalloc(&pdev->dev, sizeof(*controller), GFP_KERNEL); in zevio_gpio_probe()
176 return -ENOMEM; in zevio_gpio_probe()
181 controller->chip = zevio_gpio_chip; in zevio_gpio_probe()
182 controller->chip.parent = &pdev->dev; in zevio_gpio_probe()
184 controller->regs = devm_platform_ioremap_resource(pdev, 0); in zevio_gpio_probe()
185 if (IS_ERR(controller->regs)) in zevio_gpio_probe()
186 return dev_err_probe(&pdev->dev, PTR_ERR(controller->regs), in zevio_gpio_probe()
189 status = devm_gpiochip_add_data(&pdev->dev, &controller->chip, controller); in zevio_gpio_probe()
191 dev_err(&pdev->dev, "failed to add gpiochip: %d\n", status); in zevio_gpio_probe()
195 spin_lock_init(&controller->lock); in zevio_gpio_probe()
198 for (i = 0; i < controller->chip.ngpio; i += 8) in zevio_gpio_probe()
201 dev_dbg(controller->chip.parent, "ZEVIO GPIO controller set up!\n"); in zevio_gpio_probe()
207 { .compatible = "lsi,zevio-gpio", },
213 .name = "gpio-zevio",