Merge "platform: msm8994: Add support for crypto clock"
diff --git a/platform/msm_shared/include/smd.h b/platform/msm_shared/include/smd.h
index 0daaace..b8f645f 100644
--- a/platform/msm_shared/include/smd.h
+++ b/platform/msm_shared/include/smd.h
@@ -118,7 +118,7 @@
int smd_init(smd_channel_info_t *ch, uint32_t ch_type);
void smd_uninit(smd_channel_info_t *ch);
-uint8_t* smd_read(smd_channel_info_t *ch, uint32_t *len, int ch_type);
+void smd_read(smd_channel_info_t *ch, uint32_t *len, int ch_type, uint32_t *response);
int smd_write(smd_channel_info_t *ch, void *data, uint32_t len, int type);
int smd_get_channel_info(smd_channel_info_t *ch, uint32_t ch_type);
void smd_get_channel_entry(smd_channel_info_t *ch, uint32_t ch_type);
diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c
index 641c4d1..1932549 100644
--- a/platform/msm_shared/mipi_dsi.c
+++ b/platform/msm_shared/mipi_dsi.c
@@ -487,6 +487,51 @@
return 0;
}
+void mdss_dsi_panel_shutdown(struct msm_panel_info *pinfo)
+{
+#if (DISPLAY_TYPE_MDSS == 1)
+ unsigned long read_val = 0;
+ if (pinfo->mipi.panel_off_cmds) {
+ /*
+ * Once MDP TG is disabled, reset of DSI controller is
+ * needed before we send panel OFF commands.
+ */
+ if (pinfo->type == MIPI_VIDEO_PANEL) {
+ read_val = readl(MIPI_DSI0_BASE + CTRL);
+ writel((read_val & ~BIT(0)), MIPI_DSI0_BASE + CTRL);
+ writel(0x0001, MIPI_DSI0_BASE + SOFT_RESET);
+ dsb();
+ writel(0x0000, MIPI_DSI0_BASE + SOFT_RESET);
+ dsb();
+ /* Enable cmd mode only */
+ writel(((read_val & ~BIT(1)) | BIT(2)),
+ MIPI_DSI0_BASE + CTRL);
+ }
+
+ if (pinfo->mipi.broadcast) {
+ if (pinfo->type == MIPI_VIDEO_PANEL) {
+ read_val = readl(MIPI_DSI1_BASE + CTRL);
+ writel((read_val & ~BIT(0)),
+ MIPI_DSI1_BASE + CTRL);
+
+ writel(0x0001, MIPI_DSI1_BASE + SOFT_RESET);
+ dsb();
+ writel(0x0000, MIPI_DSI1_BASE + SOFT_RESET);
+ dsb();
+
+ writel(((read_val & ~BIT(1)) | BIT(2)),
+ MIPI_DSI1_BASE + CTRL);
+ }
+ mdss_dual_dsi_cmds_tx(pinfo->mipi.panel_off_cmds,
+ pinfo->mipi.num_of_panel_off_cmds);
+ } else {
+ mipi_dsi_cmds_tx(pinfo->mipi.panel_off_cmds,
+ pinfo->mipi.num_of_panel_off_cmds);
+ }
+ }
+#endif
+}
+
int mdss_dsi_panel_initialize(struct mipi_dsi_panel_config *pinfo, uint32_t
broadcast)
{
@@ -902,11 +947,8 @@
{
if(!target_cont_splash_screen())
{
+ mdss_dsi_panel_shutdown(pinfo);
writel(0, DSI_CLK_CTRL);
- writel(0x1F1, DSI_CTRL);
- mdelay(10);
- writel(0x0001, DSI_SOFT_RESET);
- writel(0x0000, DSI_SOFT_RESET);
writel(0, DSI_CTRL);
}
diff --git a/platform/msm_shared/rpm-smd.c b/platform/msm_shared/rpm-smd.c
index d623542..0756bcd 100644
--- a/platform/msm_shared/rpm-smd.c
+++ b/platform/msm_shared/rpm-smd.c
@@ -133,8 +133,12 @@
rpm_ack_msg *resp;
msg_type type;
uint32_t ret = 0;
+ /* As per the current design rpm response does not exceed 20 bytes */
+ uint32_t response[5];
- resp = (rpm_ack_msg*)smd_read(&ch, len, SMD_APPS_RPM);
+ smd_read(&ch, len, SMD_APPS_RPM, response);
+
+ resp = (rpm_ack_msg *)response;
arch_invalidate_cache_range((addr_t)resp, sizeof(rpm_gen_hdr));
diff --git a/platform/msm_shared/smd.c b/platform/msm_shared/smd.c
index 66b4b9f..3616e2b 100644
--- a/platform/msm_shared/smd.c
+++ b/platform/msm_shared/smd.c
@@ -209,12 +209,10 @@
ch_ptr->port_info->ch1.read_index = read_index;
}
-uint8_t* smd_read(smd_channel_info_t *ch, uint32_t *len, int ch_type)
+void smd_read(smd_channel_info_t *ch, uint32_t *len, int ch_type, uint32_t *response)
{
smd_pkt_hdr smd_hdr;
uint32_t size = 0;
- /* Response as per the current design does not exceed 20 bytes */
- uint32_t response[5];
/* Read the indices from smem */
ch->port_info = smem_get_alloc_entry(SMEM_SMD_BASE_ID + ch->alloc_entry.cid,
@@ -222,7 +220,7 @@
if(!ch->port_info->ch1.DTR_DSR)
{
dprintf(CRITICAL,"%s: DTR is off\n", __func__);
- return -1;
+ return;
}
/* Wait until the data updated in the smd buffer is equal to smd packet header*/
@@ -247,9 +245,9 @@
}
/* We are good to return the response now */
- memcpy_from_fifo(ch, response, sizeof(response));
+ memcpy_from_fifo(ch, response, smd_hdr.pkt_size);
- arch_invalidate_cache_range((addr_t)response, sizeof(response));
+ arch_invalidate_cache_range((addr_t)response, smd_hdr.pkt_size);
return response;
}
diff --git a/target/msm8994/oem_panel.c b/target/msm8994/oem_panel.c
index 020c81b..ec7a940 100644
--- a/target/msm8994/oem_panel.c
+++ b/target/msm8994/oem_panel.c
@@ -218,6 +218,7 @@
jdi_4k_dualdsi_video_timings, TIMING_SIZE);
memcpy(&panelstruct->fbcinfo, &jdi_4k_dualdsi_video_fbc,
sizeof(struct fb_compression));
+ break;
case JDI_1080P_VIDEO_PANEL:
pan_type = PANEL_TYPE_DSI;
pinfo->lcd_reg_en = 1;
diff --git a/target/msm8994/target_display.c b/target/msm8994/target_display.c
index bb22fa4..171f3d6 100644
--- a/target/msm8994/target_display.c
+++ b/target/msm8994/target_display.c
@@ -110,10 +110,8 @@
{
uint8_t slave_id = 3; /* pmi */
- if (enable) {
- pm8x41_wled_config_slave_id(slave_id);
- qpnp_wled_enable_backlight(enable);
- }
+ pm8x41_wled_config_slave_id(slave_id);
+ qpnp_wled_enable_backlight(enable);
qpnp_ibb_enable(enable);
return NO_ERROR;
}