Lines Matching +full:trigger +full:- +full:value
1 // SPDX-License-Identifier: GPL-2.0-only
48 void __iomem *base = rda_gpio->base; in rda_gpio_update()
52 spin_lock_irqsave(&rda_gpio->lock, flags); in rda_gpio_update()
61 spin_unlock_irqrestore(&rda_gpio->lock, flags); in rda_gpio_update()
68 void __iomem *base = rda_gpio->base; in rda_gpio_irq_mask()
70 u32 value; in rda_gpio_irq_mask() local
72 value = BIT(offset) << RDA_GPIO_IRQ_RISE_SHIFT; in rda_gpio_irq_mask()
73 value |= BIT(offset) << RDA_GPIO_IRQ_FALL_SHIFT; in rda_gpio_irq_mask()
75 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_CLR); in rda_gpio_irq_mask()
91 void __iomem *base = rda_gpio->base; in rda_gpio_set_irq()
92 u32 value; in rda_gpio_set_irq() local
96 /* Set rising edge trigger */ in rda_gpio_set_irq()
97 value = BIT(offset) << RDA_GPIO_IRQ_RISE_SHIFT; in rda_gpio_set_irq()
98 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_SET); in rda_gpio_set_irq()
100 /* Switch to edge trigger interrupt */ in rda_gpio_set_irq()
101 value = BIT(offset) << RDA_GPIO_LEVEL_SHIFT; in rda_gpio_set_irq()
102 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_CLR); in rda_gpio_set_irq()
106 /* Set falling edge trigger */ in rda_gpio_set_irq()
107 value = BIT(offset) << RDA_GPIO_IRQ_FALL_SHIFT; in rda_gpio_set_irq()
108 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_SET); in rda_gpio_set_irq()
110 /* Switch to edge trigger interrupt */ in rda_gpio_set_irq()
111 value = BIT(offset) << RDA_GPIO_LEVEL_SHIFT; in rda_gpio_set_irq()
112 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_CLR); in rda_gpio_set_irq()
116 /* Set both edge trigger */ in rda_gpio_set_irq()
117 value = BIT(offset) << RDA_GPIO_IRQ_RISE_SHIFT; in rda_gpio_set_irq()
118 value |= BIT(offset) << RDA_GPIO_IRQ_FALL_SHIFT; in rda_gpio_set_irq()
119 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_SET); in rda_gpio_set_irq()
121 /* Switch to edge trigger interrupt */ in rda_gpio_set_irq()
122 value = BIT(offset) << RDA_GPIO_LEVEL_SHIFT; in rda_gpio_set_irq()
123 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_CLR); in rda_gpio_set_irq()
127 /* Set high level trigger */ in rda_gpio_set_irq()
128 value = BIT(offset) << RDA_GPIO_IRQ_RISE_SHIFT; in rda_gpio_set_irq()
130 /* Switch to level trigger interrupt */ in rda_gpio_set_irq()
131 value |= BIT(offset) << RDA_GPIO_LEVEL_SHIFT; in rda_gpio_set_irq()
132 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_SET); in rda_gpio_set_irq()
136 /* Set low level trigger */ in rda_gpio_set_irq()
137 value = BIT(offset) << RDA_GPIO_IRQ_FALL_SHIFT; in rda_gpio_set_irq()
139 /* Switch to level trigger interrupt */ in rda_gpio_set_irq()
140 value |= BIT(offset) << RDA_GPIO_LEVEL_SHIFT; in rda_gpio_set_irq()
141 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_SET); in rda_gpio_set_irq()
145 return -EINVAL; in rda_gpio_set_irq()
155 u32 trigger = irqd_get_trigger_type(data); in rda_gpio_irq_unmask() local
158 rda_gpio_set_irq(chip, offset, trigger); in rda_gpio_irq_unmask()
189 status = readl_relaxed(rda_gpio->base + RDA_GPIO_INT_STATUS); in rda_gpio_irq_handler()
194 generic_handle_domain_irq(chip->irq.domain, n); in rda_gpio_irq_handler()
200 .name = "rda-gpio",
211 struct device *dev = &pdev->dev; in rda_gpio_probe()
219 return -ENOMEM; in rda_gpio_probe()
230 rda_gpio->irq = platform_get_irq(pdev, 0); in rda_gpio_probe()
232 rda_gpio->base = devm_platform_ioremap_resource(pdev, 0); in rda_gpio_probe()
233 if (IS_ERR(rda_gpio->base)) in rda_gpio_probe()
234 return PTR_ERR(rda_gpio->base); in rda_gpio_probe()
236 spin_lock_init(&rda_gpio->lock); in rda_gpio_probe()
238 ret = bgpio_init(&rda_gpio->chip, dev, 4, in rda_gpio_probe()
239 rda_gpio->base + RDA_GPIO_VAL, in rda_gpio_probe()
240 rda_gpio->base + RDA_GPIO_SET, in rda_gpio_probe()
241 rda_gpio->base + RDA_GPIO_CLR, in rda_gpio_probe()
242 rda_gpio->base + RDA_GPIO_OEN_SET_OUT, in rda_gpio_probe()
243 rda_gpio->base + RDA_GPIO_OEN_SET_IN, in rda_gpio_probe()
250 rda_gpio->chip.label = dev_name(dev); in rda_gpio_probe()
251 rda_gpio->chip.ngpio = ngpios; in rda_gpio_probe()
252 rda_gpio->chip.base = -1; in rda_gpio_probe()
254 if (rda_gpio->irq >= 0) { in rda_gpio_probe()
255 girq = &rda_gpio->chip.irq; in rda_gpio_probe()
257 girq->handler = handle_bad_irq; in rda_gpio_probe()
258 girq->default_type = IRQ_TYPE_NONE; in rda_gpio_probe()
259 girq->parent_handler = rda_gpio_irq_handler; in rda_gpio_probe()
260 girq->parent_handler_data = rda_gpio; in rda_gpio_probe()
261 girq->num_parents = 1; in rda_gpio_probe()
262 girq->parents = devm_kcalloc(dev, 1, in rda_gpio_probe()
263 sizeof(*girq->parents), in rda_gpio_probe()
265 if (!girq->parents) in rda_gpio_probe()
266 return -ENOMEM; in rda_gpio_probe()
267 girq->parents[0] = rda_gpio->irq; in rda_gpio_probe()
272 return devm_gpiochip_add_data(dev, &rda_gpio->chip, rda_gpio); in rda_gpio_probe()
276 { .compatible = "rda,8810pl-gpio", },
284 .name = "rda-gpio",