Samsung SPH-L720 (Sprint) source updates
/drivers/video/msm/mdp.c
blob:6f7cabf62cb81e82a3277e0324d5fb3b786d6cae -> blob:bbcb4a21aa8c328c3c44fca069c51963d080a911
--- drivers/video/msm/mdp.c
+++ drivers/video/msm/mdp.c
@@ -2280,7 +2280,9 @@ static int mdp_off(struct platform_devic
mdp_clk_ctrl(0);
#ifdef CONFIG_MSM_BUS_SCALING
- mdp_bus_scale_update_request(0, 0);
+
+ mdp_bus_scale_update_request(0, 0, 0, 0);
+
#endif
if (mdp_rev >= MDP_REV_41 && mfd->panel.type == MIPI_CMD_PANEL)
mdp_dsi_cmd_overlay_suspend(mfd);
@@ -2403,8 +2405,8 @@ void mdp_hw_version(void)
#ifdef CONFIG_MSM_BUS_SCALING
-#ifndef MDP_BUS_VECTOR_ENTRY
-#define MDP_BUS_VECTOR_ENTRY(ab_val, ib_val) \
+#ifndef MDP_BUS_VECTOR_ENTRY_P0
+#define MDP_BUS_VECTOR_ENTRY_P0(ab_val, ib_val) \
{ \
.src = MSM_BUS_MASTER_MDP_PORT0, \
.dst = MSM_BUS_SLAVE_EBI_CH0, \
@@ -2412,17 +2414,51 @@ void mdp_hw_version(void)
.ib = (ib_val), \
}
#endif
+#ifndef MDP_BUS_VECTOR_ENTRY_P1
+#define MDP_BUS_VECTOR_ENTRY_P1(ab_val, ib_val) \
+ { \
+ .src = MSM_BUS_MASTER_MDP_PORT1, \
+ .dst = MSM_BUS_SLAVE_EBI_CH0, \
+ .ab = (ab_val), \
+ .ib = (ib_val), \
+ }
+#endif
+
+
/*
* Entry 0 hold 0 request
* Entry 1 and 2 do ping pong request
*/
-static struct msm_bus_vectors mdp_bus_vectors[] = {
- MDP_BUS_VECTOR_ENTRY(0, 0),
- MDP_BUS_VECTOR_ENTRY( 128000000, 160000000),
- MDP_BUS_VECTOR_ENTRY( 128000000, 160000000),
+static struct msm_bus_vectors mdp_bus_init_vectors[] = {
+ MDP_BUS_VECTOR_ENTRY_P0(0, 0),
+ MDP_BUS_VECTOR_ENTRY_P1(0, 0),
+};
+
+static struct msm_bus_vectors mdp_bus_ping_vectors[] = {
+ MDP_BUS_VECTOR_ENTRY_P0(128000000, 160000000),
+ MDP_BUS_VECTOR_ENTRY_P1(128000000, 160000000),
+};
+
+static struct msm_bus_vectors mdp_bus_pong_vectors[] = {
+ MDP_BUS_VECTOR_ENTRY_P0(128000000, 160000000),
+ MDP_BUS_VECTOR_ENTRY_P1(128000000, 160000000),
+};
+
+static struct msm_bus_paths mdp_bus_usecases[] = {
+ {
+ ARRAY_SIZE(mdp_bus_init_vectors),
+ mdp_bus_init_vectors,
+ },
+ {
+ ARRAY_SIZE(mdp_bus_ping_vectors),
+ mdp_bus_ping_vectors,
+ },
+ {
+ ARRAY_SIZE(mdp_bus_pong_vectors),
+ mdp_bus_pong_vectors,
+ },
};
-static struct msm_bus_paths mdp_bus_usecases[ARRAY_SIZE(mdp_bus_vectors)];
static struct msm_bus_scale_pdata mdp_bus_scale_table = {
.usecase = mdp_bus_usecases,
.num_usecases = ARRAY_SIZE(mdp_bus_usecases),
@@ -2433,12 +2469,7 @@ static uint32_t mdp_bus_scale_handle;
static int mdp_bus_scale_register(void)
{
struct msm_bus_scale_pdata *bus_pdata = &mdp_bus_scale_table;
- int i;
- for (i = 0; i < bus_pdata->num_usecases; i++) {
- mdp_bus_usecases[i].num_paths = 1;
- mdp_bus_usecases[i].vectors = &mdp_bus_vectors[i];
- }
-
+
if (!mdp_bus_scale_handle) {
mdp_bus_scale_handle = msm_bus_scale_register_client(bus_pdata);
if (!mdp_bus_scale_handle) {
@@ -2450,14 +2481,14 @@ static int mdp_bus_scale_register(void)
}
static int bus_index = 1;
-int mdp_bus_scale_update_request(u64 ab, u64 ib)
+int mdp_bus_scale_update_request(u64 ab_p0, u64 ib_p0, u64 ab_p1, u64 ib_p1)
{
if (mdp_bus_scale_handle < 1) {
pr_err("%s invalid bus handle\n", __func__);
return -EINVAL;
}
- if (!ab)
+ if ((!ab_p0) && (!ab_p1))
return msm_bus_scale_client_update_request
(mdp_bus_scale_handle, 0);
@@ -2465,14 +2496,23 @@ int mdp_bus_scale_update_request(u64 ab,
bus_index++;
bus_index = (bus_index > 2) ? 1 : bus_index;
- mdp_bus_usecases[bus_index].vectors->ab = min(ab, mdp_max_bw);
- ib = max(ib, ab);
- mdp_bus_usecases[bus_index].vectors->ib = min(ib, mdp_max_bw);
-
+ mdp_bus_usecases[bus_index].vectors[0].ab = min(ab_p0, mdp_max_bw);
+ ib_p0 = max(ib_p0, ab_p0);
+ mdp_bus_usecases[bus_index].vectors[0].ib = min(ib_p0, mdp_max_bw);
+
+ mdp_bus_usecases[bus_index].vectors[1].ab = min(ab_p1, mdp_max_bw);
+ ib_p1 = max(ib_p1, ab_p1);
+ mdp_bus_usecases[bus_index].vectors[1].ib = min(ib_p1, mdp_max_bw);
+
pr_debug("%s: handle=%d index=%d ab=%llu ib=%llu\n", __func__,
(u32)mdp_bus_scale_handle, bus_index,
- mdp_bus_usecases[bus_index].vectors->ab,
- mdp_bus_usecases[bus_index].vectors->ib);
+ mdp_bus_usecases[bus_index].vectors[0].ab,
+ mdp_bus_usecases[bus_index].vectors[0].ib);
+ pr_debug("%s: p1 handle=%d index=%d ab=%llu ib=%llu\n", __func__,
+ (u32)mdp_bus_scale_handle, bus_index,
+ mdp_bus_usecases[bus_index].vectors[1].ab,
+ mdp_bus_usecases[bus_index].vectors[1].ib);
+
return msm_bus_scale_client_update_request
(mdp_bus_scale_handle, bus_index);
@@ -2482,15 +2522,25 @@ int mdp_bus_scale_restore_request(void)
{
u64 ab, ib;
if (!bus_index ||
- !mdp_bus_usecases[bus_index].vectors->ab) {
+ !mdp_bus_usecases[bus_index].vectors[0].ab) {
ab = mdp_max_bw;
ib = mdp_max_bw;
} else {
- ab = mdp_bus_usecases[bus_index].vectors->ab;
- ib = mdp_bus_usecases[bus_index].vectors->ib;
+ ab = mdp_bus_usecases[bus_index].vectors[0].ab;
+ ib = mdp_bus_usecases[bus_index].vectors[0].ib;
}
pr_info("%s: ab=%llu ib=%llu\n", __func__, ab, ib);
- return mdp_bus_scale_update_request(ab, ib);
+
+ pr_debug("%s: index=%d ab_p0=%llu ib_p0=%llu\n", __func__, bus_index,
+ mdp_bus_usecases[bus_index].vectors[0].ab,
+ mdp_bus_usecases[bus_index].vectors[0].ib);
+ pr_debug("%s: index=%d ab_p1=%llu ib_p1=%llu\n", __func__, bus_index,
+ mdp_bus_usecases[bus_index].vectors[1].ab,
+ mdp_bus_usecases[bus_index].vectors[1].ib);
+
+ return mdp_bus_scale_update_request(ab, ib,
+ mdp_bus_usecases[bus_index].vectors[1].ab,
+ mdp_bus_usecases[bus_index].vectors[1].ib);
}
#endif
@@ -3030,7 +3080,7 @@ static int mdp_probe(struct platform_dev
/* req bus bandwidth immediately */
if (!(mfd->cont_splash_done))
- mdp_bus_scale_update_request(mdp_max_bw, mdp_max_bw);
+ mdp_bus_scale_update_request(mdp_max_bw, mdp_max_bw,mdp_max_bw,mdp_max_bw);
#endif
/* set driver data */