/*
* arch/arm/mach-tegra/board-cardhu.c
*
- * Copyright (c) 2011-2012, NVIDIA Corporation. All rights reserved.
+ * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <linux/input.h>
#include <linux/platform_data/tegra_usb.h>
#include <linux/spi/spi.h>
+#include <linux/spi/rm31080a_ts.h>
#include <linux/i2c/atmel_mxt_ts.h>
#include <linux/tegra_uart.h>
#include <linux/memblock.h>
#include <linux/spi-tegra.h>
#include <linux/nfc/pn544.h>
#include <linux/rfkill-gpio.h>
+#include <linux/of_platform.h>
#include <sound/wm8903.h>
#include <sound/max98095.h>
#include <asm/hardware/gic.h>
+#include <mach/edp.h>
#include <mach/clk.h>
#include <mach/iomap.h>
#include <mach/irqs.h>
#include <mach/io.h>
#include <mach/i2s.h>
#include <mach/tegra_asoc_pdata.h>
+#include <mach/tegra_rt5640_pdata.h>
#include <mach/tegra_wm8903_pdata.h>
#include <mach/usb_phy.h>
-#include <mach/thermal.h>
#include <mach/pci.h>
#include <mach/gpio-tegra.h>
#include <mach/tegra_fiq_debugger.h>
#include <asm/mach/arch.h>
#include "board.h"
+#include "board-common.h"
#include "clock.h"
#include "board-cardhu.h"
-#include "board-touch.h"
+#include "board-touch-raydium.h"
#include "devices.h"
#include "gpio-names.h"
#include "fuse.h"
#include "wdt-recovery.h"
#include "common.h"
-static struct balanced_throttle throttle_list[] = {
-#ifdef CONFIG_TEGRA_THERMAL_THROTTLE
- {
- .id = BALANCED_THROTTLE_ID_TJ,
- .throt_tab_size = 10,
- .throt_tab = {
- { 0, 1000 },
- { 640000, 1000 },
- { 640000, 1000 },
- { 640000, 1000 },
- { 640000, 1000 },
- { 640000, 1000 },
- { 760000, 1000 },
- { 760000, 1050 },
- {1000000, 1050 },
- {1000000, 1100 },
- },
- },
-#endif
-#ifdef CONFIG_TEGRA_SKIN_THROTTLE
- {
- .id = BALANCED_THROTTLE_ID_SKIN,
- .throt_tab_size = 6,
- .throt_tab = {
- { 640000, 1200 },
- { 640000, 1200 },
- { 760000, 1200 },
- { 760000, 1200 },
- {1000000, 1200 },
- {1000000, 1200 },
- },
- },
-#endif
-};
-
-/* All units are in millicelsius */
-static struct tegra_thermal_data thermal_data = {
- .shutdown_device_id = THERMAL_DEVICE_ID_NCT_EXT,
- .temp_shutdown = 90000,
-
-#if defined(CONFIG_TEGRA_EDP_LIMITS) || defined(CONFIG_TEGRA_THERMAL_THROTTLE)
- .throttle_edp_device_id = THERMAL_DEVICE_ID_NCT_EXT,
-#endif
-#ifdef CONFIG_TEGRA_EDP_LIMITS
- .edp_offset = TDIODE_OFFSET, /* edp based on tdiode */
- .hysteresis_edp = 3000,
-#endif
-#ifdef CONFIG_TEGRA_THERMAL_THROTTLE
- .temp_throttle = 85000,
- .tc1 = 0,
- .tc2 = 1,
- .passive_delay = 2000,
-#endif
-#ifdef CONFIG_TEGRA_SKIN_THROTTLE
- .skin_device_id = THERMAL_DEVICE_ID_SKIN,
- .temp_throttle_skin = 43000,
- .tc1_skin = 0,
- .tc2_skin = 1,
- .passive_delay_skin = 5000,
-
- .skin_temp_offset = 9793,
- .skin_period = 1100,
- .skin_devs_size = 2,
- .skin_devs = {
- {
- THERMAL_DEVICE_ID_NCT_EXT,
- {
- 2, 1, 1, 1,
- 1, 1, 1, 1,
- 1, 1, 1, 0,
- 1, 1, 0, 0,
- 0, 0, -1, -7
- }
- },
- {
- THERMAL_DEVICE_ID_NCT_INT,
- {
- -11, -7, -5, -3,
- -3, -2, -1, 0,
- 0, 0, 1, 1,
- 1, 2, 2, 3,
- 4, 6, 11, 18
- }
- },
- },
-#endif
-};
-
static struct rfkill_gpio_platform_data cardhu_bt_rfkill_pdata[] = {
{
.name = "bt_rfkill",
.platform_data = &cardhu_max98095_pdata,
};
+static struct i2c_board_info __initdata rt5640_board_info = {
+ I2C_BOARD_INFO("rt5640", 0x1c),
+};
+
+
static void cardhu_i2c_init(void)
{
+ struct board_info board_info;
+
+ tegra_get_board_info(&board_info);
+
tegra_i2c_device1.dev.platform_data = &cardhu_i2c1_platform_data;
tegra_i2c_device2.dev.platform_data = &cardhu_i2c2_platform_data;
tegra_i2c_device3.dev.platform_data = &cardhu_i2c3_platform_data;
cardhu_codec_wm8903_info.irq = cardhu_codec_max98095_info.irq =
cardhu_codec_aic326x_info.irq = gpio_to_irq(TEGRA_GPIO_CDC_IRQ);
- i2c_register_board_info(4, &cardhu_codec_wm8903_info, 1);
+
+ if (board_info.board_id == BOARD_PM315)
+ i2c_register_board_info(4, &rt5640_board_info, 1);
+ else
+ i2c_register_board_info(4, &cardhu_codec_wm8903_info, 1);
i2c_register_board_info(4, &cardhu_codec_max98095_info, 1);
i2c_register_board_info(4, &cardhu_codec_aic326x_info, 1);
static struct tegra_uart_platform_data cardhu_uart_pdata;
static struct tegra_uart_platform_data cardhu_loopback_uart_pdata;
-static void __init uart_debug_init(void)
+static int __init uart_debug_init(void)
{
struct board_info board_info;
int debug_port_id;
+ int default_debug_port = 0;
tegra_get_board_info(&board_info);
- debug_port_id = get_tegra_uart_debug_port_id();
- if (debug_port_id < 0) {
- debug_port_id = 0;
- /* UARTB is debug port
- * for SLT - E1186/E1187/PM269
- * for E1256/E1257
- */
- if (((board_info.sku & SKU_SLT_ULPI_SUPPORT) &&
- ((board_info.board_id == BOARD_E1186) ||
- (board_info.board_id == BOARD_E1187) ||
- (board_info.board_id == BOARD_PM269))) ||
- (board_info.board_id == BOARD_E1256) ||
- (board_info.board_id == BOARD_E1257))
- debug_port_id = 1;
- }
+ /* UARTB is debug port
+ * for SLT - E1186/E1187/PM269
+ * for E1256/E1257
+ */
+ if (((board_info.sku & SKU_SLT_ULPI_SUPPORT) &&
+ ((board_info.board_id == BOARD_E1186) ||
+ (board_info.board_id == BOARD_E1187) ||
+ (board_info.board_id == BOARD_PM269))) ||
+ (board_info.board_id == BOARD_E1256) ||
+ (board_info.board_id == BOARD_E1257))
+ default_debug_port = 1;
+
+ debug_port_id = uart_console_debug_init(default_debug_port);
+ if (debug_port_id < 0)
+ return debug_port_id;
#ifdef CONFIG_TEGRA_IRDA
if ((board_info.board_id == BOARD_E1186) ||
}
}
#endif
-
- switch (debug_port_id) {
- case 0:
- /* UARTA is the debug port. */
- pr_info("Selecting UARTA as the debug console\n");
- cardhu_uart_devices[0] = &debug_uarta_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uarta");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uarta_device.dev.platform_data))->mapbase;
- break;
-
- case 1:
- /* UARTB is the debug port. */
- pr_info("Selecting UARTB as the debug console\n");
- cardhu_uart_devices[1] = &debug_uartb_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uartb");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uartb_device.dev.platform_data))->mapbase;
- break;
-
- case 2:
- /* UARTC is the debug port. */
- pr_info("Selecting UARTC as the debug console\n");
- cardhu_uart_devices[2] = &debug_uartc_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uartc");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uartc_device.dev.platform_data))->mapbase;
- break;
-
- case 3:
- /* UARTD is the debug port. */
- pr_info("Selecting UARTD as the debug console\n");
- cardhu_uart_devices[3] = &debug_uartd_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uartd");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uartd_device.dev.platform_data))->mapbase;
- break;
-
- case 4:
- /* UARTE is the debug port. */
- pr_info("Selecting UARTE as the debug console\n");
- cardhu_uart_devices[4] = &debug_uarte_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uarte");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uarte_device.dev.platform_data))->mapbase;
- break;
-
- default:
- pr_info("The debug console id %d is invalid, Assuming UARTA", debug_port_id);
- cardhu_uart_devices[0] = &debug_uarta_device;
- debug_uart_clk = clk_get_sys("serial8250.0", "uarta");
- debug_uart_port_base = ((struct plat_serial8250_port *)(
- debug_uarta_device.dev.platform_data))->mapbase;
- break;
- }
- return;
+ cardhu_uart_devices[debug_port_id] = uart_console_debug_device;
+ return debug_port_id;
}
static void __init cardhu_uart_init(void)
tegra_uarte_device.dev.platform_data = &cardhu_loopback_uart_pdata;
/* Register low speed only if it is selected */
- if (!is_tegra_debug_uartport_hs()) {
+ if (!is_tegra_debug_uartport_hs())
uart_debug_init();
- /* Clock enable for the debug channel */
- if (!IS_ERR_OR_NULL(debug_uart_clk)) {
- pr_info("The debug console clock name is %s\n",
- debug_uart_clk->name);
- c = tegra_get_clock_by_name("pll_p");
- if (IS_ERR_OR_NULL(c))
- pr_err("Not getting the parent clock pll_p\n");
- else
- clk_set_parent(debug_uart_clk, c);
-
- clk_enable(debug_uart_clk);
- clk_set_rate(debug_uart_clk, clk_get_rate(c));
- } else {
- pr_err("Not getting the clock %s for debug console\n",
- debug_uart_clk->name);
- }
- }
#ifdef CONFIG_TEGRA_IRDA
if (((board_info.board_id == BOARD_E1186) ||
&tegra_spi_device4,
};
+/*-----------------------------------------------------*/
+/* Force Cardhu Direct Touch:
+ Valid Choices:
+ 0 : Do not force Direct Touch
+ 2 : RM_PLATFORM_C210 : Cardhu 10" J-Touch Panel
+ 4 : RM_PLATFORM_P005 ; Pluto 5" J-Touch Panel
+*/
+#define CARDHU_DT_PLATFORM 0 /* RM_PLATFORM_C210 */
+
static struct platform_device *touch_spi_device[] __initdata = {
&tegra_spi_device1,
};
platform_add_devices(cardhu_spi_devices,
ARRAY_SIZE(cardhu_spi_devices));
- if (display_board_info.board_id == BOARD_DISPLAY_PM313) {
+ if ((display_board_info.board_id == BOARD_DISPLAY_PM313)
+ || CARDHU_DT_PLATFORM) {
platform_add_devices(touch_spi_device,
ARRAY_SIZE(touch_spi_device));
}
+
if (board_info.board_id == BOARD_E1198) {
tegra_spi_device2.dev.platform_data = &cardhu_spi_pdata;
platform_device_register(&tegra_spi_device2);
.num_resources = ARRAY_SIZE(tegra_rtc_resources),
};
-static struct tegra_wm8903_platform_data cardhu_audio_wm8903_pdata = {
+static struct tegra_asoc_platform_data cardhu_audio_wm8903_pdata = {
.gpio_spkr_en = TEGRA_GPIO_SPKR_EN,
.gpio_hp_det = TEGRA_GPIO_HP_DET,
.gpio_hp_mute = -1,
.gpio_int_mic_en = -1,
.gpio_ext_mic_en = -1,
+ .i2s_param[HIFI_CODEC] = {
+ .audio_port_id = 0,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_I2S,
+ },
+ .i2s_param[BASEBAND] = {
+ .audio_port_id = -1,
+ },
+ .i2s_param[BT_SCO] = {
+ .audio_port_id = 3,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_DSP_A,
+ },
};
static struct tegra_asoc_platform_data cardhu_audio_max98095_pdata = {
.gpio_hp_mute = -1,
.gpio_int_mic_en = -1,
.gpio_ext_mic_en = -1,
+ .i2s_param[HIFI_CODEC] = {
+ .audio_port_id = 0,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_I2S,
+ },
+ .i2s_param[BASEBAND] = {
+ .audio_port_id = -1,
+ },
+ .i2s_param[BT_SCO] = {
+ .audio_port_id = 3,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_DSP_A,
+ },
};
static struct platform_device cardhu_audio_wm8903_device = {
.gpio_int_mic_en = -1,
.gpio_ext_mic_en = -1,
/*defaults for Verbier-Cardhu board with TI AIC326X codec*/
- .audio_port_id = {
- [HIFI_CODEC] = 0,
- [BASEBAND] = -1,
- [BT_SCO] = 3,
+ .i2s_param[HIFI_CODEC] = {
+ .audio_port_id = 0,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_I2S,
+ .sample_size = 16,
},
- .baseband_param = {
- .rate = -1,
- .channels = -1,
+ .i2s_param[BT_SCO] = {
+ .sample_size = 16,
+ .audio_port_id = 3,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_DSP_A,
},
};
},
};
+static struct tegra_asoc_platform_data beaver_audio_rt5640_pdata = {
+ .codec_name = "rt5640.4-001c",
+ .codec_dai_name = "rt5640-aif1",
+ .gpio_spkr_en = TEGRA_GPIO_RTL_SPKR_EN,
+ .gpio_hp_det = TEGRA_GPIO_RTL_HP_DET,
+ .gpio_hp_mute = -1,
+ .gpio_int_mic_en = TEGRA_GPIO_RTL_INT_MIC_EN,
+ .gpio_ext_mic_en = -1, /* TEGRA_GPIO_EXT_MIC_EN,*/
+ .i2s_param[HIFI_CODEC] = {
+ .audio_port_id = 0,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_I2S,
+ },
+ .i2s_param[BASEBAND] = {
+ .audio_port_id = -1,
+ },
+ .i2s_param[BT_SCO] = {
+ .audio_port_id = 3,
+ .is_i2s_master = 1,
+ .i2s_mode = TEGRA_DAIFMT_DSP_A,
+ },
+};
+
+static struct platform_device beaver_audio_rt5640_device = {
+ .name = "tegra-snd-rt5640",
+ .id = 0,
+ .dev = {
+ .platform_data = &beaver_audio_rt5640_pdata,
+ },
+};
+
+
static struct platform_device *cardhu_devices[] __initdata = {
&tegra_pmu_device,
&tegra_rtc_device,
&tegra_udc_device,
-#if defined(CONFIG_TEGRA_IOVMM_SMMU) || defined(CONFIG_TEGRA_IOMMU_SMMU)
- &tegra_smmu_device,
-#endif
&tegra_wdt0_device,
&tegra_wdt1_device,
&tegra_wdt2_device,
&baseband_dit_device,
&cardhu_bt_rfkill_device,
&tegra_pcm_device,
- &cardhu_audio_wm8903_device,
&cardhu_audio_max98095_device,
&cardhu_audio_aic326x_device,
&tegra_hda_device,
#endif
};
-#define E1506_MXT_CONFIG_CRC 0x62F903
-static const u8 e1506_config[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x32, 0x0A, 0x00, 0x05, 0x01, 0x00,
- 0x00, 0x1E, 0x0A, 0x8B, 0x00, 0x00, 0x13, 0x0B,
- 0x00, 0x10, 0x32, 0x03, 0x03, 0x00, 0x03, 0x01,
- 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0xBF, 0x03, 0x1B,
- 0x02, 0x00, 0x00, 0x37, 0x37, 0x00, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xA9, 0x7F, 0x9A, 0x0E, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x23, 0x00, 0x00, 0x00, 0x0A,
- 0x0F, 0x14, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x08, 0x10,
- 0x00
-};
+static u8 read_chg(void)
+{
+ return gpio_get_value(TEGRA_GPIO_PH4);
+}
-#define MXT_CONFIG_CRC 0xD62DE8
-static const u8 config[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x32, 0x0A, 0x00, 0x14, 0x14, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00,
- 0x1B, 0x2A, 0x00, 0x20, 0x3C, 0x04, 0x05, 0x00,
- 0x02, 0x01, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0xFF,
- 0x02, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23,
- 0x00, 0x00, 0x00, 0x05, 0x0A, 0x15, 0x1E, 0x00,
- 0x00, 0x04, 0xFF, 0x03, 0x3F, 0x64, 0x64, 0x01,
- 0x0A, 0x14, 0x28, 0x4B, 0x00, 0x02, 0x00, 0x64,
- 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x10, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
+static struct platform_device *cardhu_audio_devices[] __initdata = {
+ &cardhu_audio_wm8903_device,
-#define MXT_CONFIG_CRC_SKU2000 0xA24D9A
-static const u8 config_sku2000[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x32, 0x0A, 0x00, 0x14, 0x14, 0x19,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00,
- 0x1B, 0x2A, 0x00, 0x20, 0x3A, 0x04, 0x05, 0x00, //23=thr 2 di
- 0x04, 0x04, 0x41, 0x0A, 0x0A, 0x0A, 0x0A, 0xFF,
- 0x02, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, //0A=limit
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23,
- 0x00, 0x00, 0x00, 0x05, 0x0A, 0x15, 0x1E, 0x00,
- 0x00, 0x04, 0x00, 0x03, 0x3F, 0x64, 0x64, 0x01,
- 0x0A, 0x14, 0x28, 0x4B, 0x00, 0x02, 0x00, 0x64,
- 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x10, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-static struct mxt_platform_data atmel_mxt_info = {
- .x_line = 27,
- .y_line = 42,
- .x_size = 768,
- .y_size = 1366,
- .blen = 0x20,
- .threshold = 0x3C,
- .voltage = 3300000, /* 3.3V */
- .orient = 5,
- .config = config,
- .config_length = 157,
- .config_crc = MXT_CONFIG_CRC,
- .irqflags = IRQF_TRIGGER_FALLING,
-/* .read_chg = &read_chg, */
- .read_chg = NULL,
+static struct platform_device *beaver_audio_devices[] __initdata = {
+ &beaver_audio_rt5640_device,
+
};
-static struct mxt_platform_data e1506_atmel_mxt_info = {
- .x_line = 19,
- .y_line = 11,
- .x_size = 960,
- .y_size = 540,
- .blen = 0x10,
- .threshold = 0x32,
- .voltage = 3300000, /* 3.3V */
- .orient = 3,
- .config = e1506_config,
- .config_length = 168,
- .config_crc = E1506_MXT_CONFIG_CRC,
+#define MXT_CFG_NAME "Android_Cardhu_2012-01-31.cfg"
+
+static struct mxt_platform_data atmel_mxt_info = {
.irqflags = IRQF_TRIGGER_FALLING,
-/* .read_chg = &read_chg, */
- .read_chg = NULL,
+ .read_chg = &read_chg,
+ .mxt_cfg_name = MXT_CFG_NAME,
};
static struct i2c_board_info __initdata atmel_i2c_info[] = {
{
- I2C_BOARD_INFO("atmel_mxt_ts", 0x5A),
+ I2C_BOARD_INFO("atmel_mxt_ts", MXT1386_I2C_ADDR3),
+ .flags = I2C_CLIENT_WAKE,
.platform_data = &atmel_mxt_info,
}
};
static struct i2c_board_info __initdata e1506_atmel_i2c_info[] = {
{
- I2C_BOARD_INFO("atmel_mxt_ts", 0x4A),
- .platform_data = &e1506_atmel_mxt_info,
+ I2C_BOARD_INFO("atmel_mxt_ts", MXT224_I2C_ADDR1),
+ .flags = I2C_CLIENT_WAKE,
+ .platform_data = &atmel_mxt_info,
}
};
+/* Raydium touchscreen Driver data */
static __initdata struct tegra_clk_init_table spi_clk_init_table[] = {
/* name parent rate enabled */
{ "sbc1", "pll_p", 52000000, true},
{ NULL, NULL, 0, 0},
};
+static __initdata struct tegra_clk_init_table touch_clk_init_table[] = {
+ /* name parent rate enabled */
+ { "extern3", "pll_p", 41000000, true},
+ { "clk_out_3", "extern3", 40800000, true},
+ { NULL, NULL, 0, 0},
+};
+
+struct rm_spi_ts_platform_data rm31080ts_cardhu_data = {
+ .gpio_reset = 0,
+ .config = 0,
+};
+
+struct spi_board_info rm31080a_cardhu_spi_board[1] = {
+ {
+ .modalias = "rm_ts_spidev",
+ .bus_num = 0,
+ .chip_select = 0,
+ .max_speed_hz = 13 * 1000 * 1000,
+ .mode = SPI_MODE_0,
+ .platform_data = &rm31080ts_cardhu_data,
+ },
+};
+
static int __init cardhu_touch_init(void)
{
struct board_info BoardInfo, DisplayBoardInfo;
+ int ret;
tegra_get_board_info(&BoardInfo);
tegra_get_display_board_info(&DisplayBoardInfo);
- if (DisplayBoardInfo.board_id == BOARD_DISPLAY_PM313) {
+ if ((DisplayBoardInfo.board_id == BOARD_DISPLAY_PM313)
+ || CARDHU_DT_PLATFORM) {
tegra_clk_init_from_table(spi_clk_init_table);
-
- touch_init_raydium(TEGRA_GPIO_PH4, TEGRA_GPIO_PH6, 2);
+ tegra_clk_init_from_table(touch_clk_init_table);
+ clk_enable(tegra_get_clock_by_name("clk_out_3"));
+ rm31080ts_cardhu_data.platform_id = CARDHU_DT_PLATFORM;
+ rm31080a_cardhu_spi_board[0].irq = gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
+ touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
+ TOUCH_GPIO_RST_RAYDIUM_SPI,
+ &rm31080ts_cardhu_data,
+ &rm31080a_cardhu_spi_board[0],
+ ARRAY_SIZE(rm31080a_cardhu_spi_board));
} else {
- gpio_request(TEGRA_GPIO_PH4, "atmel-irq");
- gpio_direction_input(TEGRA_GPIO_PH4);
-
- gpio_request(TEGRA_GPIO_PH6, "atmel-reset");
- gpio_direction_output(TEGRA_GPIO_PH6, 0);
+ ret = gpio_request(TEGRA_GPIO_PH4, "atmel-irq");
+ if (ret < 0) {
+ pr_err("%s() Error in gpio_request() for gpio %d\n",
+ __func__, ret);
+ }
+ ret = gpio_direction_input(TEGRA_GPIO_PH4);
+ if (ret < 0) {
+ pr_err("%s() Error in setting gpio %d to in/out\n",
+ __func__, ret);
+ gpio_free(TEGRA_GPIO_PH4);
+ }
+ ret = gpio_request(TEGRA_GPIO_PH6, "atmel-reset");
+ if (ret < 0) {
+ pr_err("%s() Error in gpio_request() for gpio %d\n",
+ __func__, ret);
+ }
+ ret = gpio_direction_output(TEGRA_GPIO_PH6, 0);
+ if (ret < 0) {
+ pr_err("%s() Error in setting gpio %d to in/out\n",
+ __func__, ret);
+ gpio_free(TEGRA_GPIO_PH6);
+ }
msleep(1);
gpio_set_value(TEGRA_GPIO_PH6, 1);
msleep(100);
- if ((BoardInfo.sku & SKU_TOUCH_MASK) == SKU_TOUCH_2000) {
- atmel_mxt_info.config = config_sku2000;
- atmel_mxt_info.config_crc = MXT_CONFIG_CRC_SKU2000;
- }
+ tegra_get_board_info(&BoardInfo);
+ if ((BoardInfo.sku & SKU_TOUCH_MASK) == SKU_TOUCH_2000)
+ strncpy(atmel_mxt_info.mxt_cfg_name,
+ "Android_Cardhu_SKU2000_2012-01-31.cfg",
+ CFG_NAME_SIZE);
if (DisplayBoardInfo.board_id == BOARD_DISPLAY_E1506) {
+ strncpy(atmel_mxt_info.mxt_cfg_name,
+ "Android_Cardhu_Verbier_E1506_2012-06-06.cfg",
+ CFG_NAME_SIZE);
e1506_atmel_i2c_info[0].irq = gpio_to_irq(TEGRA_GPIO_PH4);
i2c_register_board_info(1, e1506_atmel_i2c_info, 1);
} else {
.remote_wakeup_supported = false,
.power_off_on_suspend = false,
},
- .u_cfg.hsic = {
- .sync_start_delay = 9,
- .idle_wait_delay = 17,
- .term_range_adj = 0,
- .elastic_underrun_limit = 16,
- .elastic_overrun_limit = 16,
- },
.ops = &hsic_xmm_plat_ops,
};
#endif
void hsic_platform_open(void)
{
- int reset_gpio = 0, enable_gpio = 0;
+ int reset_gpio = -1, enable_gpio = -1;
if (hsic_enable_gpio != -1)
enable_gpio = gpio_request(hsic_enable_gpio, "uhsic_enable");
gpio_direction_output(hsic_enable_gpio, 0 /* deasserted */);
if (!reset_gpio)
gpio_direction_output(hsic_reset_gpio, 0 /* asserted */);
- if (!enable_gpio)
- tegra_gpio_enable(hsic_enable_gpio);
- if (!reset_gpio)
- tegra_gpio_enable(hsic_reset_gpio);
/* keep hsic reset asserted for 1 ms */
udelay(1000);
/* enable (power on) hsic */
.remote_wakeup_supported = false,
.power_off_on_suspend = false,
},
- .u_cfg.hsic = {
- .sync_start_delay = 9,
- .idle_wait_delay = 17,
- .term_range_adj = 0,
- .elastic_underrun_limit = 16,
- .elastic_overrun_limit = 16,
- },
.ops = &hsic_plat_ops,
};
.op_mode = TEGRA_USB_OPMODE_HOST,
.u_data.host = {
.vbus_gpio = -1,
- .vbus_reg = "vdd_vbus_typea_usb",
.hot_plug = true,
.remote_wakeup_supported = true,
.power_off_on_suspend = true,
.op_mode = TEGRA_USB_OPMODE_HOST,
.u_data.host = {
.vbus_gpio = -1,
- .vbus_reg = "vdd_vbus_micro_usb",
.hot_plug = true,
.remote_wakeup_supported = true,
.power_off_on_suspend = true,
cardhu_pci_platform_data.port_status[2] = 1;
cardhu_pci_platform_data.use_dock_detect = 1;
cardhu_pci_platform_data.gpio = DOCK_DETECT_GPIO;
+ } else if (board_info.board_id == BOARD_PM315) {
+ cardhu_pci_platform_data.port_status[0] = 1;
+ cardhu_pci_platform_data.port_status[1] = 0;
+ cardhu_pci_platform_data.port_status[2] = 1;
+ cardhu_pci_platform_data.use_dock_detect = 0;
+ cardhu_pci_platform_data.gpio = 0;
}
if ((board_info.board_id == BOARD_E1186) ||
- (board_info.board_id == BOARD_E1187) ||
- (board_info.board_id == BOARD_E1291)) {
+ (board_info.board_id == BOARD_E1187) ||
+ (board_info.board_id == BOARD_E1291) ||
+ (board_info.board_id == BOARD_PM315)) {
tegra_pci_device.dev.platform_data = &cardhu_pci_platform_data;
platform_device_register(&tegra_pci_device);
}
static void __init tegra_cardhu_init(void)
{
- tegra_thermal_init(&thermal_data,
- throttle_list,
- ARRAY_SIZE(throttle_list));
+ struct board_info board_info;
+
+ tegra_get_board_info(&board_info);
tegra_clk_init_from_table(cardhu_clk_init_table);
tegra_enable_pinmux();
+ tegra_smmu_init();
+ tegra_soc_device_init("cardhu");
cardhu_pinmux_init();
+ cardhu_gpio_init();
cardhu_i2c_init();
cardhu_spi_init();
cardhu_usb_init();
#endif
cardhu_uart_init();
platform_add_devices(cardhu_devices, ARRAY_SIZE(cardhu_devices));
+ switch (board_info.board_id) {
+ case BOARD_PM315:
+ platform_add_devices(beaver_audio_devices,
+ ARRAY_SIZE(beaver_audio_devices));
+ break;
+ default:
+ platform_add_devices(cardhu_audio_devices,
+ ARRAY_SIZE(cardhu_audio_devices));
+
+ break;
+ }
tegra_ram_console_debug_init();
tegra_io_dpd_init();
cardhu_sdhci_init();
cardhu_sensors_init();
cardhu_setup_bluesleep();
cardhu_sata_init();
- //audio_wired_jack_init();
cardhu_pins_state_init();
cardhu_emc_init();
tegra_release_bootloader_fb();
tegra_wdt_recovery_init();
#endif
tegra_serial_debug_init(TEGRA_UARTD_BASE, INT_WDT_CPU, NULL, -1, -1);
+ tegra_vibrator_init();
+}
+
+static void __init tegra_cardhu_dt_init(void)
+{
+ tegra_cardhu_init();
+
+ of_platform_populate(NULL,
+ of_default_bus_match_table, NULL, NULL);
}
static void __init tegra_cardhu_reserve(void)
{
#if defined(CONFIG_NVMAP_CONVERT_CARVEOUT_TO_IOVMM)
/* support 1920X1200 with 24bpp */
- tegra_reserve(0, SZ_8M + SZ_1M, SZ_8M + SZ_1M);
+ tegra_reserve(0, SZ_8M + SZ_1M, SZ_16M);
#else
- tegra_reserve(SZ_128M, SZ_8M, SZ_8M);
+ tegra_reserve(SZ_128M, SZ_8M, SZ_16M);
#endif
- tegra_ram_console_debug_reserve(SZ_1M);
}
+static const char *cardhu_dt_board_compat[] = {
+ "nvidia,cardhu",
+ NULL
+};
+
MACHINE_START(CARDHU, "cardhu")
.atag_offset = 0x100,
.soc = &tegra_soc_desc,
.init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq,
.timer = &tegra_timer,
- .init_machine = tegra_cardhu_init,
+ .init_machine = tegra_cardhu_dt_init,
.restart = tegra_assert_system_reset,
+ .dt_compat = cardhu_dt_board_compat,
MACHINE_END