linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Balaji T K <balajitk@ti.com>
Cc: linux-omap@vger.kernel.org, linux-mmc@vger.kernel.org,
	cjb@laptop.org, b-cousson@ti.com
Subject: Re: [PATCH 06/13] mmc: omap_hsmmc: add dt pbias and control mmc support
Date: Thu, 16 May 2013 09:16:51 -0700	[thread overview]
Message-ID: <20130516161650.GW5600@atomide.com> (raw)
In-Reply-To: <1367330633-5941-7-git-send-email-balajitk@ti.com>

Hi,

* Balaji T K <balajitk@ti.com> [130430 07:09]:
> Add omap_hsmmc_control to support pbias, high speed mode configuration for mmc1,
> loopback clock configuration (when external transceiver is used) for mmc2

Thanks for working on this, few suggestions inlined below.
 
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -182,6 +182,7 @@ struct omap_hsmmc_host {
>  	struct omap_hsmmc_next	next_data;
>  
>  	struct	omap_mmc_platform_data	*pdata;
> +	struct omap_hsmmc_control	*ctrl_mmc;
>  	int needs_vmmc:1;
>  	int needs_vmmc_aux:1;
>  };
> @@ -265,6 +266,8 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,
>  
>  	if (mmc_slot(host).before_set_reg)
>  		mmc_slot(host).before_set_reg(dev, slot, power_on, vdd);
> +	if (host->ctrl_mmc && host->ctrl_mmc->before)
> +		host->ctrl_mmc->before(host->ctrl_mmc->dev, power_on, vdd);
>  
>  	/*
>  	 * Assume Vcc regulator is used only to power the card ... OMAP
> @@ -302,6 +305,8 @@ static int omap_hsmmc_set_power(struct device *dev, int slot, int power_on,
>  
>  	if (mmc_slot(host).after_set_reg)
>  		mmc_slot(host).after_set_reg(dev, slot, power_on, vdd);
> +	if (host->ctrl_mmc && host->ctrl_mmc->after)
> +		host->ctrl_mmc->after(host->ctrl_mmc->dev, power_on, vdd);
>  
>  	return ret;
>  }

These before and after functions should be first converted to just usual
regulator_set_voltage() eventually. In the PBIAS case it's really a mux
plus a comparator, but we can set it up as a regulator. And on some boards
it can be an external regulator like we have the legacy callbacks for in
mach-omap2/hsmmc.c.

> +++ b/drivers/mmc/host/omap_hsmmc_control.c
> @@ -0,0 +1,466 @@
> +static void omap_control_mmc_writel(u32 reg, u32 *base2)
> +{
> +	if (base2)
> +		__raw_writel(reg, base2);
> +	return;
> +}
> +
> +static u32 omap_control_mmc_readl(u32 *base2)
> +{
> +	u32 pbias_reg = 0;
> +
> +	if (base2)
> +		pbias_reg = __raw_readl(base2);
> +	return pbias_reg;
> +}
> +
> +static void omap2430_mmc1_active_overwrite(u32 __iomem *devconf1, int vdd)
> +{
> +	u32 reg;
> +
> +	reg = omap_control_mmc_readl(devconf1);
> +	if ((1 << vdd) >= MMC_VDD_30_31)
> +		reg |= OMAP243X_MMC1_ACTIVE_OVERWRITE;
> +	else
> +		reg &= ~OMAP243X_MMC1_ACTIVE_OVERWRITE;
> +	omap_control_mmc_writel(reg, devconf1);
> +}
> +/* pbias configuration for omap2430, omap3 */
> +static void omap_hsmmc1_before_set_reg(struct device *dev,
> +				  int power_on, int vdd)
> +{
> +	u32 reg;
> +	struct omap_hsmmc_control *ctl_mmc = dev_get_drvdata(dev);
> +
> +	if (ctl_mmc->devconf1)
> +		omap2430_mmc1_active_overwrite(ctl_mmc->devconf1, vdd);
> +
> +	reg = omap_control_mmc_readl(ctl_mmc->pbias);
> +	reg &= ~OMAP2_PBIASLITEPWRDNZ0;
> +	omap_control_mmc_writel(reg, ctl_mmc->pbias);
> +}
> +
> +static void omap_hsmmc1_after_set_reg(struct device *dev,
> +				 int power_on, int vdd)
> +{
> +	u32 reg;
> +	struct omap_hsmmc_control *ctl_mmc = dev_get_drvdata(dev);
> +
> +	/* 100ms delay required for PBIAS configuration */
> +	msleep(100);
> +
> +	if (power_on) {
> +		reg = omap_control_mmc_readl(ctl_mmc->pbias);
> +		reg |= OMAP2_PBIASLITEPWRDNZ0;
> +		if ((1 << vdd) <= MMC_VDD_165_195)
> +			reg &= ~OMAP2_PBIASLITEVMODE0;
> +		else
> +			reg |= OMAP2_PBIASLITEVMODE0;
> +		omap_control_mmc_writel(reg, ctl_mmc->pbias);
> +	} else {
> +		reg = omap_control_mmc_readl(ctl_mmc->pbias);
> +		reg |= (OMAP2_PBIASLITEPWRDNZ0 |
> +			OMAP2_PBIASLITEVMODE0);
> +		omap_control_mmc_writel(reg, ctl_mmc->pbias);
> +	}
> +}
...

This all we can simplify quite a bit by defining the PBIAS register
as pinctrl-single,bits with two different named modes. One for
1.8V and for 3.3V. This way the PBIAS register is abstracted for
various omaps in the .dts file as the register is different.

Then this file should just define a new regulator that requests the
defined pinctrl named mode with pinctrl_select_state().

Now the only thing missing AFAIK is getting the comparator value
for checks with the generic pinconf framework. But you can already
get the raw register value with pin_config_get() and add the
checking to this driver until pinconf allows us to do that.

BTW, the same can then be done for the USB transceivers if we
figure out a way to properly deal with comparators with generic
pinconf.

Regards,

Tony

  reply	other threads:[~2013-05-16 16:16 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-30 14:03 [PATCH 00/13] mmc: omap_hsmmc: dt pbias and regulator voltage switch Balaji T K
2013-04-30 14:03 ` [PATCH 01/13] ARM: OMAP2+: add needs_vmmc to hsmmc_info Balaji T K
2013-04-30 14:03 ` [PATCH 02/13] mmc: omap_hsmmc: make vcc and vcc_aux independent Balaji T K
2013-04-30 14:03 ` [PATCH 03/13] mmc: omap_hsmmc: use needs_vmmc Balaji T K
2013-04-30 14:03 ` [PATCH 04/13] mmc: omap_hsmmc: update needs_vmmc for dt Balaji T K
2013-04-30 14:03 ` [PATCH 05/13] mmc: omap_hsmmc: remove use_reg Balaji T K
2013-04-30 14:03 ` [PATCH 06/13] mmc: omap_hsmmc: add dt pbias and control mmc support Balaji T K
2013-05-16 16:16   ` Tony Lindgren [this message]
2013-05-23 16:07     ` Balaji T K
2013-05-23 18:40       ` Tony Lindgren
2013-06-06 19:14         ` [PATCH v2 00/10] mmc: omap_hsmmc: dt pbias and regulator voltage switch Balaji T K
2013-06-06 19:14           ` [PATCH v2 01/10] ARM: OMAP2+: add needs_vmmc to hsmmc_info Balaji T K
2013-06-12 14:24             ` Tony Lindgren
     [not found]               ` <20130612142409.GW8164-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2013-06-12 17:00                 ` Balaji T K
2013-06-06 19:14           ` [PATCH v2 02/10] mmc: omap_hsmmc: make vcc and vcc_aux independent Balaji T K
2013-06-12 14:25             ` Tony Lindgren
2013-06-12 14:33               ` Balaji T K
2013-06-12 14:38                 ` Tony Lindgren
2013-06-06 19:14           ` [PATCH v2 03/10] mmc: omap_hsmmc: use needs_vmmc Balaji T K
2013-06-06 19:14           ` [PATCH v2 04/10] mmc: omap_hsmmc: update needs_vmmc for dt Balaji T K
2013-06-06 19:14           ` [PATCH v2 05/10] mmc: omap_hsmmc: remove use_reg Balaji T K
2013-06-06 19:14           ` [PATCH v2 06/10] mmc: omap_hsmmc: add support for pbias configuration in dt Balaji T K
2013-06-12 14:37             ` Tony Lindgren
2013-06-12 17:46               ` Balaji T K
2013-06-13  9:38               ` Linus Walleij
2013-06-13  9:37             ` Linus Walleij
2013-06-13  9:53               ` Tony Lindgren
2013-06-13 10:02                 ` Laurent Pinchart
2013-06-13 14:52                   ` Balaji T K
2013-06-13 14:53                     ` Laurent Pinchart
2013-06-13 12:39                 ` Linus Walleij
2013-06-13 14:41                 ` Balaji T K
2013-06-13 15:29                   ` Linus Walleij
     [not found]                     ` <CACRpkdY6cZ+bT-C9Go3sZVw6ErQqTm0m9__uKQrkg4eUU1thHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-13 16:29                       ` Tony Lindgren
2013-06-13 17:45                         ` Mark Brown
2013-11-21 14:20                           ` [RFC PATCH v3 0/8] mmc: omap_hsmmc: pbias dt and cleanup Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 1/8] mmc: omap_hsmmc: use devm_regulator API Balaji T K
2013-11-21 15:08                               ` Ulf Hansson
2013-12-05 15:29                                 ` Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 2/8] mmc: omap_hsmmc: handle vcc and vcc_aux independently Balaji T K
2013-12-10 11:09                               ` Ulf Hansson
2013-12-10 11:48                                 ` Balaji T K
2013-12-11 11:21                                   ` Ulf Hansson
2013-12-18 14:52                                     ` Balaji T K
     [not found]                             ` <1385043627-30439-1-git-send-email-balajitk-l0cyMroinI0@public.gmane.org>
2013-11-21 14:20                               ` [RFC PATCH v3 3/8] regulator: add pbias regulator support Balaji T K
2013-11-21 14:46                                 ` Mark Brown
2013-12-03 15:54                                   ` Balaji T K
2013-12-03 16:06                                     ` Mark Brown
2013-11-21 14:20                             ` [RFC PATCH v3 4/8] mmc: omap_hsmmc: adapt hsmmc to use pbias regulator Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 5/8] ARM: dts: add pbias dt node Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 6/8] ARM: dts: add pbias-supply Balaji T K
2013-11-21 17:03                               ` Tony Lindgren
2013-12-05 14:55                                 ` Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 7/8] ARM: OMAP: enable SYSCON and REGULATOR_PBIAS in omap2plus_defconfig Balaji T K
2013-11-21 14:20                             ` [RFC PATCH v3 8/8] mmc: omap_hsmmc: remove pbias workaround Balaji T K
2013-12-10 10:16                             ` [PATCH v4 0/7] mmc: omap_hsmmc: pbias dt and cleanup Balaji T K
2013-12-10 10:16                               ` [PATCH v4 1/7] mmc: omap_hsmmc: use devm_regulator API Balaji T K
2013-12-10 10:16                               ` [PATCH v4 2/7] mmc: omap_hsmmc: handle vcc and vcc_aux independently Balaji T K
2013-12-10 10:16                               ` [PATCH v4 3/7] regulator: add pbias regulator support Balaji T K
2013-12-10 10:40                                 ` Mark Brown
2013-12-10 12:22                                   ` Balaji T K
2013-12-10 14:34                                   ` [PATCH v5 " Balaji T K
2013-12-10 18:33                                     ` Tony Lindgren
2013-12-10 22:39                                       ` Tony Lindgren
2013-12-12 15:12                                       ` Balaji T K
2013-12-11 22:46                                     ` Mark Brown
2013-12-10 10:16                               ` [PATCH v4 4/7] mmc: omap_hsmmc: adapt hsmmc to use pbias regulator Balaji T K
2013-12-10 10:16                               ` [PATCH v4 5/7] ARM: dts: add pbias dt node Balaji T K
2013-12-10 22:42                                 ` Tony Lindgren
2013-12-12 14:58                                   ` Balaji T K
2013-12-10 10:16                               ` [PATCH v4 6/7] ARM: OMAP: enable SYSCON and REGULATOR_PBIAS in omap2plus_defconfig Balaji T K
2013-12-10 10:16                               ` [PATCH v4 7/7] mmc: omap_hsmmc: remove pbias workaround Balaji T K
2013-12-19 12:38                               ` [PATCH v6 0/7] mmc: omap_hsmmc: pbias dt and cleanup Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 1/7] mmc: omap_hsmmc: use devm_regulator API Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 2/7] mmc: omap_hsmmc: handle vcc and vcc_aux independently Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 3/7] regulator: add pbias regulator support Balaji T K
     [not found]                                   ` <1387456720-7202-4-git-send-email-balajitk-l0cyMroinI0@public.gmane.org>
2013-12-19 12:51                                     ` Mark Brown
2013-12-19 16:33                                   ` Tony Lindgren
2013-12-20  9:47                                     ` Balaji T K
2013-12-20 15:57                                       ` Tony Lindgren
2013-12-20 16:09                                         ` Mark Brown
2013-12-20 16:13                                           ` Tony Lindgren
2013-12-20 16:44                                             ` Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 4/7] mmc: omap_hsmmc: adapt hsmmc to use pbias regulator Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 5/7] ARM: dts: add pbias dt node Balaji T K
2013-12-19 16:33                                   ` Tony Lindgren
2013-12-20 11:40                                     ` Balaji T K
2013-12-20 15:58                                       ` Tony Lindgren
2013-12-20 16:08                                         ` Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 6/7] ARM: OMAP: enable SYSCON and REGULATOR_PBIAS in omap2plus_defconfig Balaji T K
2013-12-19 12:38                                 ` [PATCH v6 7/7] mmc: omap_hsmmc: remove pbias workaround Balaji T K
2013-06-13 10:47               ` [PATCH v2 06/10] mmc: omap_hsmmc: add support for pbias configuration in dt Lee Jones
2013-06-13 15:01                 ` Balaji T K
2013-06-13 16:17                   ` Lee Jones
2013-06-06 19:14           ` [PATCH v2 07/10] mmc: omap_hsmmc: remove dt pbias workaround Balaji T K
     [not found]           ` <1370546059-24181-1-git-send-email-balajitk-l0cyMroinI0@public.gmane.org>
2013-06-06 19:14             ` [PATCH v2 08/10] ARM: dts: omap3: split omap3_pmx_core Balaji T K
2013-06-12 14:35               ` Tony Lindgren
2013-06-12 17:08                 ` Balaji T K
2013-06-12 17:54                   ` Tony Lindgren
2013-06-06 19:14           ` [PATCH v2 09/10] ARM: dts: omap3: add pbias and mmc_init pinctrl states Balaji T K
2013-06-12 14:35             ` Tony Lindgren
2013-06-12 17:43               ` Balaji T K
2013-06-12 17:50                 ` Tony Lindgren
2013-06-06 19:14           ` [PATCH v2 10/10] ARM: dts: omap4: " Balaji T K
2013-06-12 14:36             ` Tony Lindgren
2013-04-30 14:03 ` [PATCH 07/13] mmc: omap_hsmmc: remove dt pbias workaround Balaji T K
2013-04-30 14:03 ` [PATCH 08/13] Documentation: dt: mmc: omap hsmmc Balaji T K
2013-04-30 14:03 ` [PATCH 09/13] ARM: dts: omap3: Add omap control mmc data Balaji T K
2013-04-30 14:03 ` [PATCH 10/13] ARM: dts: omap36xx: " Balaji T K
2013-04-30 14:03 ` [PATCH 11/13] ARM: dts: omap4: " Balaji T K
2013-04-30 14:03 ` [PATCH 12/13] ARM: dts: omap5: " Balaji T K
2013-04-30 14:03 ` [PATCH 13/13] ARM: dts: am3517: add omap_control_mmc Balaji T K

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130516161650.GW5600@atomide.com \
    --to=tony@atomide.com \
    --cc=b-cousson@ti.com \
    --cc=balajitk@ti.com \
    --cc=cjb@laptop.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).