Lines Matching refs:idio16gpio
73 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_gpio_get() local
80 return !!(inb(idio16gpio->base + 1) & mask); in idio_16_gpio_get()
82 return !!(inb(idio16gpio->base + 5) & (mask>>8)); in idio_16_gpio_get()
88 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_gpio_get_multiple() local
92 *bits |= (unsigned long)inb(idio16gpio->base + 1) << 16; in idio_16_gpio_get_multiple()
94 *bits |= (unsigned long)inb(idio16gpio->base + 5) << 24; in idio_16_gpio_get_multiple()
101 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_gpio_set() local
108 raw_spin_lock_irqsave(&idio16gpio->lock, flags); in idio_16_gpio_set()
111 idio16gpio->out_state |= mask; in idio_16_gpio_set()
113 idio16gpio->out_state &= ~mask; in idio_16_gpio_set()
116 outb(idio16gpio->out_state >> 8, idio16gpio->base + 4); in idio_16_gpio_set()
118 outb(idio16gpio->out_state, idio16gpio->base); in idio_16_gpio_set()
120 raw_spin_unlock_irqrestore(&idio16gpio->lock, flags); in idio_16_gpio_set()
126 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_gpio_set_multiple() local
129 raw_spin_lock_irqsave(&idio16gpio->lock, flags); in idio_16_gpio_set_multiple()
131 idio16gpio->out_state &= ~*mask; in idio_16_gpio_set_multiple()
132 idio16gpio->out_state |= *mask & *bits; in idio_16_gpio_set_multiple()
135 outb(idio16gpio->out_state, idio16gpio->base); in idio_16_gpio_set_multiple()
137 outb(idio16gpio->out_state >> 8, idio16gpio->base + 4); in idio_16_gpio_set_multiple()
139 raw_spin_unlock_irqrestore(&idio16gpio->lock, flags); in idio_16_gpio_set_multiple()
149 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_irq_mask() local
153 idio16gpio->irq_mask &= ~mask; in idio_16_irq_mask()
155 if (!idio16gpio->irq_mask) { in idio_16_irq_mask()
156 raw_spin_lock_irqsave(&idio16gpio->lock, flags); in idio_16_irq_mask()
158 outb(0, idio16gpio->base + 2); in idio_16_irq_mask()
160 raw_spin_unlock_irqrestore(&idio16gpio->lock, flags); in idio_16_irq_mask()
167 struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip); in idio_16_irq_unmask() local
169 const unsigned long prev_irq_mask = idio16gpio->irq_mask; in idio_16_irq_unmask()
172 idio16gpio->irq_mask |= mask; in idio_16_irq_unmask()
175 raw_spin_lock_irqsave(&idio16gpio->lock, flags); in idio_16_irq_unmask()
177 inb(idio16gpio->base + 2); in idio_16_irq_unmask()
179 raw_spin_unlock_irqrestore(&idio16gpio->lock, flags); in idio_16_irq_unmask()
203 struct idio_16_gpio *const idio16gpio = dev_id; in idio_16_irq_handler() local
204 struct gpio_chip *const chip = &idio16gpio->chip; in idio_16_irq_handler()
207 for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio) in idio_16_irq_handler()
210 raw_spin_lock(&idio16gpio->lock); in idio_16_irq_handler()
212 outb(0, idio16gpio->base + 1); in idio_16_irq_handler()
214 raw_spin_unlock(&idio16gpio->lock); in idio_16_irq_handler()
229 struct idio_16_gpio *idio16gpio; in idio_16_probe() local
233 idio16gpio = devm_kzalloc(dev, sizeof(*idio16gpio), GFP_KERNEL); in idio_16_probe()
234 if (!idio16gpio) in idio_16_probe()
243 idio16gpio->chip.label = name; in idio_16_probe()
244 idio16gpio->chip.parent = dev; in idio_16_probe()
245 idio16gpio->chip.owner = THIS_MODULE; in idio_16_probe()
246 idio16gpio->chip.base = -1; in idio_16_probe()
247 idio16gpio->chip.ngpio = IDIO_16_NGPIO; in idio_16_probe()
248 idio16gpio->chip.names = idio_16_names; in idio_16_probe()
249 idio16gpio->chip.get_direction = idio_16_gpio_get_direction; in idio_16_probe()
250 idio16gpio->chip.direction_input = idio_16_gpio_direction_input; in idio_16_probe()
251 idio16gpio->chip.direction_output = idio_16_gpio_direction_output; in idio_16_probe()
252 idio16gpio->chip.get = idio_16_gpio_get; in idio_16_probe()
253 idio16gpio->chip.get_multiple = idio_16_gpio_get_multiple; in idio_16_probe()
254 idio16gpio->chip.set = idio_16_gpio_set; in idio_16_probe()
255 idio16gpio->chip.set_multiple = idio_16_gpio_set_multiple; in idio_16_probe()
256 idio16gpio->base = base[id]; in idio_16_probe()
257 idio16gpio->out_state = 0xFFFF; in idio_16_probe()
259 raw_spin_lock_init(&idio16gpio->lock); in idio_16_probe()
261 err = devm_gpiochip_add_data(dev, &idio16gpio->chip, idio16gpio); in idio_16_probe()
271 err = gpiochip_irqchip_add(&idio16gpio->chip, &idio_16_irqchip, 0, in idio_16_probe()
279 idio16gpio); in idio_16_probe()