Merge "msm_shared: board: Add support for pmic info api"
diff --git a/platform/msm_shared/board.c b/platform/msm_shared/board.c
index 220c6d3..58bf4a3 100644
--- a/platform/msm_shared/board.c
+++ b/platform/msm_shared/board.c
@@ -33,21 +33,23 @@
#include <baseband.h>
static struct board_data board = {UNKNOWN,
+ 0,
HW_PLATFORM_UNKNOWN,
HW_PLATFORM_SUBTYPE_UNKNOWN,
LINUX_MACHTYPE_UNKNOWN,
BASEBAND_MSM,
- PMIC_IS_INVALID,
- 0,
- 0};
+ {{PMIC_IS_INVALID, 0}, {PMIC_IS_INVALID, 0}, {PMIC_IS_INVALID, 0}},
+};
static void platform_detect()
{
struct smem_board_info_v6 board_info_v6;
struct smem_board_info_v7 board_info_v7;
+ struct smem_board_info_v8 board_info_v8;
unsigned int board_info_len = 0;
unsigned ret = 0;
unsigned format = 0;
+ uint8_t i;
ret = smem_read_alloc_entry_offset(SMEM_BOARD_INFO_LOCATION,
&format, sizeof(format), 0);
@@ -83,8 +85,28 @@
board.platform_version = board_info_v7.board_info_v3.msm_version;
board.platform_hw = board_info_v7.board_info_v3.hw_platform;
board.platform_subtype = board_info_v7.platform_subtype;
- board.pmic_type = board_info_v7.pmic_type;
- board.pmic_version = board_info_v7.pmic_version;
+ board.pmic_info[0].pmic_type = board_info_v7.pmic_type;
+ board.pmic_info[0].pmic_version = board_info_v7.pmic_version;
+ }
+ else if (format == 8)
+ {
+ board_info_len = sizeof(board_info_v8);
+
+ ret = smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
+ &board_info_v8,
+ board_info_len);
+ if (ret)
+ return;
+
+ board.platform = board_info_v8.board_info_v3.msm_id;
+ board.platform_version = board_info_v8.board_info_v3.msm_version;
+ board.platform_hw = board_info_v8.board_info_v3.hw_platform;
+ board.platform_subtype = board_info_v8.platform_subtype;
+
+ for (i = 0; i < SMEM_V8_SMEM_MAX_PMIC_DEVICES; i++) {
+ board.pmic_info[i].pmic_type = board_info_v8.pmic_info[i].pmic_type;
+ board.pmic_info[i].pmic_version = board_info_v8.pmic_info[i].pmic_version;
+ }
}
else
{
@@ -120,14 +142,17 @@
return board.platform_hw;
}
-uint32_t board_pmic_type()
+uint8_t board_pmic_info(struct board_pmic_data *info, uint8_t num_ent)
{
- return board.pmic_type;
-}
+ uint8_t i;
-uint32_t board_pmic_ver()
-{
- return board.pmic_version;
+ for (i = 0; i < num_ent && i < SMEM_MAX_PMIC_DEVICES; i++) {
+ info->pmic_type = board.pmic_info[i].pmic_type;
+ info->pmic_version = board.pmic_info[i].pmic_version;
+ info++;
+ }
+
+ return (i--);
}
uint32_t board_soc_version()
diff --git a/platform/msm_shared/include/board.h b/platform/msm_shared/include/board.h
index 7ede8ee..f863a26 100644
--- a/platform/msm_shared/include/board.h
+++ b/platform/msm_shared/include/board.h
@@ -30,8 +30,16 @@
#ifndef __BOARD_H
#define __BOARD_H
+#include <smem.h>
+
#define LINUX_MACHTYPE_UNKNOWN 0
#define BOARD_SOC_VERSION2 0x20000
+#define MAX_PMIC_DEVICES SMEM_MAX_PMIC_DEVICES
+
+struct board_pmic_data {
+ uint32_t pmic_type;
+ uint32_t pmic_version;
+};
struct board_data {
uint32_t platform;
@@ -40,8 +48,7 @@
uint32_t platform_subtype;
uint32_t target;
uint32_t baseband;
- uint32_t pmic_type;
- uint32_t pmic_version;
+ struct board_pmic_data pmic_info[MAX_PMIC_DEVICES];
};
void board_init();
@@ -51,8 +58,7 @@
uint32_t board_target_id();
uint32_t board_baseband();
uint32_t board_hardware_id();
-uint32_t board_pmic_type();
-uint32_t board_pmic_ver();
+uint8_t board_pmic_info(struct board_pmic_data *, uint8_t num_ent);
uint32_t board_soc_version();
#endif