Re: [PATCH] gpio: max732x: fix input configuration for open-drain pins

From: Marc Zyngier
Date: Fri Apr 23 2010 - 09:37:51 EST


On Tue, 20 Apr 2010 16:51:48 -0700, Andrew Morton
<akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>> On Tue, 16 Mar 2010 10:19:00 +0100
>
> I bet you thought I'd forgotten.

Naaaah... I trust your memory more than mine... ;-)

> You really did mean `&' here, but one very much expects a variable
> called is_foo to be a boolean, and booleans want `&&'.

Actually, the attached patch is a much simpler solution to this particular
one. We already checked that the pin is input-capable. Use the same mask to
check that the pin is also output-capable, and thus open-drain. No need for
an additional variable.

Thanks,

M.
--
Who you jivin' with that Cosmik Debris?From 3ff7ff7f13145a6a46ffa2e0cc350bee1f120577 Mon Sep 17 00:00:00 2001
From: Marc Zyngier <maz@xxxxxxxxxxxxxxx>
Date: Fri, 23 Apr 2010 12:25:53 +0100
Subject: [PATCH] gpio: max732x: fix input configuration for open-drain pins

Fix a bug I noticed while hacking on the max732x driver for interrupt
support. According to the datasheets, open-drain pins have to be
configured as output-high (which in that case is actually high impedance)
to be used as input.

Signed-off-by: Marc Zyngier <maz@xxxxxxxxxxxxxxx>
Acked-by: Eric Miao <eric.y.miao@xxxxxxxxx>
---
drivers/gpio/max732x.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/gpio/max732x.c b/drivers/gpio/max732x.c
index f786824..ad6a80b 100644
--- a/drivers/gpio/max732x.c
+++ b/drivers/gpio/max732x.c
@@ -188,6 +188,13 @@ static int max732x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
return -EACCES;
}

+ /*
+ * Open-drain pins must be set to high impedance (which is
+ * equivalent to output-high) to be turned into an input.
+ */
+ if ((mask & chip->dir_output))
+ max732x_gpio_set_value(gc, off, 1);
+
return 0;
}

--
1.7.0.4