summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-ardbeg-sdhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/board-ardbeg-sdhci.c')
-rw-r--r--arch/arm/mach-tegra/board-ardbeg-sdhci.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/board-ardbeg-sdhci.c b/arch/arm/mach-tegra/board-ardbeg-sdhci.c
index 5d7d2fbde651..80ea1e8b2055 100644
--- a/arch/arm/mach-tegra/board-ardbeg-sdhci.c
+++ b/arch/arm/mach-tegra/board-ardbeg-sdhci.c
@@ -27,6 +27,7 @@
#include <linux/wl12xx.h>
#include <linux/platform_data/mmc-sdhci-tegra.h>
#include <linux/mfd/max77660/max77660-core.h>
+#include <linux/tegra-fuse.h>
#include <asm/mach-types.h>
#include <mach/irqs.h>
@@ -50,6 +51,7 @@ static unsigned int wifi_states[] = {ON, OFF};
#define ARDBEG_SD_CD TEGRA_GPIO_PV2
#define ARDBEG_SD_WP TEGRA_GPIO_PQ4
+#define FUSE_SOC_SPEEDO_0 0x134
static void (*wifi_status_cb)(int card_present, void *dev_id);
static void *wifi_status_cb_devid;
@@ -206,7 +208,7 @@ static struct tegra_sdhci_platform_data tegra_sdhci_platform_data3 = {
.power_gpio = -1,
.is_8bit = 1,
.tap_delay = 0x4,
- .trim_delay = 0x4,
+ .trim_delay = 0x3,
.ddr_trim_delay = 0x0,
.mmc_data = {
.built_in = 1,
@@ -384,7 +386,8 @@ static int __init ardbeg_wifi_prepower(void)
!of_machine_is_compatible("nvidia,laguna") &&
!of_machine_is_compatible("nvidia,ardbeg_sata") &&
!of_machine_is_compatible("nvidia,tn8") &&
- !of_machine_is_compatible("nvidia,norrin"))
+ !of_machine_is_compatible("nvidia,norrin") &&
+ !of_machine_is_compatible("nvidia,jetson-tk1"))
return 0;
ardbeg_wifi_power(1);
@@ -399,6 +402,7 @@ int __init ardbeg_sdhci_init(void)
int nominal_core_mv;
int min_vcore_override_mv;
int boot_vcore_mv;
+ u32 speedo;
struct board_info board_info;
nominal_core_mv =
@@ -425,7 +429,8 @@ int __init ardbeg_sdhci_init(void)
tegra_sdhci_platform_data3.boot_vcore_mv = boot_vcore_mv;
}
- if (of_machine_is_compatible("nvidia,laguna"))
+ if (of_machine_is_compatible("nvidia,laguna") ||
+ of_machine_is_compatible("nvidia,jetson-tk1"))
tegra_sdhci_platform_data2.wp_gpio = ARDBEG_SD_WP;
tegra_get_board_info(&board_info);
@@ -443,6 +448,24 @@ int __init ardbeg_sdhci_init(void)
board_info.board_id == BOARD_PM359)
tegra_sdhci_platform_data0.disable_clock_gate = 1;
+ /*
+ * FIXME: Set max clk limit to 200MHz for SDMMC3 for PM375.
+ * Requesting 208MHz results in getting 204MHz from PLL_P
+ * and CRC errors are seen with same.
+ */
+ if (board_info.board_id == BOARD_PM375)
+ tegra_sdhci_platform_data2.max_clk_limit = 200000000;
+
+ speedo = tegra_fuse_readl(FUSE_SOC_SPEEDO_0);
+ tegra_sdhci_platform_data0.cpu_speedo = speedo;
+ tegra_sdhci_platform_data2.cpu_speedo = speedo;
+ tegra_sdhci_platform_data3.cpu_speedo = speedo;
+
+ speedo = tegra_fuse_readl(FUSE_SOC_SPEEDO_0);
+ tegra_sdhci_platform_data0.cpu_speedo = speedo;
+ tegra_sdhci_platform_data2.cpu_speedo = speedo;
+ tegra_sdhci_platform_data3.cpu_speedo = speedo;
+
platform_device_register(&tegra_sdhci_device3);
platform_device_register(&tegra_sdhci_device2);
if (board_info.board_id != BOARD_PM359 &&