Lines Matching refs:gpio
62 struct u300_gpio *gpio; member
94 (gpio->base + (pin >> 3) * gpio->stride + gpio->reg)
226 int gpio = chip->base + offset; in u300_gpio_request() local
228 return pinctrl_request_gpio(gpio); in u300_gpio_request()
233 int gpio = chip->base + offset; in u300_gpio_free() local
235 pinctrl_free_gpio(gpio); in u300_gpio_free()
240 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_get() local
247 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_set() local
264 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_direction_input() local
280 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_direction_output() local
311 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_config_get() local
369 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_config_set() local
410 dev_err(gpio->dev, "illegal configuration requested\n"); in u300_gpio_config_set()
428 static void u300_toggle_trigger(struct u300_gpio *gpio, unsigned offset) in u300_toggle_trigger() argument
434 if (u300_gpio_get(&gpio->chip, offset)) { in u300_toggle_trigger()
437 dev_dbg(gpio->dev, "next IRQ on falling edge on pin %d\n", in u300_toggle_trigger()
442 dev_dbg(gpio->dev, "next IRQ on rising edge on pin %d\n", in u300_toggle_trigger()
450 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_type() local
451 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_type()
462 dev_dbg(gpio->dev, in u300_gpio_irq_type()
466 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_type()
468 dev_dbg(gpio->dev, "trigger on rising edge on pin %d\n", in u300_gpio_irq_type()
474 dev_dbg(gpio->dev, "trigger on falling edge on pin %d\n", in u300_gpio_irq_type()
487 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_enable() local
488 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_enable()
493 dev_dbg(gpio->dev, "enable IRQ for hwirq %lu on port %s, offset %d\n", in u300_gpio_irq_enable()
504 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_disable() local
526 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_handler() local
527 struct u300_gpio_port *port = &gpio->ports[irq - chip->base]; in u300_gpio_irq_handler()
548 dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n", in u300_gpio_irq_handler()
556 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_handler()
563 static void __init u300_gpio_init_pin(struct u300_gpio *gpio, in u300_gpio_init_pin() argument
569 u300_gpio_direction_output(&gpio->chip, offset, conf->outval); in u300_gpio_init_pin()
572 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
576 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
579 dev_dbg(gpio->dev, "set up pin %d as output, value: %d\n", in u300_gpio_init_pin()
582 u300_gpio_direction_input(&gpio->chip, offset); in u300_gpio_init_pin()
585 u300_gpio_set(&gpio->chip, offset, 0); in u300_gpio_init_pin()
588 u300_gpio_config_set(&gpio->chip, offset, conf->bias_mode); in u300_gpio_init_pin()
590 dev_dbg(gpio->dev, "set up pin %d as input, bias: %04x\n", in u300_gpio_init_pin()
595 static void __init u300_gpio_init_coh901571(struct u300_gpio *gpio) in u300_gpio_init_coh901571() argument
606 u300_gpio_init_pin(gpio, offset, conf); in u300_gpio_init_coh901571()
643 struct u300_gpio *gpio; in u300_gpio_probe() local
651 gpio = devm_kzalloc(&pdev->dev, sizeof(struct u300_gpio), GFP_KERNEL); in u300_gpio_probe()
652 if (gpio == NULL) in u300_gpio_probe()
655 gpio->chip = u300_gpio_chip; in u300_gpio_probe()
656 gpio->chip.ngpio = U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT; in u300_gpio_probe()
657 gpio->chip.dev = &pdev->dev; in u300_gpio_probe()
658 gpio->chip.base = 0; in u300_gpio_probe()
659 gpio->dev = &pdev->dev; in u300_gpio_probe()
662 gpio->base = devm_ioremap_resource(&pdev->dev, memres); in u300_gpio_probe()
663 if (IS_ERR(gpio->base)) in u300_gpio_probe()
664 return PTR_ERR(gpio->base); in u300_gpio_probe()
666 gpio->clk = devm_clk_get(gpio->dev, NULL); in u300_gpio_probe()
667 if (IS_ERR(gpio->clk)) { in u300_gpio_probe()
668 err = PTR_ERR(gpio->clk); in u300_gpio_probe()
669 dev_err(gpio->dev, "could not get GPIO clock\n"); in u300_gpio_probe()
673 err = clk_prepare_enable(gpio->clk); in u300_gpio_probe()
675 dev_err(gpio->dev, "could not enable GPIO clock\n"); in u300_gpio_probe()
679 dev_info(gpio->dev, in u300_gpio_probe()
681 gpio->stride = U300_GPIO_PORT_STRIDE; in u300_gpio_probe()
682 gpio->pcr = U300_GPIO_PXPCR; in u300_gpio_probe()
683 gpio->dor = U300_GPIO_PXPDOR; in u300_gpio_probe()
684 gpio->dir = U300_GPIO_PXPDIR; in u300_gpio_probe()
685 gpio->per = U300_GPIO_PXPER; in u300_gpio_probe()
686 gpio->icr = U300_GPIO_PXICR; in u300_gpio_probe()
687 gpio->ien = U300_GPIO_PXIEN; in u300_gpio_probe()
688 gpio->iev = U300_GPIO_PXIEV; in u300_gpio_probe()
691 val = readl(gpio->base + U300_GPIO_CR); in u300_gpio_probe()
692 dev_info(gpio->dev, "COH901571/3 block version: %d, " \ in u300_gpio_probe()
698 gpio->base + U300_GPIO_CR); in u300_gpio_probe()
699 u300_gpio_init_coh901571(gpio); in u300_gpio_probe()
702 gpio->chip.of_node = pdev->dev.of_node; in u300_gpio_probe()
704 err = gpiochip_add(&gpio->chip); in u300_gpio_probe()
706 dev_err(gpio->dev, "unable to add gpiochip: %d\n", err); in u300_gpio_probe()
710 err = gpiochip_irqchip_add(&gpio->chip, in u300_gpio_probe()
716 dev_err(gpio->dev, "no GPIO irqchip\n"); in u300_gpio_probe()
722 struct u300_gpio_port *port = &gpio->ports[portno]; in u300_gpio_probe()
726 port->gpio = gpio; in u300_gpio_probe()
730 gpiochip_set_chained_irqchip(&gpio->chip, in u300_gpio_probe()
736 writel(0x0, gpio->base + portno * gpio->stride + ifr); in u300_gpio_probe()
738 dev_dbg(gpio->dev, "initialized %d GPIO ports\n", portno); in u300_gpio_probe()
747 err = gpiochip_add_pin_range(&gpio->chip, "pinctrl-u300", in u300_gpio_probe()
753 platform_set_drvdata(pdev, gpio); in u300_gpio_probe()
759 gpiochip_remove(&gpio->chip); in u300_gpio_probe()
761 clk_disable_unprepare(gpio->clk); in u300_gpio_probe()
768 struct u300_gpio *gpio = platform_get_drvdata(pdev); in u300_gpio_remove() local
771 writel(0x00000000U, gpio->base + U300_GPIO_CR); in u300_gpio_remove()
773 gpiochip_remove(&gpio->chip); in u300_gpio_remove()
774 clk_disable_unprepare(gpio->clk); in u300_gpio_remove()