linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH] gpio: pcf857x: restore the initial line state of all pcf lines
@ 2016-05-27  6:35 Kishon Vijay Abraham I
  2016-05-31  8:40 ` Linus Walleij
  0 siblings, 1 reply; 2+ messages in thread
From: Kishon Vijay Abraham I @ 2016-05-27  6:35 UTC (permalink / raw)
  To: linus.walleij, gnurou, linux-gpio, linux-kernel, linux-omap
  Cc: nsekhar, kishon

The reset values for all the PCF lines are high and hence on
shutdown we should drive all the lines high in order to
bring it to the reset state.

This is actually required since PCF doesn't have a reset
line and even after warm reset (by invoking "reboot" in
prompt) the PCF lines maintains it's previous programmed
state. This becomes a problem if the boards are designed to
work with the default initial state.

DRA7XX_evm uses PCF8575 and one of the PCF output lines
feeds to MMC/SD VDD and this line should be driven high in order
for the MMC/SD to be detected.  This line is modelled as
regulator and the hsmmc driver takes care of enabling and
disabling it. In the case of 'reboot', during shutdown path
as part of it's cleanup process the hsmmc driver disables
this regulator. This makes MMC *boot* not functional.

Fix it by driving all the pcf lines high.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
This patch was sent long back [1].
But there was a concern that contention might occur if the
PCF shutdown handler is invoked before the shutdown handler
of the PCF's consumers. In that case PCF shutdown handler can't
drive all the pcf lines high without knowing if the PCF
consumers are still active.

However commit 52cdbdd4985 ("driver core: correct device's
shutdown order") will make sure shutdown handler of PCF's
consumers are invoked before invoking the shutdown
handler of PCF. So it should be safe to merge this now.

[1] -> https://patchwork.ozlabs.org/patch/420382/

 drivers/gpio/gpio-pcf857x.c |    9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c
index 169c09a..d168410 100644
--- a/drivers/gpio/gpio-pcf857x.c
+++ b/drivers/gpio/gpio-pcf857x.c
@@ -440,6 +440,14 @@ static int pcf857x_remove(struct i2c_client *client)
 	return status;
 }
 
+static void pcf857x_shutdown(struct i2c_client *client)
+{
+	struct pcf857x *gpio = i2c_get_clientdata(client);
+
+	/* Drive all the I/O lines high */
+	gpio->write(gpio->client, BIT(gpio->chip.ngpio) - 1);
+}
+
 static struct i2c_driver pcf857x_driver = {
 	.driver = {
 		.name	= "pcf857x",
@@ -447,6 +455,7 @@ static struct i2c_driver pcf857x_driver = {
 	},
 	.probe	= pcf857x_probe,
 	.remove	= pcf857x_remove,
+	.shutdown = pcf857x_shutdown,
 	.id_table = pcf857x_id,
 };
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [RESEND PATCH] gpio: pcf857x: restore the initial line state of all pcf lines
  2016-05-27  6:35 [RESEND PATCH] gpio: pcf857x: restore the initial line state of all pcf lines Kishon Vijay Abraham I
@ 2016-05-31  8:40 ` Linus Walleij
  0 siblings, 0 replies; 2+ messages in thread
From: Linus Walleij @ 2016-05-31  8:40 UTC (permalink / raw)
  To: Kishon Vijay Abraham I
  Cc: Alexandre Courbot, linux-gpio, linux-kernel, Linux-OMAP, Sekhar Nori

On Fri, May 27, 2016 at 8:35 AM, Kishon Vijay Abraham I <kishon@ti.com> wrote:

> The reset values for all the PCF lines are high and hence on
> shutdown we should drive all the lines high in order to
> bring it to the reset state.
>
> This is actually required since PCF doesn't have a reset
> line and even after warm reset (by invoking "reboot" in
> prompt) the PCF lines maintains it's previous programmed
> state. This becomes a problem if the boards are designed to
> work with the default initial state.
>
> DRA7XX_evm uses PCF8575 and one of the PCF output lines
> feeds to MMC/SD VDD and this line should be driven high in order
> for the MMC/SD to be detected.  This line is modelled as
> regulator and the hsmmc driver takes care of enabling and
> disabling it. In the case of 'reboot', during shutdown path
> as part of it's cleanup process the hsmmc driver disables
> this regulator. This makes MMC *boot* not functional.
>
> Fix it by driving all the pcf lines high.
>
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

Patch applied.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-05-31  8:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-27  6:35 [RESEND PATCH] gpio: pcf857x: restore the initial line state of all pcf lines Kishon Vijay Abraham I
2016-05-31  8:40 ` Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).