public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] omap3: mmc: mmc2 support
Date: Wed, 1 Apr 2009 11:27:46 +0200	[thread overview]
Message-ID: <20090401092746.GC14366@game.jcrosoft.org> (raw)
In-Reply-To: <49CDB09C.3040904@samsung.com>

On 14:07 Sat 28 Mar     , Minkyu Kang wrote:
> There are 3 MMC/SD/SDIO host controllers inside the device.
> This patch will support mmc2 and mmc3(mmc3 have not tested)
> 
> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
> ---
>  drivers/mmc/omap3_mmc.c                   |   74 ++++++++++++++++++++++++-----
>  include/asm-arm/arch-omap3/mmc_host_def.h |   10 +++-
>  include/asm-arm/arch-omap3/omap3.h        |    3 +
>  3 files changed, 73 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mmc/omap3_mmc.c b/drivers/mmc/omap3_mmc.c
> index e90db7e..934caff 100644
> --- a/drivers/mmc/omap3_mmc.c
> +++ b/drivers/mmc/omap3_mmc.c
> @@ -51,7 +51,8 @@ const unsigned short mmc_transspeed_val[15][4] = {
>  
>  mmc_card_data cur_card_data;
>  static block_dev_desc_t mmc_blk_dev;
> -static hsmmc_t *mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE;
> +static hsmmc_t *mmc_base;
> +static int curr_device = -1;
>  
>  block_dev_desc_t *mmc_get_dev(int dev)
>  {
> @@ -62,10 +63,21 @@ void twl4030_mmc_config(void)
>  {
>  	unsigned char data;
>  
> -	data = DEV_GRP_P1;
> -	i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1);
> -	data = VMMC1_VSEL_30;
> -	i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1);
> +	switch (curr_device) {
> +	case 1:
> +		data = DEV_GRP_P1;
> +		i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1);
> +		data = VMMC1_VSEL_30;
> +		i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1);
> +		break;
> +	case 2:
> +	case 3:
> +		data = DEV_GRP_P1;
> +		i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEV_GRP, 1, &data, 1);
> +		data = VMMC2_VSEL_185;
> +		i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEDICATED, 1, &data, 1);
> +		break;
> +	}
>  }
>  
>  unsigned char mmc_board_init(void)
unsigned char?
why
> @@ -74,12 +86,21 @@ unsigned char mmc_board_init(void)
>  
>  	twl4030_mmc_config();
>  
> -	writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |
> -		PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
> -		&t2_base->pbias_lite);
> +	switch (curr_device) {
> +	case 1:
> +		writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |
> +			PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
> +			&t2_base->pbias_lite);
>  
> -	writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
> -		&t2_base->devconf0);
> +		writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
> +			&t2_base->devconf0);
> +		break;
> +	case 2:
> +	case 3:
> +		writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,
> +			&t2_base->devconf1);
> +		break;
> +	}
please only active code when the user activate the mmcx support

how your driver will work it I want to have two mmc support at the sametime??
>  
>  	return 1;
>  }
> @@ -525,8 +546,37 @@ unsigned long mmc_bread(int dev_num, unsigned long blknr, lbaint_t blkcnt,
>  	return 1;
>  }
>  
> -int mmc_legacy_init(int verbose)
> +int mmc_set_dev(int dev)
> +{
> +	if (dev < 0) {
> +		printf("unknwon device\n");
> +		return 1;
no need already done in the switch
please remove
> +	} else {
> +		switch (dev) {
> +		case 1:
> +			mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE_MMC1;
> +			break;
> +		case 2:
> +			mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE_MMC2;
> +			break;
> +		case 3:
> +			mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE_MMC3;
> +			break;
has precedently please activate it only when it's need
for each MMC slot
> +		default:
> +			printf("unknwon device\n");
> +			return 1;
> +		}
> +		curr_device = dev;
> +	}
> +
> +	return 0;
> +}
> +
> +int mmc_legacy_init(int dev)
>  {
> +	if (mmc_set_dev(dev) != 0)
> +		return 1;
> +
btw it will better to move to the new Framework
>  	if (configure_mmc(&cur_card_data) != 1)
>  		return 1;
>  
> @@ -538,7 +588,7 @@ int mmc_legacy_init(int verbose)
>  
>  	/* FIXME fill in the correct size (is set to 32MByte) */
>  	mmc_blk_dev.blksz = MMCSD_SECTOR_SIZE;
> -	mmc_blk_dev.lba = 0x10000;
> +	mmc_blk_dev.lba = cur_card_data.size;
>  	mmc_blk_dev.removable = 0;
>  	mmc_blk_dev.block_read = mmc_bread;
>  
> diff --git a/include/asm-arm/arch-omap3/mmc_host_def.h b/include/asm-arm/arch-omap3/mmc_host_def.h
> index aa751c9..8b234ef 100644
> --- a/include/asm-arm/arch-omap3/mmc_host_def.h
> +++ b/include/asm-arm/arch-omap3/mmc_host_def.h
> @@ -31,7 +31,9 @@
>  typedef struct t2 {
>  	unsigned char res1[0x274];
>  	unsigned int devconf0;		/* 0x274 */
> -	unsigned char res2[0x2A8];
> +	unsigned char res2[0x60];
> +	unsigned int devconf1;		/* 0x2D8 */
> +	unsigned char res3[0x244];
>  	unsigned int pbias_lite;	/* 0x520 */
>  } t2_t;
>  
> @@ -41,10 +43,14 @@ typedef struct t2 {
>  #define PBIASSPEEDCTRL0			(1 << 2)
>  #define PBIASLITEPWRDNZ1		(1 << 9)
>  
> +#define MMCSDIO2ADPCLKISEL		(1 << 6)
> +
>  /*
>   * OMAP HSMMC register definitions
>   */
> -#define OMAP_HSMMC_BASE		0x4809C000
> +#define OMAP_HSMMC_BASE_MMC1	0x4809C000
> +#define OMAP_HSMMC_BASE_MMC2	0x480B4000
> +#define OMAP_HSMMC_BASE_MMC3	0x480AD000
it's really a shame that TI does not make it in order and at the same shift
so we could do this
#define OMAP_HSMMC_BASE(x) (0x4809C000 + (shift << x))

Best Regards,
J.

  reply	other threads:[~2009-04-01  9:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-28  5:07 [U-Boot] [PATCH] omap3: mmc: mmc2 support Minkyu Kang
2009-04-01  9:27 ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2009-04-02 10:19   ` Minkyu Kang
  -- strict thread matches above, loose matches on Subject: below --
2009-03-27 15:17 Minkyu Kang
2009-03-26 10:47 Minkyu Kang
2009-03-26 23:16 ` Dirk Behme
2009-03-27 19:01   ` Wolfgang Denk

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=20090401092746.GC14366@game.jcrosoft.org \
    --to=plagnioj@jcrosoft.com \
    --cc=u-boot@lists.denx.de \
    /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