summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-13 23:13:24 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-13 23:13:24 -0700
commit39c747dfde7b736f853f67de99388976f0e68c03 (patch)
treee4f208316622ea3194440890d1896d2edda7985a
parentf71490ad6f9c7c9584b067754cee8bdc0edcaf42 (diff)
parent1bdf3dcbf1a0e4584051a3a07937fd2a676c9e17 (diff)
Merge "msm: audio: soc: add null checks for hdmi ops"
-rwxr-xr-xsound/soc/codecs/msm_hdmi_codec_rx.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/sound/soc/codecs/msm_hdmi_codec_rx.c b/sound/soc/codecs/msm_hdmi_codec_rx.c
index a81d89af51b1..002476d7a923 100755
--- a/sound/soc/codecs/msm_hdmi_codec_rx.c
+++ b/sound/soc/codecs/msm_hdmi_codec_rx.c
@@ -37,15 +37,20 @@ static int msm_hdmi_edid_ctl_info(struct snd_kcontrol *kcontrol,
int rc;
codec_data = snd_soc_codec_get_drvdata(codec);
- rc = codec_data->hdmi_ops.get_audio_edid_blk(codec_data->hdmi_core_pdev,
- &edid_blk);
+
+ if (!codec_data->hdmi_ops.get_audio_edid_blk)
+ return -EINVAL;
+
+ rc = codec_data->hdmi_ops.get_audio_edid_blk(
+ codec_data->hdmi_core_pdev,
+ &edid_blk);
if (!IS_ERR_VALUE(rc)) {
uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
uinfo->count = edid_blk.audio_data_blk_size +
- edid_blk.spk_alloc_data_blk_size;
+ edid_blk.spk_alloc_data_blk_size;
}
- return 0;
+ return rc;
}
static int msm_hdmi_edid_get(struct snd_kcontrol *kcontrol,
@@ -56,16 +61,21 @@ static int msm_hdmi_edid_get(struct snd_kcontrol *kcontrol,
int rc;
codec_data = snd_soc_codec_get_drvdata(codec);
+
+ if (!codec_data->hdmi_ops.get_audio_edid_blk)
+ return -EINVAL;
+
rc = codec_data->hdmi_ops.get_audio_edid_blk(
codec_data->hdmi_core_pdev, &edid_blk);
if (!IS_ERR_VALUE(rc)) {
- memcpy(ucontrol->value.bytes.data, edid_blk.audio_data_blk,
- edid_blk.audio_data_blk_size);
+ memcpy(ucontrol->value.bytes.data,
+ edid_blk.audio_data_blk,
+ edid_blk.audio_data_blk_size);
memcpy((ucontrol->value.bytes.data +
- edid_blk.audio_data_blk_size),
- edid_blk.spk_alloc_data_blk,
- edid_blk.spk_alloc_data_blk_size);
+ edid_blk.audio_data_blk_size),
+ edid_blk.spk_alloc_data_blk,
+ edid_blk.spk_alloc_data_blk_size);
}
return rc;
@@ -90,6 +100,11 @@ static int msm_hdmi_audio_codec_rx_dai_startup(
struct msm_hdmi_audio_codec_rx_data *codec_data =
dev_get_drvdata(dai->codec->dev);
+ if (!codec_data->hdmi_ops.cable_status) {
+ dev_err(dai->dev, "%s() cable_status is null\n", __func__);
+ return -EINVAL;
+ }
+
msm_hdmi_audio_codec_return_value =
codec_data->hdmi_ops.cable_status(
codec_data->hdmi_core_pdev, 1);
@@ -123,6 +138,11 @@ static int msm_hdmi_audio_codec_rx_dai_hw_params(
struct msm_hdmi_audio_codec_rx_data *codec_data =
dev_get_drvdata(dai->codec->dev);
+ if (!codec_data->hdmi_ops.audio_info_setup) {
+ dev_err(dai->dev, "%s() audio_info_setup is null\n", __func__);
+ return -EINVAL;
+ }
+
if (IS_ERR_VALUE(msm_hdmi_audio_codec_return_value)) {
dev_err_ratelimited(dai->dev,
"%s() HDMI core is not ready (ret val = %d)\n",
@@ -200,6 +220,11 @@ static void msm_hdmi_audio_codec_rx_dai_shutdown(
struct msm_hdmi_audio_codec_rx_data *codec_data =
dev_get_drvdata(dai->codec->dev);
+ if (!codec_data->hdmi_ops.cable_status) {
+ dev_err(dai->dev, "%s() cable_status is null\n", __func__);
+ return;
+ }
+
rc = codec_data->hdmi_ops.cable_status(
codec_data->hdmi_core_pdev, 0);
if (IS_ERR_VALUE(rc)) {