2013-09-17 19:08:32

by Felipe Balbi

[permalink] [raw]
Subject: PCF857x and 16-bit GPIO expanders

Hi,

has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
gpio expanders ? We're having some issues here where toggling the last
gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
can't come up with any explanation of why would it hang...

Any hints ?

cheers

--
balbi


Attachments:
(No filename) (305.00 B)
signature.asc (836.00 B)
Digital signature
Download all attachments

2013-09-18 11:16:29

by Linus Walleij

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:

> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> gpio expanders ? We're having some issues here where toggling the last
> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> can't come up with any explanation of why would it hang...

Bouncing the question to George, Laurent and Kuninori...

Yours,
Linus Walleij

2013-09-18 17:18:05

by Laurent Pinchart

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
> > has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> > gpio expanders ? We're having some issues here where toggling the last
> > gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> > can't come up with any explanation of why would it hang...
>
> Bouncing the question to George, Laurent and Kuninori...

I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
I know.

I can try toggling I/O 15, but that will need to wait until next week as I'm
currently travelling without access to the hardware.

--
Regards,

Laurent Pinchart

2013-09-18 17:37:42

by Felipe Balbi

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

Hi,

On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
> > On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
> > > has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> > > gpio expanders ? We're having some issues here where toggling the last
> > > gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> > > can't come up with any explanation of why would it hang...
> >
> > Bouncing the question to George, Laurent and Kuninori...
>
> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
> I know.
>
> I can try toggling I/O 15, but that will need to wait until next week as I'm
> currently travelling without access to the hardware.

alright, that'd help me a lot :-) Just want to make sure if we're having
a board issue, or PCF8575 is a bit screwy ;-)

Thanks

--
balbi


Attachments:
(No filename) (935.00 B)
signature.asc (836.00 B)
Digital signature
Download all attachments

2013-09-19 08:13:53

by George Cherian

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On 9/18/2013 11:06 PM, Felipe Balbi wrote:
> Hi,
>
> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
>>>> gpio expanders ? We're having some issues here where toggling the last
>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
>>>> can't come up with any explanation of why would it hang...
>>> Bouncing the question to George, Laurent and Kuninori...
>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
>> I know.
>>
>> I can try toggling I/O 15, but that will need to wait until next week as I'm
>> currently travelling without access to the hardware.
> alright, that'd help me a lot :-) Just want to make sure if we're having
> a board issue, or PCF8575 is a bit screwy ;-)
Is it on dra7x-evm if so which pcf device (i2c address)?
The pins i were interested were only 1 and 2 I never tried pin 15.

Just tried toggling through sysfs and it works for me.
>
> Thanks
>


--
-George

2013-09-19 12:07:51

by Nishanth Menon

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On 09/19/2013 03:13 AM, George Cherian wrote:
> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
>> Hi,
>>
>> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
>>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
>>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
>>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
>>>>> gpio expanders ? We're having some issues here where toggling the last
>>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
>>>>> can't come up with any explanation of why would it hang...
>>>> Bouncing the question to George, Laurent and Kuninori...
>>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
>>> I know.
>>>
>>> I can try toggling I/O 15, but that will need to wait until next week as I'm
>>> currently travelling without access to the hardware.
>> alright, that'd help me a lot :-) Just want to make sure if we're having
>> a board issue, or PCF8575 is a bit screwy ;-)
> Is it on dra7x-evm if so which pcf device (i2c address)?
> The pins i were interested were only 1 and 2 I never tried pin 15.
>
> Just tried toggling through sysfs and it works for me.
When I look at the data sheet for PCF8575[1] Page 7, Figure 4 Write
mode (output)
I see the data writes are of the order:
I2c 1's byte: address
I2c 2'nd byte:P[7-0]
I2c 3rd byte:P[17-10]
Note: bits 8,9 are missing not supported.

Now [2] claims that it does support PCF8575, however when I look at
line 143[3]
unsigned bit = 1 << offset;
[snip]
if (value)
gpio->out |= bit;
else
gpio->out &= ~bit;

There is no handling for the skip needed for bits 8 and 9.. Seems to
me like a driver bug.

[1] http://www.ti.com/lit/ds/symlink/pcf8575.pdf
[2]
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c
[3]
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c#n143
--
Regards,
Nishanth Menon

2013-09-19 12:20:39

by George Cherian

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On 9/19/2013 5:37 PM, Nishanth Menon wrote:
> On 09/19/2013 03:13 AM, George Cherian wrote:
>> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
>>> Hi,
>>>
>>> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
>>>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
>>>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
>>>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
>>>>>> gpio expanders ? We're having some issues here where toggling the last
>>>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
>>>>>> can't come up with any explanation of why would it hang...
>>>>> Bouncing the question to George, Laurent and Kuninori...
>>>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
>>>> I know.
>>>>
>>>> I can try toggling I/O 15, but that will need to wait until next week as I'm
>>>> currently travelling without access to the hardware.
>>> alright, that'd help me a lot :-) Just want to make sure if we're having
>>> a board issue, or PCF8575 is a bit screwy ;-)
>> Is it on dra7x-evm if so which pcf device (i2c address)?
>> The pins i were interested were only 1 and 2 I never tried pin 15.
>>
>> Just tried toggling through sysfs and it works for me.
> When I look at the data sheet for PCF8575[1] Page 7, Figure 4 Write
> mode (output)
> I see the data writes are of the order:
> I2c 1's byte: address
> I2c 2'nd byte:P[7-0]
> I2c 3rd byte:P[17-10]

I read it as an octal numbering.
> Note: bits 8,9 are missing not supported.

In octal there is no 8 and 9
>
> Now [2] claims that it does support PCF8575, however when I look at
> line 143[3]
> unsigned bit = 1 << offset;
> [snip]
> if (value)
> gpio->out |= bit;
> else
> gpio->out &= ~bit;
>
> There is no handling for the skip needed for bits 8 and 9.. Seems to
> me like a driver bug.

In which case there is no driver bug
> [1] http://www.ti.com/lit/ds/symlink/pcf8575.pdf
> [2]
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c
> [3]
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c#n143


--
-George

2013-09-19 12:36:40

by Nishanth Menon

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On 09/19/2013 07:20 AM, George Cherian wrote:
> On 9/19/2013 5:37 PM, Nishanth Menon wrote:
>> On 09/19/2013 03:13 AM, George Cherian wrote:
>>> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
>>>> Hi,
>>>>
>>>> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
>>>>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
>>>>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
>>>>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
>>>>>>> gpio expanders ? We're having some issues here where toggling the last
>>>>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
>>>>>>> can't come up with any explanation of why would it hang...
>>>>>> Bouncing the question to George, Laurent and Kuninori...
>>>>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
>>>>> I know.
>>>>>
>>>>> I can try toggling I/O 15, but that will need to wait until next week as I'm
>>>>> currently travelling without access to the hardware.
>>>> alright, that'd help me a lot :-) Just want to make sure if we're having
>>>> a board issue, or PCF8575 is a bit screwy ;-)
>>> Is it on dra7x-evm if so which pcf device (i2c address)?
>>> The pins i were interested were only 1 and 2 I never tried pin 15.
>>>
>>> Just tried toggling through sysfs and it works for me.
>> When I look at the data sheet for PCF8575[1] Page 7, Figure 4 Write
>> mode (output)
>> I see the data writes are of the order:
>> I2c 1's byte: address
>> I2c 2'nd byte:P[7-0]
>> I2c 3rd byte:P[17-10]
>
> I read it as an octal numbering.
>> Note: bits 8,9 are missing not supported.
>
> In octal there is no 8 and 9

Where is octal coming into play here? P8 and 9 does not exist as per
the data sheet -> look at the pinout on page 1[1] ->P00-P17 this is
exactly what is described on page 2[1]:
"The number of data bytes that can be sent successively is not limited
After every two bytes, the previous data is overwritten. When the
PCF8575 receives the pairs of data bytes, the first byte is referred
to as P07 ? P00 and the second byte as P17 ? P10. The third byte
is referred to as P07 ? P00, the fourth byte as P17 ? P10, and so
on"

For someone reading schematics and setting up the P15, if the person
uses gpios = <&PCF8575 15 OF_GPIO_HIGH>; this will result in offset =
15, and as a result 0x80 will be send in byte 3, which from h/w point
of view is P13 which could be controlling something weird!

>>
>> Now [2] claims that it does support PCF8575, however when I look at
>> line 143[3]
>> unsigned bit = 1 << offset;
>> [snip]
>> if (value)
>> gpio->out |= bit;
>> else
>> gpio->out &= ~bit;
>>
>> There is no handling for the skip needed for bits 8 and 9.. Seems to
>> me like a driver bug.
>
> In which case there is no driver bug

It probably needs clarification:

Depends on how the definition is done - to hit exact P15 in definition
and to set P15, should I provide 17 as gpio number? That does not
match what the h/w description is in the data sheet!

>> [1] http://www.ti.com/lit/ds/symlink/pcf8575.pdf
>> [2]
>> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c
>> [3]
>> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpio-pcf857x.c#n143
>
>


--
Regards,
Nishanth Menon

2013-09-19 12:37:43

by Mark Jackson

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

On 19/09/13 13:20, George Cherian wrote:
> On 9/19/2013 5:37 PM, Nishanth Menon wrote:
>> On 09/19/2013 03:13 AM, George Cherian wrote:
>>> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
>>>> Hi,
>>>>
>>>> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
>>>>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
>>>>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
>>>>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
>>>>>>> gpio expanders ? We're having some issues here where toggling the last
>>>>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
>>>>>>> can't come up with any explanation of why would it hang...
>>>>>> Bouncing the question to George, Laurent and Kuninori...
>>>>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
>>>>> I know.
>>>>>
>>>>> I can try toggling I/O 15, but that will need to wait until next week as I'm
>>>>> currently travelling without access to the hardware.
>>>> alright, that'd help me a lot :-) Just want to make sure if we're having
>>>> a board issue, or PCF8575 is a bit screwy ;-)
>>> Is it on dra7x-evm if so which pcf device (i2c address)?
>>> The pins i were interested were only 1 and 2 I never tried pin 15.
>>>
>>> Just tried toggling through sysfs and it works for me.
>> When I look at the data sheet for PCF8575[1] Page 7, Figure 4 Write
>> mode (output)
>> I see the data writes are of the order:
>> I2c 1's byte: address
>> I2c 2'nd byte:P[7-0]
>> I2c 3rd byte:P[17-10]
>
> I read it as an octal numbering.

Kind of ... looking at the pinout, you have pins:-

P00...P07
P10...P17

So that's Port 0, bits 0..7, and Port 1, bits 0..7.

Mark J.

2013-09-19 12:46:05

by Felipe Balbi

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

Hi,

On Thu, Sep 19, 2013 at 01:43:41PM +0530, George Cherian wrote:
> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
> >Hi,
> >
> >On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
> >>On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
> >>>On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
> >>>>has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> >>>>gpio expanders ? We're having some issues here where toggling the last
> >>>>gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> >>>>can't come up with any explanation of why would it hang...
> >>>Bouncing the question to George, Laurent and Kuninori...
> >>I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
> >>I know.
> >>
> >>I can try toggling I/O 15, but that will need to wait until next week as I'm
> >>currently travelling without access to the hardware.
> >alright, that'd help me a lot :-) Just want to make sure if we're having
> >a board issue, or PCF8575 is a bit screwy ;-)
> Is it on dra7x-evm if so which pcf device (i2c address)?

0x21 IIRC, it's pin 15 on that goes to a discrete mux. I want to toggle
the mux ;-)

--
balbi


Attachments:
(No filename) (1.17 kB)
signature.asc (836.00 B)
Digital signature
Download all attachments

2013-09-19 12:50:18

by Felipe Balbi

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

Hi,

On Thu, Sep 19, 2013 at 07:36:33AM -0500, Nishanth Menon wrote:
> On 09/19/2013 07:20 AM, George Cherian wrote:
> > On 9/19/2013 5:37 PM, Nishanth Menon wrote:
> >> On 09/19/2013 03:13 AM, George Cherian wrote:
> >>> On 9/18/2013 11:06 PM, Felipe Balbi wrote:
> >>>> Hi,
> >>>>
> >>>> On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
> >>>>> On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
> >>>>>> On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
> >>>>>>> has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> >>>>>>> gpio expanders ? We're having some issues here where toggling the last
> >>>>>>> gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> >>>>>>> can't come up with any explanation of why would it hang...
> >>>>>> Bouncing the question to George, Laurent and Kuninori...
> >>>>> I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
> >>>>> I know.
> >>>>>
> >>>>> I can try toggling I/O 15, but that will need to wait until next week as I'm
> >>>>> currently travelling without access to the hardware.
> >>>> alright, that'd help me a lot :-) Just want to make sure if we're having
> >>>> a board issue, or PCF8575 is a bit screwy ;-)
> >>> Is it on dra7x-evm if so which pcf device (i2c address)?
> >>> The pins i were interested were only 1 and 2 I never tried pin 15.
> >>>
> >>> Just tried toggling through sysfs and it works for me.
> >> When I look at the data sheet for PCF8575[1] Page 7, Figure 4 Write
> >> mode (output)
> >> I see the data writes are of the order:
> >> I2c 1's byte: address
> >> I2c 2'nd byte:P[7-0]
> >> I2c 3rd byte:P[17-10]
> >
> > I read it as an octal numbering.
> >> Note: bits 8,9 are missing not supported.
> >
> > In octal there is no 8 and 9
>
> Where is octal coming into play here? P8 and 9 does not exist as per
> the data sheet -> look at the pinout on page 1[1] ->P00-P17 this is
> exactly what is described on page 2[1]:
> "The number of data bytes that can be sent successively is not limited
> After every two bytes, the previous data is overwritten. When the
> PCF8575 receives the pairs of data bytes, the first byte is referred
> to as P07 – P00 and the second byte as P17 – P10. The third byte
> is referred to as P07 – P00, the fourth byte as P17 – P10, and so
> on"
>
> For someone reading schematics and setting up the P15, if the person
> uses gpios = <&PCF8575 15 OF_GPIO_HIGH>; this will result in offset =
> 15, and as a result 0x80 will be send in byte 3, which from h/w point
> of view is P13 which could be controlling something weird!

you missed one detail only. I said GPIO15, not P15 :-) GPIO15 on that
device is P17 ;-)

--
balbi


Attachments:
(No filename) (2.67 kB)
signature.asc (836.00 B)
Digital signature
Download all attachments

2013-09-19 13:12:07

by Felipe Balbi

[permalink] [raw]
Subject: Re: PCF857x and 16-bit GPIO expanders

Hi,

On Thu, Sep 19, 2013 at 06:38:13PM +0530, George Cherian wrote:
> On 9/19/2013 6:14 PM, Felipe Balbi wrote:
> >Hi,
> >
> >On Thu, Sep 19, 2013 at 01:43:41PM +0530, George Cherian wrote:
> >>On 9/18/2013 11:06 PM, Felipe Balbi wrote:
> >>>Hi,
> >>>
> >>>On Wed, Sep 18, 2013 at 07:18:04PM +0200, Laurent Pinchart wrote:
> >>>>On Wednesday 18 September 2013 13:16:27 Linus Walleij wrote:
> >>>>>On Tue, Sep 17, 2013 at 9:07 PM, Felipe Balbi <[email protected]> wrote:
> >>>>>>has anyone ever successfully using gpio-pcf857x.c driver with 16-bit
> >>>>>>gpio expanders ? We're having some issues here where toggling the last
> >>>>>>gpio pin (gpio 15) on a PCF8575 device causes platform to hang and I
> >>>>>>can't come up with any explanation of why would it hang...
> >>>>>Bouncing the question to George, Laurent and Kuninori...
> >>>>I've got a board with a PCF8575 chip, but it uses I/Os 8 to 14 only as far as
> >>>>I know.
> >>>>
> >>>>I can try toggling I/O 15, but that will need to wait until next week as I'm
> >>>>currently travelling without access to the hardware.
> >>>alright, that'd help me a lot :-) Just want to make sure if we're having
> >>>a board issue, or PCF8575 is a bit screwy ;-)
> >>Is it on dra7x-evm if so which pcf device (i2c address)?
> >0x21 IIRC, it's pin 15 on that goes to a discrete mux. I want to toggle
> >the mux ;-)
> >
> I am able to toggle the same via sysfs(pcf8575 @ 0x21gpio15(p17)) and
> it does not hang the board.
> I am using Rev D1 board.
>
> Log :-
> # cat /sys/kernel/debug/gpio
> .
> ...
> GPIOs 480-495, i2c/0-0021, pcf8575, can sleep:
> gpio-481 (id_gpio ) in hi
> gpio-482 (id_gpio ) in hi
> gpio-495 (sysfs ) out hi
> # echo 0 > /sys/class/gpio/gpio495/value
> # cat /sys/kernel/debug/gpio
> .
> ...
> GPIOs 480-495, i2c/0-0021, pcf8575, can sleep:
> gpio-481 (id_gpio ) in hi
> gpio-482 (id_gpio ) in hi
> gpio-495 (sysfs ) out lo

weird... I'll debug here and see if I can still reproduce with
v3.12-rc1. Thanks anyway :-)

cheers

--
balbi


Attachments:
(No filename) (2.04 kB)
signature.asc (836.00 B)
Digital signature
Download all attachments