Loading drivers/gpio/gpio-dwapb.c +14 −39 Original line number Diff line number Diff line Loading @@ -469,15 +469,13 @@ dwapb_gpio_get_pdata_of(struct device *dev) if (nports == 0) return ERR_PTR(-ENODEV); pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return ERR_PTR(-ENOMEM); pdata->properties = kcalloc(nports, sizeof(*pp), GFP_KERNEL); if (!pdata->properties) { kfree(pdata); pdata->properties = devm_kcalloc(dev, nports, sizeof(*pp), GFP_KERNEL); if (!pdata->properties) return ERR_PTR(-ENOMEM); } pdata->nports = nports; Loading @@ -490,8 +488,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) pp->idx >= DWAPB_MAX_PORTS) { dev_err(dev, "missing/invalid port index for %s\n", port_np->full_name); kfree(pdata->properties); kfree(pdata); return ERR_PTR(-EINVAL); } Loading Loading @@ -523,15 +519,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) return pdata; } static inline void dwapb_free_pdata_of(struct dwapb_platform_data *pdata) { if (!IS_ENABLED(CONFIG_OF_GPIO) || !pdata) return; kfree(pdata->properties); kfree(pdata); } static int dwapb_gpio_probe(struct platform_device *pdev) { unsigned int i; Loading @@ -540,40 +527,32 @@ static int dwapb_gpio_probe(struct platform_device *pdev) int err; struct device *dev = &pdev->dev; struct dwapb_platform_data *pdata = dev_get_platdata(dev); bool is_pdata_alloc = !pdata; if (is_pdata_alloc) { if (!pdata) { pdata = dwapb_gpio_get_pdata_of(dev); if (IS_ERR(pdata)) return PTR_ERR(pdata); } if (!pdata->nports) { err = -ENODEV; goto out_err; } if (!pdata->nports) return -ENODEV; gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); if (!gpio) { err = -ENOMEM; goto out_err; } if (!gpio) return -ENOMEM; gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; gpio->ports = devm_kcalloc(&pdev->dev, gpio->nr_ports, sizeof(*gpio->ports), GFP_KERNEL); if (!gpio->ports) { err = -ENOMEM; goto out_err; } if (!gpio->ports) return -ENOMEM; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); gpio->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(gpio->regs)) { err = PTR_ERR(gpio->regs); goto out_err; } if (IS_ERR(gpio->regs)) return PTR_ERR(gpio->regs); for (i = 0; i < gpio->nr_ports; i++) { err = dwapb_gpio_add_port(gpio, &pdata->properties[i], i); Loading @@ -582,16 +561,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, gpio); goto out_err; return 0; out_unregister: dwapb_gpio_unregister(gpio); dwapb_irq_teardown(gpio); out_err: if (is_pdata_alloc) dwapb_free_pdata_of(pdata); return err; } Loading Loading
drivers/gpio/gpio-dwapb.c +14 −39 Original line number Diff line number Diff line Loading @@ -469,15 +469,13 @@ dwapb_gpio_get_pdata_of(struct device *dev) if (nports == 0) return ERR_PTR(-ENODEV); pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return ERR_PTR(-ENOMEM); pdata->properties = kcalloc(nports, sizeof(*pp), GFP_KERNEL); if (!pdata->properties) { kfree(pdata); pdata->properties = devm_kcalloc(dev, nports, sizeof(*pp), GFP_KERNEL); if (!pdata->properties) return ERR_PTR(-ENOMEM); } pdata->nports = nports; Loading @@ -490,8 +488,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) pp->idx >= DWAPB_MAX_PORTS) { dev_err(dev, "missing/invalid port index for %s\n", port_np->full_name); kfree(pdata->properties); kfree(pdata); return ERR_PTR(-EINVAL); } Loading Loading @@ -523,15 +519,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) return pdata; } static inline void dwapb_free_pdata_of(struct dwapb_platform_data *pdata) { if (!IS_ENABLED(CONFIG_OF_GPIO) || !pdata) return; kfree(pdata->properties); kfree(pdata); } static int dwapb_gpio_probe(struct platform_device *pdev) { unsigned int i; Loading @@ -540,40 +527,32 @@ static int dwapb_gpio_probe(struct platform_device *pdev) int err; struct device *dev = &pdev->dev; struct dwapb_platform_data *pdata = dev_get_platdata(dev); bool is_pdata_alloc = !pdata; if (is_pdata_alloc) { if (!pdata) { pdata = dwapb_gpio_get_pdata_of(dev); if (IS_ERR(pdata)) return PTR_ERR(pdata); } if (!pdata->nports) { err = -ENODEV; goto out_err; } if (!pdata->nports) return -ENODEV; gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); if (!gpio) { err = -ENOMEM; goto out_err; } if (!gpio) return -ENOMEM; gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; gpio->ports = devm_kcalloc(&pdev->dev, gpio->nr_ports, sizeof(*gpio->ports), GFP_KERNEL); if (!gpio->ports) { err = -ENOMEM; goto out_err; } if (!gpio->ports) return -ENOMEM; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); gpio->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(gpio->regs)) { err = PTR_ERR(gpio->regs); goto out_err; } if (IS_ERR(gpio->regs)) return PTR_ERR(gpio->regs); for (i = 0; i < gpio->nr_ports; i++) { err = dwapb_gpio_add_port(gpio, &pdata->properties[i], i); Loading @@ -582,16 +561,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, gpio); goto out_err; return 0; out_unregister: dwapb_gpio_unregister(gpio); dwapb_irq_teardown(gpio); out_err: if (is_pdata_alloc) dwapb_free_pdata_of(pdata); return err; } Loading