From d8ca2c67b5671a9e32b6b895d598da1693009ca7 Mon Sep 17 00:00:00 2001 From: Shunhua Lan Date: Fri, 11 Nov 2022 11:04:05 +0800 Subject: [PATCH] media: rockchip: hdmirx: report audio off event For hdmirx controllers, audio interface always act as master And will make system wait a long time for audio data, Here report a audio off event to audio stream, Then applications can exit immediately Signed-off-by: Shunhua Lan Change-Id: Ia8b458d5a45f8c84f17dfd10cf8bdae8d6a6016d --- drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c index 1c0705b2ae5d..78c36e46349d 100644 --- a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c +++ b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c @@ -2877,9 +2877,9 @@ static int hdmirx_audio_startup(struct device *dev, void *data) { struct rk_hdmirx_dev *hdmirx_dev = dev_get_drvdata(dev); - if (tx_5v_power_present(hdmirx_dev)) + if (tx_5v_power_present(hdmirx_dev) && hdmirx_dev->audio_present) return 0; - dev_err(dev, "%s: device is no connected\n", __func__); + dev_err(dev, "%s: device is no connected or audio is off\n", __func__); return -ENODEV; } @@ -3051,6 +3051,7 @@ static void hdmirx_delayed_work_audio(struct work_struct *work) if (cur_state != 0) { if (!hdmirx_dev->audio_present) { dev_info(hdmirx_dev->dev, "audio on"); + hdmirx_audio_handle_plugged_change(hdmirx_dev, 1); hdmirx_dev->audio_present = true; } if (cur_state - init_state > 16 && cur_state - pre_state > 0) @@ -3060,6 +3061,7 @@ static void hdmirx_delayed_work_audio(struct work_struct *work) } else { if (hdmirx_dev->audio_present) { dev_info(hdmirx_dev->dev, "audio off"); + hdmirx_audio_handle_plugged_change(hdmirx_dev, 0); hdmirx_dev->audio_present = false; } }