Lines Matching refs:port
172 struct mxc_gpio_port *port = gc->private; in gpio_set_irq_type() local
175 u32 gpio = port->bgc.gc.base + gpio_idx; in gpio_set_irq_type()
177 void __iomem *reg = port->base; in gpio_set_irq_type()
179 port->both_edges &= ~(1 << gpio_idx); in gpio_set_irq_type()
199 port->both_edges |= 1 << gpio_idx; in gpio_set_irq_type()
213 val = readl(port->base + GPIO_EDGE_SEL); in gpio_set_irq_type()
216 port->base + GPIO_EDGE_SEL); in gpio_set_irq_type()
219 port->base + GPIO_EDGE_SEL); in gpio_set_irq_type()
229 writel(1 << gpio_idx, port->base + GPIO_ISR); in gpio_set_irq_type()
234 static void mxc_flip_edge(struct mxc_gpio_port *port, u32 gpio) in mxc_flip_edge() argument
236 void __iomem *reg = port->base; in mxc_flip_edge()
260 static void mxc_gpio_irq_handler(struct mxc_gpio_port *port, u32 irq_stat) in mxc_gpio_irq_handler() argument
265 if (port->both_edges & (1 << irqoffset)) in mxc_gpio_irq_handler()
266 mxc_flip_edge(port, irqoffset); in mxc_gpio_irq_handler()
268 generic_handle_irq(irq_find_mapping(port->domain, irqoffset)); in mxc_gpio_irq_handler()
278 struct mxc_gpio_port *port = irq_get_handler_data(irq); in mx3_gpio_irq_handler() local
283 irq_stat = readl(port->base + GPIO_ISR) & readl(port->base + GPIO_IMR); in mx3_gpio_irq_handler()
285 mxc_gpio_irq_handler(port, irq_stat); in mx3_gpio_irq_handler()
294 struct mxc_gpio_port *port; in mx2_gpio_irq_handler() local
300 list_for_each_entry(port, &mxc_gpio_ports, node) { in mx2_gpio_irq_handler()
301 irq_msk = readl(port->base + GPIO_IMR); in mx2_gpio_irq_handler()
305 irq_stat = readl(port->base + GPIO_ISR) & irq_msk; in mx2_gpio_irq_handler()
307 mxc_gpio_irq_handler(port, irq_stat); in mx2_gpio_irq_handler()
324 struct mxc_gpio_port *port = gc->private; in gpio_set_wake_irq() local
328 if (port->irq_high && (gpio_idx >= 16)) in gpio_set_wake_irq()
329 enable_irq_wake(port->irq_high); in gpio_set_wake_irq()
331 enable_irq_wake(port->irq); in gpio_set_wake_irq()
333 if (port->irq_high && (gpio_idx >= 16)) in gpio_set_wake_irq()
334 disable_irq_wake(port->irq_high); in gpio_set_wake_irq()
336 disable_irq_wake(port->irq); in gpio_set_wake_irq()
342 static void __init mxc_gpio_init_gc(struct mxc_gpio_port *port, int irq_base) in mxc_gpio_init_gc() argument
348 port->base, handle_level_irq); in mxc_gpio_init_gc()
349 gc->private = port; in mxc_gpio_init_gc()
397 struct mxc_gpio_port *port = in mxc_gpio_to_irq() local
400 return irq_find_mapping(port->domain, offset); in mxc_gpio_to_irq()
406 struct mxc_gpio_port *port; in mxc_gpio_probe() local
413 port = devm_kzalloc(&pdev->dev, sizeof(*port), GFP_KERNEL); in mxc_gpio_probe()
414 if (!port) in mxc_gpio_probe()
418 port->base = devm_ioremap_resource(&pdev->dev, iores); in mxc_gpio_probe()
419 if (IS_ERR(port->base)) in mxc_gpio_probe()
420 return PTR_ERR(port->base); in mxc_gpio_probe()
422 port->irq_high = platform_get_irq(pdev, 1); in mxc_gpio_probe()
423 port->irq = platform_get_irq(pdev, 0); in mxc_gpio_probe()
424 if (port->irq < 0) in mxc_gpio_probe()
425 return port->irq; in mxc_gpio_probe()
428 writel(0, port->base + GPIO_IMR); in mxc_gpio_probe()
429 writel(~0, port->base + GPIO_ISR); in mxc_gpio_probe()
437 irq_set_chained_handler(port->irq, mx2_gpio_irq_handler); in mxc_gpio_probe()
440 irq_set_chained_handler(port->irq, mx3_gpio_irq_handler); in mxc_gpio_probe()
441 irq_set_handler_data(port->irq, port); in mxc_gpio_probe()
442 if (port->irq_high > 0) { in mxc_gpio_probe()
444 irq_set_chained_handler(port->irq_high, in mxc_gpio_probe()
446 irq_set_handler_data(port->irq_high, port); in mxc_gpio_probe()
450 err = bgpio_init(&port->bgc, &pdev->dev, 4, in mxc_gpio_probe()
451 port->base + GPIO_PSR, in mxc_gpio_probe()
452 port->base + GPIO_DR, NULL, in mxc_gpio_probe()
453 port->base + GPIO_GDIR, NULL, 0); in mxc_gpio_probe()
457 port->bgc.gc.to_irq = mxc_gpio_to_irq; in mxc_gpio_probe()
458 port->bgc.gc.base = (pdev->id < 0) ? of_alias_get_id(np, "gpio") * 32 : in mxc_gpio_probe()
461 err = gpiochip_add(&port->bgc.gc); in mxc_gpio_probe()
471 port->domain = irq_domain_add_legacy(np, 32, irq_base, 0, in mxc_gpio_probe()
473 if (!port->domain) { in mxc_gpio_probe()
479 mxc_gpio_init_gc(port, irq_base); in mxc_gpio_probe()
481 list_add_tail(&port->node, &mxc_gpio_ports); in mxc_gpio_probe()
488 gpiochip_remove(&port->bgc.gc); in mxc_gpio_probe()
490 bgpio_remove(&port->bgc); in mxc_gpio_probe()