arm: tegra: Move all tj dependent thermals from nct to soc_therm
[linux-3.10.git] / arch / arm / mach-tegra / board-pluto-sensors.c
index c38e101..dfb93a3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * arch/arm/mach-tegra/board-pluto-sensors.c
  *
- * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -106,7 +106,7 @@ static struct max17042_config_data conf_data = {
 };
 
 static unsigned int bat_depl_states[] = {
-       900, 800, 700, 600, 500, 400, 300, 200, 100, 0
+       5400, 4800, 4200, 3600, 3000, 2400, 1800, 1200, 600, 0
 };
 
 static struct edp_client bat_depl_client = {
@@ -152,7 +152,7 @@ static struct nvc_torch_lumi_level_v1 pluto_max77665_lumi_tbl[] = {
        {15, 1375060},
 };
 
-static unsigned max77665_f_estates[] = {1000, 800, 600, 400, 200, 100, 0};
+static unsigned max77665_f_estates[] = { 3500, 2375, 560, 456, 0 };
 
 static struct max77665_f_platform_data pluto_max77665_flash_pdata = {
        .config         = {
@@ -209,7 +209,7 @@ static struct max77665_haptic_platform_data max77665_haptic_pdata = {
        .cont_mode = MAX77665_CONT_MODE,
        .motor_startup_val = 0,
        .scf_val = 2,
-       .edp_states = {90, 0},
+       .edp_states = { 360, 0 },
 };
 
 static struct max77665_charger_cable maxim_cable[] = {
@@ -239,10 +239,12 @@ static struct max77665_charger_plat_data max77665_charger = {
        .curr_lim = 1500, /* input current limit */
        .num_cables = MAX_CABLES,
        .cables = maxim_cable,
+       .irq_base = MAX77665_TEGRA_IRQ_BASE,
+       .update_status = max17042_update_status,
 };
 
 static struct max77665_muic_platform_data max77665_muic = {
-       .irq_base = MAX77665_TEGRA_IRQ_BASE,
+       .irq_base = 0,
 };
 
 static struct max77665_platform_data pluto_max77665_pdata = {
@@ -280,35 +282,47 @@ static struct i2c_board_info pluto_i2c1_isl_board_info[] = {
        }
 };
 
+static struct throttle_table tj_throttle_table[] = {
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1428000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1224000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
+};
+
 static struct balanced_throttle tj_throttle = {
-       .throt_tab_size = 19,
-       .throt_tab = {
-               {      0, 1000 },
-               {  51000, 1000 },
-               { 102000, 1000 },
-               { 204000, 1000 },
-               { 252000, 1000 },
-               { 288000, 1000 },
-               { 372000, 1000 },
-               { 468000, 1000 },
-               { 510000, 1000 },
-               { 612000, 1000 },
-               { 714000, 1050 },
-               { 816000, 1050 },
-               { 918000, 1050 },
-               {1020000, 1100 },
-               {1122000, 1100 },
-               {1224000, 1100 },
-               {1326000, 1100 },
-               {1428000, 1100 },
-               {1530000, 1100 },
-       },
+       .throt_tab_size = ARRAY_SIZE(tj_throttle_table),
+       .throt_tab = tj_throttle_table,
 };
 
 static int __init pluto_throttle_init(void)
 {
        if (machine_is_tegra_pluto())
-               balanced_throttle_register(&tj_throttle, "pluto-nct");
+               balanced_throttle_register(&tj_throttle, "tegra-balanced");
        return 0;
 }
 module_init(pluto_throttle_init);
@@ -318,22 +332,8 @@ static struct nct1008_platform_data pluto_nct1008_pdata = {
        .ext_range = true,
        .conv_rate = 0x08,
        .offset = 0,
-       .shutdown_ext_limit = 85, /* C */
+       .shutdown_ext_limit = 105, /* C */
        .shutdown_local_limit = 120, /* C */
-
-       .passive_delay = 2000,
-
-       .num_trips = 1,
-       .trips = {
-               /* Thermal Throttling */
-               [0] = {
-                       .cdev_type = "pluto-nct",
-                       .trip_temp = 75000,
-                       .trip_type = THERMAL_TRIP_PASSIVE,
-                       .state = THERMAL_NO_LIMIT,
-                       .hysteresis = 0,
-               },
-       },
 };
 
 static struct i2c_board_info pluto_i2c4_nct1008_board_info[] = {
@@ -528,7 +528,7 @@ static struct nvc_imager_cap imx091_cap = {
        .initial_clock_rate_khz = 6000,
        .clock_profiles[0] = {
                .external_clock_khz     = 24000,
-               .clock_multiplier       = 10416667, /* value / 1,000,000 */
+               .clock_multiplier       = 850000, /* value / 1,000,000 */
        },
        .clock_profiles[1] = {
                .external_clock_khz     = 0,
@@ -550,7 +550,7 @@ static struct nvc_imager_cap imx091_cap = {
        .cap_version            = NVC_IMAGER_CAPABILITIES_VERSION2,
 };
 
-static unsigned imx091_estates[] = {200, 100, 2};
+static unsigned imx091_estates[] = { 876, 656, 220, 0 };
 
 static struct imx091_platform_data imx091_pdata = {
        .num                    = 0,
@@ -749,7 +749,7 @@ static void mpuirq_init(void)
 
 static int pluto_nct1008_init(void)
 {
-       int nct1008_port = -1;
+       int nct1008_port;
        int ret = 0;
 
        if (board_info.board_id == BOARD_E1580 ||
@@ -758,59 +758,25 @@ static int pluto_nct1008_init(void)
        } else {
                nct1008_port = TEGRA_GPIO_PX6;
                pr_err("Warning: nct alert port assumed TEGRA_GPIO_PX6 for unknown pluto board id E%d\n",
-                      board_info.board_id);
+                       board_info.board_id);
        }
 
-       if (nct1008_port >= 0) {
-               struct nct1008_platform_data *data = &pluto_nct1008_pdata;
-#ifdef CONFIG_TEGRA_EDP_LIMITS
-               const struct tegra_edp_limits *cpu_edp_limits;
-               int cpu_edp_limits_size;
-               int i;
-               int trip;
-               struct nct_trip_temp *trip_state;
-
-               /* edp capping */
-               tegra_get_cpu_edp_limits(&cpu_edp_limits, &cpu_edp_limits_size);
+       tegra_add_cdev_trips(pluto_nct1008_pdata.trips,
+                               &pluto_nct1008_pdata.num_trips);
 
-               if (cpu_edp_limits_size > MAX_THROT_TABLE_SIZE)
-                       BUG();
+       pluto_i2c4_nct1008_board_info[0].irq =
+               gpio_to_irq(nct1008_port);
+       pr_info("%s: pluto nct1008 irq %d",
+                       __func__, pluto_i2c4_nct1008_board_info[0].irq);
 
-               for (i = 0; i < cpu_edp_limits_size-1; i++) {
-                       trip = data->num_trips;
-                       trip_state = &data->trips[trip];
+       ret = gpio_request(nct1008_port, "temp_alert");
+       if (ret < 0)
+               return ret;
 
-                       trip_state->cdev_type = "edp";
-                       trip_state->trip_temp =
-                                       cpu_edp_limits[i].temperature * 1000;
-                       trip_state->trip_type = THERMAL_TRIP_ACTIVE;
-                       trip_state->state = i + 1;
-                       trip_state->hysteresis = 1000;
-
-                       data->num_trips++;
-
-                       if (data->num_trips >= NCT_MAX_TRIPS)
-                               BUG();
-               }
-#endif
-               nct1008_add_cdev_trips(data, tegra_core_edp_get_cdev());
-               nct1008_add_cdev_trips(data, tegra_dvfs_get_cpu_dfll_cdev());
-               nct1008_add_cdev_trips(data, tegra_dvfs_get_cpu_pll_cdev());
-               nct1008_add_cdev_trips(data, tegra_dvfs_get_core_cdev());
-
-               pluto_i2c4_nct1008_board_info[0].irq =
-                               gpio_to_irq(nct1008_port);
-               pr_info("%s: pluto nct1008 irq %d", __func__, pluto_i2c4_nct1008_board_info[0].irq);
-
-               ret = gpio_request(nct1008_port, "temp_alert");
-               if (ret < 0)
-                       return ret;
-
-               ret = gpio_direction_input(nct1008_port);
-               if (ret < 0) {
-                       pr_info("%s: calling gpio_free(nct1008_port)", __func__);
-                       gpio_free(nct1008_port);
-               }
+       ret = gpio_direction_input(nct1008_port);
+       if (ret < 0) {
+               pr_info("%s: calling gpio_free(nct1008_port)", __func__);
+               gpio_free(nct1008_port);
        }
 
        /* pluto has thermal sensor on GEN1-I2C i.e. instance 0 */
@@ -839,7 +805,7 @@ static int tegra_skin_get_temp(void *data, long *temp)
 }
 
 static struct therm_est_data skin_data = {
-       .cdev_type = "pluto-skin",
+       .cdev_type = "skin-balanced",
        .toffset = 9793,
        .polling_period = 1100,
        .ndevs = 2,
@@ -873,35 +839,98 @@ static struct therm_est_data skin_data = {
        .passive_delay = 5000,
 };
 
+static struct throttle_table skin_throttle_table[] = {
+               /* CPU_THROT_LOW cannot be used by other than CPU */
+               /* NO_CAP cannot be used by CPU */
+               /*    CPU,   C2BUS,   C3BUS,    SCLK,     EMC */
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1530000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1326000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1122000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { { 1020000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  918000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  816000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  714000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  NO_CAP,  NO_CAP,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  564000,  564000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  528000,  528000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  492000,  492000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  420000,  420000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  408000,  408000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  612000,  360000,  360000,  NO_CAP,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  NO_CAP } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  510000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  360000,  360000,  312000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  468000,  276000,  276000,  208000,  480000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  372000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  288000,  276000,  276000,  208000,  204000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  252000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  204000,  276000,  228000,  208000,  102000 } },
+               { {  102000,  276000,  228000,  208000,  102000 } },
+         { { CPU_THROT_LOW,  276000,  228000,  208000,  102000 } },
+};
+
 static struct balanced_throttle skin_throttle = {
-       .throt_tab_size = 19,
-       .throt_tab = {
-               {      0, 1000 },
-               {  51000, 1000 },
-               { 102000, 1000 },
-               { 204000, 1000 },
-               { 252000, 1000 },
-               { 288000, 1000 },
-               { 372000, 1000 },
-               { 468000, 1000 },
-               { 510000, 1000 },
-               { 612000, 1000 },
-               { 714000, 1050 },
-               { 816000, 1050 },
-               { 918000, 1050 },
-               {1020000, 1100 },
-               {1122000, 1100 },
-               {1224000, 1100 },
-               {1326000, 1100 },
-               {1428000, 1100 },
-               {1530000, 1100 },
-       },
+       .throt_tab_size = ARRAY_SIZE(skin_throttle_table),
+       .throt_tab = skin_throttle_table,
 };
 
 static int __init pluto_skin_init(void)
 {
        if (machine_is_tegra_pluto()) {
-               balanced_throttle_register(&skin_throttle, "pluto-skin");
+               balanced_throttle_register(&skin_throttle, "skin-balanced");
                tegra_skin_therm_est_device.dev.platform_data = &skin_data;
                platform_device_register(&tegra_skin_therm_est_device);
        }