summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-tegra/board-cardhu-powermon.c158
1 files changed, 115 insertions, 43 deletions
diff --git a/arch/arm/mach-tegra/board-cardhu-powermon.c b/arch/arm/mach-tegra/board-cardhu-powermon.c
index 219556d708c1..a637b68286a5 100644
--- a/arch/arm/mach-tegra/board-cardhu-powermon.c
+++ b/arch/arm/mach-tegra/board-cardhu-powermon.c
@@ -20,71 +20,97 @@
#include <linux/i2c.h>
#include <linux/ina219.h>
+
+#include "board.h"
#include "board-cardhu.h"
+enum {
+ VDD_AC_BAT,
+ VDD_DRAM_IN,
+ VDD_BACKLIGHT_IN,
+ VDD_CPU_IN,
+ VDD_CORE_IN,
+ VDD_DISPLAY_IN,
+ VDD_3V3_TEGRA,
+ VDD_OTHER_PMU_IN,
+ VDD_1V8_TEGRA,
+ VDD_1V8_OTHER,
+ UNUSED_RAIL,
+};
+
static struct ina219_platform_data power_mon_info[] = {
- {
+ [VDD_AC_BAT] = {
.calibration_data = 0xa000,
.power_lsb = 2,
.rail_name = "VDD_AC_BAT",
.divisor = 20,
},
- {
+
+ [VDD_DRAM_IN] = {
.calibration_data = 0xa000,
.power_lsb = 2,
.rail_name = "VDD_DRAM_IN",
.divisor = 20,
},
- {
+
+ [VDD_BACKLIGHT_IN] = {
.calibration_data = 0x6aaa,
.power_lsb = 1,
.rail_name = "VDD_BACKLIGHT_IN",
.divisor = 20,
},
- {
+
+ [VDD_CPU_IN] = {
.calibration_data = 0xa000,
.power_lsb = 1,
.rail_name = "VDD_CPU_IN",
.divisor = 20,
},
- {
+
+ [VDD_CORE_IN] = {
.calibration_data = 0x6aaa,
.power_lsb = 1,
.rail_name = "VDD_CORE_IN",
.divisor = 20,
},
- {
+
+ [VDD_DISPLAY_IN] = {
.calibration_data = 0x4000,
.power_lsb = 1,
.rail_name = "VDD_DISPLAY_IN",
.divisor = 20,
},
- {
+
+ [VDD_3V3_TEGRA] = {
.calibration_data = 0x6aaa,
.power_lsb = 1,
.rail_name = "VDD_3V3_TEGRA",
.divisor = 20,
},
- {
+
+ [VDD_OTHER_PMU_IN] = {
.calibration_data = 0xa000,
.power_lsb = 1,
.rail_name = "VDD_OTHER_PMU_IN",
.divisor = 20,
},
- {
+
+ [VDD_1V8_TEGRA] = {
.calibration_data = 0x4000,
.power_lsb = 1,
.rail_name = "VDD_1V8_TEGRA",
.divisor = 20,
},
- {
+
+ [VDD_1V8_OTHER] = {
.calibration_data = 0xa000,
.power_lsb = 1,
.rail_name = "VDD_1V8_OTHER",
.divisor = 20,
},
+
/* All unused INA219 devices use below data*/
- {
+ [UNUSED_RAIL] = {
.calibration_data = 0x4000,
.power_lsb = 1,
.rail_name = "unused_rail",
@@ -92,91 +118,137 @@ static struct ina219_platform_data power_mon_info[] = {
},
};
+enum {
+ INA_I2C_ADDR_40,
+ INA_I2C_ADDR_41,
+ INA_I2C_ADDR_42,
+ INA_I2C_ADDR_43,
+ INA_I2C_ADDR_44,
+ INA_I2C_ADDR_45,
+ INA_I2C_ADDR_46,
+ INA_I2C_ADDR_47,
+ INA_I2C_ADDR_48,
+ INA_I2C_ADDR_49,
+ INA_I2C_ADDR_4A,
+ INA_I2C_ADDR_4B,
+ INA_I2C_ADDR_4C,
+ INA_I2C_ADDR_4D,
+ INA_I2C_ADDR_4E,
+ INA_I2C_ADDR_4F,
+};
+
static struct i2c_board_info cardhu_i2c0_ina219_board_info[] = {
- {
+ [INA_I2C_ADDR_40] = {
I2C_BOARD_INFO("ina219", 0x40),
- .platform_data = &power_mon_info[0],
+ .platform_data = &power_mon_info[VDD_AC_BAT],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_41] = {
I2C_BOARD_INFO("ina219", 0x41),
- .platform_data = &power_mon_info[1],
+ .platform_data = &power_mon_info[VDD_DRAM_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_42] = {
I2C_BOARD_INFO("ina219", 0x42),
- .platform_data = &power_mon_info[2],
+ .platform_data = &power_mon_info[VDD_BACKLIGHT_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_43] = {
I2C_BOARD_INFO("ina219", 0x43),
- .platform_data = &power_mon_info[3],
+ .platform_data = &power_mon_info[VDD_CPU_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_44] = {
I2C_BOARD_INFO("ina219", 0x44),
- .platform_data = &power_mon_info[4],
+ .platform_data = &power_mon_info[VDD_CORE_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_45] = {
I2C_BOARD_INFO("ina219", 0x45),
- .platform_data = &power_mon_info[5],
+ .platform_data = &power_mon_info[VDD_DISPLAY_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_46] = {
I2C_BOARD_INFO("ina219", 0x46),
- .platform_data = &power_mon_info[6],
+ .platform_data = &power_mon_info[VDD_3V3_TEGRA],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_47] = {
I2C_BOARD_INFO("ina219", 0x47),
- .platform_data = &power_mon_info[7],
+ .platform_data = &power_mon_info[VDD_OTHER_PMU_IN],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_48] = {
I2C_BOARD_INFO("ina219", 0x48),
- .platform_data = &power_mon_info[8],
+ .platform_data = &power_mon_info[VDD_1V8_TEGRA],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_49] = {
I2C_BOARD_INFO("ina219", 0x49),
- .platform_data = &power_mon_info[9],
+ .platform_data = &power_mon_info[VDD_1V8_OTHER],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4A] = {
I2C_BOARD_INFO("ina219", 0x4A),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4B] = {
I2C_BOARD_INFO("ina219", 0x4B),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4C] = {
I2C_BOARD_INFO("ina219", 0x4C),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4D] = {
I2C_BOARD_INFO("ina219", 0x4D),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4E] = {
I2C_BOARD_INFO("ina219", 0x4E),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
- {
+
+ [INA_I2C_ADDR_4F] = {
I2C_BOARD_INFO("ina219", 0x4F),
- .platform_data = &power_mon_info[10],
+ .platform_data = &power_mon_info[UNUSED_RAIL],
.irq = -1,
},
};
int __init cardhu_pmon_init(void)
{
+ struct board_info bi;
+
+ tegra_get_board_info(&bi);
+
+ /* for fab A04 VDD_CORE_IN changed from ina with addr 0x44 to 0x4A */
+ if (bi.fab == BOARD_FAB_A04) {
+ cardhu_i2c0_ina219_board_info[INA_I2C_ADDR_44].platform_data =
+ &power_mon_info[UNUSED_RAIL];
+ cardhu_i2c0_ina219_board_info[INA_I2C_ADDR_4A].platform_data =
+ &power_mon_info[VDD_CORE_IN];
+ }
+
i2c_register_board_info(0, cardhu_i2c0_ina219_board_info,
ARRAY_SIZE(cardhu_i2c0_ina219_board_info));
return 0;