[PATCH RFT] spi: bcm2835: Remove unnecessary workaround to call gpio_set_value

Martin Sperl kernel at martin.sperl.org
Sun Feb 14 03:28:06 PST 2016

> On 14.02.2016, at 04:41, Axel Lin <axel.lin at ingics.com> wrote:
> 2016-02-14 1:08 GMT+08:00 Martin Sperl <kernel at martin.sperl.org>:
>>> On 13.02.2016, at 17:19, Axel Lin <axel.lin at ingics.com> wrote:
>>> This should be fixed by commit 4c02cba18cc9
>>> ("pinctrl: bcm2835: Fix initial value for direction_output")
>>> Signed-off-by: Axel Lin <axel.lin at ingics.com>
>> Actually this also solves the situation when the DT is configured
>> badly - and it is likely that old DTs are configured badly,
>> because it did not matter before (it was always wrong anyway).
>> This change would break those old DTs in this respect and can
>> result in unexpected behavior and undetected devices.
> Hi Martin,
> I don't understand why this patch breaks old DTs.
> Before 4c02cba18cc9:
> gpio_direction_output(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
> gpio_set_value(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
> is equivalent to
> After 4c02cba18cc9: (Already in Linus' tree)
> gpio_direction_output(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);

Looking thru the bigger context now.

I thought it also impacted the GPIO-cs case, where
  cs-gpios = <&gpio x 1>, <&gpio y 1>;
would just define the GPIOs - as the 3rd value was always ignored
and resulted in a “low” level on the GPIO via pinctrl initially - 
at least there was a time when this has happened.
A change here would have had an impact on “old” DT.

Now I see that this only impacts the native-cs case
and that should be fine.

Acked-by: Martin Sperl <kernel at martin.sperl.org>

More information about the linux-rpi-kernel mailing list