• Home
  • Raw
  • Download

Lines Matching refs:dio48egpio

58 	struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip);  in dio48e_gpio_get_direction()  local
62 return !!(dio48egpio->io_state[port] & mask); in dio48e_gpio_get_direction()
67 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_direction_input() local
70 const unsigned control_addr = dio48egpio->base + 3 + control_port*4; in dio48e_gpio_direction_input()
74 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_gpio_direction_input()
80 dio48egpio->io_state[io_port] |= 0xF0; in dio48e_gpio_direction_input()
81 dio48egpio->control[control_port] |= BIT(3); in dio48e_gpio_direction_input()
83 dio48egpio->io_state[io_port] |= 0x0F; in dio48e_gpio_direction_input()
84 dio48egpio->control[control_port] |= BIT(0); in dio48e_gpio_direction_input()
87 dio48egpio->io_state[io_port] |= 0xFF; in dio48e_gpio_direction_input()
89 dio48egpio->control[control_port] |= BIT(4); in dio48e_gpio_direction_input()
91 dio48egpio->control[control_port] |= BIT(1); in dio48e_gpio_direction_input()
94 control = BIT(7) | dio48egpio->control[control_port]; in dio48e_gpio_direction_input()
99 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_direction_input()
107 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_direction_output() local
111 const unsigned control_addr = dio48egpio->base + 3 + control_port*4; in dio48e_gpio_direction_output()
116 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_gpio_direction_output()
122 dio48egpio->io_state[io_port] &= 0x0F; in dio48e_gpio_direction_output()
123 dio48egpio->control[control_port] &= ~BIT(3); in dio48e_gpio_direction_output()
125 dio48egpio->io_state[io_port] &= 0xF0; in dio48e_gpio_direction_output()
126 dio48egpio->control[control_port] &= ~BIT(0); in dio48e_gpio_direction_output()
129 dio48egpio->io_state[io_port] &= 0x00; in dio48e_gpio_direction_output()
131 dio48egpio->control[control_port] &= ~BIT(4); in dio48e_gpio_direction_output()
133 dio48egpio->control[control_port] &= ~BIT(1); in dio48e_gpio_direction_output()
137 dio48egpio->out_state[io_port] |= mask; in dio48e_gpio_direction_output()
139 dio48egpio->out_state[io_port] &= ~mask; in dio48e_gpio_direction_output()
141 control = BIT(7) | dio48egpio->control[control_port]; in dio48e_gpio_direction_output()
144 outb(dio48egpio->out_state[io_port], dio48egpio->base + out_port); in dio48e_gpio_direction_output()
149 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_direction_output()
156 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_get() local
163 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_gpio_get()
166 if (!(dio48egpio->io_state[port] & mask)) { in dio48e_gpio_get()
167 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_get()
171 port_state = inb(dio48egpio->base + in_port); in dio48e_gpio_get()
173 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_get()
181 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_get_multiple() local
214 port_state = inb(dio48egpio->base + ports[i]); in dio48e_gpio_get_multiple()
225 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_set() local
231 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_gpio_set()
234 dio48egpio->out_state[port] |= mask; in dio48e_gpio_set()
236 dio48egpio->out_state[port] &= ~mask; in dio48e_gpio_set()
238 outb(dio48egpio->out_state[port], dio48egpio->base + out_port); in dio48e_gpio_set()
240 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_set()
246 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_gpio_set_multiple() local
266 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_gpio_set_multiple()
269 dio48egpio->out_state[port] &= ~mask[BIT_WORD(i)]; in dio48e_gpio_set_multiple()
270 dio48egpio->out_state[port] |= bitmask; in dio48e_gpio_set_multiple()
271 outb(dio48egpio->out_state[port], dio48egpio->base + out_port); in dio48e_gpio_set_multiple()
273 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_gpio_set_multiple()
288 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_irq_mask() local
296 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_irq_mask()
299 dio48egpio->irq_mask &= ~BIT(0); in dio48e_irq_mask()
301 dio48egpio->irq_mask &= ~BIT(1); in dio48e_irq_mask()
303 if (!dio48egpio->irq_mask) in dio48e_irq_mask()
305 inb(dio48egpio->base + 0xB); in dio48e_irq_mask()
307 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_irq_mask()
313 struct dio48e_gpio *const dio48egpio = gpiochip_get_data(chip); in dio48e_irq_unmask() local
321 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_irq_unmask()
323 if (!dio48egpio->irq_mask) { in dio48e_irq_unmask()
325 outb(0x00, dio48egpio->base + 0xF); in dio48e_irq_unmask()
326 outb(0x00, dio48egpio->base + 0xB); in dio48e_irq_unmask()
330 dio48egpio->irq_mask |= BIT(0); in dio48e_irq_unmask()
332 dio48egpio->irq_mask |= BIT(1); in dio48e_irq_unmask()
334 raw_spin_unlock_irqrestore(&dio48egpio->lock, flags); in dio48e_irq_unmask()
361 struct dio48e_gpio *const dio48egpio = dev_id; in dio48e_irq_handler() local
362 struct gpio_chip *const chip = &dio48egpio->chip; in dio48e_irq_handler()
363 const unsigned long irq_mask = dio48egpio->irq_mask; in dio48e_irq_handler()
370 raw_spin_lock(&dio48egpio->lock); in dio48e_irq_handler()
372 outb(0x00, dio48egpio->base + 0xF); in dio48e_irq_handler()
374 raw_spin_unlock(&dio48egpio->lock); in dio48e_irq_handler()
401 struct dio48e_gpio *dio48egpio; in dio48e_probe() local
405 dio48egpio = devm_kzalloc(dev, sizeof(*dio48egpio), GFP_KERNEL); in dio48e_probe()
406 if (!dio48egpio) in dio48e_probe()
415 dio48egpio->chip.label = name; in dio48e_probe()
416 dio48egpio->chip.parent = dev; in dio48e_probe()
417 dio48egpio->chip.owner = THIS_MODULE; in dio48e_probe()
418 dio48egpio->chip.base = -1; in dio48e_probe()
419 dio48egpio->chip.ngpio = DIO48E_NGPIO; in dio48e_probe()
420 dio48egpio->chip.names = dio48e_names; in dio48e_probe()
421 dio48egpio->chip.get_direction = dio48e_gpio_get_direction; in dio48e_probe()
422 dio48egpio->chip.direction_input = dio48e_gpio_direction_input; in dio48e_probe()
423 dio48egpio->chip.direction_output = dio48e_gpio_direction_output; in dio48e_probe()
424 dio48egpio->chip.get = dio48e_gpio_get; in dio48e_probe()
425 dio48egpio->chip.get_multiple = dio48e_gpio_get_multiple; in dio48e_probe()
426 dio48egpio->chip.set = dio48e_gpio_set; in dio48e_probe()
427 dio48egpio->chip.set_multiple = dio48e_gpio_set_multiple; in dio48e_probe()
428 dio48egpio->base = base[id]; in dio48e_probe()
430 raw_spin_lock_init(&dio48egpio->lock); in dio48e_probe()
432 err = devm_gpiochip_add_data(dev, &dio48egpio->chip, dio48egpio); in dio48e_probe()
453 err = gpiochip_irqchip_add(&dio48egpio->chip, &dio48e_irqchip, 0, in dio48e_probe()
461 dio48egpio); in dio48e_probe()