Merge "leds: pm8xxx: Add PWM feature in leds-pm8xxx" into msm-3.0
diff --git a/arch/arm/mach-msm/board-9615.c b/arch/arm/mach-msm/board-9615.c
index d1d848c..5f0480b 100644
--- a/arch/arm/mach-msm/board-9615.c
+++ b/arch/arm/mach-msm/board-9615.c
@@ -235,6 +235,7 @@
#define GPIO_SDCARD_PWR_EN 18
#define GPIO_SDC1_HW_DET 80
+#define GPIO_SDC2_DAT1_WAKEUP 26
/* MDM9x15 have 2 SDCC controllers */
enum sdcc_controllers {
@@ -434,6 +435,9 @@
.pclk_src_dfab = 1,
.sdcc_v4_sup = true,
.pin_data = &mmc_slot_pin_data[SDCC2],
+#ifdef CONFIG_MMC_MSM_SDIO_SUPPORT
+ .sdiowakeup_irq = MSM_GPIO_TO_INT(GPIO_SDC2_DAT1_WAKEUP),
+#endif
};
static struct mmc_platform_data *msm9615_sdc2_pdata = &sdc2_data;
#else
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 19e4224..06118f8 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -2930,17 +2930,16 @@
static void __init msm8960_init_buses(void)
{
#ifdef CONFIG_MSM_BUS_SCALING
- msm_bus_apps_fabric_pdata.rpm_enabled = 1;
- msm_bus_sys_fabric_pdata.rpm_enabled = 1;
- msm_bus_mm_fabric_pdata.rpm_enabled = 1;
- msm_bus_sys_fpb_pdata.rpm_enabled = 1;
- msm_bus_cpss_fpb_pdata.rpm_enabled = 1;
- msm_bus_apps_fabric.dev.platform_data = &msm_bus_apps_fabric_pdata;
- msm_bus_sys_fabric.dev.platform_data = &msm_bus_sys_fabric_pdata;
- msm_bus_mm_fabric.dev.platform_data = &msm_bus_mm_fabric_pdata;
- msm_bus_sys_fpb.dev.platform_data = &msm_bus_sys_fpb_pdata;
- msm_bus_cpss_fpb.dev.platform_data = &msm_bus_cpss_fpb_pdata;
msm_bus_rpm_set_mt_mask();
+ msm_bus_8960_apps_fabric_pdata.rpm_enabled = 1;
+ msm_bus_8960_sys_fabric_pdata.rpm_enabled = 1;
+ msm_bus_8960_mm_fabric_pdata.rpm_enabled = 1;
+ msm_bus_apps_fabric.dev.platform_data =
+ &msm_bus_8960_apps_fabric_pdata;
+ msm_bus_sys_fabric.dev.platform_data = &msm_bus_8960_sys_fabric_pdata;
+ msm_bus_mm_fabric.dev.platform_data = &msm_bus_8960_mm_fabric_pdata;
+ msm_bus_sys_fpb.dev.platform_data = &msm_bus_8960_sys_fpb_pdata;
+ msm_bus_cpss_fpb.dev.platform_data = &msm_bus_8960_cpss_fpb_pdata;
#endif
}
diff --git a/arch/arm/mach-msm/devices-msm8x60.h b/arch/arm/mach-msm/devices-msm8x60.h
index 9fbe818..6b7d141 100644
--- a/arch/arm/mach-msm/devices-msm8x60.h
+++ b/arch/arm/mach-msm/devices-msm8x60.h
@@ -51,6 +51,7 @@
extern struct platform_device msm_bus_mm_fabric;
extern struct platform_device msm_bus_sys_fpb;
extern struct platform_device msm_bus_cpss_fpb;
+extern struct platform_device msm_bus_def_fab;
extern struct platform_device msm_device_smd;
extern struct platform_device msm_device_gpio;
diff --git a/arch/arm/mach-msm/include/mach/msm_bus_board.h b/arch/arm/mach-msm/include/mach/msm_bus_board.h
index 644e1b1..2eb504a 100644
--- a/arch/arm/mach-msm/include/mach/msm_bus_board.h
+++ b/arch/arm/mach-msm/include/mach/msm_bus_board.h
@@ -36,6 +36,7 @@
const unsigned int nslaves;
const unsigned int ntieredslaves;
bool il_flag;
+ const struct msm_bus_board_algorithm *board_algo;
};
enum msm_bus_bw_tier_type {
@@ -55,12 +56,23 @@
extern struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata;
extern struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata;
extern struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_def_fab_pdata;
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
- *fabreg, int fabid);
-int msm_bus_board_get_iid(int id);
+extern struct msm_bus_fabric_registration msm_bus_8960_apps_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_sys_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_mm_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_sys_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_cpss_fpb_pdata;
+
+extern struct msm_bus_fabric_registration msm_bus_8064_apps_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_sys_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_mm_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_sys_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_cpss_fpb_pdata;
+
void msm_bus_rpm_set_mt_mask(void);
int msm_bus_board_rpm_get_il_ids(uint16_t *id);
+int msm_bus_board_get_iid(int id);
/*
* These macros specify the convention followed for allocating
@@ -124,6 +136,7 @@
/* Topology related enums */
enum msm_bus_fabric_type {
+ MSM_BUS_FAB_DEFAULT = 0,
MSM_BUS_FAB_APPSS = 0,
MSM_BUS_FAB_SYSTEM = 1024,
MSM_BUS_FAB_MMSS = 2048,
@@ -180,7 +193,15 @@
MSM_BUS_MASTER_MSS_SW_PROC,
MSM_BUS_MASTER_MSS_FW_PROC,
MSM_BUS_MMSS_MASTER_UNUSED_2,
+ MSM_BUS_MASTER_GSS_NAV,
+ MSM_BUS_MASTER_PCIE,
+ MSM_BUS_MASTER_SATA,
+ MSM_BUS_MASTER_CRYPTO,
+ MSM_BUS_MASTER_VIDEO_CAP,
+ MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
+ MSM_BUS_MASTER_VIDEO_ENC,
+ MSM_BUS_MASTER_VIDEO_DEC,
MSM_BUS_MASTER_LAST = MSM_BUS_MMSS_MASTER_UNUSED_2,
MSM_BUS_SYSTEM_FPB_MASTER_SYSTEM =
@@ -263,6 +284,8 @@
MSM_BUS_SLAVE_MSM_DIMEM,
MSM_BUS_SLAVE_MSM_TCSR,
MSM_BUS_SLAVE_MSM_PRNG,
+ MSM_BUS_SLAVE_GSS,
+ MSM_BUS_SLAVE_SATA,
MSM_BUS_SLAVE_LAST = MSM_BUS_SLAVE_MSM_PRNG,
MSM_BUS_SYSTEM_FPB_SLAVE_SYSTEM =
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_arb.c b/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
index 7565eb3..56bc71d 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
@@ -394,7 +394,7 @@
int ret = 0;
struct msm_bus_fabric_device *fabdev = to_msm_bus_fabric_device(dev);
MSM_BUS_DBG("Committing: fabid: %d\n", fabdev->id);
- ret = fabdev->algo->commit(fabdev, (int)data);
+ ret = fabdev->algo->commit(fabdev);
return ret;
}
@@ -556,7 +556,7 @@
client->curr = index;
ctx = ACTIVE_CTX;
msm_bus_dbg_client_data(client->pdata, index, cl);
- bus_for_each_dev(&msm_bus_type, NULL, (void *)ctx, msm_bus_commit_fn);
+ bus_for_each_dev(&msm_bus_type, NULL, NULL, msm_bus_commit_fn);
err:
mutex_unlock(&msm_bus_lock);
@@ -613,6 +613,19 @@
return 0;
}
+int msm_bus_board_get_iid(int id)
+{
+ struct msm_bus_fabric_device *deffab;
+
+ deffab = msm_bus_get_fabric_device(MSM_BUS_FAB_DEFAULT);
+ if (!deffab) {
+ MSM_BUS_ERR("Error finding default fabric\n");
+ return -ENXIO;
+ }
+
+ return deffab->board_algo->get_iid(id);
+}
+
void msm_bus_scale_client_reset_pnodes(uint32_t cl)
{
int i, src, pnode, index;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c b/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
index 13b59ed..fde2322 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
@@ -805,80 +805,8 @@
},
};
-struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
- .id = MSM_BUS_FAB_APPSS,
- .name = "msm_apps_fab",
- .info = apps_fabric_info,
- .len = ARRAY_SIZE(apps_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "afab_clk",
- .fabclk[ACTIVE_CTX] = "afab_a_clk",
- .haltid = MSM_RPM_ID_APPS_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
- .nmasters = 4,
- .nslaves = 4,
- .ntieredslaves = 2,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
- .id = MSM_BUS_FAB_SYSTEM,
- .name = "msm_sys_fab",
- system_fabric_info,
- ARRAY_SIZE(system_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "sfab_clk",
- .fabclk[ACTIVE_CTX] = "sfab_a_clk",
- .haltid = MSM_RPM_ID_SYSTEM_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
- .nmasters = 17,
- .nslaves = 9,
- .ntieredslaves = 2,
-};
-
-struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
- .id = MSM_BUS_FAB_MMSS,
- .name = "msm_mm_fab",
- mmss_fabric_info,
- ARRAY_SIZE(mmss_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "mmfab_clk",
- .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
- .haltid = MSM_RPM_ID_MM_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
- .nmasters = 14,
- .nslaves = 4,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
- .id = MSM_BUS_FAB_SYSTEM_FPB,
- .name = "msm_sys_fpb",
- sys_fpb_fabric_info,
- ARRAY_SIZE(sys_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "sfpb_clk",
- .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
- .id = MSM_BUS_FAB_CPSS_FPB,
- .name = "msm_cpss_fpb",
- cpss_fpb_fabric_info,
- ARRAY_SIZE(cpss_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "cfpb_clk",
- .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-static void msm_bus_board_get_ids(
- struct msm_bus_fabric_registration *fabreg,
- int fabid)
+static void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
+ *fabreg, int fabid)
{
int i;
for (i = 0; i < fabreg->len; i++) {
@@ -895,17 +823,93 @@
}
}
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration *fabreg,
- int fabid)
-{
- msm_bus_board_get_ids(fabreg, fabid);
-}
-int msm_bus_board_get_iid(int id)
+static int msm_bus_board_8660_get_iid(int id)
{
return ((id < SLAVE_ID_KEY) ? master_iids[id] : slave_iids[id -
SLAVE_ID_KEY]);
}
+static struct msm_bus_board_algorithm msm_bus_board_algo = {
+ .get_iid = msm_bus_board_8660_get_iid,
+ .assign_iids = msm_bus_board_assign_iids,
+};
+
+struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
+ .id = MSM_BUS_FAB_APPSS,
+ .name = "msm_apps_fab",
+ .info = apps_fabric_info,
+ .len = ARRAY_SIZE(apps_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "afab_clk",
+ .fabclk[ACTIVE_CTX] = "afab_a_clk",
+ .haltid = MSM_RPM_ID_APPS_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
+ .nmasters = 4,
+ .nslaves = 4,
+ .ntieredslaves = 2,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM,
+ .name = "msm_sys_fab",
+ system_fabric_info,
+ ARRAY_SIZE(system_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "sfab_clk",
+ .fabclk[ACTIVE_CTX] = "sfab_a_clk",
+ .haltid = MSM_RPM_ID_SYSTEM_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
+ .nmasters = 17,
+ .nslaves = 9,
+ .ntieredslaves = 2,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
+ .id = MSM_BUS_FAB_MMSS,
+ .name = "msm_mm_fab",
+ mmss_fabric_info,
+ ARRAY_SIZE(mmss_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "mmfab_clk",
+ .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
+ .haltid = MSM_RPM_ID_MM_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
+ .nmasters = 14,
+ .nslaves = 4,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM_FPB,
+ .name = "msm_sys_fpb",
+ sys_fpb_fabric_info,
+ ARRAY_SIZE(sys_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "sfpb_clk",
+ .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
+ .id = MSM_BUS_FAB_CPSS_FPB,
+ .name = "msm_cpss_fpb",
+ cpss_fpb_fabric_info,
+ ARRAY_SIZE(cpss_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "cfpb_clk",
+ .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
int msm_bus_board_rpm_get_il_ids(uint16_t id[])
{
return -ENXIO;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c b/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
index 8ab1899..47f3c81 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
@@ -832,80 +832,8 @@
},
};
-struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
- .id = MSM_BUS_FAB_APPSS,
- .name = "msm_apps_fab",
- .info = apps_fabric_info,
- .len = ARRAY_SIZE(apps_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "afab_clk",
- .fabclk[ACTIVE_CTX] = "afab_a_clk",
- .haltid = MSM_RPM_ID_APPS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
- .nmasters = 6,
- .nslaves = 5,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
- .id = MSM_BUS_FAB_SYSTEM,
- .name = "msm_sys_fab",
- system_fabric_info,
- ARRAY_SIZE(system_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "sfab_clk",
- .fabclk[ACTIVE_CTX] = "sfab_a_clk",
- .haltid = MSM_RPM_ID_SYS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
- .nmasters = 15,
- .nslaves = 12,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
- .id = MSM_BUS_FAB_MMSS,
- .name = "msm_mm_fab",
- mmss_fabric_info,
- ARRAY_SIZE(mmss_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "mmfab_clk",
- .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
- .haltid = MSM_RPM_ID_MMSS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
- .nmasters = 14,
- .nslaves = 4,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
- .id = MSM_BUS_FAB_SYSTEM_FPB,
- .name = "msm_sys_fpb",
- sys_fpb_fabric_info,
- ARRAY_SIZE(sys_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "sfpb_clk",
- .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
- .id = MSM_BUS_FAB_CPSS_FPB,
- .name = "msm_cpss_fpb",
- cpss_fpb_fabric_info,
- ARRAY_SIZE(cpss_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "cfpb_clk",
- .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-static void msm_bus_board_get_ids(
- struct msm_bus_fabric_registration *fabreg,
- int fabid)
+static void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
+ *fabreg, int fabid)
{
int i;
for (i = 0; i < fabreg->len; i++) {
@@ -922,12 +850,7 @@
}
}
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration *fabreg,
- int fabid)
-{
- msm_bus_board_get_ids(fabreg, fabid);
-}
-int msm_bus_board_get_iid(int id)
+static int msm_bus_board_8960_get_iid(int id)
{
if ((id < SLAVE_ID_KEY && id >= NMASTERS) ||
id >= (SLAVE_ID_KEY + NSLAVES)) {
@@ -939,6 +862,87 @@
SLAVE_ID_KEY]);
}
+static struct msm_bus_board_algorithm msm_bus_board_algo = {
+ .get_iid = msm_bus_board_8960_get_iid,
+ .assign_iids = msm_bus_board_assign_iids,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_apps_fabric_pdata = {
+ .id = MSM_BUS_FAB_APPSS,
+ .name = "msm_apps_fab",
+ .info = apps_fabric_info,
+ .len = ARRAY_SIZE(apps_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "afab_clk",
+ .fabclk[ACTIVE_CTX] = "afab_a_clk",
+ .haltid = MSM_RPM_ID_APPS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
+ .nmasters = 6,
+ .nslaves = 5,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_sys_fabric_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM,
+ .name = "msm_sys_fab",
+ system_fabric_info,
+ ARRAY_SIZE(system_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "sfab_clk",
+ .fabclk[ACTIVE_CTX] = "sfab_a_clk",
+ .haltid = MSM_RPM_ID_SYS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
+ .nmasters = 15,
+ .nslaves = 12,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_mm_fabric_pdata = {
+ .id = MSM_BUS_FAB_MMSS,
+ .name = "msm_mm_fab",
+ mmss_fabric_info,
+ ARRAY_SIZE(mmss_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "mmfab_clk",
+ .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
+ .haltid = MSM_RPM_ID_MMSS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
+ .nmasters = 14,
+ .nslaves = 4,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_sys_fpb_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM_FPB,
+ .name = "msm_sys_fpb",
+ sys_fpb_fabric_info,
+ ARRAY_SIZE(sys_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "sfpb_clk",
+ .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_cpss_fpb_pdata = {
+ .id = MSM_BUS_FAB_CPSS_FPB,
+ .name = "msm_cpss_fpb",
+ cpss_fpb_fabric_info,
+ ARRAY_SIZE(cpss_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "cfpb_clk",
+ .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
int msm_bus_board_rpm_get_il_ids(uint16_t id[])
{
id[0] = MSM_RPM_STATUS_ID_EBI1_CH0_RANGE;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_core.h b/arch/arm/mach-msm/msm_bus/msm_bus_core.h
index 56a5b8da..8a46026 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_core.h
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_core.h
@@ -107,6 +107,7 @@
const char *name;
struct device dev;
const struct msm_bus_fab_algorithm *algo;
+ const struct msm_bus_board_algorithm *board_algo;
int visited;
};
#define to_msm_bus_fabric_device(d) container_of(d, \
@@ -121,8 +122,7 @@
unsigned int cl_active_flag);
int (*port_halt)(struct msm_bus_fabric_device *fabdev, int portid);
int (*port_unhalt)(struct msm_bus_fabric_device *fabdev, int portid);
- int (*commit)(struct msm_bus_fabric_device *fabdev,
- int active_only);
+ int (*commit)(struct msm_bus_fabric_device *fabdev);
struct msm_bus_inode_info *(*find_node)(struct msm_bus_fabric_device
*fabdev, int id);
struct msm_bus_inode_info *(*find_gw_node)(struct msm_bus_fabric_device
@@ -133,6 +133,12 @@
long int add_bw, int *master_tiers, int ctx);
};
+struct msm_bus_board_algorithm {
+ void (*assign_iids)(struct msm_bus_fabric_registration *fabreg,
+ int fabid);
+ int (*get_iid)(int id);
+};
+
/**
* Used to store the list of fabrics and other info to be
* maintained outside the fabric structure.
@@ -160,8 +166,7 @@
struct msm_rpm_iv_pair *allocate_rpm_data(struct msm_bus_fabric_registration
*fab_pdata);
int msm_bus_rpm_commit(struct msm_bus_fabric_registration
- *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata);
+ *fab_pdata, struct msm_rpm_iv_pair *rpm_data, void **cdata);
void free_commit_data(void *cdata);
void msm_bus_rpm_update_bw(struct msm_bus_inode_info *hop,
struct msm_bus_inode_info *info,
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c b/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
index fe6dbed..1747425 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
@@ -418,13 +418,10 @@
* msm_bus_fabric_rpm_commit() - Commit the arbitration data to RPM
* @fabric: Fabric for which the data should be committed
* */
-static int msm_bus_fabric_rpm_commit(struct msm_bus_fabric_device *fabdev,
- int ctx)
-
+static int msm_bus_fabric_rpm_commit(struct msm_bus_fabric_device *fabdev)
{
int status = 0;
struct msm_bus_fabric *fabric = to_msm_bus_fabric(fabdev);
- void *cdata;
/*
* For a non-zero bandwidth request, clocks should be enabled before
@@ -441,9 +438,8 @@
goto skip_arb;
}
- cdata = fabric->cdata[ctx];
- status = msm_bus_rpm_commit(fabric->pdata, ctx,
- fabric->rpm_data, cdata);
+ status = msm_bus_rpm_commit(fabric->pdata, fabric->rpm_data,
+ (void **)fabric->cdata);
if (status)
MSM_BUS_DBG("Error committing arb data for fabric: %d\n",
fabric->fabdev.id);
@@ -653,7 +649,9 @@
pdata->il_flag = msm_bus_rpm_is_mem_interleaved();
fabric->ahb = pdata->ahb;
fabric->pdata = pdata;
- msm_bus_board_assign_iids(fabric->pdata, fabric->fabdev.id);
+ fabric->pdata->board_algo->assign_iids(fabric->pdata,
+ fabric->fabdev.id);
+ fabric->fabdev.board_algo = fabric->pdata->board_algo;
for (ctx = 0; ctx < NUM_CTX; ctx++) {
if (pdata->fabclk[ctx]) {
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c b/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
index 332d3c1..84e2da5 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
@@ -325,16 +325,35 @@
#define RPM_SHIFT_VAL 16
#define RPM_SHIFT(n) ((n) << RPM_SHIFT_VAL)
-/**
- * msm_bus_rpm_commit() - Commit the arbitration data to RPM
- * @fabric: Fabric for which the data should be committed
- * */
-int msm_bus_rpm_commit(struct msm_bus_fabric_registration
+static int msm_bus_rpm_compare_cdata(
+ struct msm_bus_fabric_registration *fab_pdata,
+ struct commit_data *cd1, struct commit_data *cd2)
+{
+ size_t n;
+ int ret;
+ n = sizeof(uint16_t) * fab_pdata->nslaves;
+ ret = memcmp(cd1->bwsum, cd2->bwsum, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data bwsum not equal\n");
+ return ret;
+ }
+
+ n = sizeof(uint16_t *) * ((fab_pdata->ntieredslaves *
+ fab_pdata->nmasters) + 1);
+ ret = memcmp(cd1->arb, cd2->arb, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data arb[%d] not equal\n", i);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int msm_bus_rpm_commit_arb(struct msm_bus_fabric_registration
*fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata)
+ struct commit_data *cd, bool valid)
{
int i, j, offset = 0, status = 0, count, index = 0;
- struct commit_data *cd = (struct commit_data *)cdata;
/*
* count is the number of 2-byte words required to commit the
* data to rpm. This is calculated by the following formula.
@@ -398,12 +417,33 @@
nmasters, fab_pdata->nslaves, fab_pdata->ntieredslaves,
MSM_BUS_DBG_OP);
if (fab_pdata->rpm_enabled) {
- if (ctx == ACTIVE_CTX)
- status = msm_rpm_set(MSM_RPM_CTX_SET_0, rpm_data,
- count);
+ if (valid) {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ }
+ } else {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ }
+ }
}
- MSM_BUS_DBG("msm_rpm_set returned: %d\n", status);
return status;
}
@@ -571,14 +611,37 @@
return rpm_data;
}
-int msm_bus_rpm_commit(struct msm_bus_fabric_registration
- *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata)
+static int msm_bus_rpm_compare_cdata(
+ struct msm_bus_fabric_registration *fab_pdata,
+ struct commit_data *cd1, struct commit_data *cd2)
{
+ size_t n;
+ int i, ret;
+ n = sizeof(uint16_t) * fab_pdata->nslaves;
+ ret = memcmp(cd1->bwsum, cd2->bwsum, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data bwsum not equal\n");
+ return ret;
+ }
+ n = sizeof(uint8_t *) * ((fab_pdata->ntieredslaves *
+ fab_pdata->nmasters) + 1);
+ for (i = 0; i < NUM_TIERS; i++) {
+ ret = memcmp(cd1->arb[i], cd2->arb[i], n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data arb[%d] not equal\n", i);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int msm_bus_rpm_commit_arb(struct msm_bus_fabric_registration
+ *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
+ struct commit_data *cd, bool valid)
+{
int i, j, k, offset = 0, status = 0, count, index = 0;
- struct commit_data *cd = (struct commit_data *)cdata;
-
/*
* count is the number of 2-byte words required to commit the
* data to rpm. This is calculated by the following formula.
@@ -646,16 +709,37 @@
}
MSM_FAB_DBG("calling msm_rpm_set: %d\n", status);
- msm_bus_dbg_commit_data(fab_pdata->name, cdata, fab_pdata->
+ msm_bus_dbg_commit_data(fab_pdata->name, (void *)cd, fab_pdata->
nmasters, fab_pdata->nslaves, fab_pdata->ntieredslaves,
MSM_BUS_DBG_OP);
if (fab_pdata->rpm_enabled) {
- if (ctx == ACTIVE_CTX)
- status = msm_rpm_set(MSM_RPM_CTX_SET_0, rpm_data,
- count);
+ if (valid) {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ }
+ } else {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ }
+ }
}
- MSM_FAB_DBG("msm_rpm_set returned: %d\n", status);
return status;
}
@@ -771,3 +855,47 @@
}
}
#endif
+
+/**
+* msm_bus_rpm_commit() - Commit the arbitration data to RPM
+* @fabric: Fabric for which the data should be committed
+**/
+int msm_bus_rpm_commit(struct msm_bus_fabric_registration
+ *fab_pdata, struct msm_rpm_iv_pair *rpm_data,
+ void **cdata)
+{
+
+ int ret;
+ bool valid;
+ struct commit_data *dual_cd, *act_cd;
+ dual_cd = (struct commit_data *)cdata[DUAL_CTX];
+ act_cd = (struct commit_data *)cdata[ACTIVE_CTX];
+
+ /*
+ * If the arb data for active set and sleep set is
+ * different, commit both sets.
+ * If the arb data for active set and sleep set is
+ * the same, invalidate the sleep set.
+ */
+ ret = msm_bus_rpm_compare_cdata(fab_pdata, act_cd, dual_cd);
+ if (!ret)
+ /* Invalidate sleep set.*/
+ valid = false;
+ else
+ valid = true;
+
+ ret = msm_bus_rpm_commit_arb(fab_pdata, DUAL_CTX, rpm_data,
+ dual_cd, valid);
+ if (ret)
+ MSM_BUS_ERR("Error comiting fabric:%d in %d ctx\n",
+ fab_pdata->id, DUAL_CTX);
+
+ valid = true;
+ ret = msm_bus_rpm_commit_arb(fab_pdata, ACTIVE_CTX, rpm_data, act_cd,
+ valid);
+ if (ret)
+ MSM_BUS_ERR("Error comiting fabric:%d in %d ctx\n",
+ fab_pdata->id, ACTIVE_CTX);
+
+ return ret;
+}
diff --git a/arch/arm/mach-msm/rpm_resources.c b/arch/arm/mach-msm/rpm_resources.c
index 33b07bf..f2b3e88 100644
--- a/arch/arm/mach-msm/rpm_resources.c
+++ b/arch/arm/mach-msm/rpm_resources.c
@@ -914,9 +914,9 @@
} else if ((sleep_us >> 10) > level->time_overhead_us) {
power = level->steady_state_power;
} else {
- power = (sleep_us - level->time_overhead_us);
- power *= level->steady_state_power;
- power /= sleep_us;
+ power = level->steady_state_power;
+ power -= (level->time_overhead_us *
+ level->steady_state_power)/sleep_us;
power += level->energy_overhead / sleep_us;
}
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index 8e4d98c..7db146c 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -42,29 +42,13 @@
static int msm_timer_debug_mask;
module_param_named(debug_mask, msm_timer_debug_mask, int, S_IRUGO | S_IWUSR | S_IWGRP);
-#if defined(CONFIG_ARCH_MSM7X30) || defined(CONFIG_ARCH_MSM8X60) || \
- defined(CONFIG_ARCH_MSM8960) || defined(CONFIG_ARCH_FSM9XXX) || \
- defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM9615)
-#define MSM_GPT_BASE (MSM_TMR_BASE + 0x4)
-#define MSM_DGT_BASE (MSM_TMR_BASE + 0x24)
-#else
-#define MSM_GPT_BASE MSM_TMR_BASE
-#define MSM_DGT_BASE (MSM_TMR_BASE + 0x10)
-#endif
-
#ifdef CONFIG_MSM7X00A_USE_GP_TIMER
#define DG_TIMER_RATING 100
- #define MSM_GLOBAL_TIMER MSM_CLOCK_GPT
#else
#define DG_TIMER_RATING 300
- #define MSM_GLOBAL_TIMER MSM_CLOCK_DGT
#endif
-#if defined(CONFIG_CPU_V6) || defined(CONFIG_ARCH_MSM7X27A)
#define MSM_DGT_SHIFT (5)
-#else
-#define MSM_DGT_SHIFT (0)
-#endif
#define TIMER_MATCH_VAL 0x0000
#define TIMER_COUNT_VAL 0x0004
@@ -88,43 +72,15 @@
* access to come from the CPU0 region.
*/
static int global_timer_offset;
-
-#if defined(CONFIG_MSM_DIRECT_SCLK_ACCESS)
-#define MPM_SCLK_COUNT_VAL 0x0024
-#endif
+static int msm_global_timer;
#define NR_TIMERS ARRAY_SIZE(msm_clocks)
-#if defined(CONFIG_ARCH_QSD8X50) || defined(CONFIG_ARCH_FSM9XXX)
-#define DGT_HZ 4800000 /* Uses TCXO/4 (19.2 MHz / 4) */
-#elif defined(CONFIG_ARCH_MSM7X30)
-#define DGT_HZ 6144000 /* Uses LPXO/4 (24.576 MHz / 4) */
-#elif defined(CONFIG_ARCH_MSM8X60) || defined(CONFIG_ARCH_MSM8960) || \
- defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM9615)
-/* Uses PXO/4 (24.576 MHz / 4) on V1, (27 MHz / 4) on V2 */
-#define DGT_HZ 6750000
-#else
-#define DGT_HZ 19200000 /* Uses TCXO (19.2 MHz) */
-#endif
-
#define GPT_HZ 32768
#define SCLK_HZ 32768
-#if defined(CONFIG_MSM_N_WAY_SMSM)
-/* Time Master State Bits */
-#define MASTER_BITS_PER_CPU 1
-#define MASTER_TIME_PENDING \
- (0x01UL << (MASTER_BITS_PER_CPU * SMSM_APPS_STATE))
-/* Time Slave State Bits */
-#define SLAVE_TIME_REQUEST 0x0400
-#define SLAVE_TIME_POLL 0x0800
-#define SLAVE_TIME_INIT 0x1000
-#endif
-
-#ifdef CONFIG_SMP
static struct msm_clock *clockevent_to_clock(struct clock_event_device *evt);
-#endif
static irqreturn_t msm_timer_interrupt(int irq, void *dev_id);
static cycle_t msm_gpt_read(struct clocksource *cs);
static cycle_t msm_dgt_read(struct clocksource *cs);
@@ -203,7 +159,7 @@
.dev_id = &msm_clocks[0].clockevent,
.irq = INT_GP_TIMER_EXP
},
- .regbase = MSM_GPT_BASE,
+ .regbase = MSM_TMR_BASE + 0x4,
.freq = GPT_HZ,
.index = MSM_CLOCK_GPT,
.flags =
@@ -219,7 +175,7 @@
.clockevent = {
.name = "dg_timer",
.features = CLOCK_EVT_FEAT_ONESHOT,
- .shift = 32 + MSM_DGT_SHIFT,
+ .shift = 32,
.rating = DG_TIMER_RATING,
.set_next_event = msm_timer_set_next_event,
.set_mode = msm_timer_set_mode,
@@ -228,8 +184,8 @@
.name = "dg_timer",
.rating = DG_TIMER_RATING,
.read = msm_dgt_read,
- .mask = CLOCKSOURCE_MASK((32-MSM_DGT_SHIFT)),
- .shift = 24 - MSM_DGT_SHIFT,
+ .mask = CLOCKSOURCE_MASK(32),
+ .shift = 24,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
},
.irq = {
@@ -240,10 +196,8 @@
.dev_id = &msm_clocks[1].clockevent,
.irq = INT_DEBUG_TIMER_EXP
},
- .regbase = MSM_DGT_BASE,
- .freq = DGT_HZ >> MSM_DGT_SHIFT,
+ .regbase = MSM_TMR_BASE + 0x24,
.index = MSM_CLOCK_DGT,
- .shift = MSM_DGT_SHIFT,
.write_delay = 9,
}
};
@@ -317,22 +271,23 @@
&per_cpu(msm_clocks_percpu, 0)[MSM_CLOCK_DGT];
if (clock_state->stopped)
- return clock_state->stopped_tick >> MSM_DGT_SHIFT;
+ return clock_state->stopped_tick >> clock->shift;
return (msm_read_timer_count(clock, GLOBAL_TIMER) +
- clock_state->sleep_offset) >> MSM_DGT_SHIFT;
+ clock_state->sleep_offset) >> clock->shift;
}
-#ifdef CONFIG_SMP
static struct msm_clock *clockevent_to_clock(struct clock_event_device *evt)
{
+#ifdef CONFIG_SMP
int i;
for (i = 0; i < NR_TIMERS; i++)
if (evt == &(msm_clocks[i].clockevent))
return &msm_clocks[i];
- return &msm_clocks[MSM_GLOBAL_TIMER];
-}
+ return &msm_clocks[msm_global_timer];
#endif
+ return container_of(evt, struct msm_clock, clockevent);
+}
static int msm_timer_set_next_event(unsigned long cycles,
struct clock_event_device *evt)
@@ -344,11 +299,7 @@
uint32_t alarm;
int late;
-#ifdef CONFIG_SMP
clock = clockevent_to_clock(evt);
-#else
- clock = container_of(evt, struct msm_clock, clockevent);
-#endif
clock_state = &__get_cpu_var(msm_clocks_percpu)[clock->index];
if (clock_state->stopped)
return 0;
@@ -385,11 +336,7 @@
struct msm_clock_percpu_data *clock_state, *gpt_state;
unsigned long irq_flags;
-#ifdef CONFIG_SMP
clock = clockevent_to_clock(evt);
-#else
- clock = container_of(evt, struct msm_clock, clockevent);
-#endif
clock_state = &__get_cpu_var(msm_clocks_percpu)[clock->index];
gpt_state = &__get_cpu_var(msm_clocks_percpu)[MSM_CLOCK_GPT];
@@ -453,6 +400,8 @@
return MSM_TMR_BASE + global_timer_offset;
}
+#define MPM_SCLK_COUNT_VAL 0x0024
+
#ifdef CONFIG_PM
/*
* Retrieve the cycle count from sclk and optionally synchronize local clock
@@ -511,6 +460,17 @@
return t1;
}
#elif defined(CONFIG_MSM_N_WAY_SMSM)
+
+/* Time Master State Bits */
+#define MASTER_BITS_PER_CPU 1
+#define MASTER_TIME_PENDING \
+ (0x01UL << (MASTER_BITS_PER_CPU * SMSM_APPS_STATE))
+
+/* Time Slave State Bits */
+#define SLAVE_TIME_REQUEST 0x0400
+#define SLAVE_TIME_POLL 0x0800
+#define SLAVE_TIME_INIT 0x1000
+
static uint32_t msm_timer_do_sync_to_sclk(
void (*time_start)(struct msm_timer_sync_data_t *data),
bool (*time_expired)(struct msm_timer_sync_data_t *data),
@@ -973,7 +933,7 @@
unsigned long long notrace sched_clock(void)
{
- struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER];
+ struct msm_clock *clock = &msm_clocks[msm_global_timer];
struct clocksource *cs = &clock->clocksource;
u32 cyc = cs->read(cs);
return cyc_to_sched_clock(&cd, cyc, ((u32)~0 >> clock->shift));
@@ -981,7 +941,7 @@
static void notrace msm_update_sched_clock(void)
{
- struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER];
+ struct msm_clock *clock = &msm_clocks[msm_global_timer];
struct clocksource *cs = &clock->clocksource;
u32 cyc = cs->read(cs);
update_sched_clock(&cd, cyc, ((u32)~0) >> clock->shift);
@@ -998,7 +958,7 @@
static void __init msm_sched_clock_init(void)
{
- struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER];
+ struct msm_clock *clock = &msm_clocks[msm_global_timer];
init_sched_clock(&cd, msm_update_sched_clock, 32 - clock->shift,
clock->freq);
@@ -1007,11 +967,41 @@
{
int i;
int res;
+ struct msm_clock *dgt = &msm_clocks[MSM_CLOCK_DGT];
+ struct msm_clock *gpt = &msm_clocks[MSM_CLOCK_GPT];
-#if defined(CONFIG_ARCH_MSM8X60) || defined(CONFIG_ARCH_MSM8960) || \
- defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM9615)
- __raw_writel(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL);
-#endif
+ if (cpu_is_msm7x01() || cpu_is_msm7x25() || cpu_is_msm7x27() ||
+ cpu_is_msm7x25a() || cpu_is_msm7x27a() || cpu_is_msm7x25aa() ||
+ cpu_is_msm7x27aa()) {
+ dgt->shift = MSM_DGT_SHIFT;
+ dgt->freq = 19200000 >> MSM_DGT_SHIFT;
+ dgt->clockevent.shift = 32 + MSM_DGT_SHIFT;
+ dgt->clocksource.mask = CLOCKSOURCE_MASK(32 - MSM_DGT_SHIFT);
+ dgt->clocksource.shift = 24 - MSM_DGT_SHIFT;
+ gpt->regbase = MSM_TMR_BASE;
+ dgt->regbase = MSM_TMR_BASE + 0x10;
+ } else if (cpu_is_qsd8x50()) {
+ dgt->freq = 4800000;
+ gpt->regbase = MSM_TMR_BASE;
+ dgt->regbase = MSM_TMR_BASE + 0x10;
+ } else if (cpu_is_fsm9xxx())
+ dgt->freq = 4800000;
+ else if (cpu_is_msm7x30() || cpu_is_msm8x55())
+ dgt->freq = 6144000;
+ else if (cpu_is_msm8x60() || cpu_is_msm8960() || cpu_is_msm9615() ||
+ cpu_is_apq8064() || cpu_is_msm8x30()) {
+ dgt->freq = 6750000;
+ __raw_writel(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL);
+ } else {
+ WARN_ON("Timer running on unknown hardware. Configure this! "
+ "Assuming default configuration.\n");
+ dgt->freq = 6750000;
+ }
+
+ if (msm_clocks[MSM_CLOCK_GPT].clocksource.rating > DG_TIMER_RATING)
+ msm_global_timer = MSM_CLOCK_GPT;
+ else
+ msm_global_timer = MSM_CLOCK_DGT;
for (i = 0; i < ARRAY_SIZE(msm_clocks); i++) {
struct msm_clock *clock = &msm_clocks[i];
@@ -1072,7 +1062,7 @@
{
unsigned long flags;
static DEFINE_PER_CPU(bool, first_boot) = true;
- struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER];
+ struct msm_clock *clock = &msm_clocks[msm_global_timer];
/* Use existing clock_event for cpu 0 */
if (!smp_processor_id())
diff --git a/sound/soc/msm/msm-pcm-routing.c b/sound/soc/msm/msm-pcm-routing.c
index 3eb9a42..3c92514 100644
--- a/sound/soc/msm/msm-pcm-routing.c
+++ b/sound/soc/msm/msm-pcm-routing.c
@@ -360,7 +360,8 @@
static int msm_routing_put_switch_mixer(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
- struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
+ struct snd_soc_dapm_widget_list *wlist = snd_kcontrol_chip(kcontrol);
+ struct snd_soc_dapm_widget *widget = wlist->widgets[0];
pr_debug("%s: FM Switch enable %ld\n", __func__,
ucontrol->value.integer.value[0]);
@@ -710,7 +711,7 @@
SND_SOC_DAPM_AIF_OUT("AUX_PCM_RX", "AUX PCM Playback", 0, 0, 0, 0),
SND_SOC_DAPM_AIF_IN("AUX_PCM_TX", "AUX PCM Capture", 0, 0, 0, 0),
/* Switch Definitions */
- SND_SOC_DAPM_SWITCH("SBUS_0_RX", SND_SOC_NOPM, 0, 0,
+ SND_SOC_DAPM_SWITCH("SLIMBUS_DL_HL", SND_SOC_NOPM, 0, 0,
&fm_switch_mixer_controls),
/* Mixer definitions */
SND_SOC_DAPM_MIXER("PRI_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
@@ -843,7 +844,8 @@
{"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
{"VOIP_UL", NULL, "Voip_Tx Mixer"},
- {"SLIMBUS_0_RX", "Switch", "SLIM0_DL_HL"},
+ {"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
+ {"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
{"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
{"INT_FM_RX", NULL, "INTFM_DL_HL"},
{"INTFM_UL_HL", NULL, "INT_FM_TX"},