diff mbox

[RFC,2/7] mmc: sh_mobile_sdhi: Add actual clock rate support

Message ID 1430397081.5802.41.camel@xylophone.i.decadent.org.uk (mailing list archive)
State RFC
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

Ben Hutchings April 30, 2015, 12:31 p.m. UTC
From: Shinobu Uehara <shinobu.uehara.xc@renesas.com>

It is necessary to stop the SD clock before using
the actual clock in case of SDHI controller.

Signed-off-by: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
---
 drivers/mmc/host/sh_mobile_sdhi.c |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Sergei Shtylyov April 30, 2015, 4:34 p.m. UTC | #1
On 04/30/2015 03:31 PM, Ben Hutchings wrote:

> From: Shinobu Uehara <shinobu.uehara.xc@renesas.com>

> It is necessary to stop the SD clock before using
> the actual clock in case of SDHI controller.

> Signed-off-by: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
> Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
> ---
>   drivers/mmc/host/sh_mobile_sdhi.c |   14 ++++++++++++++
>   1 file changed, 14 insertions(+)

> diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c
> index 6906a905cd54..92a58c6007fe 100644
> --- a/drivers/mmc/host/sh_mobile_sdhi.c
> +++ b/drivers/mmc/host/sh_mobile_sdhi.c
> @@ -136,6 +136,18 @@ static void sh_mobile_sdhi_clk_disable(struct platform_device *pdev)
>   	clk_disable_unprepare(priv->clk);
>   }
>
> +static void sh_mobile_sdhi_set_clk_div(struct platform_device *pdev, int clk)
> +{
> +	struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
> +	struct tmio_mmc_host *host = mmc_priv(mmc);
> +
> +	if (clk == true) {

    'clk' is *int*. Perhaps, should be just *if* (clk)?

> +		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~0x0100 &
> +				sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
> +		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, 0x00ff);
> +	}
> +}
> +
>   static int sh_mobile_sdhi_wait_idle(struct tmio_mmc_host *host)
>   {
>   	int timeout = 1000;
[...]

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Hutchings May 6, 2015, 1:05 a.m. UTC | #2
On Thu, 2015-04-30 at 19:34 +0300, Sergei Shtylyov wrote:
> On 04/30/2015 03:31 PM, Ben Hutchings wrote:
> 
> > From: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
> 
> > It is necessary to stop the SD clock before using
> > the actual clock in case of SDHI controller.
> 
> > Signed-off-by: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
> > Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
> > ---
> >   drivers/mmc/host/sh_mobile_sdhi.c |   14 ++++++++++++++
> >   1 file changed, 14 insertions(+)
> 
> > diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c
> > index 6906a905cd54..92a58c6007fe 100644
> > --- a/drivers/mmc/host/sh_mobile_sdhi.c
> > +++ b/drivers/mmc/host/sh_mobile_sdhi.c
> > @@ -136,6 +136,18 @@ static void sh_mobile_sdhi_clk_disable(struct platform_device *pdev)
> >   	clk_disable_unprepare(priv->clk);
> >   }
> >
> > +static void sh_mobile_sdhi_set_clk_div(struct platform_device *pdev, int clk)
> > +{
> > +	struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
> > +	struct tmio_mmc_host *host = mmc_priv(mmc);
> > +
> > +	if (clk == true) {
> 
>     'clk' is *int*. Perhaps, should be just *if* (clk)?

clk is either 0 or 1 and should maybe be bool.  But you're right,
regardless of its type, it doesn't make sense to compare with true.

Ben.

> > +		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~0x0100 &
> > +				sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
> > +		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, 0x00ff);
> > +	}
> > +}
> > +
> >   static int sh_mobile_sdhi_wait_idle(struct tmio_mmc_host *host)
> >   {
> >   	int timeout = 1000;
> [...]
> 
> WBR, Sergei
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Hutchings May 6, 2015, 1:10 a.m. UTC | #3
On Wed, 2015-05-06 at 02:05 +0100, Ben Hutchings wrote:
> On Thu, 2015-04-30 at 19:34 +0300, Sergei Shtylyov wrote:
> > On 04/30/2015 03:31 PM, Ben Hutchings wrote:
> > 
> > > From: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
> > 
> > > It is necessary to stop the SD clock before using
> > > the actual clock in case of SDHI controller.
> > 
> > > Signed-off-by: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
> > > Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
> > > ---
> > >   drivers/mmc/host/sh_mobile_sdhi.c |   14 ++++++++++++++
> > >   1 file changed, 14 insertions(+)
> > 
> > > diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c
> > > index 6906a905cd54..92a58c6007fe 100644
> > > --- a/drivers/mmc/host/sh_mobile_sdhi.c
> > > +++ b/drivers/mmc/host/sh_mobile_sdhi.c
> > > @@ -136,6 +136,18 @@ static void sh_mobile_sdhi_clk_disable(struct platform_device *pdev)
> > >   	clk_disable_unprepare(priv->clk);
> > >   }
> > >
> > > +static void sh_mobile_sdhi_set_clk_div(struct platform_device *pdev, int clk)
> > > +{
> > > +	struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
> > > +	struct tmio_mmc_host *host = mmc_priv(mmc);
> > > +
> > > +	if (clk == true) {
> > 
> >     'clk' is *int*. Perhaps, should be just *if* (clk)?
> 
> clk is either 0 or 1 and should maybe be bool.  But you're right,
> regardless of its type, it doesn't make sense to compare with true.
[...]

Anyway, I think this is redundant with:

commit b30d6958a014812158d9729a3e0b6d448f6e8968
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Sun Aug 24 20:02:16 2014 -0700

    mmc: tmio: remove SCLKEN bit setting from tmio_mmc_set_clock()

commit da29fe2bf573f0ae56fdc2e790387cb73fc8c6f8
Author: Shinobu Uehara <shinobu.uehara.xc@renesas.com>
Date:   Sun Aug 24 20:03:00 2014 -0700

    mmc: tmio: add actual clock support as option

so I will probably just drop it.

Ben.


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

Patch

diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c
index 6906a905cd54..92a58c6007fe 100644
--- a/drivers/mmc/host/sh_mobile_sdhi.c
+++ b/drivers/mmc/host/sh_mobile_sdhi.c
@@ -136,6 +136,18 @@  static void sh_mobile_sdhi_clk_disable(struct platform_device *pdev)
 	clk_disable_unprepare(priv->clk);
 }
 
+static void sh_mobile_sdhi_set_clk_div(struct platform_device *pdev, int clk)
+{
+	struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
+	struct tmio_mmc_host *host = mmc_priv(mmc);
+
+	if (clk == true) {
+		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~0x0100 &
+				sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
+		sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, 0x00ff);
+	}
+}
+
 static int sh_mobile_sdhi_wait_idle(struct tmio_mmc_host *host)
 {
 	int timeout = 1000;
@@ -234,6 +246,8 @@  static int sh_mobile_sdhi_probe(struct platform_device *pdev)
 		goto eprobe;
 	}
 
+	host->set_clk_div	= sh_mobile_sdhi_set_clk_div;
+
 	host->dma		= dma_priv;
 	host->write16_hook	= sh_mobile_sdhi_write16_hook;
 	host->clk_enable	= sh_mobile_sdhi_clk_enable;