[PATCH] ARM: at91: spi: request all csgpio in spi probe

Boris BREZILLON boris.brezillon at free-electrons.com
Tue Jul 29 01:00:17 PDT 2014

Hi Alexandre,

On Tue, 29 Jul 2014 00:38:59 +0200
Alexandre Belloni <alexandre.belloni at free-electrons.com> wrote:

> > >>+		if (ret < 0) {
> > >>+			dev_err(&pdev->dev,
> > >>+				"failed to configure csgpio#%u (%d)\n",
> > >>+				i, ret);
> > >>+			goto out_free;
> > >>+		}
> > >>+	}
> > >>+
> Mark: maybe it would make sense to do devm_gpio_request_one() in
> of_spi_register_master(), after of_get_named_gpio.

Might be the cleanest way to solve this issue, but you'll have to modify
all the drivers that request cs_gpio in their setup method/callback.

> While this solves the particular issue Jiří is seeing, this will not
> solve the case where PA14 (CS0) is not used by the spi driver at all. It
> will remained muxed as CS0 and toggle when the spi master needs to
> access CS0 until another driver muxes it to something else. I still
> believe we should explicitly ask pinctrl to mux them as gpios.

Do we really care about this case ?
After all, if a given pin needs a specific muxing during kernel boot
(i.e. a pin connected to a gpio-led that needs to stay in its previous
state or a pin connected to the reset line of a device that needs to
stay up and running during kernel boot) the bootloader/bootstrap should
have muxed this pin appropriately before booting the kernel.

What do you mean by "we should explicitly ask pinctrl to mux them as
gpios" ?
Do you mean configuring all the pins as GPIOs when the pin controller is
probed, or just adding a new pinctrl state configuring the pin as an
output GPIO and reference it in the pinctrl-0 property of the spi

If the former, you'll break devices that needs their pins to stay in
the state they were during the bootloader/boostrap phase.
The latter won't work if the pin you request as GPIO is later requested
by another device (which, if I'm correct, is exactly the case you're
trying to solve).

Best Regards,


Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering

More information about the linux-arm-kernel mailing list