Lines Matching +full:gpio +full:- +full:tmpv7708

1 // SPDX-License-Identifier: GPL-2.0
3 * Toshiba Visconti GPIO Support
11 #include <linux/gpio/driver.h>
33 spinlock_t lock; /* protect gpio register */
49 spin_lock_irqsave(&priv->lock, flags); in visconti_gpio_irq_set_type()
51 odata = readl(priv->base + GPIO_ODATA); in visconti_gpio_irq_set_type()
52 intmode = readl(priv->base + GPIO_INTMODE); in visconti_gpio_irq_set_type()
77 ret = -EINVAL; in visconti_gpio_irq_set_type()
81 writel(odata, priv->base + GPIO_ODATA); in visconti_gpio_irq_set_type()
82 writel(intmode, priv->base + GPIO_INTMODE); in visconti_gpio_irq_set_type()
87 spin_unlock_irqrestore(&priv->lock, flags); in visconti_gpio_irq_set_type()
104 return -EINVAL; in visconti_gpio_child_to_parent_hwirq()
112 struct irq_fwspec *fwspec = &gfwspec->fwspec; in visconti_gpio_populate_parent_fwspec()
114 fwspec->fwnode = chip->irq.parent_domain->fwnode; in visconti_gpio_populate_parent_fwspec()
115 fwspec->param_count = 3; in visconti_gpio_populate_parent_fwspec()
116 fwspec->param[0] = 0; in visconti_gpio_populate_parent_fwspec()
117 fwspec->param[1] = parent_hwirq; in visconti_gpio_populate_parent_fwspec()
118 fwspec->param[2] = parent_type; in visconti_gpio_populate_parent_fwspec()
144 seq_printf(p, dev_name(priv->dev)); in visconti_gpio_irq_print_chip()
160 struct device *dev = &pdev->dev; in visconti_gpio_probe()
169 return -ENOMEM; in visconti_gpio_probe()
171 spin_lock_init(&priv->lock); in visconti_gpio_probe()
172 priv->dev = dev; in visconti_gpio_probe()
174 priv->base = devm_platform_ioremap_resource(pdev, 0); in visconti_gpio_probe()
175 if (IS_ERR(priv->base)) in visconti_gpio_probe()
176 return PTR_ERR(priv->base); in visconti_gpio_probe()
178 irq_parent = of_irq_find_parent(dev->of_node); in visconti_gpio_probe()
181 return -ENODEV; in visconti_gpio_probe()
188 return -ENODEV; in visconti_gpio_probe()
191 ret = bgpio_init(&priv->gpio_chip, dev, 4, in visconti_gpio_probe()
192 priv->base + GPIO_IDATA, in visconti_gpio_probe()
193 priv->base + GPIO_OSET, in visconti_gpio_probe()
194 priv->base + GPIO_OCLR, in visconti_gpio_probe()
195 priv->base + GPIO_DIR, in visconti_gpio_probe()
199 dev_err(dev, "unable to init generic GPIO\n"); in visconti_gpio_probe()
203 girq = &priv->gpio_chip.irq; in visconti_gpio_probe()
205 girq->fwnode = of_node_to_fwnode(dev->of_node); in visconti_gpio_probe()
206 girq->parent_domain = parent; in visconti_gpio_probe()
207 girq->child_to_parent_hwirq = visconti_gpio_child_to_parent_hwirq; in visconti_gpio_probe()
208 girq->populate_parent_alloc_arg = visconti_gpio_populate_parent_fwspec; in visconti_gpio_probe()
209 girq->default_type = IRQ_TYPE_NONE; in visconti_gpio_probe()
210 girq->handler = handle_level_irq; in visconti_gpio_probe()
212 return devm_gpiochip_add_data(dev, &priv->gpio_chip, priv); in visconti_gpio_probe()
216 { .compatible = "toshiba,gpio-tmpv7708", },
231 MODULE_DESCRIPTION("Toshiba Visconti GPIO Driver");