2013-03-04 05:47:51

by Axel Lin

[permalink] [raw]
Subject: [PATCH RFT] pinctrl: single: Fix build error

If pcs->is_pinconf is false, it means does not support pinconf.
If pcs->is_pinconf is true, is_generic flag is always true.

This patch fixes below build error:

CC [M] drivers/pinctrl/pinctrl-single.o
drivers/pinctrl/pinctrl-single.c: In function 'pcs_probe':
drivers/pinctrl/pinctrl-single.c:1441:3: error: assignment of member 'is_generic' in read-only object
make[2]: *** [drivers/pinctrl/pinctrl-single.o] Error 1
make[1]: *** [drivers/pinctrl] Error 2
make: *** [drivers] Error 2

Signed-off-by: Axel Lin <[email protected]>
---
drivers/pinctrl/pinctrl-single.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index 4cdcf85..e35dabd 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -734,6 +734,7 @@ static const struct pinconf_ops pcs_pinconf_ops = {
.pin_config_dbg_show = pcs_pinconf_dbg_show,
.pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
.pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
+ .is_generic = true,
};

/**
@@ -1435,10 +1436,9 @@ static int pcs_probe(struct platform_device *pdev)
pcs->desc.name = DRIVER_NAME;
pcs->desc.pctlops = &pcs_pinctrl_ops;
pcs->desc.pmxops = &pcs_pinmux_ops;
- pcs->desc.confops = &pcs_pinconf_ops;
+ if (pcs->is_pinconf)
+ pcs->desc.confops = &pcs_pinconf_ops;
pcs->desc.owner = THIS_MODULE;
- if (match->data)
- pcs_pinconf_ops.is_generic = true;

ret = pcs_allocate_pin_table(pcs);
if (ret < 0)
--
1.7.9.5



2013-03-04 05:56:39

by Haojian Zhuang

[permalink] [raw]
Subject: Re: [PATCH RFT] pinctrl: single: Fix build error

On 4 March 2013 13:47, Axel Lin <[email protected]> wrote:
> If pcs->is_pinconf is false, it means does not support pinconf.
> If pcs->is_pinconf is true, is_generic flag is always true.
>
> This patch fixes below build error:
>
> CC [M] drivers/pinctrl/pinctrl-single.o
> drivers/pinctrl/pinctrl-single.c: In function 'pcs_probe':
> drivers/pinctrl/pinctrl-single.c:1441:3: error: assignment of member 'is_generic' in read-only object
> make[2]: *** [drivers/pinctrl/pinctrl-single.o] Error 1
> make[1]: *** [drivers/pinctrl] Error 2
> make: *** [drivers] Error 2
>
> Signed-off-by: Axel Lin <[email protected]>
> ---
> drivers/pinctrl/pinctrl-single.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
> index 4cdcf85..e35dabd 100644
> --- a/drivers/pinctrl/pinctrl-single.c
> +++ b/drivers/pinctrl/pinctrl-single.c
> @@ -734,6 +734,7 @@ static const struct pinconf_ops pcs_pinconf_ops = {
> .pin_config_dbg_show = pcs_pinconf_dbg_show,
> .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
> .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
> + .is_generic = true,

There's two cases for is_generic. Your fix only make thing worse.

By the way, I already sent a patch to fix it.

Regards
Haojian
> };
>
> /**
> @@ -1435,10 +1436,9 @@ static int pcs_probe(struct platform_device *pdev)
> pcs->desc.name = DRIVER_NAME;
> pcs->desc.pctlops = &pcs_pinctrl_ops;
> pcs->desc.pmxops = &pcs_pinmux_ops;
> - pcs->desc.confops = &pcs_pinconf_ops;
> + if (pcs->is_pinconf)
> + pcs->desc.confops = &pcs_pinconf_ops;
> pcs->desc.owner = THIS_MODULE;
> - if (match->data)
> - pcs_pinconf_ops.is_generic = true;
>
> ret = pcs_allocate_pin_table(pcs);
> if (ret < 0)
> --
> 1.7.9.5
>
>
>

2013-03-04 09:18:24

by Axel Lin

[permalink] [raw]
Subject: Re: [PATCH RFT] pinctrl: single: Fix build error

2013/3/4 Haojian Zhuang <[email protected]>:
> On 4 March 2013 13:47, Axel Lin <[email protected]> wrote:
>> If pcs->is_pinconf is false, it means does not support pinconf.
>> If pcs->is_pinconf is true, is_generic flag is always true.
>>
>> This patch fixes below build error:
>>
>> CC [M] drivers/pinctrl/pinctrl-single.o
>> drivers/pinctrl/pinctrl-single.c: In function 'pcs_probe':
>> drivers/pinctrl/pinctrl-single.c:1441:3: error: assignment of member 'is_generic' in read-only object
>> make[2]: *** [drivers/pinctrl/pinctrl-single.o] Error 1
>> make[1]: *** [drivers/pinctrl] Error 2
>> make: *** [drivers] Error 2
>>
>> Signed-off-by: Axel Lin <[email protected]>
>> ---
>> drivers/pinctrl/pinctrl-single.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
>> index 4cdcf85..e35dabd 100644
>> --- a/drivers/pinctrl/pinctrl-single.c
>> +++ b/drivers/pinctrl/pinctrl-single.c
>> @@ -734,6 +734,7 @@ static const struct pinconf_ops pcs_pinconf_ops = {
>> .pin_config_dbg_show = pcs_pinconf_dbg_show,
>> .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
>> .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
>> + .is_generic = true,
>
> There's two cases for is_generic. Your fix only make thing worse.

AFAICT, in current code ( linux-next 20130304, before applying this patch):
if match->data is false, pcs->is_pinconf is also false which means
pinconf isn't supported.

In the case pcs->is_pinconf is true, is_generic actually is *always*
true in current code.

>
> By the way, I already sent a patch to fix it.
Good to know that.
Can you point me the link to your patch?

Axel

2013-03-04 09:38:58

by Haojian Zhuang

[permalink] [raw]
Subject: Re: [PATCH RFT] pinctrl: single: Fix build error

On 4 March 2013 17:18, Axel Lin <[email protected]> wrote:
> 2013/3/4 Haojian Zhuang <[email protected]>:
>> On 4 March 2013 13:47, Axel Lin <[email protected]> wrote:
>>> If pcs->is_pinconf is false, it means does not support pinconf.
>>> If pcs->is_pinconf is true, is_generic flag is always true.
>>>
>>> This patch fixes below build error:
>>>
>>> CC [M] drivers/pinctrl/pinctrl-single.o
>>> drivers/pinctrl/pinctrl-single.c: In function 'pcs_probe':
>>> drivers/pinctrl/pinctrl-single.c:1441:3: error: assignment of member 'is_generic' in read-only object
>>> make[2]: *** [drivers/pinctrl/pinctrl-single.o] Error 1
>>> make[1]: *** [drivers/pinctrl] Error 2
>>> make: *** [drivers] Error 2
>>>
>>> Signed-off-by: Axel Lin <[email protected]>
>>> ---
>>> drivers/pinctrl/pinctrl-single.c | 6 +++---
>>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
>>> index 4cdcf85..e35dabd 100644
>>> --- a/drivers/pinctrl/pinctrl-single.c
>>> +++ b/drivers/pinctrl/pinctrl-single.c
>>> @@ -734,6 +734,7 @@ static const struct pinconf_ops pcs_pinconf_ops = {
>>> .pin_config_dbg_show = pcs_pinconf_dbg_show,
>>> .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
>>> .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
>>> + .is_generic = true,
>>
>> There's two cases for is_generic. Your fix only make thing worse.
>
> AFAICT, in current code ( linux-next 20130304, before applying this patch):
> if match->data is false, pcs->is_pinconf is also false which means
> pinconf isn't supported.
>
> In the case pcs->is_pinconf is true, is_generic actually is *always*
> true in current code.
>
You're right. Your fix could work.

Reviewed-by: Haojian Zhuang <[email protected]>

2013-03-07 03:40:13

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH RFT] pinctrl: single: Fix build error

On Mon, Mar 4, 2013 at 6:47 AM, Axel Lin <[email protected]> wrote:

> If pcs->is_pinconf is false, it means does not support pinconf.
> If pcs->is_pinconf is true, is_generic flag is always true.
>
> This patch fixes below build error:
>
> CC [M] drivers/pinctrl/pinctrl-single.o
> drivers/pinctrl/pinctrl-single.c: In function 'pcs_probe':
> drivers/pinctrl/pinctrl-single.c:1441:3: error: assignment of member 'is_generic' in read-only object
> make[2]: *** [drivers/pinctrl/pinctrl-single.o] Error 1
> make[1]: *** [drivers/pinctrl] Error 2
> make: *** [drivers] Error 2
>
> Signed-off-by: Axel Lin <[email protected]>

Patch applied with Haojian's ACK, thanks!

Yours,
Linus Walleij