| .. | .. |
|---|
| 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 | |
|---|