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_desc_get_handler_data(desc); 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 int __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()
209 gc->private = port; in mxs_gpio_init_gc()
217 ct->regs.ack = PINCTRL_IRQSTAT(port) + MXS_CLR; in mxs_gpio_init_gc()
218 ct->regs.mask = PINCTRL_IRQEN(port); in mxs_gpio_init_gc()
229 struct mxs_gpio_port *port = in mxs_gpio_to_irq() local
232 return irq_find_mapping(port->domain, offset); in mxs_gpio_to_irq()
238 struct mxs_gpio_port *port = in mxs_gpio_get_direction() local
243 dir = readl(port->base + PINCTRL_DOE(port)); in mxs_gpio_get_direction()
274 struct mxs_gpio_port *port; in mxs_gpio_probe() local
278 port = devm_kzalloc(&pdev->dev, sizeof(*port), GFP_KERNEL); in mxs_gpio_probe()
279 if (!port) in mxs_gpio_probe()
282 port->id = of_alias_get_id(np, "gpio"); in mxs_gpio_probe()
283 if (port->id < 0) in mxs_gpio_probe()
284 return port->id; in mxs_gpio_probe()
285 port->devid = (enum mxs_gpio_id) of_id->data; in mxs_gpio_probe()
286 port->irq = platform_get_irq(pdev, 0); in mxs_gpio_probe()
287 if (port->irq < 0) in mxs_gpio_probe()
288 return port->irq; in mxs_gpio_probe()
301 port->base = base; in mxs_gpio_probe()
307 writel(~0U, port->base + PINCTRL_PIN2IRQ(port)); in mxs_gpio_probe()
308 writel(0, port->base + PINCTRL_IRQEN(port)); in mxs_gpio_probe()
311 writel(~0U, port->base + PINCTRL_IRQSTAT(port) + MXS_CLR); in mxs_gpio_probe()
317 port->domain = irq_domain_add_legacy(np, 32, irq_base, 0, in mxs_gpio_probe()
319 if (!port->domain) { in mxs_gpio_probe()
325 err = mxs_gpio_init_gc(port, irq_base); in mxs_gpio_probe()
330 irq_set_chained_handler_and_data(port->irq, mxs_gpio_irq_handler, in mxs_gpio_probe()
331 port); in mxs_gpio_probe()
333 err = bgpio_init(&port->bgc, &pdev->dev, 4, in mxs_gpio_probe()
334 port->base + PINCTRL_DIN(port), in mxs_gpio_probe()
335 port->base + PINCTRL_DOUT(port) + MXS_SET, in mxs_gpio_probe()
336 port->base + PINCTRL_DOUT(port) + MXS_CLR, in mxs_gpio_probe()
337 port->base + PINCTRL_DOE(port), NULL, 0); in mxs_gpio_probe()
341 port->bgc.gc.to_irq = mxs_gpio_to_irq; in mxs_gpio_probe()
342 port->bgc.gc.get_direction = mxs_gpio_get_direction; in mxs_gpio_probe()
343 port->bgc.gc.base = port->id * 32; in mxs_gpio_probe()
345 err = gpiochip_add(&port->bgc.gc); in mxs_gpio_probe()
352 bgpio_remove(&port->bgc); in mxs_gpio_probe()
354 irq_domain_remove(port->domain); in mxs_gpio_probe()