Re: [PATCH v2 1/2] mmc: sdhci: add init_card callback

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

 



On 13 June 2014 12:25, Steffen Trumtrar <s.trumtrar@xxxxxxxxxxxxxx> wrote:
> Currently host drivers using the sdhci-pltfm code can not configure the
> host based on the type of card inserted.
>
> The sdio driver e.g. calls the card_init callback, so the host can now
> know what card is used and configure itself accordingly.
>
> Provide a callback for users of the sdhci-pltfm code to use this callback
> function.
>
> Signed-off-by: Steffen Trumtrar <s.trumtrar@xxxxxxxxxxxxxx>

At the first glance, this seems like a reasonable approach to your problem.

Though I wonder if the mmc core really behaves as what a host expect
in this context. More precisely, the mmc core _only_ invokes
host_ops->init_card() from the sdio initialization path. Don't your
host need to be invoked for the SD/eMMC case as well?

Do note that the ->init_card() function is also used to handle
non-standard SDIO devices.

Hmm. :-)

Kind regards
Uffe

> ---
> Changes since v1:
>         - rebased onto mmc-updates-for-3.16-rc1
>
>  drivers/mmc/host/sdhci.c | 9 +++++++++
>  drivers/mmc/host/sdhci.h | 1 +
>  2 files changed, 10 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 47055f3..0fa9004 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -2071,6 +2071,14 @@ static void sdhci_card_event(struct mmc_host *mmc)
>         spin_unlock_irqrestore(&host->lock, flags);
>  }
>
> +static void sdhci_init_card(struct mmc_host *mmc, struct mmc_card *card)
> +{
> +       struct sdhci_host *host = mmc_priv(mmc);
> +
> +       if (host->ops->card_type_init)
> +               host->ops->card_type_init(host, card);
> +}
> +
>  static const struct mmc_host_ops sdhci_ops = {
>         .request        = sdhci_request,
>         .set_ios        = sdhci_set_ios,
> @@ -2082,6 +2090,7 @@ static const struct mmc_host_ops sdhci_ops = {
>         .execute_tuning                 = sdhci_execute_tuning,
>         .card_event                     = sdhci_card_event,
>         .card_busy      = sdhci_card_busy,
> +       .init_card      = sdhci_init_card,
>  };
>
>  /*****************************************************************************\
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 4a5cd5e..def4adf 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -292,6 +292,7 @@ struct sdhci_ops {
>         void    (*adma_workaround)(struct sdhci_host *host, u32 intmask);
>         void    (*platform_init)(struct sdhci_host *host);
>         void    (*card_event)(struct sdhci_host *host);
> +       void    (*card_type_init)(struct sdhci_host *host, struct mmc_card *card);
>  };
>
>  #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
> --
> 2.0.0.rc2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux