diff options
author | Frank Li <Frank.Li@freescale.com> | 2009-07-30 11:10:14 +0800 |
---|---|---|
committer | Rob Herring <r.herring@freescale.com> | 2009-08-07 09:47:02 -0500 |
commit | 00a5ecab6939ec34ec0f7b6ca89a8686d4fbc838 (patch) | |
tree | 78813a04e2a1df3c245a95ebceba74f6ad6def4b | |
parent | 313a9b60a923feb1f74083a7b5eb1de55b3c6da0 (diff) |
ENGR00114665 iMX233-EVK work around EVK-board can't recongize some SD Card
Detect board id, if EVK1.0 set mach SD clock is 12M.
Signed-off-by: Frank Li <Frank.Li@freescale.com>
-rw-r--r-- | arch/arm/mach-stmp3xxx/include/mach/stmp3xxx.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-stmp3xxx/stmp378x.c | 14 | ||||
-rw-r--r-- | drivers/mmc/host/stmp3xxx_mmc.c | 6 |
3 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/mach-stmp3xxx/include/mach/stmp3xxx.h b/arch/arm/mach-stmp3xxx/include/mach/stmp3xxx.h index 08509580e9be..da117fa4d103 100644 --- a/arch/arm/mach-stmp3xxx/include/mach/stmp3xxx.h +++ b/arch/arm/mach-stmp3xxx/include/mach/stmp3xxx.h @@ -19,6 +19,7 @@ #define __ASM_PLAT_STMP3XXX_H #include <linux/suspend.h> +#include <mach/regs-ocotp.h> struct stmpkbd_keypair { int raw; @@ -88,4 +89,6 @@ extern int stmp3xxx_ssp2_device_register(void); extern int spdif_pinmux_request(void); extern void spdif_pinmux_release(void); +extern int get_evk_board_version(); + #endif /* __ASM_PLAT_STMP3XXX_H */ diff --git a/arch/arm/mach-stmp3xxx/stmp378x.c b/arch/arm/mach-stmp3xxx/stmp378x.c index 61eeb46d257e..6af69b87b4b0 100644 --- a/arch/arm/mach-stmp3xxx/stmp378x.c +++ b/arch/arm/mach-stmp3xxx/stmp378x.c @@ -48,6 +48,7 @@ #include <mach/regs-icoll.h> #include <mach/regs-apbh.h> #include <mach/regs-apbx.h> +#include <mach/regs-ocotp.h> #include "common.h" @@ -395,3 +396,16 @@ void __init stmp378x_map_io(void) { iotable_init(stmp378x_io_desc, ARRAY_SIZE(stmp378x_io_desc)); } + +int get_evk_board_version() +{ + int boardid; + boardid = HW_OCOTP_CUSTCAP_RD(); + if ((boardid & 0x30000000) == 0x10000000) + return 1; + else + return 0; +} + +EXPORT_SYMBOL_GPL(get_evk_board_version); + diff --git a/drivers/mmc/host/stmp3xxx_mmc.c b/drivers/mmc/host/stmp3xxx_mmc.c index 6e2e749fbf10..b5c9bc3580a4 100644 --- a/drivers/mmc/host/stmp3xxx_mmc.c +++ b/drivers/mmc/host/stmp3xxx_mmc.c @@ -573,6 +573,12 @@ stmp3xxx_set_sclk_speed(struct stmp3xxx_mmc_host *host, unsigned int hz) u32 div1, div2; struct stmp3xxxmmc_platform_data *pdata = host->dev->platform_data; + if (get_evk_board_version() == 1) { + /*EVK Ver1 max clock is 12M*/ + if (hz > 12000000) + hz = 12000000; + } + if (pdata && pdata->setclock) { /* if the SSP is buggy and platform provides callback... |