summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@freescale.com>2009-07-30 11:10:14 +0800
committerRob Herring <r.herring@freescale.com>2009-08-07 09:47:02 -0500
commit00a5ecab6939ec34ec0f7b6ca89a8686d4fbc838 (patch)
tree78813a04e2a1df3c245a95ebceba74f6ad6def4b
parent313a9b60a923feb1f74083a7b5eb1de55b3c6da0 (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.h3
-rw-r--r--arch/arm/mach-stmp3xxx/stmp378x.c14
-rw-r--r--drivers/mmc/host/stmp3xxx_mmc.c6
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...