Lines Matching refs:gpio
62 struct gpio_chip gpio; member
73 tegra186_gpio_get_port(struct tegra_gpio *gpio, unsigned int *pin) in tegra186_gpio_get_port() argument
77 for (i = 0; i < gpio->soc->num_ports; i++) { in tegra186_gpio_get_port()
78 const struct tegra_gpio_port *port = &gpio->soc->ports[i]; in tegra186_gpio_get_port()
91 static void __iomem *tegra186_gpio_get_base(struct tegra_gpio *gpio, in tegra186_gpio_get_base() argument
96 port = tegra186_gpio_get_port(gpio, &pin); in tegra186_gpio_get_base()
100 return gpio->base + port->offset + pin * 0x20; in tegra186_gpio_get_base()
106 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_get_direction() local
110 base = tegra186_gpio_get_base(gpio, offset); in tegra186_gpio_get_direction()
124 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_direction_input() local
128 base = tegra186_gpio_get_base(gpio, offset); in tegra186_gpio_direction_input()
147 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_direction_output() local
154 base = tegra186_gpio_get_base(gpio, offset); in tegra186_gpio_direction_output()
173 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_get() local
177 base = tegra186_gpio_get_base(gpio, offset); in tegra186_gpio_get()
193 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_set() local
197 base = tegra186_gpio_get_base(gpio, offset); in tegra186_gpio_set()
214 struct tegra_gpio *gpio = gpiochip_get_data(chip); in tegra186_gpio_of_xlate() local
226 if (port >= gpio->soc->num_ports) { in tegra186_gpio_of_xlate()
232 offset += gpio->soc->ports[i].pins; in tegra186_gpio_of_xlate()
242 struct tegra_gpio *gpio = irq_data_get_irq_chip_data(data); in tegra186_irq_ack() local
245 base = tegra186_gpio_get_base(gpio, data->hwirq); in tegra186_irq_ack()
254 struct tegra_gpio *gpio = irq_data_get_irq_chip_data(data); in tegra186_irq_mask() local
258 base = tegra186_gpio_get_base(gpio, data->hwirq); in tegra186_irq_mask()
269 struct tegra_gpio *gpio = irq_data_get_irq_chip_data(data); in tegra186_irq_unmask() local
273 base = tegra186_gpio_get_base(gpio, data->hwirq); in tegra186_irq_unmask()
284 struct tegra_gpio *gpio = irq_data_get_irq_chip_data(data); in tegra186_irq_set_type() local
288 base = tegra186_gpio_get_base(gpio, data->hwirq); in tegra186_irq_set_type()
338 struct tegra_gpio *gpio = irq_desc_get_handler_data(desc); in tegra186_gpio_irq() local
339 struct irq_domain *domain = gpio->gpio.irq.domain; in tegra186_gpio_irq()
346 for (i = 0; i < gpio->soc->num_ports; i++) { in tegra186_gpio_irq()
347 const struct tegra_gpio_port *port = &gpio->soc->ports[i]; in tegra186_gpio_irq()
348 void __iomem *base = gpio->base + port->offset; in tegra186_gpio_irq()
353 if (parent != gpio->irq[port->irq]) in tegra186_gpio_irq()
379 struct tegra_gpio *gpio = gpiochip_get_data(domain->host_data); in tegra186_gpio_irq_domain_xlate() local
388 if (port >= gpio->soc->num_ports) { in tegra186_gpio_irq_domain_xlate()
389 dev_err(gpio->gpio.parent, "invalid port number: %u\n", port); in tegra186_gpio_irq_domain_xlate()
394 offset += gpio->soc->ports[i].pins; in tegra186_gpio_irq_domain_xlate()
412 struct tegra_gpio *gpio; in tegra186_gpio_probe() local
417 gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); in tegra186_gpio_probe()
418 if (!gpio) in tegra186_gpio_probe()
421 gpio->soc = of_device_get_match_data(&pdev->dev); in tegra186_gpio_probe()
424 gpio->base = devm_ioremap_resource(&pdev->dev, res); in tegra186_gpio_probe()
425 if (IS_ERR(gpio->base)) in tegra186_gpio_probe()
426 return PTR_ERR(gpio->base); in tegra186_gpio_probe()
432 gpio->num_irq = err; in tegra186_gpio_probe()
434 gpio->irq = devm_kcalloc(&pdev->dev, gpio->num_irq, sizeof(*gpio->irq), in tegra186_gpio_probe()
436 if (!gpio->irq) in tegra186_gpio_probe()
439 for (i = 0; i < gpio->num_irq; i++) { in tegra186_gpio_probe()
444 gpio->irq[i] = err; in tegra186_gpio_probe()
447 gpio->gpio.label = gpio->soc->name; in tegra186_gpio_probe()
448 gpio->gpio.parent = &pdev->dev; in tegra186_gpio_probe()
450 gpio->gpio.get_direction = tegra186_gpio_get_direction; in tegra186_gpio_probe()
451 gpio->gpio.direction_input = tegra186_gpio_direction_input; in tegra186_gpio_probe()
452 gpio->gpio.direction_output = tegra186_gpio_direction_output; in tegra186_gpio_probe()
453 gpio->gpio.get = tegra186_gpio_get, in tegra186_gpio_probe()
454 gpio->gpio.set = tegra186_gpio_set; in tegra186_gpio_probe()
456 gpio->gpio.base = -1; in tegra186_gpio_probe()
458 for (i = 0; i < gpio->soc->num_ports; i++) in tegra186_gpio_probe()
459 gpio->gpio.ngpio += gpio->soc->ports[i].pins; in tegra186_gpio_probe()
461 names = devm_kcalloc(gpio->gpio.parent, gpio->gpio.ngpio, in tegra186_gpio_probe()
466 for (i = 0, offset = 0; i < gpio->soc->num_ports; i++) { in tegra186_gpio_probe()
467 const struct tegra_gpio_port *port = &gpio->soc->ports[i]; in tegra186_gpio_probe()
471 name = devm_kasprintf(gpio->gpio.parent, GFP_KERNEL, in tegra186_gpio_probe()
482 gpio->gpio.names = (const char * const *)names; in tegra186_gpio_probe()
484 gpio->gpio.of_node = pdev->dev.of_node; in tegra186_gpio_probe()
485 gpio->gpio.of_gpio_n_cells = 2; in tegra186_gpio_probe()
486 gpio->gpio.of_xlate = tegra186_gpio_of_xlate; in tegra186_gpio_probe()
488 gpio->intc.name = pdev->dev.of_node->name; in tegra186_gpio_probe()
489 gpio->intc.irq_ack = tegra186_irq_ack; in tegra186_gpio_probe()
490 gpio->intc.irq_mask = tegra186_irq_mask; in tegra186_gpio_probe()
491 gpio->intc.irq_unmask = tegra186_irq_unmask; in tegra186_gpio_probe()
492 gpio->intc.irq_set_type = tegra186_irq_set_type; in tegra186_gpio_probe()
494 irq = &gpio->gpio.irq; in tegra186_gpio_probe()
495 irq->chip = &gpio->intc; in tegra186_gpio_probe()
500 irq->parent_handler_data = gpio; in tegra186_gpio_probe()
501 irq->num_parents = gpio->num_irq; in tegra186_gpio_probe()
502 irq->parents = gpio->irq; in tegra186_gpio_probe()
504 irq->map = devm_kcalloc(&pdev->dev, gpio->gpio.ngpio, in tegra186_gpio_probe()
509 for (i = 0, offset = 0; i < gpio->soc->num_ports; i++) { in tegra186_gpio_probe()
510 const struct tegra_gpio_port *port = &gpio->soc->ports[i]; in tegra186_gpio_probe()
518 platform_set_drvdata(pdev, gpio); in tegra186_gpio_probe()
520 err = devm_gpiochip_add_data(&pdev->dev, &gpio->gpio, gpio); in tegra186_gpio_probe()