ARM: tegra: integration of slave mode support.
[linux-2.6.git] / arch / arm / mach-tegra / board-enterprise.c
index 06e497a..fcb00a1 100644 (file)
@@ -37,8 +37,9 @@
 #include <linux/fsl_devices.h>
 #include <linux/i2c/atmel_mxt_ts.h>
 #include <linux/memblock.h>
-
+#include <linux/rfkill-gpio.h>
 #include <linux/nfc/pn544.h>
+
 #include <sound/max98088.h>
 
 #include <asm/hardware/gic.h>
 #include <mach/pinmux.h>
 #include <mach/iomap.h>
 #include <mach/io.h>
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
+#include <mach/io_dpd.h>
 #include <mach/usb_phy.h>
 #include <mach/i2s.h>
 #include <mach/tegra_asoc_pdata.h>
 #include <mach/thermal.h>
 #include <mach/tegra-bb-power.h>
 #include <mach/gpio-tegra.h>
+#include <mach/tegra_fiq_debugger.h>
+
+#include <asm/mach-types.h>
+#include <asm/hardware/gic.h>
+#include <asm/mach/arch.h>
 
 #include "board.h"
 #include "clock.h"
 #include "gpio-names.h"
 #include "fuse.h"
 #include "pm.h"
+#include "common.h"
+
+static struct balanced_throttle throttle_list[] = {
+       {
+               .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 },
+               },
+       },
+#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,
-       .temp_offset = TDIODE_OFFSET, /* temps based on tdiode */
+#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,
@@ -81,59 +123,27 @@ static struct tegra_thermal_data thermal_data = {
        .tc2 = 1,
        .passive_delay = 2000,
 #endif
+#ifdef CONFIG_TEGRA_SKIN_THROTTLE
+       .skin_device_id = THERMAL_DEVICE_ID_SKIN,
+       .temp_throttle_skin = 43000,
+#endif
 };
 
-/* !!!TODO: Change for enterprise (Taken from Cardhu) */
-static struct tegra_utmip_config utmi_phy_config[] = {
-       [0] = {
-                       .hssync_start_delay = 0,
-                       .idle_wait_delay = 17,
-                       .elastic_limit = 16,
-                       .term_range_adj = 6,
-                       .xcvr_setup = 15,
-                       .xcvr_setup_offset = 0,
-                       .xcvr_use_fuses = 1,
-                       .xcvr_lsfslew = 2,
-                       .xcvr_lsrslew = 2,
-       },
-       [1] = {
-                       .hssync_start_delay = 0,
-                       .idle_wait_delay = 17,
-                       .elastic_limit = 16,
-                       .term_range_adj = 6,
-                       .xcvr_setup = 15,
-                       .xcvr_setup_offset = 0,
-                       .xcvr_use_fuses = 1,
-                       .xcvr_lsfslew = 2,
-                       .xcvr_lsrslew = 2,
-       },
-       [2] = {
-                       .hssync_start_delay = 0,
-                       .idle_wait_delay = 17,
-                       .elastic_limit = 16,
-                       .term_range_adj = 6,
-                       .xcvr_setup = 8,
-                       .xcvr_setup_offset = 0,
-                       .xcvr_use_fuses = 1,
-                       .xcvr_lsfslew = 2,
-                       .xcvr_lsrslew = 2,
-       },
-};
-
-static struct resource enterprise_bcm4329_rfkill_resources[] = {
+static struct rfkill_gpio_platform_data enterprise_bt_rfkill_pdata[] = {
        {
-               .name   = "bcm4329_nshutdown_gpio",
-               .start  = TEGRA_GPIO_PE6,
-               .end    = TEGRA_GPIO_PE6,
-               .flags  = IORESOURCE_IO,
+               .name           = "bt_rfkill",
+               .shutdown_gpio  = TEGRA_GPIO_PE6,
+               .reset_gpio     = TEGRA_GPIO_INVALID,
+               .type           = RFKILL_TYPE_BLUETOOTH,
        },
 };
 
-static struct platform_device enterprise_bcm4329_rfkill_device = {
-       .name = "bcm4329_rfkill",
+static struct platform_device enterprise_bt_rfkill_device = {
+       .name = "rfkill_gpio",
        .id             = -1,
-       .num_resources  = ARRAY_SIZE(enterprise_bcm4329_rfkill_resources),
-       .resource       = enterprise_bcm4329_rfkill_resources,
+       .dev = {
+               .platform_data = &enterprise_bt_rfkill_pdata,
+       },
 };
 
 static struct resource enterprise_bluesleep_resources[] = {
@@ -168,8 +178,6 @@ static void __init enterprise_setup_bluesleep(void)
                enterprise_bluesleep_resources[2].end =
                        gpio_to_irq(TEGRA_GPIO_PS2);
        platform_device_register(&enterprise_bluesleep_device);
-       tegra_gpio_enable(TEGRA_GPIO_PS2);
-       tegra_gpio_enable(TEGRA_GPIO_PE7);
        return;
 }
 
@@ -178,7 +186,7 @@ static __initdata struct tegra_clk_init_table enterprise_clk_init_table[] = {
        { "pll_m",      NULL,           0,              false},
        { "hda",        "pll_p",        108000000,      false},
        { "hda2codec_2x","pll_p",       48000000,       false},
-       { "pwm",        "clk_32k",      32768,          false},
+       { "pwm",        "pll_p",        3187500,        false},
        { "blink",      "clk_32k",      32768,          true},
        { "i2s0",       "pll_a_out0",   0,              false},
        { "i2s1",       "pll_a_out0",   0,              false},
@@ -238,7 +246,7 @@ static struct tegra_i2c_platform_data enterprise_i2c4_platform_data = {
 static struct tegra_i2c_platform_data enterprise_i2c5_platform_data = {
        .adapter_nr     = 4,
        .bus_count      = 1,
-       .bus_clk_rate   = { 100000, 0 },
+       .bus_clk_rate   = { 400000, 0 },
        .scl_gpio               = {TEGRA_GPIO_PZ6, 0},
        .sda_gpio               = {TEGRA_GPIO_PZ7, 0},
        .arb_recovery = arb_lost_recovery,
@@ -467,8 +475,6 @@ static void __init enterprise_uart_init(void)
                                ARRAY_SIZE(enterprise_uart_devices));
 }
 
-
-
 static struct resource tegra_rtc_resources[] = {
        [0] = {
                .start = TEGRA_RTC_BASE,
@@ -500,16 +506,27 @@ static struct tegra_asoc_platform_data enterprise_audio_pdata = {
        .gpio_hp_mute           = -1,
        .gpio_int_mic_en        = -1,
        .gpio_ext_mic_en        = -1,
-       .debounce_time_hp = -1,
+       .debounce_time_hp       = -1,
        /*defaults for Enterprise board*/
-       .audio_port_id          = {
-               [HIFI_CODEC] = 0,
-               [BASEBAND] = 2,
-               [BT_SCO] = 3,
+       .i2s_param[HIFI_CODEC]  = {
+               .audio_port_id  = 0,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_I2S,
+               .sample_size    = 16,
+       },
+       .i2s_param[BASEBAND]    = {
+               .audio_port_id  = 2,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_DSP_A,
+               .sample_size    = 16,
+               .rate           = 8000,
+               .channels       = 1,
        },
-       .baseband_param         = {
-               .rate = 8000,
-               .channels = 1,
+       .i2s_param[BT_SCO]      = {
+               .audio_port_id  = 3,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_DSP_A,
+               .sample_size    = 16,
        },
 };
 
@@ -528,15 +545,25 @@ static struct tegra_asoc_platform_data enterprise_audio_aic326x_pdata = {
        .gpio_int_mic_en        = -1,
        .gpio_ext_mic_en        = -1,
        /*defaults for Verbier-Enterprise (E1197) board with TI AIC326X codec*/
-       .audio_port_id          = {
-               [HIFI_CODEC] = 0,
-               [BASEBAND] = 2,
-               [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 = 8000,
-               .channels = 1,
-               .bit_format = TEGRA_DAIFMT_DSP_A,
+       .i2s_param[BASEBAND]    = {
+               .audio_port_id  = 2,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_DSP_A,
+               .sample_size    = 16,
+               .rate           = 8000,
+               .channels       = 1,
+       },
+       .i2s_param[BT_SCO]      = {
+               .sample_size    = 16,
+               .audio_port_id  = 3,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_DSP_A,
        },
 };
 
@@ -555,12 +582,14 @@ static struct platform_device *enterprise_devices[] __initdata = {
 #if defined(CONFIG_TEGRA_IOVMM_SMMU) || defined(CONFIG_TEGRA_IOMMU_SMMU)
        &tegra_smmu_device,
 #endif
-       &tegra_wdt_device,
+       &tegra_wdt0_device,
+       &tegra_wdt1_device,
+       &tegra_wdt2_device,
 #if defined(CONFIG_TEGRA_AVP)
        &tegra_avp_device,
 #endif
        &tegra_camera,
-       &enterprise_bcm4329_rfkill_device,
+       &enterprise_bt_rfkill_device,
        &tegra_spi_device4,
        &tegra_hda_device,
 #if defined(CONFIG_CRYPTO_DEV_TEGRA_SE)
@@ -640,9 +669,6 @@ static struct i2c_board_info __initdata atmel_i2c_info[] = {
 
 static int __init enterprise_touch_init(void)
 {
-       tegra_gpio_enable(TEGRA_GPIO_PH6);
-       tegra_gpio_enable(TEGRA_GPIO_PF5);
-
        gpio_request(TEGRA_GPIO_PH6, "atmel-irq");
        gpio_direction_input(TEGRA_GPIO_PH6);
 
@@ -658,66 +684,123 @@ static int __init enterprise_touch_init(void)
        return 0;
 }
 
-static struct usb_phy_plat_data tegra_usb_phy_pdata[] = {
-       [0] = {
-                       .instance = 0,
-                       .vbus_gpio = -1,
-                       .vbus_reg_supply = "usb_vbus",
-                       .vbus_irq = ENT_TPS80031_IRQ_BASE +
-                                                       TPS80031_INT_VBUS_DET,
-       },
-       [1] = {
-                       .instance = 1,
-                       .vbus_gpio = -1,
+static void enterprise_usb_hsic_postsupend(void)
+{
+       pr_debug("%s\n", __func__);
+#ifdef CONFIG_TEGRA_BB_XMM_POWER
+       baseband_xmm_set_power_status(BBXMM_PS_L2);
+#endif
+}
+
+static void enterprise_usb_hsic_preresume(void)
+{
+       pr_debug("%s\n", __func__);
+#ifdef CONFIG_TEGRA_BB_XMM_POWER
+       baseband_xmm_set_power_status(BBXMM_PS_L2TOL0);
+#endif
+}
+
+static void enterprise_usb_hsic_phy_power(void)
+{
+       pr_debug("%s\n", __func__);
+#ifdef CONFIG_TEGRA_BB_XMM_POWER
+       baseband_xmm_set_power_status(BBXMM_PS_L0);
+#endif
+}
+
+static void enterprise_usb_hsic_post_phy_off(void)
+{
+       pr_debug("%s\n", __func__);
+#ifdef CONFIG_TEGRA_BB_XMM_POWER
+       baseband_xmm_set_power_status(BBXMM_PS_L2);
+#endif
+}
+
+static struct tegra_usb_phy_platform_ops hsic_xmm_plat_ops = {
+       .post_suspend = enterprise_usb_hsic_postsupend,
+       .pre_resume = enterprise_usb_hsic_preresume,
+       .port_power = enterprise_usb_hsic_phy_power,
+       .post_phy_off = enterprise_usb_hsic_post_phy_off,
+};
+
+static struct tegra_usb_platform_data tegra_ehci2_hsic_xmm_pdata = {
+       .port_otg = false,
+       .has_hostpc = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_HSIC,
+       .op_mode        = TEGRA_USB_OPMODE_HOST,
+       .u_data.host = {
+               .vbus_gpio = -1,
+               .hot_plug = false,
+               .remote_wakeup_supported = false,
+               .power_off_on_suspend = false,
        },
-       [2] = {
-                       .instance = 2,
-                       .vbus_gpio = -1,
+       .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,
 };
 
-static struct tegra_uhsic_config uhsic_phy_config = {
-       .enable_gpio = -1,
-       .reset_gpio = -1,
-       .sync_start_delay = 9,
-       .idle_wait_delay = 17,
-       .term_range_adj = 0,
-       .elastic_underrun_limit = 16,
-       .elastic_overrun_limit = 16,
-};
 
-static struct tegra_ehci_platform_data tegra_ehci_uhsic_pdata = {
-       .phy_type = TEGRA_USB_PHY_TYPE_HSIC,
-       .phy_config = &uhsic_phy_config,
-       .operating_mode = TEGRA_USB_HOST,
-       .power_down_on_bus_suspend = 1,
-       .default_enable = true,
-};
 
-static struct tegra_ehci_platform_data tegra_ehci_pdata[] = {
-       [0] = {
-                       .phy_config = &utmi_phy_config[0],
-                       .operating_mode = TEGRA_USB_HOST,
-                       .power_down_on_bus_suspend = 1,
-                       .default_enable = false,
+static struct tegra_usb_platform_data tegra_udc_pdata = {
+       .port_otg = true,
+       .has_hostpc = true,
+       .builtin_host_disabled = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_DEVICE,
+       .u_data.dev = {
+               .vbus_pmu_irq = ENT_TPS80031_IRQ_BASE +
+                               TPS80031_INT_VBUS_DET,
+               .vbus_gpio = -1,
+               .charging_supported = false,
+               .remote_wakeup_supported = false,
        },
-       [1] = {
-                       .phy_config = &utmi_phy_config[1],
-                       .operating_mode = TEGRA_USB_HOST,
-                       .power_down_on_bus_suspend = 1,
-                       .default_enable = false,
+       .u_cfg.utmi = {
+               .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 8,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
        },
-       [2] = {
-                       .phy_config = &utmi_phy_config[2],
-                       .operating_mode = TEGRA_USB_HOST,
-                       .power_down_on_bus_suspend = 1,
-                       .default_enable = false,
+};
+
+static struct tegra_usb_platform_data tegra_ehci1_utmi_pdata = {
+       .port_otg = true,
+       .has_hostpc = true,
+       .builtin_host_disabled = true,
+       .phy_intf = TEGRA_USB_PHY_INTF_UTMI,
+       .op_mode = TEGRA_USB_OPMODE_HOST,
+       .u_data.host = {
+               .vbus_gpio = -1,
+               .vbus_reg = "usb_vbus",
+               .hot_plug = true,
+               .remote_wakeup_supported = true,
+               .power_off_on_suspend = true,
+       },
+       .u_cfg.utmi = {
+               .hssync_start_delay = 0,
+               .elastic_limit = 16,
+               .idle_wait_delay = 17,
+               .term_range_adj = 6,
+               .xcvr_setup = 15,
+               .xcvr_lsfslew = 2,
+               .xcvr_lsrslew = 2,
+               .xcvr_setup_offset = 0,
+               .xcvr_use_fuses = 1,
        },
 };
 
-static struct tegra_otg_platform_data tegra_otg_pdata = {
+static struct tegra_usb_otg_data tegra_otg_pdata = {
        .ehci_device = &tegra_ehci1_device,
-       .ehci_pdata = &tegra_ehci_pdata[0],
+       .ehci_pdata = &tegra_ehci1_utmi_pdata,
 };
 
 struct platform_device *tegra_usb_hsic_host_register(void)
@@ -738,8 +821,8 @@ struct platform_device *tegra_usb_hsic_host_register(void)
        pdev->dev.dma_mask =  tegra_ehci2_device.dev.dma_mask;
        pdev->dev.coherent_dma_mask = tegra_ehci2_device.dev.coherent_dma_mask;
 
-       val = platform_device_add_data(pdev, &tegra_ehci_uhsic_pdata,
-                       sizeof(struct tegra_ehci_platform_data));
+       val = platform_device_add_data(pdev, &tegra_ehci2_hsic_xmm_pdata,
+                       sizeof(struct tegra_usb_platform_data));
        if (val)
                goto error;
 
@@ -760,52 +843,12 @@ void tegra_usb_hsic_host_unregister(struct platform_device *pdev)
        platform_device_unregister(pdev);
 }
 
-static int enterprise_usb_hsic_postsupend(void)
-{
-       pr_debug("%s\n", __func__);
-#ifdef CONFIG_TEGRA_BB_XMM_POWER
-       baseband_xmm_set_power_status(BBXMM_PS_L2);
-#endif
-       return 0;
-}
-
-static int enterprise_usb_hsic_preresume(void)
-{
-       pr_debug("%s\n", __func__);
-#ifdef CONFIG_TEGRA_BB_XMM_POWER
-       baseband_xmm_set_power_status(BBXMM_PS_L2TOL0);
-#endif
-       return 0;
-}
-
-static int enterprise_usb_hsic_phy_ready(void)
-{
-       pr_debug("%s\n", __func__);
-#ifdef CONFIG_TEGRA_BB_XMM_POWER
-       baseband_xmm_set_power_status(BBXMM_PS_L0);
-#endif
-       return 0;
-}
-
-static int enterprise_usb_hsic_phy_off(void)
-{
-       pr_debug("%s\n", __func__);
-#ifdef CONFIG_TEGRA_BB_XMM_POWER
-       baseband_xmm_set_power_status(BBXMM_PS_L3);
-#endif
-       return 0;
-}
-
 static void enterprise_usb_init(void)
 {
-       struct  fsl_usb2_platform_data *udc_pdata;
-
-       tegra_usb_phy_init(tegra_usb_phy_pdata, ARRAY_SIZE(tegra_usb_phy_pdata));
+       tegra_udc_device.dev.platform_data = &tegra_udc_pdata;
 
        tegra_otg_device.dev.platform_data = &tegra_otg_pdata;
        platform_device_register(&tegra_otg_device);
-
-       udc_pdata = tegra_udc_device.dev.platform_data;
 }
 
 static struct platform_device *enterprise_audio_devices[] __initdata = {
@@ -833,17 +876,12 @@ static void enterprise_audio_init(void)
        tegra_get_board_info(&board_info);
 
        if (board_info.board_id == BOARD_E1197)
-               enterprise_audio_pdata.audio_port_id[HIFI_CODEC] = 1;
+               enterprise_audio_pdata.i2s_param[HIFI_CODEC].audio_port_id = 1;
 
        platform_add_devices(enterprise_audio_devices,
                        ARRAY_SIZE(enterprise_audio_devices));
 }
 
-static void enterprise_gps_init(void)
-{
-       tegra_gpio_enable(TEGRA_GPIO_PE4);
-       tegra_gpio_enable(TEGRA_GPIO_PE5);
-}
 
 static struct baseband_power_platform_data tegra_baseband_power_data = {
        .baseband_type = BASEBAND_XMM,
@@ -915,61 +953,43 @@ static void enterprise_baseband_init(void)
                enterprise_modem_init();
                break;
        case TEGRA_BB_XMM6260: /* XMM6260 HSIC */
-               /* xmm baseband - do not switch off phy during suspend */
-               tegra_ehci_uhsic_pdata.power_down_on_bus_suspend = 0;
-               uhsic_phy_config.postsuspend = enterprise_usb_hsic_postsupend;
-               uhsic_phy_config.preresume = enterprise_usb_hsic_preresume;
-               uhsic_phy_config.usb_phy_ready = enterprise_usb_hsic_phy_ready;
-               uhsic_phy_config.post_phy_off = enterprise_usb_hsic_phy_off;
-               /* enable XMM6260 baseband gpio(s) */
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .mdm_reset);
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .mdm_on);
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .ap2mdm_ack);
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .mdm2ap_ack);
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .ap2mdm_ack2);
-               tegra_gpio_enable(tegra_baseband_power_data.modem.generic
-                       .mdm2ap_ack2);
+               /* baseband-power.ko will register ehci2 device */
+               tegra_ehci2_device.dev.platform_data =
+                                       &tegra_ehci2_hsic_xmm_pdata;
                tegra_baseband_power_data.hsic_register =
                                                &tegra_usb_hsic_host_register;
                tegra_baseband_power_data.hsic_unregister =
                                                &tegra_usb_hsic_host_unregister;
+
                platform_device_register(&tegra_baseband_power_device);
                platform_device_register(&tegra_baseband_power2_device);
                break;
 #ifdef CONFIG_TEGRA_BB_M7400
        case TEGRA_BB_M7400: /* M7400 HSIC */
-               tegra_ehci_uhsic_pdata.power_down_on_bus_suspend = 0;
+               tegra_ehci2_hsic_xmm_pdata.u_data.host.power_off_on_suspend = 0;
                tegra_ehci2_device.dev.platform_data
-                       = &tegra_ehci_uhsic_pdata;
+                       = &tegra_ehci2_hsic_xmm_pdata;
                platform_device_register(&tegra_baseband_m7400_device);
                break;
 #endif
        }
 }
-
 static void enterprise_nfc_init(void)
 {
        struct board_info bi;
 
-       tegra_gpio_enable(TEGRA_GPIO_PS4);
-       tegra_gpio_enable(TEGRA_GPIO_PM6);
-
        /* Enable firmware GPIO PX7 for board E1205 */
        tegra_get_board_info(&bi);
        if (bi.board_id == BOARD_E1205 && bi.fab >= BOARD_FAB_A03) {
                nfc_pdata.firm_gpio = TEGRA_GPIO_PX7;
-               tegra_gpio_enable(TEGRA_GPIO_PX7);
        }
 }
 
 static void __init tegra_enterprise_init(void)
 {
-       tegra_thermal_init(&thermal_data);
+       tegra_thermal_init(&thermal_data,
+                               throttle_list,
+                               ARRAY_SIZE(throttle_list));
        tegra_clk_init_from_table(enterprise_clk_init_table);
        tegra_enable_pinmux();
        enterprise_pinmux_init();
@@ -979,14 +999,15 @@ static void __init tegra_enterprise_init(void)
        platform_add_devices(enterprise_devices, ARRAY_SIZE(enterprise_devices));
        tegra_ram_console_debug_init();
        enterprise_regulator_init();
+       tegra_io_dpd_init();
        enterprise_sdhci_init();
 #ifdef CONFIG_TEGRA_EDP_LIMITS
        enterprise_edp_init();
 #endif
        enterprise_kbc_init();
+       enterprise_nfc_init();
        enterprise_touch_init();
        enterprise_audio_init();
-       enterprise_gps_init();
        enterprise_baseband_init();
        enterprise_panel_init();
        enterprise_setup_bluesleep();
@@ -995,7 +1016,7 @@ static void __init tegra_enterprise_init(void)
        enterprise_suspend_init();
        enterprise_bpc_mgmt_init();
        tegra_release_bootloader_fb();
-       enterprise_nfc_init();
+       tegra_serial_debug_init(TEGRA_UARTD_BASE, INT_WDT_CPU, NULL, -1, -1);
 }
 
 static void __init tegra_enterprise_reserve(void)
@@ -1010,6 +1031,7 @@ static void __init tegra_enterprise_reserve(void)
 
 MACHINE_START(TEGRA_ENTERPRISE, "tegra_enterprise")
        .atag_offset    = 0x100,
+       .soc            = &tegra_soc_desc,
        .map_io         = tegra_map_common_io,
        .reserve        = tegra_enterprise_reserve,
        .init_early     = tegra30_init_early,