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 ec6a325..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,
 
 #include "gpio-names.h"
 #include "board.h"
+#include "board-common.h"
 #include "board-pluto.h"
 #include "cpu-tegra.h"
 #include "devices.h"
 #include "tegra-board-id.h"
+#include "dvfs.h"
 
 #define NTC_10K_TGAIN   0xE6A2
 #define NTC_10K_TOFF    0x2694
@@ -104,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 = {
@@ -131,6 +133,27 @@ static struct i2c_board_info max17042_device[] = {
        },
 };
 
+static struct nvc_torch_lumi_level_v1 pluto_max77665_lumi_tbl[] = {
+       {0, 100000},
+       {1, 201690},
+       {2, 298080},
+       {3, 387700},
+       {4, 479050},
+       {5, 562000},
+       {6, 652560},
+       {7, 732150},
+       {8, 816050},
+       {9, 896710},
+       {10, 976890},
+       {11, 1070160},
+       {12, 1151000},
+       {13, 1227790},
+       {14, 1287690},
+       {15, 1375060},
+};
+
+static unsigned max77665_f_estates[] = { 3500, 2375, 560, 456, 0 };
+
 static struct max77665_f_platform_data pluto_max77665_flash_pdata = {
        .config         = {
                .led_mask               = 3,
@@ -145,6 +168,18 @@ static struct max77665_f_platform_data pluto_max77665_flash_pdata = {
                /* .flash_on_torch         = true, */
                .max_total_current_mA   = 1000,
                .max_peak_current_mA    = 600,
+               .led_config[0] = {
+                       .flash_torch_ratio = 18100,
+                       .granularity = 1000,
+                       .flash_levels = ARRAY_SIZE(pluto_max77665_lumi_tbl),
+                       .lumi_levels = pluto_max77665_lumi_tbl,
+                       },
+               .led_config[1] = {
+                       .flash_torch_ratio = 18100,
+                       .granularity = 1000,
+                       .flash_levels = ARRAY_SIZE(pluto_max77665_lumi_tbl),
+                       .lumi_levels = pluto_max77665_lumi_tbl,
+                       },
                },
        .pinstate       = {
                .mask   = 1 << (CAM_FLASH_STROBE - TEGRA_GPIO_PBB0),
@@ -152,6 +187,12 @@ static struct max77665_f_platform_data pluto_max77665_flash_pdata = {
                },
        .dev_name       = "torch",
        .gpio_strobe    = CAM_FLASH_STROBE,
+       .edpc_config    = {
+               .states = max77665_f_estates,
+               .num_states = ARRAY_SIZE(max77665_f_estates),
+               .e0_index = 3,
+               .priority = EDP_MAX_PRIO - 2,
+               },
 };
 
 static struct max77665_haptic_platform_data max77665_haptic_pdata = {
@@ -168,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[] = {
@@ -198,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 = {
@@ -239,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);
@@ -276,23 +331,9 @@ static struct nct1008_platform_data pluto_nct1008_pdata = {
        .supported_hwrev = true,
        .ext_range = true,
        .conv_rate = 0x08,
-       .offset = 80, /* 4 * 20C. Bug 844025 - 1C for device accuracies */
-       .shutdown_ext_limit = 90, /* C */
+       .offset = 0,
+       .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 = 80000,
-                       .trip_type = THERMAL_TRIP_PASSIVE,
-                       .state = THERMAL_NO_LIMIT,
-                       .hysteresis = 0,
-               },
-       },
 };
 
 static struct i2c_board_info pluto_i2c4_nct1008_board_info[] = {
@@ -487,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,
@@ -509,7 +550,7 @@ static struct nvc_imager_cap imx091_cap = {
        .cap_version            = NVC_IMAGER_CAPABILITIES_VERSION2,
 };
 
-
+static unsigned imx091_estates[] = { 876, 656, 220, 0 };
 
 static struct imx091_platform_data imx091_pdata = {
        .num                    = 0,
@@ -522,6 +563,12 @@ static struct imx091_platform_data imx091_pdata = {
                .adjustable_flash_timing = 1,
        },
        .cap                    = &imx091_cap,
+       .edpc_config    = {
+               .states = imx091_estates,
+               .num_states = ARRAY_SIZE(imx091_estates),
+               .e0_index = 0,
+               .priority = EDP_MAX_PRIO - 1,
+               },
        .power_on               = pluto_imx091_power_on,
        .power_off              = pluto_imx091_power_off,
 };
@@ -702,69 +749,34 @@ static void mpuirq_init(void)
 
 static int pluto_nct1008_init(void)
 {
-       int nct1008_port = -1;
+       int nct1008_port;
        int ret = 0;
 
-#if defined(CONFIG_ARCH_TEGRA_11x_SOC)
        if (board_info.board_id == BOARD_E1580 ||
            board_info.board_id == BOARD_E1575) {
                nct1008_port = TEGRA_GPIO_PX6;
        } 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);
        }
-#else
-       /* pluto + AP30 interposer has SPI2_CS0 gpio */
-       nct1008_port = TEGRA_GPIO_PX3;
-#endif
 
-       if (nct1008_port >= 0) {
-#ifdef CONFIG_TEGRA_EDP_LIMITS
-               const struct tegra_edp_limits *cpu_edp_limits;
-               int cpu_edp_limits_size;
-               int i;
-               int trip;
-               struct nct1008_platform_data *data = &pluto_nct1008_pdata;
-               struct nct_trip_temp *trip_state;
+       tegra_add_cdev_trips(pluto_nct1008_pdata.trips,
+                               &pluto_nct1008_pdata.num_trips);
 
-               /* edp capping */
-               tegra_get_cpu_edp_limits(&cpu_edp_limits, &cpu_edp_limits_size);
+       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);
 
-               if (cpu_edp_limits_size > MAX_THROT_TABLE_SIZE)
-                       BUG();
+       ret = gpio_request(nct1008_port, "temp_alert");
+       if (ret < 0)
+               return ret;
 
-               for (i = 0; i < cpu_edp_limits_size-1; i++) {
-                       trip = data->num_trips;
-                       trip_state = &data->trips[trip];
-
-                       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
-
-               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 */
@@ -793,9 +805,12 @@ static int tegra_skin_get_temp(void *data, long *temp)
 }
 
 static struct therm_est_data skin_data = {
+       .cdev_type = "skin-balanced",
        .toffset = 9793,
        .polling_period = 1100,
        .ndevs = 2,
+       .tc1 = 5,
+       .tc2 = 1,
        .devs = {
                        {
                                .dev_data = "nct_ext",
@@ -821,32 +836,104 @@ static struct therm_est_data skin_data = {
                        },
        },
        .trip_temp = 43000,
-       .tc1 = 1,
-       .tc2 = 15,
-       .passive_delay = 15000,
+       .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 = 6,
-       .throt_tab = {
-               { 640000, 1200 },
-               { 640000, 1200 },
-               { 760000, 1200 },
-               { 760000, 1200 },
-               {1000000, 1200 },
-               {1000000, 1200 },
-       },
+       .throt_tab_size = ARRAY_SIZE(skin_throttle_table),
+       .throt_tab = skin_throttle_table,
 };
 
 static int __init pluto_skin_init(void)
 {
-       struct thermal_cooling_device *skin_cdev;
-
-       skin_cdev = balanced_throttle_register(&skin_throttle, "pluto-skin");
-
-       skin_data.cdev = skin_cdev;
-       tegra_skin_therm_est_device.dev.platform_data = &skin_data;
-       platform_device_register(&tegra_skin_therm_est_device);
+       if (machine_is_tegra_pluto()) {
+               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);
+       }
 
        return 0;
 }