Lines Matching +full:gpio +full:- +full:cfg

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()
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()
61 u8 cfg; in usbio_gpio_get_direction() local
65 cfg = bank->config[pin] & USBIO_GPIO_PINMOD_MASK; in usbio_gpio_get_direction()
67 return (cfg == USBIO_GPIO_PINMOD_OUTPUT) ? in usbio_gpio_get_direction()
73 struct usbio_gpio *gpio = gpiochip_get_data(gc); in usbio_gpio_get() local
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
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
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
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()
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");