Lines Matching refs:gpio
62 struct u300_gpio *gpio; member
94 (gpio->base + (pin >> 3) * gpio->stride + gpio->reg)
222 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_get() local
229 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_set() local
246 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_direction_input() local
262 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_direction_output() local
293 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_config_get() local
351 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_config_set() local
392 dev_err(gpio->dev, "illegal configuration requested\n"); in u300_gpio_config_set()
410 static void u300_toggle_trigger(struct u300_gpio *gpio, unsigned offset) in u300_toggle_trigger() argument
416 if (u300_gpio_get(&gpio->chip, offset)) { in u300_toggle_trigger()
419 dev_dbg(gpio->dev, "next IRQ on falling edge on pin %d\n", in u300_toggle_trigger()
424 dev_dbg(gpio->dev, "next IRQ on rising edge on pin %d\n", in u300_toggle_trigger()
432 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_type() local
433 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_type()
444 dev_dbg(gpio->dev, in u300_gpio_irq_type()
448 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_type()
450 dev_dbg(gpio->dev, "trigger on rising edge on pin %d\n", in u300_gpio_irq_type()
456 dev_dbg(gpio->dev, "trigger on falling edge on pin %d\n", in u300_gpio_irq_type()
469 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_enable() local
470 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_enable()
475 dev_dbg(gpio->dev, "enable IRQ for hwirq %lu on port %s, offset %d\n", in u300_gpio_irq_enable()
486 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_disable() local
509 struct u300_gpio *gpio = to_u300_gpio(chip); in u300_gpio_irq_handler() local
510 struct u300_gpio_port *port = &gpio->ports[irq - chip->base]; in u300_gpio_irq_handler()
531 dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n", in u300_gpio_irq_handler()
539 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_handler()
546 static void __init u300_gpio_init_pin(struct u300_gpio *gpio, in u300_gpio_init_pin() argument
552 u300_gpio_direction_output(&gpio->chip, offset, conf->outval); in u300_gpio_init_pin()
555 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
559 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
562 dev_dbg(gpio->dev, "set up pin %d as output, value: %d\n", in u300_gpio_init_pin()
565 u300_gpio_direction_input(&gpio->chip, offset); in u300_gpio_init_pin()
568 u300_gpio_set(&gpio->chip, offset, 0); in u300_gpio_init_pin()
571 u300_gpio_config_set(&gpio->chip, offset, conf->bias_mode); in u300_gpio_init_pin()
573 dev_dbg(gpio->dev, "set up pin %d as input, bias: %04x\n", in u300_gpio_init_pin()
578 static void __init u300_gpio_init_coh901571(struct u300_gpio *gpio) in u300_gpio_init_coh901571() argument
589 u300_gpio_init_pin(gpio, offset, conf); in u300_gpio_init_coh901571()
626 struct u300_gpio *gpio; in u300_gpio_probe() local
634 gpio = devm_kzalloc(&pdev->dev, sizeof(struct u300_gpio), GFP_KERNEL); in u300_gpio_probe()
635 if (gpio == NULL) in u300_gpio_probe()
638 gpio->chip = u300_gpio_chip; in u300_gpio_probe()
639 gpio->chip.ngpio = U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT; in u300_gpio_probe()
640 gpio->chip.dev = &pdev->dev; in u300_gpio_probe()
641 gpio->chip.base = 0; in u300_gpio_probe()
642 gpio->dev = &pdev->dev; in u300_gpio_probe()
645 gpio->base = devm_ioremap_resource(&pdev->dev, memres); in u300_gpio_probe()
646 if (IS_ERR(gpio->base)) in u300_gpio_probe()
647 return PTR_ERR(gpio->base); in u300_gpio_probe()
649 gpio->clk = devm_clk_get(gpio->dev, NULL); in u300_gpio_probe()
650 if (IS_ERR(gpio->clk)) { in u300_gpio_probe()
651 err = PTR_ERR(gpio->clk); in u300_gpio_probe()
652 dev_err(gpio->dev, "could not get GPIO clock\n"); in u300_gpio_probe()
656 err = clk_prepare_enable(gpio->clk); in u300_gpio_probe()
658 dev_err(gpio->dev, "could not enable GPIO clock\n"); in u300_gpio_probe()
662 dev_info(gpio->dev, in u300_gpio_probe()
664 gpio->stride = U300_GPIO_PORT_STRIDE; in u300_gpio_probe()
665 gpio->pcr = U300_GPIO_PXPCR; in u300_gpio_probe()
666 gpio->dor = U300_GPIO_PXPDOR; in u300_gpio_probe()
667 gpio->dir = U300_GPIO_PXPDIR; in u300_gpio_probe()
668 gpio->per = U300_GPIO_PXPER; in u300_gpio_probe()
669 gpio->icr = U300_GPIO_PXICR; in u300_gpio_probe()
670 gpio->ien = U300_GPIO_PXIEN; in u300_gpio_probe()
671 gpio->iev = U300_GPIO_PXIEV; in u300_gpio_probe()
674 val = readl(gpio->base + U300_GPIO_CR); in u300_gpio_probe()
675 dev_info(gpio->dev, "COH901571/3 block version: %d, " \ in u300_gpio_probe()
681 gpio->base + U300_GPIO_CR); in u300_gpio_probe()
682 u300_gpio_init_coh901571(gpio); in u300_gpio_probe()
685 gpio->chip.of_node = pdev->dev.of_node; in u300_gpio_probe()
687 err = gpiochip_add(&gpio->chip); in u300_gpio_probe()
689 dev_err(gpio->dev, "unable to add gpiochip: %d\n", err); in u300_gpio_probe()
693 err = gpiochip_irqchip_add(&gpio->chip, in u300_gpio_probe()
699 dev_err(gpio->dev, "no GPIO irqchip\n"); in u300_gpio_probe()
705 struct u300_gpio_port *port = &gpio->ports[portno]; in u300_gpio_probe()
709 port->gpio = gpio; in u300_gpio_probe()
713 gpiochip_set_chained_irqchip(&gpio->chip, in u300_gpio_probe()
719 writel(0x0, gpio->base + portno * gpio->stride + ifr); in u300_gpio_probe()
721 dev_dbg(gpio->dev, "initialized %d GPIO ports\n", portno); in u300_gpio_probe()
730 err = gpiochip_add_pin_range(&gpio->chip, "pinctrl-u300", in u300_gpio_probe()
736 platform_set_drvdata(pdev, gpio); in u300_gpio_probe()
742 gpiochip_remove(&gpio->chip); in u300_gpio_probe()
744 clk_disable_unprepare(gpio->clk); in u300_gpio_probe()
751 struct u300_gpio *gpio = platform_get_drvdata(pdev); in u300_gpio_remove() local
754 writel(0x00000000U, gpio->base + U300_GPIO_CR); in u300_gpio_remove()
756 gpiochip_remove(&gpio->chip); in u300_gpio_remove()
757 clk_disable_unprepare(gpio->clk); in u300_gpio_remove()