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

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Support for viafb GPIO ports.
9 #include <linux/gpio/driver.h>
10 #include <linux/gpio/machine.h>
12 #include <linux/via-core.h>
13 #include "via-gpio.h"
16 * The ports we know about. Note that the port-25 gpios are not
29 .vg_name = "VGPIO0", /* Guess - not in datasheet */
81 * GPIO access functions
85 struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
87 struct viafb_gpio *gpio;
90 spin_lock_irqsave(&cfg->vdev->reg_lock, flags);
91 gpio = cfg->active_gpios[nr];
92 reg = via_read_reg(VIASR, gpio->vg_port_index);
93 reg |= 0x40 << gpio->vg_mask_shift; /* output enable */
95 reg |= 0x10 << gpio->vg_mask_shift;
97 reg &= ~(0x10 << gpio->vg_mask_shift);
98 via_write_reg(VIASR, gpio->vg_port_index, reg);
99 spin_unlock_irqrestore(&cfg->vdev->reg_lock, flags);
116 struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
117 struct viafb_gpio *gpio;
120 spin_lock_irqsave(&cfg->vdev->reg_lock, flags);
121 gpio = cfg->active_gpios[nr];
122 via_write_reg_mask(VIASR, gpio->vg_port_index, 0,
123 0x40 << gpio->vg_mask_shift);
124 spin_unlock_irqrestore(&cfg->vdev->reg_lock, flags);
130 struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
132 struct viafb_gpio *gpio;
135 spin_lock_irqsave(&cfg->vdev->reg_lock, flags);
136 gpio = cfg->active_gpios[nr];
137 reg = via_read_reg(VIASR, gpio->vg_port_index);
138 spin_unlock_irqrestore(&cfg->vdev->reg_lock, flags);
139 return !!(reg & (0x04 << gpio->vg_mask_shift));
145 .label = "VIAFB onboard GPIO",
151 .base = -1,
160 static void viafb_gpio_enable(struct viafb_gpio *gpio)
162 via_write_reg_mask(VIASR, gpio->vg_port_index, 0x02, 0x02);
165 static void viafb_gpio_disable(struct viafb_gpio *gpio)
167 via_write_reg_mask(VIASR, gpio->vg_port_index, 0, 0x02);
193 .dev_id = "viafb-camera",
195 GPIO_LOOKUP("via-gpio", 2, "VGPIO2", GPIO_ACTIVE_LOW),
196 GPIO_LOOKUP("via-gpio", 3, "VGPIO3", GPIO_ACTIVE_HIGH),
206 struct viafb_dev *vdev = platdev->dev.platform_data;
207 struct via_port_cfg *port_cfg = vdev->port_cfg;
209 struct viafb_gpio *gpio;
219 for (gpio = viafb_all_gpios;
220 gpio < viafb_all_gpios + VIAFB_NUM_GPIOS; gpio++)
221 if (gpio->vg_port_index == port_cfg[i].ioport_index) {
222 viafb_gpio_config.active_gpios[ngpio] = gpio;
224 gpio->vg_name;
239 spin_lock_irqsave(&viafb_gpio_config.vdev->reg_lock, flags);
242 spin_unlock_irqrestore(&viafb_gpio_config.vdev->reg_lock, flags);
246 viafb_gpio_config.gpio_chip.base = -1; /* Dynamic */
247 viafb_gpio_config.gpio_chip.label = "via-gpio";
282 spin_lock_irqsave(&viafb_gpio_config.vdev->reg_lock, flags);
286 spin_unlock_irqrestore(&viafb_gpio_config.vdev->reg_lock, flags);
291 .name = "viafb-gpio",