Lines Matching +full:gpio +full:- +full:bank

1 // SPDX-License-Identifier: GPL-2.0
11 #include <linux/gpio/driver.h>
32 { "INTC10D1" }, /* MTL-CVF */
41 struct usbio_gpio *gpio = gpiochip_get_data(gc); in usbio_gpio_get_bank_and_pin() local
42 struct device *dev = &gpio->adev->dev; in usbio_gpio_get_bank_and_pin()
43 struct usbio_gpio_bank *bank; in usbio_gpio_get_bank_and_pin() local
46 bank = &gpio->banks[offset / USBIO_GPIOSPERBANK]; in usbio_gpio_get_bank_and_pin()
48 if (~bank->bitmap & BIT(pin)) { in usbio_gpio_get_bank_and_pin()
50 dev_warn_once(dev, FW_BUG "GPIO %u is not in FW pins bitmap\n", offset); in usbio_gpio_get_bank_and_pin()
53 *bank_ret = bank; in usbio_gpio_get_bank_and_pin()
59 struct usbio_gpio_bank *bank; in usbio_gpio_get_direction() local
63 usbio_gpio_get_bank_and_pin(gc, offset, &bank, &pin); in usbio_gpio_get_direction()
65 cfg = bank->config[pin] & USBIO_GPIO_PINMOD_MASK; in usbio_gpio_get_direction()
73 struct usbio_gpio *gpio = gpiochip_get_data(gc); in usbio_gpio_get() local
74 struct usbio_gpio_bank *bank; in usbio_gpio_get() local
79 usbio_gpio_get_bank_and_pin(gc, offset, &bank, &pin); in usbio_gpio_get()
85 ret = usbio_control_msg(gpio->adev, USBIO_PKTTYPE_GPIO, USBIO_GPIOCMD_READ, in usbio_gpio_get()
86 &gbuf, sizeof(gbuf) - sizeof(gbuf.value), in usbio_gpio_get()
89 return (ret < 0) ? ret : -EPROTO; in usbio_gpio_get()
96 struct usbio_gpio *gpio = gpiochip_get_data(gc); in usbio_gpio_set() local
97 struct usbio_gpio_bank *bank; in usbio_gpio_set() local
101 usbio_gpio_get_bank_and_pin(gc, offset, &bank, &pin); in usbio_gpio_set()
108 return usbio_control_msg(gpio->adev, USBIO_PKTTYPE_GPIO, USBIO_GPIOCMD_WRITE, in usbio_gpio_set()
115 struct usbio_gpio *gpio = gpiochip_get_data(gc); in usbio_gpio_update_config() local
116 struct usbio_gpio_bank *bank; in usbio_gpio_update_config() local
120 usbio_gpio_get_bank_and_pin(gc, offset, &bank, &pin); in usbio_gpio_update_config()
122 guard(mutex)(&gpio->config_mutex); in usbio_gpio_update_config()
124 bank->config[pin] &= ~mask; in usbio_gpio_update_config()
125 bank->config[pin] |= value; in usbio_gpio_update_config()
128 gbuf.config = bank->config[pin]; in usbio_gpio_update_config()
132 return usbio_control_msg(gpio->adev, USBIO_PKTTYPE_GPIO, USBIO_GPIOCMD_INIT, in usbio_gpio_update_config()
174 return -ENOTSUPP; in usbio_gpio_set_config()
184 struct device *dev = &adev->dev; in usbio_gpio_probe()
185 struct usbio_gpio *gpio; in usbio_gpio_probe() local
186 int bank, ret; in usbio_gpio_probe() local
190 return -EINVAL; in usbio_gpio_probe()
192 gpio = devm_kzalloc(dev, sizeof(*gpio), GFP_KERNEL); in usbio_gpio_probe()
193 if (!gpio) in usbio_gpio_probe()
194 return -ENOMEM; in usbio_gpio_probe()
196 ret = devm_mutex_init(dev, &gpio->config_mutex); in usbio_gpio_probe()
200 gpio->adev = adev; in usbio_gpio_probe()
202 usbio_acpi_bind(gpio->adev, usbio_gpio_acpi_hids); in usbio_gpio_probe()
204 for (bank = 0; bank < USBIO_MAX_GPIOBANKS && bank_desc[bank].bmap; bank++) in usbio_gpio_probe()
205 gpio->banks[bank].bitmap = le32_to_cpu(bank_desc[bank].bmap); in usbio_gpio_probe()
207 gpio->gc.label = ACPI_COMPANION(dev) ? in usbio_gpio_probe()
209 gpio->gc.parent = dev; in usbio_gpio_probe()
210 gpio->gc.owner = THIS_MODULE; in usbio_gpio_probe()
211 gpio->gc.get_direction = usbio_gpio_get_direction; in usbio_gpio_probe()
212 gpio->gc.direction_input = usbio_gpio_direction_input; in usbio_gpio_probe()
213 gpio->gc.direction_output = usbio_gpio_direction_output; in usbio_gpio_probe()
214 gpio->gc.get = usbio_gpio_get; in usbio_gpio_probe()
215 gpio->gc.set = usbio_gpio_set; in usbio_gpio_probe()
216 gpio->gc.set_config = usbio_gpio_set_config; in usbio_gpio_probe()
217 gpio->gc.base = -1; in usbio_gpio_probe()
218 gpio->gc.ngpio = bank * USBIO_GPIOSPERBANK; in usbio_gpio_probe()
219 gpio->gc.can_sleep = true; in usbio_gpio_probe()
221 ret = devm_gpiochip_add_data(dev, &gpio->gc, gpio); in usbio_gpio_probe()
232 { "usbio.usbio-gpio" },
244 MODULE_DESCRIPTION("Intel USBIO GPIO driver");