Lines Matching refs:gpio

44 static int pisosr_gpio_refresh(struct pisosr_gpio *gpio)  in pisosr_gpio_refresh()  argument
48 mutex_lock(&gpio->lock); in pisosr_gpio_refresh()
50 if (gpio->load_gpio) { in pisosr_gpio_refresh()
51 gpiod_set_value_cansleep(gpio->load_gpio, 1); in pisosr_gpio_refresh()
53 gpiod_set_value_cansleep(gpio->load_gpio, 0); in pisosr_gpio_refresh()
57 ret = spi_read(gpio->spi, gpio->buffer, gpio->buffer_size); in pisosr_gpio_refresh()
59 mutex_unlock(&gpio->lock); in pisosr_gpio_refresh()
87 struct pisosr_gpio *gpio = gpiochip_get_data(chip); in pisosr_gpio_get() local
90 pisosr_gpio_refresh(gpio); in pisosr_gpio_get()
92 return (gpio->buffer[offset / 8] >> (offset % 8)) & 0x1; in pisosr_gpio_get()
98 struct pisosr_gpio *gpio = gpiochip_get_data(chip); in pisosr_gpio_get_multiple() local
102 pisosr_gpio_refresh(gpio); in pisosr_gpio_get_multiple()
107 bits[j] |= ((unsigned long) gpio->buffer[i]) in pisosr_gpio_get_multiple()
130 struct pisosr_gpio *gpio; in pisosr_gpio_probe() local
133 gpio = devm_kzalloc(dev, sizeof(*gpio), GFP_KERNEL); in pisosr_gpio_probe()
134 if (!gpio) in pisosr_gpio_probe()
137 spi_set_drvdata(spi, gpio); in pisosr_gpio_probe()
139 gpio->chip = template_chip; in pisosr_gpio_probe()
140 gpio->chip.parent = dev; in pisosr_gpio_probe()
141 of_property_read_u16(dev->of_node, "ngpios", &gpio->chip.ngpio); in pisosr_gpio_probe()
143 gpio->spi = spi; in pisosr_gpio_probe()
145 gpio->buffer_size = DIV_ROUND_UP(gpio->chip.ngpio, 8); in pisosr_gpio_probe()
146 gpio->buffer = devm_kzalloc(dev, gpio->buffer_size, GFP_KERNEL); in pisosr_gpio_probe()
147 if (!gpio->buffer) in pisosr_gpio_probe()
150 gpio->load_gpio = devm_gpiod_get_optional(dev, "load", GPIOD_OUT_LOW); in pisosr_gpio_probe()
151 if (IS_ERR(gpio->load_gpio)) { in pisosr_gpio_probe()
152 ret = PTR_ERR(gpio->load_gpio); in pisosr_gpio_probe()
158 mutex_init(&gpio->lock); in pisosr_gpio_probe()
160 ret = gpiochip_add_data(&gpio->chip, gpio); in pisosr_gpio_probe()
171 struct pisosr_gpio *gpio = spi_get_drvdata(spi); in pisosr_gpio_remove() local
173 gpiochip_remove(&gpio->chip); in pisosr_gpio_remove()
175 mutex_destroy(&gpio->lock); in pisosr_gpio_remove()