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);
142 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
145 tegra_gpio_disable(tgi, offset);
151 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
153 tegra_gpio_mask_write(tgi, GPIO_MSK_OUT(tgi, offset), offset, value);
158 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
162 if (tegra_gpio_readl(tgi, GPIO_OE(tgi, offset)) & bval)
163 return !!(tegra_gpio_readl(tgi, GPIO_OUT(tgi, offset)) & bval);
165 return !!(tegra_gpio_readl(tgi, GPIO_IN(tgi, offset)) & bval);
171 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
174 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 0);
175 tegra_gpio_enable(tgi, offset);
179 dev_err(tgi->dev,
190 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
194 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, offset), offset, 1);
195 tegra_gpio_enable(tgi, offset);
199 dev_err(tgi->dev,
209 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
213 cnf = tegra_gpio_readl(tgi, GPIO_CNF(tgi, offset));
217 oe = tegra_gpio_readl(tgi, GPIO_OE(tgi, offset));
228 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
229 struct tegra_gpio_bank *bank = &tgi->bank_info[GPIO_BANK(offset)];
235 tegra_gpio_mask_write(tgi, GPIO_MSK_DBC_EN(tgi, offset),
248 tegra_gpio_writel(tgi, debounce_ms, GPIO_DBC_CNT(tgi, offset));
253 tegra_gpio_mask_write(tgi, GPIO_MSK_DBC_EN(tgi, offset), offset, 1);
273 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
276 tegra_gpio_writel(tgi, 1 << GPIO_BIT(gpio), GPIO_INT_CLR(tgi, gpio));
282 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
285 tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 0);
292 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
296 tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 1);
303 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
309 bank = &tgi->bank_info[GPIO_BANK(d->hwirq)];
338 val = tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio));
341 tegra_gpio_writel(tgi, val, GPIO_INT_LVL(tgi, gpio));
345 tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, gpio), gpio, 0);
346 tegra_gpio_enable(tgi, gpio);
348 ret = gpiochip_lock_as_irq(&tgi->gc, gpio);
350 dev_err(tgi->dev,
352 tegra_gpio_disable(tgi, gpio);
370 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
374 gpiochip_unlock_as_irq(&tgi->gc, gpio);
379 struct tegra_gpio_info *tgi = irq_desc_get_handler_data(desc);
381 struct irq_domain *domain = tgi->gc.irq.domain;
389 for (i = 0; i < tgi->bank_count; i++) {
390 if (tgi->irqs[i] == irq) {
391 bank = &tgi->bank_info[i];
403 sta = tegra_gpio_readl(tgi, GPIO_INT_STA(tgi, gpio)) &
404 tegra_gpio_readl(tgi, GPIO_INT_ENB(tgi, gpio));
405 lvl = tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio));
410 tegra_gpio_writel(tgi, 1 << pin,
411 GPIO_INT_CLR(tgi, gpio));
462 struct tegra_gpio_info *tgi = dev_get_drvdata(dev);
465 for (b = 0; b < tgi->bank_count; b++) {
466 struct tegra_gpio_bank *bank = &tgi->bank_info[b];
471 tegra_gpio_writel(tgi, bank->cnf[p],
472 GPIO_CNF(tgi, gpio));
474 if (tgi->soc->debounce_supported) {
475 tegra_gpio_writel(tgi, bank->dbc_cnt[p],
476 GPIO_DBC_CNT(tgi, gpio));
477 tegra_gpio_writel(tgi, bank->dbc_enb[p],
478 GPIO_MSK_DBC_EN(tgi, gpio));
481 tegra_gpio_writel(tgi, bank->out[p],
482 GPIO_OUT(tgi, gpio));
483 tegra_gpio_writel(tgi, bank->oe[p],
484 GPIO_OE(tgi, gpio));
485 tegra_gpio_writel(tgi, bank->int_lvl[p],
486 GPIO_INT_LVL(tgi, gpio));
487 tegra_gpio_writel(tgi, bank->int_enb[p],
488 GPIO_INT_ENB(tgi, gpio));
497 struct tegra_gpio_info *tgi = dev_get_drvdata(dev);
500 for (b = 0; b < tgi->bank_count; b++) {
501 struct tegra_gpio_bank *bank = &tgi->bank_info[b];
506 bank->cnf[p] = tegra_gpio_readl(tgi,
507 GPIO_CNF(tgi, gpio));
508 bank->out[p] = tegra_gpio_readl(tgi,
509 GPIO_OUT(tgi, gpio));
510 bank->oe[p] = tegra_gpio_readl(tgi,
511 GPIO_OE(tgi, gpio));
512 if (tgi->soc->debounce_supported) {
513 bank->dbc_enb[p] = tegra_gpio_readl(tgi,
514 GPIO_MSK_DBC_EN(tgi, gpio));
519 bank->int_enb[p] = tegra_gpio_readl(tgi,
520 GPIO_INT_ENB(tgi, gpio));
521 bank->int_lvl[p] = tegra_gpio_readl(tgi,
522 GPIO_INT_LVL(tgi, gpio));
525 tegra_gpio_writel(tgi, bank->wake_enb[p],
526 GPIO_INT_ENB(tgi, gpio));
536 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
542 bank = &tgi->bank_info[GPIO_BANK(d->hwirq)];
548 err = irq_set_irq_wake(tgi->irqs[bank->bank], enable);
555 irq_set_irq_wake(tgi->irqs[bank->bank], !enable);
582 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
584 tegra_gpio_enable(tgi, d->hwirq);
592 struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
595 tegra_gpio_enable(tgi, d->hwirq);
642 struct tegra_gpio_info *tgi = dev_get_drvdata(s->private);
645 for (i = 0; i < tgi->bank_count; i++) {
652 tegra_gpio_readl(tgi, GPIO_CNF(tgi, gpio)),
653 tegra_gpio_readl(tgi, GPIO_OE(tgi, gpio)),
654 tegra_gpio_readl(tgi, GPIO_OUT(tgi, gpio)),
655 tegra_gpio_readl(tgi, GPIO_IN(tgi, gpio)),
656 tegra_gpio_readl(tgi, GPIO_INT_STA(tgi, gpio)),
657 tegra_gpio_readl(tgi, GPIO_INT_ENB(tgi, gpio)),
658 tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio)));
664 static void tegra_gpio_debuginit(struct tegra_gpio_info *tgi)
666 debugfs_create_devm_seqfile(tgi->dev, "tegra_gpio", NULL,
672 static inline void tegra_gpio_debuginit(struct tegra_gpio_info *tgi)
690 struct tegra_gpio_info *tgi;
696 tgi = devm_kzalloc(&pdev->dev, sizeof(*tgi), GFP_KERNEL);
697 if (!tgi)
700 tgi->soc = of_device_get_match_data(&pdev->dev);
701 tgi->dev = &pdev->dev;
707 tgi->bank_count = ret;
709 if (!tgi->bank_count) {
714 tgi->gc.label = "tegra-gpio";
715 tgi->gc.request = pinctrl_gpio_request;
716 tgi->gc.free = tegra_gpio_free;
717 tgi->gc.direction_input = tegra_gpio_direction_input;
718 tgi->gc.get = tegra_gpio_get;
719 tgi->gc.direction_output = tegra_gpio_direction_output;
720 tgi->gc.set = tegra_gpio_set;
721 tgi->gc.get_direction = tegra_gpio_get_direction;
722 tgi->gc.base = 0;
723 tgi->gc.ngpio = tgi->bank_count * 32;
724 tgi->gc.parent = &pdev->dev;
726 platform_set_drvdata(pdev, tgi);
728 if (tgi->soc->debounce_supported)
729 tgi->gc.set_config = tegra_gpio_set_config;
731 tgi->bank_info = devm_kcalloc(&pdev->dev, tgi->bank_count,
732 sizeof(*tgi->bank_info), GFP_KERNEL);
733 if (!tgi->bank_info)
736 tgi->irqs = devm_kcalloc(&pdev->dev, tgi->bank_count,
737 sizeof(*tgi->irqs), GFP_KERNEL);
738 if (!tgi->irqs)
741 for (i = 0; i < tgi->bank_count; i++) {
746 bank = &tgi->bank_info[i];
749 tgi->irqs[i] = ret;
757 irq = &tgi->gc.irq;
764 irq->parent_handler_data = tgi;
765 irq->num_parents = tgi->bank_count;
766 irq->parents = tgi->irqs;
781 tgi->regs = devm_platform_ioremap_resource(pdev, 0);
782 if (IS_ERR(tgi->regs))
783 return PTR_ERR(tgi->regs);
785 for (i = 0; i < tgi->bank_count; i++) {
789 tegra_gpio_writel(tgi, 0x00, GPIO_INT_ENB(tgi, gpio));
793 ret = devm_gpiochip_add_data(&pdev->dev, &tgi->gc, tgi);
797 tegra_gpio_debuginit(tgi);