Lines Matching +full:child +full:- +full:interrupt +full:- +full:base

1 // SPDX-License-Identifier: GPL-2.0
13 #include <linux/interrupt.h>
31 void __iomem *base; member
48 spin_lock_irqsave(&priv->lock, flags); in visconti_gpio_irq_set_type()
50 odata = readl(priv->base + GPIO_ODATA); in visconti_gpio_irq_set_type()
51 intmode = readl(priv->base + GPIO_INTMODE); in visconti_gpio_irq_set_type()
76 ret = -EINVAL; in visconti_gpio_irq_set_type()
80 writel(odata, priv->base + GPIO_ODATA); in visconti_gpio_irq_set_type()
81 writel(intmode, priv->base + GPIO_INTMODE); in visconti_gpio_irq_set_type()
86 spin_unlock_irqrestore(&priv->lock, flags); in visconti_gpio_irq_set_type()
91 unsigned int child, in visconti_gpio_child_to_parent_hwirq() argument
97 if (child < 16) { in visconti_gpio_child_to_parent_hwirq()
100 *parent = child + BASE_HW_IRQ; in visconti_gpio_child_to_parent_hwirq()
103 return -EINVAL; in visconti_gpio_child_to_parent_hwirq()
116 fwspec->fwnode = chip->irq.parent_domain->fwnode; in visconti_gpio_populate_parent_fwspec()
117 fwspec->param_count = 3; in visconti_gpio_populate_parent_fwspec()
118 fwspec->param[0] = 0; in visconti_gpio_populate_parent_fwspec()
119 fwspec->param[1] = parent_hwirq; in visconti_gpio_populate_parent_fwspec()
120 fwspec->param[2] = parent_type; in visconti_gpio_populate_parent_fwspec()
127 struct device *dev = &pdev->dev; in visconti_gpio_probe()
138 return -ENOMEM; in visconti_gpio_probe()
140 spin_lock_init(&priv->lock); in visconti_gpio_probe()
142 priv->base = devm_platform_ioremap_resource(pdev, 0); in visconti_gpio_probe()
143 if (IS_ERR(priv->base)) in visconti_gpio_probe()
144 return PTR_ERR(priv->base); in visconti_gpio_probe()
146 irq_parent = of_irq_find_parent(dev->of_node); in visconti_gpio_probe()
149 return -ENODEV; in visconti_gpio_probe()
155 return -ENODEV; in visconti_gpio_probe()
161 ret = bgpio_init(&priv->gpio_chip, dev, 4, in visconti_gpio_probe()
162 priv->base + GPIO_IDATA, in visconti_gpio_probe()
163 priv->base + GPIO_OSET, in visconti_gpio_probe()
164 priv->base + GPIO_OCLR, in visconti_gpio_probe()
165 priv->base + GPIO_DIR, in visconti_gpio_probe()
173 irq_chip = &priv->irq_chip; in visconti_gpio_probe()
174 irq_chip->name = dev_name(dev); in visconti_gpio_probe()
175 irq_chip->irq_mask = irq_chip_mask_parent; in visconti_gpio_probe()
176 irq_chip->irq_unmask = irq_chip_unmask_parent; in visconti_gpio_probe()
177 irq_chip->irq_eoi = irq_chip_eoi_parent; in visconti_gpio_probe()
178 irq_chip->irq_set_type = visconti_gpio_irq_set_type; in visconti_gpio_probe()
179 irq_chip->flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_MASK_ON_SUSPEND; in visconti_gpio_probe()
181 girq = &priv->gpio_chip.irq; in visconti_gpio_probe()
182 girq->chip = irq_chip; in visconti_gpio_probe()
183 girq->fwnode = fwnode; in visconti_gpio_probe()
184 girq->parent_domain = parent; in visconti_gpio_probe()
185 girq->child_to_parent_hwirq = visconti_gpio_child_to_parent_hwirq; in visconti_gpio_probe()
186 girq->populate_parent_alloc_arg = visconti_gpio_populate_parent_fwspec; in visconti_gpio_probe()
187 girq->default_type = IRQ_TYPE_NONE; in visconti_gpio_probe()
188 girq->handler = handle_level_irq; in visconti_gpio_probe()
190 return devm_gpiochip_add_data(dev, &priv->gpio_chip, priv); in visconti_gpio_probe()
194 { .compatible = "toshiba,gpio-tmpv7708", },