Re: [alsa-devel] ALSA: hda - Use generic parser for Cirrus codec driver
Hello Takashi Iwai,
The patch 1077a024812d: "ALSA: hda - Use generic parser for Cirrus codec driver" from Dec 19, 2012, leads to the following static checker warning:
sound/pci/hda/patch_cirrus.c:1004 cs4210_spdif_automute() warn: we tested 'spdif_present' before and it was 'true'
sound/pci/hda/patch_cirrus.c 984 static void cs4210_spdif_automute(struct hda_codec *codec, 985 struct hda_jack_callback *tbl) 986 { 987 struct cs_spec *spec = codec->spec; 988 bool spdif_present = false; 989 hda_nid_t spdif_pin = spec->gen.autocfg.dig_out_pins[0]; 990 991 /* detect on spdif is specific to CS4210 */ 992 if (!spec->spdif_detect || 993 spec->vendor_nid != CS4210_VENDOR_NID) 994 return; 995 996 spdif_present = snd_hda_jack_detect(codec, spdif_pin); 997 if (spdif_present == spec->spdif_present) 998 return; 999 1000 spec->spdif_present = spdif_present; 1001 /* SPDIF TX on/off */ 1002 if (spdif_present) ^^^^^^^^^^^^^ 1003 snd_hda_set_pin_ctl(codec, spdif_pin, 1004 spdif_present ? PIN_OUT : 0); ^^^^^^^^^^^^^
I'm not positive but I think this is buggy. We should remove the if statement.
1005 1006 cs_automute(codec); 1007 }
regards, dan carpenter
On Fri, 24 Jul 2015 18:12:28 +0200, Dan Carpenter wrote:
Hello Takashi Iwai,
The patch 1077a024812d: "ALSA: hda - Use generic parser for Cirrus codec driver" from Dec 19, 2012, leads to the following static checker warning:
sound/pci/hda/patch_cirrus.c:1004 cs4210_spdif_automute() warn: we tested 'spdif_present' before and it was 'true'
sound/pci/hda/patch_cirrus.c 984 static void cs4210_spdif_automute(struct hda_codec *codec, 985 struct hda_jack_callback *tbl) 986 { 987 struct cs_spec *spec = codec->spec; 988 bool spdif_present = false; 989 hda_nid_t spdif_pin = spec->gen.autocfg.dig_out_pins[0]; 990 991 /* detect on spdif is specific to CS4210 */ 992 if (!spec->spdif_detect || 993 spec->vendor_nid != CS4210_VENDOR_NID) 994 return; 995 996 spdif_present = snd_hda_jack_detect(codec, spdif_pin); 997 if (spdif_present == spec->spdif_present) 998 return; 999 1000 spec->spdif_present = spdif_present; 1001 /* SPDIF TX on/off */ 1002 if (spdif_present) ^^^^^^^^^^^^^ 1003 snd_hda_set_pin_ctl(codec, spdif_pin, 1004 spdif_present ? PIN_OUT : 0); ^^^^^^^^^^^^^
I'm not positive but I think this is buggy. We should remove the if statement.
Yes, looks so. Could you submit a fix patch? Thanks!
Takashi
Smatch complains that we have nested checks for "spdif_present". It turns out the current behavior isn't correct, we should remove the first check and keep the second.
Fixes: 1077a024812d ('ALSA: hda - Use generic parser for Cirrus codec driver') Signed-off-by: Dan Carpenter dan.carpenter@oracle.com
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index 25ccf78..584a034 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c @@ -999,9 +999,7 @@ static void cs4210_spdif_automute(struct hda_codec *codec,
spec->spdif_present = spdif_present; /* SPDIF TX on/off */ - if (spdif_present) - snd_hda_set_pin_ctl(codec, spdif_pin, - spdif_present ? PIN_OUT : 0); + snd_hda_set_pin_ctl(codec, spdif_pin, spdif_present ? PIN_OUT : 0);
cs_automute(codec); }
On Sat, 25 Jul 2015 02:03:38 +0200, Dan Carpenter wrote:
Smatch complains that we have nested checks for "spdif_present". It turns out the current behavior isn't correct, we should remove the first check and keep the second.
Fixes: 1077a024812d ('ALSA: hda - Use generic parser for Cirrus codec driver') Signed-off-by: Dan Carpenter dan.carpenter@oracle.com
Applied, thanks.
Takashi
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index 25ccf78..584a034 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c @@ -999,9 +999,7 @@ static void cs4210_spdif_automute(struct hda_codec *codec,
spec->spdif_present = spdif_present; /* SPDIF TX on/off */
- if (spdif_present)
snd_hda_set_pin_ctl(codec, spdif_pin,
spdif_present ? PIN_OUT : 0);
snd_hda_set_pin_ctl(codec, spdif_pin, spdif_present ? PIN_OUT : 0);
cs_automute(codec);
}
participants (2)
-
Dan Carpenter
-
Takashi Iwai