[bug report] ASoC: mediatek: mt8186: support tdm in platform driver
Jiaxin Yu
jiaxin.yu at mediatek.com
Mon Jul 25 15:24:20 CEST 2022
On Mon, 2022-07-25 at 10:28 +0300, Dan Carpenter wrote:
> Hello Jiaxin Yu,
>
> This is a semi-automatic email about new static checker warnings.
>
> The patch ae92dcbee8b6: "ASoC: mediatek: mt8186: support tdm in
> platform driver" from May 23, 2022, leads to the following Smatch
> complaint:
>
> sound/soc/mediatek/mt8186/mt8186-dai-tdm.c:424
> mtk_dai_tdm_hw_params()
> warn: variable dereferenced before check 'tdm_priv' (see line
> 406)
>
> sound/soc/mediatek/mt8186/mt8186-dai-tdm.c
> 405 struct mtk_afe_tdm_priv *tdm_priv = afe_priv-
> >dai_priv[tdm_id];
> 406 unsigned int tdm_mode = tdm_priv->tdm_mode;
> ^^^^^^^^^^^^^^^^^^^
> Lot's of dereferences
>
> 407 unsigned int data_mode = tdm_priv->data_mode;
> 408 unsigned int rate = params_rate(params);
> 409 unsigned int channels =
> params_channels(params);
> 410 snd_pcm_format_t format =
> params_format(params);
> 411 unsigned int bit_width =
> 412 snd_pcm_format_physical_width(format);
> 413 unsigned int tdm_channels = (data_mode ==
> TDM_DATA_ONE_PIN) ?
> 414 get_tdm_ch_per_sdata(tdm_mode,
> channels) : 2;
> 415 unsigned int lrck_width =
> 416 get_tdm_lrck_width(format, tdm_mode);
> 417 unsigned int tdm_con = 0;
> 418 bool slave_mode = tdm_priv->slave_mode;
> 419 bool lrck_inv = tdm_priv->lck_invert;
> 420 bool bck_inv = tdm_priv->bck_invert;
> 421 unsigned int tran_rate;
> 422 unsigned int tran_relatch_rate;
> 423
> 424 if (!tdm_priv) {
> ^^^^^^^^^
> Checked too late
>
> 425 dev_err(afe->dev, "%s(), tdm_priv ==
> NULL", __func__);
> 426 return -EINVAL;
>
> regards,
> dan carpenter
Yes, it's a mistake.
In fact, the judgment here is really unnecessary. Because when
registering, if tdm_priv is NULL, registration will fail. So I will
remove this code, and check other DAI drivers, then remove judgments
link this.
Thanks,
Jiaxin.Yu
More information about the Alsa-devel
mailing list