Lines Matching refs:gpio
10 #include <linux/gpio/consumer.h>
11 #include <linux/gpio/driver.h>
36 static int pisosr_gpio_refresh(struct pisosr_gpio *gpio)
40 mutex_lock(&gpio->lock);
42 if (gpio->load_gpio) {
43 gpiod_set_value_cansleep(gpio->load_gpio, 1);
45 gpiod_set_value_cansleep(gpio->load_gpio, 0);
49 ret = spi_read(gpio->spi, gpio->buffer, gpio->buffer_size);
51 mutex_unlock(&gpio->lock);
79 struct pisosr_gpio *gpio = gpiochip_get_data(chip);
82 pisosr_gpio_refresh(gpio);
84 return (gpio->buffer[offset / 8] >> (offset % 8)) & 0x1;
90 struct pisosr_gpio *gpio = gpiochip_get_data(chip);
95 pisosr_gpio_refresh(gpio);
99 buffer_state = gpio->buffer[offset / 8] & gpio_mask;
107 .label = "pisosr-gpio",
127 struct pisosr_gpio *gpio;
130 gpio = devm_kzalloc(dev, sizeof(*gpio), GFP_KERNEL);
131 if (!gpio)
134 gpio->chip = template_chip;
135 gpio->chip.parent = dev;
136 of_property_read_u16(dev->of_node, "ngpios", &gpio->chip.ngpio);
138 gpio->spi = spi;
140 gpio->buffer_size = DIV_ROUND_UP(gpio->chip.ngpio, 8);
141 gpio->buffer = devm_kzalloc(dev, gpio->buffer_size, GFP_KERNEL);
142 if (!gpio->buffer)
145 gpio->load_gpio = devm_gpiod_get_optional(dev, "load", GPIOD_OUT_LOW);
146 if (IS_ERR(gpio->load_gpio))
147 return dev_err_probe(dev, PTR_ERR(gpio->load_gpio),
150 mutex_init(&gpio->lock);
151 ret = devm_add_action_or_reset(dev, pisosr_mutex_destroy, &gpio->lock);
155 ret = devm_gpiochip_add_data(dev, &gpio->chip, gpio);
165 { "pisosr-gpio", },
171 { .compatible = "pisosr-gpio", },
178 .name = "pisosr-gpio",