Lines Matching defs:gpio
14 #include <linux/gpio/driver.h>
58 static int _virtio_gpio_req(struct virtio_gpio *vgpio, u16 type, u16 gpio,
61 struct virtio_gpio_line *line = &vgpio->lines[gpio];
77 req->gpio = cpu_to_le16(gpio);
106 dev_err(dev, "GPIO request failed: %d\n", gpio);
126 static int virtio_gpio_req(struct virtio_gpio *vgpio, u16 type, u16 gpio,
129 struct virtio_gpio_line *line = &vgpio->lines[gpio];
132 return _virtio_gpio_req(vgpio, type, gpio, txvalue, rxvalue, res,
136 static void virtio_gpio_free(struct gpio_chip *gc, unsigned int gpio)
140 virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_SET_DIRECTION, gpio,
144 static int virtio_gpio_get_direction(struct gpio_chip *gc, unsigned int gpio)
150 ret = virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_GET_DIRECTION, gpio, 0,
165 static int virtio_gpio_direction_input(struct gpio_chip *gc, unsigned int gpio)
169 return virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_SET_DIRECTION, gpio,
173 static int virtio_gpio_direction_output(struct gpio_chip *gc, unsigned int gpio,
179 ret = virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_SET_VALUE, gpio, value, NULL);
183 return virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_SET_DIRECTION, gpio,
187 static int virtio_gpio_get(struct gpio_chip *gc, unsigned int gpio)
193 ret = virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_GET_VALUE, gpio, 0, &value);
197 static void virtio_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
201 virtio_gpio_req(vgpio, VIRTIO_GPIO_MSG_SET_VALUE, gpio, value, NULL);
205 static void virtio_gpio_irq_prepare(struct virtio_gpio *vgpio, u16 gpio)
207 struct vgpio_irq_line *irq_line = &vgpio->irq_lines[gpio];
216 ireq->gpio = cpu_to_le16(gpio);
354 .name = "virtio-gpio",
366 static bool ignore_irq(struct virtio_gpio *vgpio, int gpio,
385 virtio_gpio_irq_prepare(vgpio, gpio);
404 int gpio, ret;
424 gpio = irq_line - vgpio->irq_lines;
425 WARN_ON(gpio >= vgpio->gc.ngpio);
427 if (unlikely(ignore_irq(vgpio, gpio, irq_line)))
430 ret = generic_handle_domain_irq(vgpio->gc.irq.domain, gpio);
624 dev_err(dev, "Failed to add virtio-gpio controller\n");