diff mbox

[U-Boot] mmc: sunxi: Fix misuse of gpio_direction_input()

Message ID 1419046885.12841.1.camel@phoenix
State Accepted
Delegated to: Ian Campbell
Headers show

Commit Message

Axel Lin Dec. 20, 2014, 3:41 a.m. UTC
It does not make sense to make gpio_direction_input() return the gpio input
status. The return value of gpio_direction_input() is inconsistent if
CONFIG_DM_GPIO is defined.
And we don't need to call gpio_direction_input() int sunxi_mmc_getcd().
Just init the gpio once in mmc_resource_init() is enough.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
---
Only compile tested, so please test this patch.
Thanks.
 drivers/gpio/sunxi_gpio.c | 2 +-
 drivers/mmc/sunxi_mmc.c   | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

Comments

Simon Glass Dec. 21, 2014, 6:53 p.m. UTC | #1
On 19 December 2014 at 20:41, Axel Lin <axel.lin@ingics.com> wrote:
> It does not make sense to make gpio_direction_input() return the gpio input
> status. The return value of gpio_direction_input() is inconsistent if
> CONFIG_DM_GPIO is defined.
> And we don't need to call gpio_direction_input() int sunxi_mmc_getcd().
> Just init the gpio once in mmc_resource_init() is enough.
>
> Signed-off-by: Axel Lin <axel.lin@ingics.com>
> ---
> Only compile tested, so please test this patch.
> Thanks.
>  drivers/gpio/sunxi_gpio.c | 2 +-
>  drivers/mmc/sunxi_mmc.c   | 7 +++++--
>  2 files changed, 6 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Ian Campbell Dec. 22, 2014, 12:59 p.m. UTC | #2
On Sun, 2014-12-21 at 11:53 -0700, Simon Glass wrote:
> On 19 December 2014 at 20:41, Axel Lin <axel.lin@ingics.com> wrote:
> > It does not make sense to make gpio_direction_input() return the gpio input
> > status. The return value of gpio_direction_input() is inconsistent if
> > CONFIG_DM_GPIO is defined.
> > And we don't need to call gpio_direction_input() int sunxi_mmc_getcd().
> > Just init the gpio once in mmc_resource_init() is enough.
> >
> > Signed-off-by: Axel Lin <axel.lin@ingics.com>
> > ---
> > Only compile tested, so please test this patch.
> > Thanks.
> >  drivers/gpio/sunxi_gpio.c | 2 +-
> >  drivers/mmc/sunxi_mmc.c   | 7 +++++--
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>

Thanks, I booted it on my cubietruck and I could still see the mmc, so
I've queued to u-boot-sunxi#next.

I don't think we need to rush this into v2015.01, but do shout if you
think we do.

Ian.
Axel Lin Dec. 22, 2014, 2:08 p.m. UTC | #3
2014-12-22 20:59 GMT+08:00 Ian Campbell <ijc@hellion.org.uk>:
> On Sun, 2014-12-21 at 11:53 -0700, Simon Glass wrote:
>> On 19 December 2014 at 20:41, Axel Lin <axel.lin@ingics.com> wrote:
>> > It does not make sense to make gpio_direction_input() return the gpio input
>> > status. The return value of gpio_direction_input() is inconsistent if
>> > CONFIG_DM_GPIO is defined.
>> > And we don't need to call gpio_direction_input() int sunxi_mmc_getcd().
>> > Just init the gpio once in mmc_resource_init() is enough.
>> >
>> > Signed-off-by: Axel Lin <axel.lin@ingics.com>
>> > ---
>> > Only compile tested, so please test this patch.
>> > Thanks.
>> >  drivers/gpio/sunxi_gpio.c | 2 +-
>> >  drivers/mmc/sunxi_mmc.c   | 7 +++++--
>> >  2 files changed, 6 insertions(+), 3 deletions(-)
>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> Thanks, I booted it on my cubietruck and I could still see the mmc, so
> I've queued to u-boot-sunxi#next.
>
> I don't think we need to rush this into v2015.01, but do shout if you
> think we do.

Hi Ian,
It's fine for v2015.01.

Thanks,
Axel
diff mbox

Patch

diff --git a/drivers/gpio/sunxi_gpio.c b/drivers/gpio/sunxi_gpio.c
index 44135e5..2fa50f9 100644
--- a/drivers/gpio/sunxi_gpio.c
+++ b/drivers/gpio/sunxi_gpio.c
@@ -75,7 +75,7 @@  int gpio_direction_input(unsigned gpio)
 {
 	sunxi_gpio_set_cfgpin(gpio, SUNXI_GPIO_INPUT);
 
-	return sunxi_gpio_input(gpio);
+	return 0;
 }
 
 int gpio_direction_output(unsigned gpio, int value)
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index 231f0a0..0353355 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -73,8 +73,11 @@  static int mmc_resource_init(int sdc_no)
 	mmchost->mmc_no = sdc_no;
 
 	cd_pin = sunxi_mmc_getcd_gpio(sdc_no);
-	if (cd_pin != -1)
+	if (cd_pin != -1) {
 		ret = gpio_request(cd_pin, "mmc_cd");
+		if (!ret)
+			ret = gpio_direction_input(cd_pin);
+	}
 
 	return ret;
 }
@@ -373,7 +376,7 @@  static int sunxi_mmc_getcd(struct mmc *mmc)
 	if (cd_pin == -1)
 		return 1;
 
-	return !gpio_direction_input(cd_pin);
+	return !gpio_get_value(cd_pin);
 }
 
 static const struct mmc_ops sunxi_mmc_ops = {