diff mbox series

[v3] mmc: usdhi6rol0: Implement card_busy function

Message ID 20210816142314.1168-1-marten.lindahl@axis.com
State New
Headers show
Series [v3] mmc: usdhi6rol0: Implement card_busy function | expand

Commit Message

Mårten Lindahl Aug. 16, 2021, 2:23 p.m. UTC
When switching card voltage to UHS voltage the mmc framework tries to
check the card busy signal, meaning the card pulling DAT0 line low,
before the switch is made. Drivers that does not implement the card_busy
function will manage to do the switch anyway, but the framework will
print a warning about not being able to verify the voltage signal.

Implement card_busy function.

Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>
---

v2:
 - Update commit message, since interface limitation for checking DAT
   lines is not valid for this fix.
 - Skip check of SCLKDIVEN bit, and skip check of DAT3 line since SD
   specification only points out checking DAT0 for busy signal.
 - Update comment about card_busy callback.

v3:
 - Split header file change into separate patch.

 drivers/mmc/host/usdhi6rol0.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Ulf Hansson Aug. 24, 2021, 2:56 p.m. UTC | #1
On Mon, 16 Aug 2021 at 16:23, Mårten Lindahl <marten.lindahl@axis.com> wrote:
>

> When switching card voltage to UHS voltage the mmc framework tries to

> check the card busy signal, meaning the card pulling DAT0 line low,

> before the switch is made. Drivers that does not implement the card_busy

> function will manage to do the switch anyway, but the framework will

> print a warning about not being able to verify the voltage signal.

>

> Implement card_busy function.

>

> Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>


Applied for next, thanks!

Kind regards
Uffe


> ---

>

> v2:

>  - Update commit message, since interface limitation for checking DAT

>    lines is not valid for this fix.

>  - Skip check of SCLKDIVEN bit, and skip check of DAT3 line since SD

>    specification only points out checking DAT0 for busy signal.

>  - Update comment about card_busy callback.

>

> v3:

>  - Split header file change into separate patch.

>

>  drivers/mmc/host/usdhi6rol0.c | 10 ++++++++++

>  1 file changed, 10 insertions(+)

>

> diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c

> index b9b79b1089a0..b5ab133e9add 100644

> --- a/drivers/mmc/host/usdhi6rol0.c

> +++ b/drivers/mmc/host/usdhi6rol0.c

> @@ -1186,6 +1186,15 @@ static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios)

>         return ret;

>  }

>

> +static int usdhi6_card_busy(struct mmc_host *mmc)

> +{

> +       struct usdhi6_host *host = mmc_priv(mmc);

> +       u32 tmp = usdhi6_read(host, USDHI6_SD_INFO2);

> +

> +       /* Card is busy if it is pulling dat[0] low */

> +       return !(tmp & USDHI6_SD_INFO2_SDDAT0);

> +}

> +

>  static const struct mmc_host_ops usdhi6_ops = {

>         .request        = usdhi6_request,

>         .set_ios        = usdhi6_set_ios,

> @@ -1193,6 +1202,7 @@ static const struct mmc_host_ops usdhi6_ops = {

>         .get_ro         = usdhi6_get_ro,

>         .enable_sdio_irq = usdhi6_enable_sdio_irq,

>         .start_signal_voltage_switch = usdhi6_sig_volt_switch,

> +       .card_busy = usdhi6_card_busy,

>  };

>

>  /*                     State machine handlers                          */

> --

> 2.20.1

>
diff mbox series

Patch

diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c
index b9b79b1089a0..b5ab133e9add 100644
--- a/drivers/mmc/host/usdhi6rol0.c
+++ b/drivers/mmc/host/usdhi6rol0.c
@@ -1186,6 +1186,15 @@  static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios)
 	return ret;
 }
 
+static int usdhi6_card_busy(struct mmc_host *mmc)
+{
+	struct usdhi6_host *host = mmc_priv(mmc);
+	u32 tmp = usdhi6_read(host, USDHI6_SD_INFO2);
+
+	/* Card is busy if it is pulling dat[0] low */
+	return !(tmp & USDHI6_SD_INFO2_SDDAT0);
+}
+
 static const struct mmc_host_ops usdhi6_ops = {
 	.request	= usdhi6_request,
 	.set_ios	= usdhi6_set_ios,
@@ -1193,6 +1202,7 @@  static const struct mmc_host_ops usdhi6_ops = {
 	.get_ro		= usdhi6_get_ro,
 	.enable_sdio_irq = usdhi6_enable_sdio_irq,
 	.start_signal_voltage_switch = usdhi6_sig_volt_switch,
+	.card_busy = usdhi6_card_busy,
 };
 
 /*			State machine handlers				*/