Lines Matching refs:idi48gpio
66 struct idi_48_gpio *const idi48gpio = gpiochip_get_data(chip); in idi_48_gpio_get() local
77 return !!(inb(idi48gpio->base + base_offset) & mask); in idi_48_gpio_get()
87 struct idi_48_gpio *const idi48gpio = gpiochip_get_data(chip); in idi_48_gpio_get_multiple() local
98 port_addr = idi48gpio->base + ports[offset / 8]; in idi_48_gpio_get_multiple()
114 struct idi_48_gpio *const idi48gpio = gpiochip_get_data(chip); in idi_48_irq_mask() local
126 idi48gpio->irq_mask[boundary] &= ~mask; in idi_48_irq_mask()
128 if (!idi48gpio->irq_mask[boundary]) { in idi_48_irq_mask()
129 idi48gpio->cos_enb &= ~BIT(boundary); in idi_48_irq_mask()
131 raw_spin_lock_irqsave(&idi48gpio->lock, flags); in idi_48_irq_mask()
133 outb(idi48gpio->cos_enb, idi48gpio->base + 7); in idi_48_irq_mask()
135 raw_spin_unlock_irqrestore(&idi48gpio->lock, in idi_48_irq_mask()
146 struct idi_48_gpio *const idi48gpio = gpiochip_get_data(chip); in idi_48_irq_unmask() local
158 prev_irq_mask = idi48gpio->irq_mask[boundary]; in idi_48_irq_unmask()
160 idi48gpio->irq_mask[boundary] |= mask; in idi_48_irq_unmask()
163 idi48gpio->cos_enb |= BIT(boundary); in idi_48_irq_unmask()
165 raw_spin_lock_irqsave(&idi48gpio->lock, flags); in idi_48_irq_unmask()
167 outb(idi48gpio->cos_enb, idi48gpio->base + 7); in idi_48_irq_unmask()
169 raw_spin_unlock_irqrestore(&idi48gpio->lock, in idi_48_irq_unmask()
197 struct idi_48_gpio *const idi48gpio = dev_id; in idi_48_irq_handler() local
203 struct gpio_chip *const chip = &idi48gpio->chip; in idi_48_irq_handler()
205 spin_lock(&idi48gpio->ack_lock); in idi_48_irq_handler()
207 raw_spin_lock(&idi48gpio->lock); in idi_48_irq_handler()
209 cos_status = inb(idi48gpio->base + 7); in idi_48_irq_handler()
211 raw_spin_unlock(&idi48gpio->lock); in idi_48_irq_handler()
215 spin_unlock(&idi48gpio->ack_lock); in idi_48_irq_handler()
223 irq_mask = idi48gpio->irq_mask[boundary]; in idi_48_irq_handler()
233 spin_unlock(&idi48gpio->ack_lock); in idi_48_irq_handler()
252 struct idi_48_gpio *const idi48gpio = gpiochip_get_data(gc); in idi_48_irq_init_hw() local
255 outb(0, idi48gpio->base + 7); in idi_48_irq_init_hw()
256 inb(idi48gpio->base + 7); in idi_48_irq_init_hw()
263 struct idi_48_gpio *idi48gpio; in idi_48_probe() local
268 idi48gpio = devm_kzalloc(dev, sizeof(*idi48gpio), GFP_KERNEL); in idi_48_probe()
269 if (!idi48gpio) in idi_48_probe()
278 idi48gpio->chip.label = name; in idi_48_probe()
279 idi48gpio->chip.parent = dev; in idi_48_probe()
280 idi48gpio->chip.owner = THIS_MODULE; in idi_48_probe()
281 idi48gpio->chip.base = -1; in idi_48_probe()
282 idi48gpio->chip.ngpio = IDI48_NGPIO; in idi_48_probe()
283 idi48gpio->chip.names = idi48_names; in idi_48_probe()
284 idi48gpio->chip.get_direction = idi_48_gpio_get_direction; in idi_48_probe()
285 idi48gpio->chip.direction_input = idi_48_gpio_direction_input; in idi_48_probe()
286 idi48gpio->chip.get = idi_48_gpio_get; in idi_48_probe()
287 idi48gpio->chip.get_multiple = idi_48_gpio_get_multiple; in idi_48_probe()
288 idi48gpio->base = base[id]; in idi_48_probe()
290 girq = &idi48gpio->chip.irq; in idi_48_probe()
300 raw_spin_lock_init(&idi48gpio->lock); in idi_48_probe()
301 spin_lock_init(&idi48gpio->ack_lock); in idi_48_probe()
303 err = devm_gpiochip_add_data(dev, &idi48gpio->chip, idi48gpio); in idi_48_probe()
310 name, idi48gpio); in idi_48_probe()