ALSA: hda ca0132 - remove unused error handling code
Subsystems (2)
PATCH 1/1 ALSA: hda ca0132 - remove unused error handling code
We never save the return value from chipio_write() so "err" is always zero here, not less than zero.
---
The other option would be to save the return value. I don't have the hardware and I worried that there was a reason we don't save it. The current code is misleading because it looks like it's checked until you notice that the "err = " bit is missing.
sound/pci/hda/patch_ca0132.c +0 -8
@@ -733,8 +733,6 @@ static int ca0132_hp_switch_put(struct snd_kcontrol *kcontrol,/* *valp 0 is mute, 1 is unmute */ data = (data &0x7f ) | (*valp ?0 :0x80 );chipio_write (codec,REG_CODEC_MUTE , data); -if (err <0 ) -return err; spec->curr_hp_switch = *valp;
@@ -775,8 +773,6 @@ static int ca0132_speaker_switch_put(struct snd_kcontrol *kcontrol,/* *valp 0 is mute, 1 is unmute */ data = (data &0xef ) | (*valp ?0 :0x10 );chipio_write (codec,REG_CODEC_MUTE , data); -if (err <0 ) -return err; spec->curr_speaker_switch = *valp;
@@ -824,14 +820,10 @@ static int ca0132_hp_volume_put(struct snd_kcontrol *kcontrol, val =31 - left_vol; data = (data &0xe0 ) | val;chipio_write (codec,REG_CODEC_HP_VOL_L , data); -if (err <0 ) -return err; val =31 - right_vol; data = (data &0xe0 ) | val;chipio_write (codec,REG_CODEC_HP_VOL_R , data); -if (err <0 ) -return err; spec->curr_hp_volume[0 ] = left_vol; spec->curr_hp_volume[1 ] = right_vol;
At Tue, 7 Feb 2012 10:19:32 +0300,
Quoted 7 lines · Dan Carpenter
We never save the return value from
chipio_write()so "err" is always zero here, not less than zero.Signed-off-by Dan Carpenter <[email protected]>---
The other option would be to save the return value.
Yes, this should be a better option. chipio_write() may fail indeed.
But then your report spotted another bug. It doesn't handle snd_hda_power_up|down() correctly in the error path. It must be fixed as well.
I'll fix these all up.
Quoted 4 lines
I don't have the
hardware and I worried that there was a reason we don't save it. The current code is misleading because it looks like it's checked until you notice that the "err = " bit is missing.
thanks,
Takashi
Quoted 39 lines
sound/pci/hda/patch_ca0132.c +0
-8@@ -733,8 +733,6 @@ static int ca0132_hp_switch_put(struct snd_kcontrol *kcontrol,/* *valp 0 is mute, 1 is unmute */ data = (data &0x7f ) | (*valp ?0 :0x80 );chipio_write (codec,REG_CODEC_MUTE , data); -if (err <0 ) -return err; spec->curr_hp_switch = *valp;@@ -775,8 +773,6 @@ static int ca0132_speaker_switch_put(struct snd_kcontrol *kcontrol,/* *valp 0 is mute, 1 is unmute */ data = (data &0xef ) | (*valp ?0 :0x10 );chipio_write (codec,REG_CODEC_MUTE , data); -if (err <0 ) -return err; spec->curr_speaker_switch = *valp;@@ -824,14 +820,10 @@ static int ca0132_hp_volume_put(struct snd_kcontrol *kcontrol, val =31 - left_vol; data = (data &0xe0 ) | val;chipio_write (codec,REG_CODEC_HP_VOL_L , data); -if (err <0 ) -return err; val =31 - right_vol; data = (data &0xe0 ) | val;chipio_write (codec,REG_CODEC_HP_VOL_R , data); -if (err <0 ) -return err; spec->curr_hp_volume[0 ] = left_vol; spec->curr_hp_volume[1 ] = right_vol;
At Tue, 07 Feb 2012 10:59:48 +0100,
Quoted 11 lines · Takashi Iwai
At Tue, 7 Feb 2012 10:19:32 +0300,
Quoted 7 lines · Dan Carpenter
We never save the return value from
chipio_write()so "err" is always zero here, not less than zero.Signed-off-by Dan Carpenter <[email protected]>---
The other option would be to save the return value.
Quoted 7 lines
Yes, this should be a better option.
chipio_write()may fail indeed.But then your report spotted another bug. It doesn't handle snd_hda_power_up|down() correctly in the error path. It must be fixed as well.
I'll fix these all up.
FWIW, below is the fix patch.
Takashi
---
From: Takashi Iwai <[email protected]>
Subject: [PATCH] ALSA: hda - Fix error handling in patch_ca0132.c
In patch_ca0132.c, the error returned from chipio_write() isn't checked always. Also, the power-up/down sequence isn't tracked properly in some error paths.
--- sound/pci/hda/patch_ca0132.c | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-)
sound/pci/hda/patch_ca0132.c +19 -14
@@ -728,18 +728,19 @@ static int ca0132_hp_switch_put(struct snd_kcontrol *kcontrol, err =chipio_read (codec,REG_CODEC_MUTE , &data);if (err <0 ) -return err; + goto exit;/* *valp 0 is mute, 1 is unmute */ data = (data &0x7f ) | (*valp ?0 :0x80 ); -chipio_write (codec,REG_CODEC_MUTE , data); + err =chipio_write (codec,REG_CODEC_MUTE , data);if (err <0 ) -return err; + goto exit; spec->curr_hp_switch = *valp; + exit:snd_hda_power_down (codec); -return 1 ; +return err <0 ? err :1 ; } static int ca0132_speaker_switch_get(struct snd_kcontrol *kcontrol,
@@ -770,18 +771,19 @@ static int ca0132_speaker_switch_put(struct snd_kcontrol *kcontrol, err =chipio_read (codec,REG_CODEC_MUTE , &data);if (err <0 ) -return err; + goto exit;/* *valp 0 is mute, 1 is unmute */ data = (data &0xef ) | (*valp ?0 :0x10 ); -chipio_write (codec,REG_CODEC_MUTE , data); + err =chipio_write (codec,REG_CODEC_MUTE , data);if (err <0 ) -return err; + goto exit; spec->curr_speaker_switch = *valp; + exit:snd_hda_power_down (codec); -return 1 ; +return err <0 ? err :1 ; } static int ca0132_hp_volume_get(struct snd_kcontrol *kcontrol,
@@ -819,25 +821,26 @@ static int ca0132_hp_volume_put(struct snd_kcontrol *kcontrol, err =chipio_read (codec,REG_CODEC_HP_VOL_L , &data);if (err <0 ) -return err; + goto exit; val =31 - left_vol; data = (data &0xe0 ) | val; -chipio_write (codec,REG_CODEC_HP_VOL_L , data); + err =chipio_write (codec,REG_CODEC_HP_VOL_L , data);if (err <0 ) -return err; + goto exit; val =31 - right_vol; data = (data &0xe0 ) | val; -chipio_write (codec,REG_CODEC_HP_VOL_R , data); + err =chipio_write (codec,REG_CODEC_HP_VOL_R , data);if (err <0 ) -return err; + goto exit; spec->curr_hp_volume[0 ] = left_vol; spec->curr_hp_volume[1 ] = right_vol; + exit:snd_hda_power_down (codec); -return 1 ; +return err <0 ? err :1 ; }static int add_hp_switch (struct hda_codec *codec,hda_nid_t nid)
@@ -936,6 +939,8 @@ static int ca0132_build_controls(struct hda_codec *codec)if (err <0 )return err; err =add_in_volume (codec, spec->dig_in,"IEC958" ); +if (err <0 ) +return err; }return 0 ; }
Signature · 1 line
1.7.9.rc2