Lines Matching refs:tgi

31 #define GPIO_REG(tgi, x)	(GPIO_BANK(x) * tgi->soc->bank_stride + \
102 static inline void tegra_gpio_writel(struct tegra_gpio_info *tgi,
105 writel_relaxed(val, tgi->regs + reg);
108 static inline u32 tegra_gpio_readl(struct tegra_gpio_info *tgi, u32 reg)
110 return readl_relaxed(tgi->regs + reg);
119 static void tegra_gpio_mask_write(struct tegra_gpio_info *tgi, u32 reg,
127 tegra_gpio_writel(tgi, val, reg);
130 static void tegra_gpio_enable(struct tegra_gpio_info *tgi, unsigned int gpio)
132 tegra_gpio_mask_write(tgi, GPIO_MSK_CNF(tgi, gpio), gpio, 1);
135 static void tegra_gpio_disable(struct tegra_gpio_info *tgi, unsigned int gpio)
137 tegra_gpio_mask_write(tgi, GPIO_MSK_CNF(tgi, gpio), gpio, 0);
147 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
150 tegra_gpio_disable(tgi, offset);
156 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
158 tegra_gpio_mask_write(tgi, GPIO_MSK_OUT(tgi, offset), offset, value);
163 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
167 if (tegra_gpio_readl(tgi, GPIO_OE(tgi, offset)) & bval)
168 return !!(tegra_gpio_readl(tgi, GPIO_OUT(tgi, offset)) & bval);
170 return !!(tegra_gpio_readl(tgi, GPIO_IN(tgi, offset)) & bval);
176 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
179 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 0);
180 tegra_gpio_enable(tgi, offset);
184 dev_err(tgi->dev,
195 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
199 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 1);
200 tegra_gpio_enable(tgi, offset);
204 dev_err(tgi->dev,
214 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
218 cnf = tegra_gpio_readl(tgi, GPIO_CNF(tgi, offset));
222 oe = tegra_gpio_readl(tgi, GPIO_OE(tgi, offset));
233 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
234 struct tegra_gpio_bank *bank = &tgi->bank_info[GPIO_BANK(offset)];
240 tegra_gpio_mask_write(tgi, GPIO_MSK_DBC_EN(tgi, offset),
253 tegra_gpio_writel(tgi, debounce_ms, GPIO_DBC_CNT(tgi, offset));
258 tegra_gpio_mask_write(tgi, GPIO_MSK_DBC_EN(tgi, offset), offset, 1);
278 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
281 tegra_gpio_writel(tgi, 1 << GPIO_BIT(gpio), GPIO_INT_CLR(tgi, gpio));
287 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
290 tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 0);
297 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
301 tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 1);
308 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
314 bank = &tgi->bank_info[GPIO_BANK(d->hwirq)];
343 val = tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio));
346 tegra_gpio_writel(tgi, val, GPIO_INT_LVL(tgi, gpio));
350 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, gpio), gpio, 0);
351 tegra_gpio_enable(tgi, gpio);
353 ret = gpiochip_lock_as_irq(&tgi->gc, gpio);
355 dev_err(tgi->dev,
357 tegra_gpio_disable(tgi, gpio);
375 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
379 gpiochip_unlock_as_irq(&tgi->gc, gpio);
384 struct tegra_gpio_info *tgi = irq_desc_get_handler_data(desc);
386 struct irq_domain *domain = tgi->gc.irq.domain;
394 for (i = 0; i < tgi->bank_count; i++) {
395 if (tgi->irqs[i] == irq) {
396 bank = &tgi->bank_info[i];
408 sta = tegra_gpio_readl(tgi, GPIO_INT_STA(tgi, gpio)) &
409 tegra_gpio_readl(tgi, GPIO_INT_ENB(tgi, gpio));
410 lvl = tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio));
415 tegra_gpio_writel(tgi, 1 << pin,
416 GPIO_INT_CLR(tgi, gpio));
467 struct tegra_gpio_info *tgi = dev_get_drvdata(dev);
470 for (b = 0; b < tgi->bank_count; b++) {
471 struct tegra_gpio_bank *bank = &tgi->bank_info[b];
476 tegra_gpio_writel(tgi, bank->cnf[p],
477 GPIO_CNF(tgi, gpio));
479 if (tgi->soc->debounce_supported) {
480 tegra_gpio_writel(tgi, bank->dbc_cnt[p],
481 GPIO_DBC_CNT(tgi, gpio));
482 tegra_gpio_writel(tgi, bank->dbc_enb[p],
483 GPIO_MSK_DBC_EN(tgi, gpio));
486 tegra_gpio_writel(tgi, bank->out[p],
487 GPIO_OUT(tgi, gpio));
488 tegra_gpio_writel(tgi, bank->oe[p],
489 GPIO_OE(tgi, gpio));
490 tegra_gpio_writel(tgi, bank->int_lvl[p],
491 GPIO_INT_LVL(tgi, gpio));
492 tegra_gpio_writel(tgi, bank->int_enb[p],
493 GPIO_INT_ENB(tgi, gpio));
502 struct tegra_gpio_info *tgi = dev_get_drvdata(dev);
505 for (b = 0; b < tgi->bank_count; b++) {
506 struct tegra_gpio_bank *bank = &tgi->bank_info[b];
511 bank->cnf[p] = tegra_gpio_readl(tgi,
512 GPIO_CNF(tgi, gpio));
513 bank->out[p] = tegra_gpio_readl(tgi,
514 GPIO_OUT(tgi, gpio));
515 bank->oe[p] = tegra_gpio_readl(tgi,
516 GPIO_OE(tgi, gpio));
517 if (tgi->soc->debounce_supported) {
518 bank->dbc_enb[p] = tegra_gpio_readl(tgi,
519 GPIO_MSK_DBC_EN(tgi, gpio));
524 bank->int_enb[p] = tegra_gpio_readl(tgi,
525 GPIO_INT_ENB(tgi, gpio));
526 bank->int_lvl[p] = tegra_gpio_readl(tgi,
527 GPIO_INT_LVL(tgi, gpio));
530 tegra_gpio_writel(tgi, bank->wake_enb[p],
531 GPIO_INT_ENB(tgi, gpio));
541 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
547 bank = &tgi->bank_info[GPIO_BANK(d->hwirq)];
553 err = irq_set_irq_wake(tgi->irqs[bank->bank], enable);
560 irq_set_irq_wake(tgi->irqs[bank->bank], !enable);
587 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
589 tegra_gpio_enable(tgi, d->hwirq);
597 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
600 tegra_gpio_enable(tgi, d->hwirq);
647 struct tegra_gpio_info *tgi = dev_get_drvdata(s->private);
650 for (i = 0; i < tgi->bank_count; i++) {
657 tegra_gpio_readl(tgi, GPIO_CNF(tgi, gpio)),
658 tegra_gpio_readl(tgi, GPIO_OE(tgi, gpio)),
659 tegra_gpio_readl(tgi, GPIO_OUT(tgi, gpio)),
660 tegra_gpio_readl(tgi, GPIO_IN(tgi, gpio)),
661 tegra_gpio_readl(tgi, GPIO_INT_STA(tgi, gpio)),
662 tegra_gpio_readl(tgi, GPIO_INT_ENB(tgi, gpio)),
663 tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio)));
669 static void tegra_gpio_debuginit(struct tegra_gpio_info *tgi)
671 debugfs_create_devm_seqfile(tgi->dev, "tegra_gpio", NULL,
677 static inline void tegra_gpio_debuginit(struct tegra_gpio_info *tgi)
695 struct tegra_gpio_info *tgi;
701 tgi = devm_kzalloc(&pdev->dev, sizeof(*tgi), GFP_KERNEL);
702 if (!tgi)
705 tgi->soc = of_device_get_match_data(&pdev->dev);
706 tgi->dev = &pdev->dev;
712 tgi->bank_count = ret;
714 if (!tgi->bank_count) {
719 tgi->gc.label = "tegra-gpio";
720 tgi->gc.request = tegra_gpio_request;
721 tgi->gc.free = tegra_gpio_free;
722 tgi->gc.direction_input = tegra_gpio_direction_input;
723 tgi->gc.get = tegra_gpio_get;
724 tgi->gc.direction_output = tegra_gpio_direction_output;
725 tgi->gc.set = tegra_gpio_set;
726 tgi->gc.get_direction = tegra_gpio_get_direction;
727 tgi->gc.base = 0;
728 tgi->gc.ngpio = tgi->bank_count * 32;
729 tgi->gc.parent = &pdev->dev;
731 platform_set_drvdata(pdev, tgi);
733 if (tgi->soc->debounce_supported)
734 tgi->gc.set_config = tegra_gpio_set_config;
736 tgi->bank_info = devm_kcalloc(&pdev->dev, tgi->bank_count,
737 sizeof(*tgi->bank_info), GFP_KERNEL);
738 if (!tgi->bank_info)
741 tgi->irqs = devm_kcalloc(&pdev->dev, tgi->bank_count,
742 sizeof(*tgi->irqs), GFP_KERNEL);
743 if (!tgi->irqs)
746 for (i = 0; i < tgi->bank_count; i++) {
751 bank = &tgi->bank_info[i];
754 tgi->irqs[i] = ret;
762 irq = &tgi->gc.irq;
769 irq->parent_handler_data = tgi;
770 irq->num_parents = tgi->bank_count;
771 irq->parents = tgi->irqs;
786 tgi->regs = devm_platform_ioremap_resource(pdev, 0);
787 if (IS_ERR(tgi->regs))
788 return PTR_ERR(tgi->regs);
790 for (i = 0; i < tgi->bank_count; i++) {
794 tegra_gpio_writel(tgi, 0x00, GPIO_INT_ENB(tgi, gpio));
798 ret = devm_gpiochip_add_data(&pdev->dev, &tgi->gc, tgi);
802 tegra_gpio_debuginit(tgi);