diff mbox

Control drive strength in software

Message ID 510FB2CC.20201@parrot.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jeremie Samuel Feb. 4, 2013, 1:08 p.m. UTC
Hi,

I'm working on a SDHCI driver for linux kernel 3.4.

  The IP that I have to control does not control the Driver Strength. 
Driver Type B is always selected. On the other hand, I can control the 
drive strength of the pads in software.

I would like to use the interface select_drive_strength of the 
mmc_host_ops. Is it a good idea?

If so, I have an other issue.

This function doesn't have an mmc_host as parameter. It is an issue for 
me since the drive strength parameters can be board specific.
A solution would be to add this parameter:

         void    (*hw_reset)(struct mmc_host *host);
  };

Is this solution a good idea?

Also, the drive strength configuration might be different according to 
the mode (not only UHS). So, I would like to control the drive strength 
for the default speed and the high speed. Would it be relevant to add 
this a call to this function in mmc_sd_switch_hs or in mmc_sd_init_card?

Thanks,

Jeremie Samuel
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Chris Ball Feb. 11, 2013, 5:55 p.m. UTC | #1
Hi Jeremie,

On Mon, Feb 04 2013, Jeremie Samuel wrote:
> This function doesn't have an mmc_host as parameter. It is an issue
> for me since the drive strength parameters can be board specific.
> A solution would be to add this parameter:
>
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 5674504..cb6d117 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -134,7 +134,7 @@ struct mmc_host_ops {
>         /* The tuning command opcode value is different for SD and
> eMMC cards */
>         int     (*execute_tuning)(struct mmc_host *host, u32 opcode);
>         void    (*enable_preset_value)(struct mmc_host *host, bool enable);
> -       int     (*select_drive_strength)(unsigned int max_dtr, int
> host_drv, int card_drv);
> +       int     (*select_drive_strength)(struct mmc_host *host,
> unsigned int max_dtr, int host_drv, int card_drv);
>         void    (*hw_reset)(struct mmc_host *host);
>  };
>
> Is this solution a good idea?

Yes, sounds good.  Want to send a formal patch?

> Also, the drive strength configuration might be different according to
> the mode (not only UHS). So, I would like to control the drive
> strength for the default speed and the high speed. Would it be
> relevant to add this a call to this function in mmc_sd_switch_hs or in
> mmc_sd_init_card?

Yes, that sounds sensible too.

- Chris.
diff mbox

Patch

diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 5674504..cb6d117 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -134,7 +134,7 @@  struct mmc_host_ops {
         /* The tuning command opcode value is different for SD and eMMC 
cards */
         int     (*execute_tuning)(struct mmc_host *host, u32 opcode);
         void    (*enable_preset_value)(struct mmc_host *host, bool enable);
-       int     (*select_drive_strength)(unsigned int max_dtr, int 
host_drv, int card_drv);
+       int     (*select_drive_strength)(struct mmc_host *host, unsigned 
int max_dtr, int host_drv, int card_drv);