.. | .. |
---|
227 | 227 | ctrl = mtk->base + GPIO_REG_DCLR + (rg->bank * GPIO_BANK_STRIDE); |
---|
228 | 228 | diro = mtk->base + GPIO_REG_CTRL + (rg->bank * GPIO_BANK_STRIDE); |
---|
229 | 229 | |
---|
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); |
---|
232 | 232 | if (ret) { |
---|
233 | 233 | dev_err(dev, "bgpio_init() failed\n"); |
---|
234 | 234 | return ret; |
---|
.. | .. |
---|
241 | 241 | if (!rg->chip.label) |
---|
242 | 242 | return -ENOMEM; |
---|
243 | 243 | |
---|
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 | | - |
---|
251 | 244 | rg->irq_chip.name = dev_name(dev); |
---|
252 | 245 | rg->irq_chip.parent_device = dev; |
---|
253 | 246 | rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask; |
---|
.. | .. |
---|
256 | 249 | rg->irq_chip.irq_set_type = mediatek_gpio_irq_type; |
---|
257 | 250 | |
---|
258 | 251 | if (mtk->gpio_irq) { |
---|
| 252 | + struct gpio_irq_chip *girq; |
---|
| 253 | + |
---|
259 | 254 | /* |
---|
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. |
---|
263 | 257 | */ |
---|
264 | 258 | ret = devm_request_irq(dev, mtk->gpio_irq, |
---|
265 | 259 | mediatek_gpio_irq_handler, IRQF_SHARED, |
---|
.. | .. |
---|
271 | 265 | return ret; |
---|
272 | 266 | } |
---|
273 | 267 | |
---|
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 | + } |
---|
280 | 277 | |
---|
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; |
---|
283 | 283 | } |
---|
284 | 284 | |
---|
285 | 285 | /* set polarity to low for all gpios */ |
---|
.. | .. |
---|
293 | 293 | static int |
---|
294 | 294 | mediatek_gpio_probe(struct platform_device *pdev) |
---|
295 | 295 | { |
---|
296 | | - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
---|
297 | 296 | struct device *dev = &pdev->dev; |
---|
298 | 297 | struct device_node *np = dev->of_node; |
---|
299 | 298 | struct mtk *mtk; |
---|
.. | .. |
---|
304 | 303 | if (!mtk) |
---|
305 | 304 | return -ENOMEM; |
---|
306 | 305 | |
---|
307 | | - mtk->base = devm_ioremap_resource(dev, res); |
---|
| 306 | + mtk->base = devm_platform_ioremap_resource(pdev, 0); |
---|
308 | 307 | if (IS_ERR(mtk->base)) |
---|
309 | 308 | return PTR_ERR(mtk->base); |
---|
310 | 309 | |
---|