Lines Matching refs:gpiommgpio

51 	struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip);  in gpiomm_gpio_get_direction()  local
55 if (gpiommgpio->io_state[port] & mask) in gpiomm_gpio_get_direction()
64 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_direction_input() local
67 const unsigned int control_addr = gpiommgpio->base + 3 + control_port*4; in gpiomm_gpio_direction_input()
71 spin_lock_irqsave(&gpiommgpio->lock, flags); in gpiomm_gpio_direction_input()
77 gpiommgpio->io_state[io_port] |= 0xF0; in gpiomm_gpio_direction_input()
78 gpiommgpio->control[control_port] |= BIT(3); in gpiomm_gpio_direction_input()
80 gpiommgpio->io_state[io_port] |= 0x0F; in gpiomm_gpio_direction_input()
81 gpiommgpio->control[control_port] |= BIT(0); in gpiomm_gpio_direction_input()
84 gpiommgpio->io_state[io_port] |= 0xFF; in gpiomm_gpio_direction_input()
86 gpiommgpio->control[control_port] |= BIT(4); in gpiomm_gpio_direction_input()
88 gpiommgpio->control[control_port] |= BIT(1); in gpiomm_gpio_direction_input()
91 control = BIT(7) | gpiommgpio->control[control_port]; in gpiomm_gpio_direction_input()
94 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_direction_input()
102 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_direction_output() local
106 const unsigned int control_addr = gpiommgpio->base + 3 + control_port*4; in gpiomm_gpio_direction_output()
111 spin_lock_irqsave(&gpiommgpio->lock, flags); in gpiomm_gpio_direction_output()
117 gpiommgpio->io_state[io_port] &= 0x0F; in gpiomm_gpio_direction_output()
118 gpiommgpio->control[control_port] &= ~BIT(3); in gpiomm_gpio_direction_output()
120 gpiommgpio->io_state[io_port] &= 0xF0; in gpiomm_gpio_direction_output()
121 gpiommgpio->control[control_port] &= ~BIT(0); in gpiomm_gpio_direction_output()
124 gpiommgpio->io_state[io_port] &= 0x00; in gpiomm_gpio_direction_output()
126 gpiommgpio->control[control_port] &= ~BIT(4); in gpiomm_gpio_direction_output()
128 gpiommgpio->control[control_port] &= ~BIT(1); in gpiomm_gpio_direction_output()
132 gpiommgpio->out_state[io_port] |= mask; in gpiomm_gpio_direction_output()
134 gpiommgpio->out_state[io_port] &= ~mask; in gpiomm_gpio_direction_output()
136 control = BIT(7) | gpiommgpio->control[control_port]; in gpiomm_gpio_direction_output()
139 outb(gpiommgpio->out_state[io_port], gpiommgpio->base + out_port); in gpiomm_gpio_direction_output()
141 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_direction_output()
148 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_get() local
155 spin_lock_irqsave(&gpiommgpio->lock, flags); in gpiomm_gpio_get()
158 if (!(gpiommgpio->io_state[port] & mask)) { in gpiomm_gpio_get()
159 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_get()
163 port_state = inb(gpiommgpio->base + in_port); in gpiomm_gpio_get()
165 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_get()
175 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_get_multiple() local
185 port_addr = gpiommgpio->base + ports[offset / 8]; in gpiomm_gpio_get_multiple()
197 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_set() local
203 spin_lock_irqsave(&gpiommgpio->lock, flags); in gpiomm_gpio_set()
206 gpiommgpio->out_state[port] |= mask; in gpiomm_gpio_set()
208 gpiommgpio->out_state[port] &= ~mask; in gpiomm_gpio_set()
210 outb(gpiommgpio->out_state[port], gpiommgpio->base + out_port); in gpiomm_gpio_set()
212 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_set()
218 struct gpiomm_gpio *const gpiommgpio = gpiochip_get_data(chip); in gpiomm_gpio_set_multiple() local
228 port_addr = gpiommgpio->base + ports[index]; in gpiomm_gpio_set_multiple()
232 spin_lock_irqsave(&gpiommgpio->lock, flags); in gpiomm_gpio_set_multiple()
235 gpiommgpio->out_state[index] &= ~gpio_mask; in gpiomm_gpio_set_multiple()
236 gpiommgpio->out_state[index] |= bitmask; in gpiomm_gpio_set_multiple()
237 outb(gpiommgpio->out_state[index], port_addr); in gpiomm_gpio_set_multiple()
239 spin_unlock_irqrestore(&gpiommgpio->lock, flags); in gpiomm_gpio_set_multiple()
257 struct gpiomm_gpio *gpiommgpio; in gpiomm_probe() local
261 gpiommgpio = devm_kzalloc(dev, sizeof(*gpiommgpio), GFP_KERNEL); in gpiomm_probe()
262 if (!gpiommgpio) in gpiomm_probe()
271 gpiommgpio->chip.label = name; in gpiomm_probe()
272 gpiommgpio->chip.parent = dev; in gpiomm_probe()
273 gpiommgpio->chip.owner = THIS_MODULE; in gpiomm_probe()
274 gpiommgpio->chip.base = -1; in gpiomm_probe()
275 gpiommgpio->chip.ngpio = GPIOMM_NGPIO; in gpiomm_probe()
276 gpiommgpio->chip.names = gpiomm_names; in gpiomm_probe()
277 gpiommgpio->chip.get_direction = gpiomm_gpio_get_direction; in gpiomm_probe()
278 gpiommgpio->chip.direction_input = gpiomm_gpio_direction_input; in gpiomm_probe()
279 gpiommgpio->chip.direction_output = gpiomm_gpio_direction_output; in gpiomm_probe()
280 gpiommgpio->chip.get = gpiomm_gpio_get; in gpiomm_probe()
281 gpiommgpio->chip.get_multiple = gpiomm_gpio_get_multiple; in gpiomm_probe()
282 gpiommgpio->chip.set = gpiomm_gpio_set; in gpiomm_probe()
283 gpiommgpio->chip.set_multiple = gpiomm_gpio_set_multiple; in gpiomm_probe()
284 gpiommgpio->base = base[id]; in gpiomm_probe()
286 spin_lock_init(&gpiommgpio->lock); in gpiomm_probe()
288 err = devm_gpiochip_add_data(dev, &gpiommgpio->chip, gpiommgpio); in gpiomm_probe()