hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/gpio/gpio-mt7621.c
....@@ -227,8 +227,8 @@
227227 ctrl = mtk->base + GPIO_REG_DCLR + (rg->bank * GPIO_BANK_STRIDE);
228228 diro = mtk->base + GPIO_REG_CTRL + (rg->bank * GPIO_BANK_STRIDE);
229229
230
- ret = bgpio_init(&rg->chip, dev, 4,
231
- dat, set, ctrl, diro, NULL, 0);
230
+ ret = bgpio_init(&rg->chip, dev, 4, dat, set, ctrl, diro, NULL,
231
+ BGPIOF_NO_SET_ON_INPUT);
232232 if (ret) {
233233 dev_err(dev, "bgpio_init() failed\n");
234234 return ret;
....@@ -241,13 +241,6 @@
241241 if (!rg->chip.label)
242242 return -ENOMEM;
243243
244
- ret = devm_gpiochip_add_data(dev, &rg->chip, mtk);
245
- if (ret < 0) {
246
- dev_err(dev, "Could not register gpio %d, ret=%d\n",
247
- rg->chip.ngpio, ret);
248
- return ret;
249
- }
250
-
251244 rg->irq_chip.name = dev_name(dev);
252245 rg->irq_chip.parent_device = dev;
253246 rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask;
....@@ -256,10 +249,11 @@
256249 rg->irq_chip.irq_set_type = mediatek_gpio_irq_type;
257250
258251 if (mtk->gpio_irq) {
252
+ struct gpio_irq_chip *girq;
253
+
259254 /*
260
- * Manually request the irq here instead of passing
261
- * a flow-handler to gpiochip_set_chained_irqchip,
262
- * because the irq is shared.
255
+ * Directly request the irq here instead of passing
256
+ * a flow-handler because the irq is shared.
263257 */
264258 ret = devm_request_irq(dev, mtk->gpio_irq,
265259 mediatek_gpio_irq_handler, IRQF_SHARED,
....@@ -271,15 +265,21 @@
271265 return ret;
272266 }
273267
274
- ret = gpiochip_irqchip_add(&rg->chip, &rg->irq_chip,
275
- 0, handle_simple_irq, IRQ_TYPE_NONE);
276
- if (ret) {
277
- dev_err(dev, "failed to add gpiochip_irqchip\n");
278
- return ret;
279
- }
268
+ girq = &rg->chip.irq;
269
+ girq->chip = &rg->irq_chip;
270
+ /* This will let us handle the parent IRQ in the driver */
271
+ girq->parent_handler = NULL;
272
+ girq->num_parents = 0;
273
+ girq->parents = NULL;
274
+ girq->default_type = IRQ_TYPE_NONE;
275
+ girq->handler = handle_simple_irq;
276
+ }
280277
281
- gpiochip_set_chained_irqchip(&rg->chip, &rg->irq_chip,
282
- mtk->gpio_irq, NULL);
278
+ ret = devm_gpiochip_add_data(dev, &rg->chip, mtk);
279
+ if (ret < 0) {
280
+ dev_err(dev, "Could not register gpio %d, ret=%d\n",
281
+ rg->chip.ngpio, ret);
282
+ return ret;
283283 }
284284
285285 /* set polarity to low for all gpios */
....@@ -293,7 +293,6 @@
293293 static int
294294 mediatek_gpio_probe(struct platform_device *pdev)
295295 {
296
- struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
297296 struct device *dev = &pdev->dev;
298297 struct device_node *np = dev->of_node;
299298 struct mtk *mtk;
....@@ -304,7 +303,7 @@
304303 if (!mtk)
305304 return -ENOMEM;
306305
307
- mtk->base = devm_ioremap_resource(dev, res);
306
+ mtk->base = devm_platform_ioremap_resource(pdev, 0);
308307 if (IS_ERR(mtk->base))
309308 return PTR_ERR(mtk->base);
310309