From: Samuel Ortiz <sameo@openedhand.com>
To: Philipp Zabel <philipp.zabel@gmail.com>
Cc: linux-kernel@vger.kernel.org, Ian Molton <ian@mnementh.co.uk>,
Pierre Ossman <pierre@ossman.eu>
Subject: Re: [PATCH 1/7] MFD,mmc: tmio_mmc: make HCLK configurable
Date: Fri, 5 Jun 2009 00:55:26 +0200 [thread overview]
Message-ID: <20090604225525.GA5460@sortiz.org> (raw)
In-Reply-To: <1244139157-16404-2-git-send-email-philipp.zabel@gmail.com>
Hi Philip,
On Thu, Jun 04, 2009 at 08:12:31PM +0200, Philipp Zabel wrote:
> The Toshiba parts all have a 24 MHz HCLK, but HTC ASIC3 has a 24.576 MHz HCLK
> and AMD Imageon w228x's HCLK is 80 MHz. With this patch, the MFD driver
> provides the HCLK frequency to tmio_mmc via mfd_cell->driver_data.
Applied to my for-next branch, many thanks.
> Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
> Acked-by: Ian Molton <ian@mnementh.co.uk>
> Cc: Samuel Ortiz <sameo@openedhand.com>
> Cc: Pierre Ossman <pierre@ossman.eu>
> ---
> drivers/mfd/t7l66xb.c | 5 +++++
> drivers/mfd/tc6387xb.c | 5 +++++
> drivers/mfd/tc6393xb.c | 5 +++++
> drivers/mmc/host/tmio_mmc.c | 24 +++++++++++-------------
> include/linux/mfd/tmio.h | 7 +++++++
> 5 files changed, 33 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/mfd/t7l66xb.c b/drivers/mfd/t7l66xb.c
> index e9f4323..875f7a8 100644
> --- a/drivers/mfd/t7l66xb.c
> +++ b/drivers/mfd/t7l66xb.c
> @@ -108,6 +108,10 @@ static int t7l66xb_mmc_disable(struct platform_device *mmc)
>
> /*--------------------------------------------------------------------------*/
>
> +static const struct tmio_mmc_data t7166xb_mmc_data = {
> + .hclk = 24000000,
> +};
> +
> static const struct resource t7l66xb_mmc_resources[] = {
> {
> .start = 0x800,
> @@ -149,6 +153,7 @@ static struct mfd_cell t7l66xb_cells[] = {
> .name = "tmio-mmc",
> .enable = t7l66xb_mmc_enable,
> .disable = t7l66xb_mmc_disable,
> + .driver_data = &t7166xb_mmc_data,
> .num_resources = ARRAY_SIZE(t7l66xb_mmc_resources),
> .resources = t7l66xb_mmc_resources,
> },
> diff --git a/drivers/mfd/tc6387xb.c b/drivers/mfd/tc6387xb.c
> index 43222c1..c3993ac 100644
> --- a/drivers/mfd/tc6387xb.c
> +++ b/drivers/mfd/tc6387xb.c
> @@ -75,6 +75,10 @@ static int tc6387xb_mmc_disable(struct platform_device *mmc)
>
> /*--------------------------------------------------------------------------*/
>
> +const static struct tmio_mmc_data tc6387xb_mmc_data = {
> + .hclk = 24000000,
> +};
> +
> static struct resource tc6387xb_mmc_resources[] = {
> {
> .start = 0x800,
> @@ -98,6 +102,7 @@ static struct mfd_cell tc6387xb_cells[] = {
> .name = "tmio-mmc",
> .enable = tc6387xb_mmc_enable,
> .disable = tc6387xb_mmc_disable,
> + .driver_data = &tc6387xb_mmc_data,
> .num_resources = ARRAY_SIZE(tc6387xb_mmc_resources),
> .resources = tc6387xb_mmc_resources,
> },
> diff --git a/drivers/mfd/tc6393xb.c b/drivers/mfd/tc6393xb.c
> index 77a12fc..9d2abb5 100644
> --- a/drivers/mfd/tc6393xb.c
> +++ b/drivers/mfd/tc6393xb.c
> @@ -136,6 +136,10 @@ static int tc6393xb_nand_enable(struct platform_device *nand)
> return 0;
> }
>
> +const static struct tmio_mmc_data tc6393xb_mmc_data = {
> + .hclk = 24000000,
> +};
> +
> static struct resource __devinitdata tc6393xb_nand_resources[] = {
> {
> .start = 0x1000,
> @@ -351,6 +355,7 @@ static struct mfd_cell __devinitdata tc6393xb_cells[] = {
> },
> [TC6393XB_CELL_MMC] = {
> .name = "tmio-mmc",
> + .driver_data = &tc6393xb_mmc_data,
> .num_resources = ARRAY_SIZE(tc6393xb_mmc_resources),
> .resources = tc6393xb_mmc_resources,
> },
> diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c
> index 63fbd5b..49df71e 100644
> --- a/drivers/mmc/host/tmio_mmc.c
> +++ b/drivers/mmc/host/tmio_mmc.c
> @@ -35,23 +35,14 @@
>
> #include "tmio_mmc.h"
>
> -/*
> - * Fixme - documentation conflicts on what the clock values are for the
> - * various dividers.
> - * One document I have says that its a divisor of a 24MHz clock, another 33.
> - * This probably depends on HCLK for a given platform, so we may need to
> - * require HCLK be passed to us from the MFD core.
> - *
> - */
> -
> static void tmio_mmc_set_clock(struct tmio_mmc_host *host, int new_clock)
> {
> void __iomem *cnf = host->cnf;
> void __iomem *ctl = host->ctl;
> - u32 clk = 0, clock;
> + u32 clk = 0, clock, f_min = host->mmc->f_min;
>
> if (new_clock) {
> - for (clock = 46875, clk = 0x100; new_clock >= (clock<<1); ) {
> + for (clock = f_min, clk = 0x100; new_clock >= (clock<<1); ) {
> clock <<= 1;
> clk >>= 1;
> }
> @@ -545,6 +536,7 @@ out:
> static int __devinit tmio_mmc_probe(struct platform_device *dev)
> {
> struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
> + struct tmio_mmc_data *pdata;
> struct resource *res_ctl, *res_cnf;
> struct tmio_mmc_host *host;
> struct mmc_host *mmc;
> @@ -560,6 +552,12 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev)
> goto out;
> }
>
> + pdata = cell->driver_data;
> + if (!pdata || !pdata->hclk) {
> + ret = -EINVAL;
> + goto out;
> + }
> +
> mmc = mmc_alloc_host(sizeof(struct tmio_mmc_host), &dev->dev);
> if (!mmc)
> goto out;
> @@ -578,8 +576,8 @@ static int __devinit tmio_mmc_probe(struct platform_device *dev)
>
> mmc->ops = &tmio_mmc_ops;
> mmc->caps = MMC_CAP_4_BIT_DATA;
> - mmc->f_min = 46875; /* 24000000 / 512 */
> - mmc->f_max = 24000000;
> + mmc->f_max = pdata->hclk;
> + mmc->f_min = mmc->f_max / 512;
> mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
>
> /* Enable the MMC/SD Control registers */
> diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h
> index 516d955..c377118 100644
> --- a/include/linux/mfd/tmio.h
> +++ b/include/linux/mfd/tmio.h
> @@ -19,6 +19,13 @@
> } while (0)
>
> /*
> + * data for the MMC controller
> + */
> +struct tmio_mmc_data {
> + unsigned int hclk;
> +};
> +
> +/*
> * data for the NAND controller
> */
> struct tmio_nand_data {
> --
> 1.6.3.1
>
--
Intel Open Source Technology Centre
http://oss.intel.com/
next prev parent reply other threads:[~2009-06-04 22:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-04 18:12 [PATCH 0/7] ASIC3 support for tmio_mmc Philipp Zabel
2009-06-04 18:12 ` [PATCH 1/7] MFD,mmc: tmio_mmc: make HCLK configurable Philipp Zabel
2009-06-04 22:55 ` Samuel Ortiz [this message]
2009-06-04 18:12 ` [PATCH 2/7] mmc: tmio_mmc: add bus_shift support Philipp Zabel
2009-06-04 18:12 ` [PATCH 3/7] mmc: tmio_mmc: don't use set_irq_type (v2) Philipp Zabel
2009-06-04 18:12 ` [PATCH 4/7] mmc: tmio_mmc: correct probe return value for num_resources != 3 Philipp Zabel
2009-06-04 18:12 ` [PATCH 5/7] mmc: tmio_mmc: map SD control registers after enabling the MFD cell Philipp Zabel
2009-06-12 21:36 ` Ian molton
2009-06-04 18:12 ` [PATCH 6/7] mmc: tmio_mmc: fix SDCLK divider setting Philipp Zabel
2009-06-12 21:44 ` Ian Molton
2009-06-04 18:12 ` [PATCH 7/7] mmc: tmio_mmc: allow compilation for ASIC3 Philipp Zabel
2009-06-12 21:47 ` Ian molton
2009-06-12 22:38 ` pHilipp Zabel
2009-06-13 11:58 ` [PATCH 0/7] ASIC3 support for tmio_mmc Pierre Ossman
2009-06-13 18:42 ` Ian Molton
2009-06-13 19:32 ` Pierre Ossman
2009-06-13 19:57 ` Ian Molton
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=20090604225525.GA5460@sortiz.org \
--to=sameo@openedhand.com \
--cc=ian@mnementh.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=philipp.zabel@gmail.com \
--cc=pierre@ossman.eu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.