msm: mdss: hdmi: tear down audio at bootup if already started
Shutdown the audio session while booting up if already started as part of continuous splash screen. Change-Id: I0db7edba6dd3726721d827c0375574fb77809b93 Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
This commit is contained in:
parent
2694dff22b
commit
076e7000c9
2 changed files with 70 additions and 0 deletions
|
@ -55,6 +55,8 @@
|
||||||
#define AUDIO_POLL_SLEEP_US (5 * 1000)
|
#define AUDIO_POLL_SLEEP_US (5 * 1000)
|
||||||
#define AUDIO_POLL_TIMEOUT_US (AUDIO_POLL_SLEEP_US * 1000)
|
#define AUDIO_POLL_TIMEOUT_US (AUDIO_POLL_SLEEP_US * 1000)
|
||||||
|
|
||||||
|
#define LPA_DMA_IDLE_MAX 200
|
||||||
|
|
||||||
#define IFRAME_CHECKSUM_32(d) \
|
#define IFRAME_CHECKSUM_32(d) \
|
||||||
((d & 0xff) + ((d >> 8) & 0xff) + \
|
((d & 0xff) + ((d >> 8) & 0xff) + \
|
||||||
((d >> 16) & 0xff) + ((d >> 24) & 0xff))
|
((d >> 16) & 0xff) + ((d >> 24) & 0xff))
|
||||||
|
@ -4068,6 +4070,69 @@ error:
|
||||||
return rc;
|
return rc;
|
||||||
} /* hdmi_tx_get_dt_data */
|
} /* hdmi_tx_get_dt_data */
|
||||||
|
|
||||||
|
static void hdmi_tx_audio_tear_down(struct hdmi_tx_ctrl *hdmi_ctrl)
|
||||||
|
{
|
||||||
|
struct dss_io_data *io;
|
||||||
|
u32 audio_pkt_ctrl;
|
||||||
|
u32 audio_eng_cfg;
|
||||||
|
|
||||||
|
if (!hdmi_ctrl) {
|
||||||
|
DEV_ERR("%s: invalid input\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
io = &hdmi_ctrl->pdata.io[HDMI_TX_CORE_IO];
|
||||||
|
if (!io->base) {
|
||||||
|
DEV_ERR("%s: Core io is not initialized\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio_pkt_ctrl = DSS_REG_R(io, HDMI_AUDIO_PKT_CTRL);
|
||||||
|
audio_eng_cfg = DSS_REG_R(io, HDMI_AUDIO_CFG);
|
||||||
|
|
||||||
|
if ((audio_pkt_ctrl & BIT(0)) || (audio_eng_cfg & BIT(0))) {
|
||||||
|
u32 lpa_dma, i = 0;
|
||||||
|
|
||||||
|
void __iomem *lpa_base = ioremap(LPASS_LPAIF_RDDMA_CTL0, 0xFF);
|
||||||
|
|
||||||
|
lpa_dma = readl_relaxed(lpa_base + LPASS_LPAIF_RDDMA_PER_CNT0);
|
||||||
|
|
||||||
|
/* Disable audio packet transmission */
|
||||||
|
DSS_REG_W(io, HDMI_AUDIO_PKT_CTRL,
|
||||||
|
DSS_REG_R(io, HDMI_AUDIO_PKT_CTRL) & ~BIT(0));
|
||||||
|
|
||||||
|
/* Wait for LPA DMA Engine to be idle */
|
||||||
|
while (i < LPA_DMA_IDLE_MAX) {
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* sleep for minimum HW recommended time
|
||||||
|
* for HW status to update.
|
||||||
|
*/
|
||||||
|
msleep(20);
|
||||||
|
|
||||||
|
val = readl_relaxed(lpa_base +
|
||||||
|
LPASS_LPAIF_RDDMA_PER_CNT0);
|
||||||
|
if (val == lpa_dma)
|
||||||
|
break;
|
||||||
|
|
||||||
|
lpa_dma = val;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEV_DBG("%s: LPA DMA idle after %d ms\n", __func__, i * 20);
|
||||||
|
|
||||||
|
/* Disable audio engine */
|
||||||
|
DSS_REG_W(io, HDMI_AUDIO_CFG,
|
||||||
|
DSS_REG_R(io, HDMI_AUDIO_CFG) & ~BIT(0));
|
||||||
|
|
||||||
|
/* Disable LPA DMA Engine */
|
||||||
|
writel_relaxed(readl_relaxed(lpa_base) & ~BIT(0), lpa_base);
|
||||||
|
|
||||||
|
iounmap(lpa_base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int hdmi_tx_probe(struct platform_device *pdev)
|
static int hdmi_tx_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int rc = 0, i;
|
int rc = 0, i;
|
||||||
|
@ -4171,6 +4236,8 @@ static int hdmi_tx_probe(struct platform_device *pdev)
|
||||||
hdmi_ctrl->pdata.power_data[i].clk_config,
|
hdmi_ctrl->pdata.power_data[i].clk_config,
|
||||||
hdmi_ctrl->pdata.power_data[i].num_clk, 1);
|
hdmi_ctrl->pdata.power_data[i].num_clk, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hdmi_tx_audio_tear_down(hdmi_ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
|
@ -229,6 +229,9 @@
|
||||||
#define FRAME_PACKING 0x20
|
#define FRAME_PACKING 0x20
|
||||||
#define SIDE_BY_SIDE_HALF 0x40
|
#define SIDE_BY_SIDE_HALF 0x40
|
||||||
|
|
||||||
|
#define LPASS_LPAIF_RDDMA_CTL0 (0xFE152000)
|
||||||
|
#define LPASS_LPAIF_RDDMA_PER_CNT0 (0x00000014)
|
||||||
|
|
||||||
enum hdmi_tx_feature_type {
|
enum hdmi_tx_feature_type {
|
||||||
HDMI_TX_FEAT_EDID,
|
HDMI_TX_FEAT_EDID,
|
||||||
HDMI_TX_FEAT_HDCP,
|
HDMI_TX_FEAT_HDCP,
|
||||||
|
|
Loading…
Add table
Reference in a new issue