diff mbox

pinctrl: sirf: atlas7: Initialize GPIO offset

Message ID 20170720170107.14612-1-thierry.reding@gmail.com
State New
Headers show

Commit Message

Thierry Reding July 20, 2017, 5:01 p.m. UTC
From: Thierry Reding <treding@nvidia.com>

The GPIO offset is never initialized, which means that it will end up
being zero as per the devm_kzalloc() of the parent structure.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
I have no idea how the driver could've ever worked for anything other
than instances with a single bank, but maybe it did and I missed some
detail.

 drivers/pinctrl/sirf/pinctrl-atlas7.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Thierry Reding July 31, 2017, 10:58 a.m. UTC | #1
On Thu, Jul 20, 2017 at 07:01:07PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> The GPIO offset is never initialized, which means that it will end up
> being zero as per the devm_kzalloc() of the parent structure.
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
> I have no idea how the driver could've ever worked for anything other
> than instances with a single bank, but maybe it did and I missed some
> detail.
> 
>  drivers/pinctrl/sirf/pinctrl-atlas7.c | 1 +
>  1 file changed, 1 insertion(+)

Any comments on this one?

Thierry

> 
> diff --git a/drivers/pinctrl/sirf/pinctrl-atlas7.c b/drivers/pinctrl/sirf/pinctrl-atlas7.c
> index 36b5c8d5471e..a2ca4a9472c7 100644
> --- a/drivers/pinctrl/sirf/pinctrl-atlas7.c
> +++ b/drivers/pinctrl/sirf/pinctrl-atlas7.c
> @@ -6078,6 +6078,7 @@ static int atlas7_gpio_probe(struct platform_device *pdev)
>  		bank = &a7gc->banks[idx];
>  		/* Set ctrl registers' base of this bank */
>  		bank->base = ATLAS7_GPIO_BASE(a7gc, idx);
> +		bank->gpio_offset = idx * NGPIO_OF_BANK;
>  
>  		/* Get interrupt number from DTS */
>  		ret = of_irq_get(np, idx);
> -- 
> 2.13.3
>
Linus Walleij Aug. 2, 2017, 12:25 p.m. UTC | #2
On Thu, Jul 20, 2017 at 7:01 PM, Thierry Reding
<thierry.reding@gmail.com> wrote:

> From: Thierry Reding <treding@nvidia.com>
>
> The GPIO offset is never initialized, which means that it will end up
> being zero as per the devm_kzalloc() of the parent structure.
>
> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
> I have no idea how the driver could've ever worked for anything other
> than instances with a single bank, but maybe it did and I missed some
> detail.

Patch applied.

I went in and attack-patched this driver, see:
commit 4e6fd26dcf5d70a7700a4c15d8f239103bdce91d
"pinctrl: sirf/atlas7: stop poking around in GPIO internals"

I don't know if I may have upset the SirF developers or something,
or if I was an especially big asshole for not noticing the problem I
fixed already in the first iteration of the patch, or if I have done something
else evil, but I just haven't heard from the developers since.

If the problem is me, I'm sorry :(

I would like to have this driver up-to-date and verified working.

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pinctrl/sirf/pinctrl-atlas7.c b/drivers/pinctrl/sirf/pinctrl-atlas7.c
index 36b5c8d5471e..a2ca4a9472c7 100644
--- a/drivers/pinctrl/sirf/pinctrl-atlas7.c
+++ b/drivers/pinctrl/sirf/pinctrl-atlas7.c
@@ -6078,6 +6078,7 @@  static int atlas7_gpio_probe(struct platform_device *pdev)
 		bank = &a7gc->banks[idx];
 		/* Set ctrl registers' base of this bank */
 		bank->base = ATLAS7_GPIO_BASE(a7gc, idx);
+		bank->gpio_offset = idx * NGPIO_OF_BANK;
 
 		/* Get interrupt number from DTS */
 		ret = of_irq_get(np, idx);