msm: fsm9xxx_board: Add xo-fsm9xxx devices
Acked-by: Kaushik Sikdar <ksikdar@qualcomm.com>
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-fsm9xxx.c b/arch/arm/mach-msm/board-fsm9xxx.c
index 2f90d78..5d619ea 100644
--- a/arch/arm/mach-msm/board-fsm9xxx.c
+++ b/arch/arm/mach-msm/board-fsm9xxx.c
@@ -380,6 +380,51 @@
};
#endif
+#define XO_CONSUMERS(_id) \
+ static struct regulator_consumer_supply xo_consumers_##_id[]
+
+/*
+ * Consumer specific regulator names:
+ * regulator name consumer dev_name
+ */
+XO_CONSUMERS(A0) = {
+ REGULATOR_SUPPLY("8058_xo_a0", NULL),
+ REGULATOR_SUPPLY("a0_clk_buffer", "fsm_xo_driver"),
+};
+XO_CONSUMERS(A1) = {
+ REGULATOR_SUPPLY("8058_xo_a1", NULL),
+ REGULATOR_SUPPLY("a1_clk_buffer", "fsm_xo_driver"),
+};
+
+#define PM8058_XO_INIT(_id, _modes, _ops, _always_on) \
+ [PM8058_XO_ID_##_id] = { \
+ .init_data = { \
+ .constraints = { \
+ .valid_modes_mask = _modes, \
+ .valid_ops_mask = _ops, \
+ .always_on = _always_on, \
+ }, \
+ .num_consumer_supplies = \
+ ARRAY_SIZE(xo_consumers_##_id),\
+ .consumer_supplies = xo_consumers_##_id, \
+ }, \
+ }
+
+#define PM8058_XO_INIT_AX(_id) \
+ PM8058_XO_INIT(_id, REGULATOR_MODE_NORMAL, REGULATOR_CHANGE_STATUS, 0)
+
+static struct pm8058_xo_pdata pm8058_xo_init_pdata[PM8058_XO_ID_MAX] = {
+ PM8058_XO_INIT_AX(A0),
+ PM8058_XO_INIT_AX(A1),
+};
+
+#define PM8058_XO(_id) { \
+ .name = PM8058_XO_BUFFER_DEV_NAME, \
+ .id = _id, \
+ .platform_data = &pm8058_xo_init_pdata[_id], \
+ .pdata_size = sizeof(pm8058_xo_init_pdata[_id]), \
+}
+
/* Put sub devices with fixed location first in sub_devices array */
static struct mfd_cell pm8058_subdevs[] = {
{ .name = "pm8058-mpp",
@@ -785,6 +830,7 @@
&qcrypto_device,
&qcedev_device,
&ota_qcrypto_device,
+ &fsm_xo_device,
};
static struct msm_acpu_clock_platform_data fsm9xxx_clock_data = {
diff --git a/arch/arm/mach-msm/devices-fsm9xxx.c b/arch/arm/mach-msm/devices-fsm9xxx.c
index fdcd2f2..86f2e18 100644
--- a/arch/arm/mach-msm/devices-fsm9xxx.c
+++ b/arch/arm/mach-msm/devices-fsm9xxx.c
@@ -369,3 +369,12 @@
#endif
+/*
+ * XO
+ */
+
+struct platform_device fsm_xo_device = {
+ .name = "fsm_xo_driver",
+ .id = -1,
+};
+
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index 872a189..4fad98a 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -130,6 +130,8 @@
extern struct platform_device fsm_qfp_fuse_device;
+extern struct platform_device fsm_xo_device;
+
extern struct platform_device qfec_device;
extern struct clk_lookup msm_clocks_7x01a[];