Re: [PATCH V2 16/16] mmc: omap_hsmmc: add a hardware reset before initialization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Fri, May 6, 2011 at 14:44, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
> After a warm restart, an eMMC which cannot be powered off is
> in an unknown state, so reset it to be sure it will initialize.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> ---
>  drivers/mmc/host/omap_hsmmc.c |   38 +++++++++++++++++++++++++++++++++++++-
>  1 files changed, 37 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index e1c9017..70b8ef8 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -530,10 +530,25 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
>        } else
>                pdata->slots[0].gpio_wp = -EINVAL;
>
> +       if (gpio_is_valid(pdata->slots[0].gpio_hw_reset)) {

Not required as gpio_request takes care of it.

> +               ret = gpio_request(pdata->slots[0].gpio_hw_reset,
> +                                  "mmc_hw_reset");
> +               if (ret)
> +                       goto err_free_wp;
> +               ret = gpio_direction_output(pdata->slots[0].gpio_hw_reset, 1);

Use gpio_request_one instead.

> +               if (ret)
> +                       goto err_free_hw_reset;
> +       } else
> +               pdata->slots[0].gpio_hw_reset = -EINVAL;
> +
>        return 0;
>
> +
> +err_free_hw_reset:
> +       gpio_free(pdata->slots[0].gpio_hw_reset);
>  err_free_wp:
> -       gpio_free(pdata->slots[0].gpio_wp);
> +       if (gpio_is_valid(pdata->slots[0].gpio_wp))

Not required as gpio_free takes care of it.

> +               gpio_free(pdata->slots[0].gpio_wp);
>  err_free_cd:
>        if (gpio_is_valid(pdata->slots[0].switch_pin))
>  err_free_sp:
> @@ -543,6 +558,8 @@ err_free_sp:
>
>  static void omap_hsmmc_gpio_free(struct omap_mmc_platform_data *pdata)
>  {
> +       if (gpio_is_valid(pdata->slots[0].gpio_hw_reset))

ditto

> +               gpio_free(pdata->slots[0].gpio_hw_reset);
>        if (gpio_is_valid(pdata->slots[0].gpio_wp))
>                gpio_free(pdata->slots[0].gpio_wp);
>        if (gpio_is_valid(pdata->slots[0].switch_pin))


<<snip>>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux