• Home
  • Raw
  • Download

Lines Matching refs:gpio

62 	struct u300_gpio *gpio;  member
94 (gpio->base + (pin >> 3) * gpio->stride + gpio->reg)
213 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_get() local
220 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_set() local
237 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_direction_input() local
253 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_direction_output() local
284 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_config_get() local
342 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_config_set() local
383 dev_err(gpio->dev, "illegal configuration requested\n"); in u300_gpio_config_set()
401 static void u300_toggle_trigger(struct u300_gpio *gpio, unsigned offset) in u300_toggle_trigger() argument
407 if (u300_gpio_get(&gpio->chip, offset)) { in u300_toggle_trigger()
410 dev_dbg(gpio->dev, "next IRQ on falling edge on pin %d\n", in u300_toggle_trigger()
415 dev_dbg(gpio->dev, "next IRQ on rising edge on pin %d\n", in u300_toggle_trigger()
423 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_irq_type() local
424 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_type()
435 dev_dbg(gpio->dev, in u300_gpio_irq_type()
439 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_type()
441 dev_dbg(gpio->dev, "trigger on rising edge on pin %d\n", in u300_gpio_irq_type()
447 dev_dbg(gpio->dev, "trigger on falling edge on pin %d\n", in u300_gpio_irq_type()
460 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_irq_enable() local
461 struct u300_gpio_port *port = &gpio->ports[d->hwirq >> 3]; in u300_gpio_irq_enable()
466 dev_dbg(gpio->dev, "enable IRQ for hwirq %lu on port %s, offset %d\n", in u300_gpio_irq_enable()
477 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_irq_disable() local
500 struct u300_gpio *gpio = gpiochip_get_data(chip); in u300_gpio_irq_handler() local
501 struct u300_gpio_port *port = &gpio->ports[irq - chip->base]; in u300_gpio_irq_handler()
522 dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n", in u300_gpio_irq_handler()
530 u300_toggle_trigger(gpio, offset); in u300_gpio_irq_handler()
537 static void __init u300_gpio_init_pin(struct u300_gpio *gpio, in u300_gpio_init_pin() argument
543 u300_gpio_direction_output(&gpio->chip, offset, conf->outval); in u300_gpio_init_pin()
546 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
550 u300_gpio_config_set(&gpio->chip, offset, in u300_gpio_init_pin()
553 dev_dbg(gpio->dev, "set up pin %d as output, value: %d\n", in u300_gpio_init_pin()
556 u300_gpio_direction_input(&gpio->chip, offset); in u300_gpio_init_pin()
559 u300_gpio_set(&gpio->chip, offset, 0); in u300_gpio_init_pin()
562 u300_gpio_config_set(&gpio->chip, offset, conf->bias_mode); in u300_gpio_init_pin()
564 dev_dbg(gpio->dev, "set up pin %d as input, bias: %04x\n", in u300_gpio_init_pin()
569 static void __init u300_gpio_init_coh901571(struct u300_gpio *gpio) in u300_gpio_init_coh901571() argument
580 u300_gpio_init_pin(gpio, offset, conf); in u300_gpio_init_coh901571()
617 struct u300_gpio *gpio; in u300_gpio_probe() local
625 gpio = devm_kzalloc(&pdev->dev, sizeof(struct u300_gpio), GFP_KERNEL); in u300_gpio_probe()
626 if (gpio == NULL) in u300_gpio_probe()
629 gpio->chip = u300_gpio_chip; in u300_gpio_probe()
630 gpio->chip.ngpio = U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT; in u300_gpio_probe()
631 gpio->chip.parent = &pdev->dev; in u300_gpio_probe()
632 gpio->chip.base = 0; in u300_gpio_probe()
633 gpio->dev = &pdev->dev; in u300_gpio_probe()
636 gpio->base = devm_ioremap_resource(&pdev->dev, memres); in u300_gpio_probe()
637 if (IS_ERR(gpio->base)) in u300_gpio_probe()
638 return PTR_ERR(gpio->base); in u300_gpio_probe()
640 gpio->clk = devm_clk_get(gpio->dev, NULL); in u300_gpio_probe()
641 if (IS_ERR(gpio->clk)) { in u300_gpio_probe()
642 err = PTR_ERR(gpio->clk); in u300_gpio_probe()
643 dev_err(gpio->dev, "could not get GPIO clock\n"); in u300_gpio_probe()
647 err = clk_prepare_enable(gpio->clk); in u300_gpio_probe()
649 dev_err(gpio->dev, "could not enable GPIO clock\n"); in u300_gpio_probe()
653 dev_info(gpio->dev, in u300_gpio_probe()
655 gpio->stride = U300_GPIO_PORT_STRIDE; in u300_gpio_probe()
656 gpio->pcr = U300_GPIO_PXPCR; in u300_gpio_probe()
657 gpio->dor = U300_GPIO_PXPDOR; in u300_gpio_probe()
658 gpio->dir = U300_GPIO_PXPDIR; in u300_gpio_probe()
659 gpio->per = U300_GPIO_PXPER; in u300_gpio_probe()
660 gpio->icr = U300_GPIO_PXICR; in u300_gpio_probe()
661 gpio->ien = U300_GPIO_PXIEN; in u300_gpio_probe()
662 gpio->iev = U300_GPIO_PXIEV; in u300_gpio_probe()
665 val = readl(gpio->base + U300_GPIO_CR); in u300_gpio_probe()
666 dev_info(gpio->dev, "COH901571/3 block version: %d, " \ in u300_gpio_probe()
672 gpio->base + U300_GPIO_CR); in u300_gpio_probe()
673 u300_gpio_init_coh901571(gpio); in u300_gpio_probe()
676 gpio->chip.of_node = pdev->dev.of_node; in u300_gpio_probe()
678 err = gpiochip_add_data(&gpio->chip, gpio); in u300_gpio_probe()
680 dev_err(gpio->dev, "unable to add gpiochip: %d\n", err); in u300_gpio_probe()
684 err = gpiochip_irqchip_add(&gpio->chip, in u300_gpio_probe()
690 dev_err(gpio->dev, "no GPIO irqchip\n"); in u300_gpio_probe()
696 struct u300_gpio_port *port = &gpio->ports[portno]; in u300_gpio_probe()
700 port->gpio = gpio; in u300_gpio_probe()
704 gpiochip_set_chained_irqchip(&gpio->chip, in u300_gpio_probe()
710 writel(0x0, gpio->base + portno * gpio->stride + ifr); in u300_gpio_probe()
712 dev_dbg(gpio->dev, "initialized %d GPIO ports\n", portno); in u300_gpio_probe()
721 err = gpiochip_add_pin_range(&gpio->chip, "pinctrl-u300", in u300_gpio_probe()
727 platform_set_drvdata(pdev, gpio); in u300_gpio_probe()
733 gpiochip_remove(&gpio->chip); in u300_gpio_probe()
735 clk_disable_unprepare(gpio->clk); in u300_gpio_probe()
742 struct u300_gpio *gpio = platform_get_drvdata(pdev); in u300_gpio_remove() local
745 writel(0x00000000U, gpio->base + U300_GPIO_CR); in u300_gpio_remove()
747 gpiochip_remove(&gpio->chip); in u300_gpio_remove()
748 clk_disable_unprepare(gpio->clk); in u300_gpio_remove()