Lines Matching refs:port

72 static inline int is_imx23_gpio(struct mxs_gpio_port *port)  in is_imx23_gpio()  argument
74 return port->devid == IMX23_GPIO; in is_imx23_gpio()
77 static inline int is_imx28_gpio(struct mxs_gpio_port *port) in is_imx28_gpio() argument
79 return port->devid == IMX28_GPIO; in is_imx28_gpio()
89 struct mxs_gpio_port *port = gc->private; in mxs_gpio_set_irq_type() local
93 port->both_edges &= ~pin_mask; in mxs_gpio_set_irq_type()
96 val = gpio_get_value(port->bgc.gc.base + d->hwirq); in mxs_gpio_set_irq_type()
101 port->both_edges |= pin_mask; in mxs_gpio_set_irq_type()
120 pin_addr = port->base + PINCTRL_IRQLEV(port); in mxs_gpio_set_irq_type()
127 pin_addr = port->base + PINCTRL_IRQPOL(port); in mxs_gpio_set_irq_type()
134 port->base + PINCTRL_IRQSTAT(port) + MXS_CLR); in mxs_gpio_set_irq_type()
139 static void mxs_flip_edge(struct mxs_gpio_port *port, u32 gpio) in mxs_flip_edge() argument
146 pin_addr = port->base + PINCTRL_IRQPOL(port); in mxs_flip_edge()
160 struct mxs_gpio_port *port = irq_get_handler_data(irq); in mxs_gpio_irq_handler() local
164 irq_stat = readl(port->base + PINCTRL_IRQSTAT(port)) & in mxs_gpio_irq_handler()
165 readl(port->base + PINCTRL_IRQEN(port)); in mxs_gpio_irq_handler()
169 if (port->both_edges & (1 << irqoffset)) in mxs_gpio_irq_handler()
170 mxs_flip_edge(port, irqoffset); in mxs_gpio_irq_handler()
172 generic_handle_irq(irq_find_mapping(port->domain, irqoffset)); in mxs_gpio_irq_handler()
189 struct mxs_gpio_port *port = gc->private; in mxs_gpio_set_wake_irq() local
192 enable_irq_wake(port->irq); in mxs_gpio_set_wake_irq()
194 disable_irq_wake(port->irq); in mxs_gpio_set_wake_irq()
199 static void __init mxs_gpio_init_gc(struct mxs_gpio_port *port, int irq_base) in mxs_gpio_init_gc() argument
205 port->base, handle_level_irq); in mxs_gpio_init_gc()
206 gc->private = port; in mxs_gpio_init_gc()
214 ct->regs.ack = PINCTRL_IRQSTAT(port) + MXS_CLR; in mxs_gpio_init_gc()
215 ct->regs.mask = PINCTRL_IRQEN(port); in mxs_gpio_init_gc()
224 struct mxs_gpio_port *port = in mxs_gpio_to_irq() local
227 return irq_find_mapping(port->domain, offset); in mxs_gpio_to_irq()
233 struct mxs_gpio_port *port = in mxs_gpio_get_direction() local
238 dir = readl(port->base + PINCTRL_DOE(port)); in mxs_gpio_get_direction()
269 struct mxs_gpio_port *port; in mxs_gpio_probe() local
273 port = devm_kzalloc(&pdev->dev, sizeof(*port), GFP_KERNEL); in mxs_gpio_probe()
274 if (!port) in mxs_gpio_probe()
277 port->id = of_alias_get_id(np, "gpio"); in mxs_gpio_probe()
278 if (port->id < 0) in mxs_gpio_probe()
279 return port->id; in mxs_gpio_probe()
280 port->devid = (enum mxs_gpio_id) of_id->data; in mxs_gpio_probe()
281 port->irq = platform_get_irq(pdev, 0); in mxs_gpio_probe()
282 if (port->irq < 0) in mxs_gpio_probe()
283 return port->irq; in mxs_gpio_probe()
296 port->base = base; in mxs_gpio_probe()
302 writel(~0U, port->base + PINCTRL_PIN2IRQ(port)); in mxs_gpio_probe()
303 writel(0, port->base + PINCTRL_IRQEN(port)); in mxs_gpio_probe()
306 writel(~0U, port->base + PINCTRL_IRQSTAT(port) + MXS_CLR); in mxs_gpio_probe()
312 port->domain = irq_domain_add_legacy(np, 32, irq_base, 0, in mxs_gpio_probe()
314 if (!port->domain) { in mxs_gpio_probe()
320 mxs_gpio_init_gc(port, irq_base); in mxs_gpio_probe()
323 irq_set_chained_handler(port->irq, mxs_gpio_irq_handler); in mxs_gpio_probe()
324 irq_set_handler_data(port->irq, port); in mxs_gpio_probe()
326 err = bgpio_init(&port->bgc, &pdev->dev, 4, in mxs_gpio_probe()
327 port->base + PINCTRL_DIN(port), in mxs_gpio_probe()
328 port->base + PINCTRL_DOUT(port) + MXS_SET, in mxs_gpio_probe()
329 port->base + PINCTRL_DOUT(port) + MXS_CLR, in mxs_gpio_probe()
330 port->base + PINCTRL_DOE(port), NULL, 0); in mxs_gpio_probe()
334 port->bgc.gc.to_irq = mxs_gpio_to_irq; in mxs_gpio_probe()
335 port->bgc.gc.get_direction = mxs_gpio_get_direction; in mxs_gpio_probe()
336 port->bgc.gc.base = port->id * 32; in mxs_gpio_probe()
338 err = gpiochip_add(&port->bgc.gc); in mxs_gpio_probe()
345 bgpio_remove(&port->bgc); in mxs_gpio_probe()