Skip to content

Commit fcbdcc1

Browse files
committed
ALSA: hda/via - Rewrite with error goto
Currently VIA codec driver invokes via_free() at each place of the error path. Move the error handling to the end of each function commonly and do goto-error as a standard idiom. This is a preliminary patch for the further cleanups, and no functional changes. Signed-off-by: Takashi Iwai <[email protected]>
1 parent 0785b0e commit fcbdcc1

File tree

1 file changed

+60
-40
lines changed

1 file changed

+60
-40
lines changed

sound/pci/hda/patch_via.c

Lines changed: 60 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -686,10 +686,8 @@ static int patch_vt1708(struct hda_codec *codec)
686686

687687
/* automatic parse from the BIOS config */
688688
err = via_parse_auto_config(codec);
689-
if (err < 0) {
690-
via_free(codec);
691-
return err;
692-
}
689+
if (err < 0)
690+
goto error;
693691

694692
/* add jack detect on/off control */
695693
spec->mixers[spec->num_mixers++] = vt1708_jack_detect_ctl;
@@ -700,6 +698,10 @@ static int patch_vt1708(struct hda_codec *codec)
700698
codec->jackpoll_interval = 0;
701699

702700
return 0;
701+
702+
error:
703+
via_free(codec);
704+
return err;
703705
}
704706

705707
static int patch_vt1709(struct hda_codec *codec)
@@ -715,12 +717,14 @@ static int patch_vt1709(struct hda_codec *codec)
715717
spec->gen.mixer_nid = 0x18;
716718

717719
err = via_parse_auto_config(codec);
718-
if (err < 0) {
719-
via_free(codec);
720-
return err;
721-
}
720+
if (err < 0)
721+
goto error;
722722

723723
return 0;
724+
725+
error:
726+
via_free(codec);
727+
return err;
724728
}
725729

726730
static int patch_vt1708S(struct hda_codec *codec);
@@ -741,12 +745,14 @@ static int patch_vt1708B(struct hda_codec *codec)
741745

742746
/* automatic parse from the BIOS config */
743747
err = via_parse_auto_config(codec);
744-
if (err < 0) {
745-
via_free(codec);
746-
return err;
747-
}
748+
if (err < 0)
749+
goto error;
748750

749751
return 0;
752+
753+
error:
754+
via_free(codec);
755+
return err;
750756
}
751757

752758
/* Patch for VT1708S */
@@ -793,14 +799,16 @@ static int patch_vt1708S(struct hda_codec *codec)
793799

794800
/* automatic parse from the BIOS config */
795801
err = via_parse_auto_config(codec);
796-
if (err < 0) {
797-
via_free(codec);
798-
return err;
799-
}
802+
if (err < 0)
803+
goto error;
800804

801805
spec->init_verbs[spec->num_iverbs++] = vt1708S_init_verbs;
802806

803807
return 0;
808+
809+
error:
810+
via_free(codec);
811+
return err;
804812
}
805813

806814
/* Patch for VT1702 */
@@ -834,14 +842,16 @@ static int patch_vt1702(struct hda_codec *codec)
834842

835843
/* automatic parse from the BIOS config */
836844
err = via_parse_auto_config(codec);
837-
if (err < 0) {
838-
via_free(codec);
839-
return err;
840-
}
845+
if (err < 0)
846+
goto error;
841847

842848
spec->init_verbs[spec->num_iverbs++] = vt1702_init_verbs;
843849

844850
return 0;
851+
852+
error:
853+
via_free(codec);
854+
return err;
845855
}
846856

847857
/* Patch for VT1718S */
@@ -906,14 +916,16 @@ static int patch_vt1718S(struct hda_codec *codec)
906916

907917
/* automatic parse from the BIOS config */
908918
err = via_parse_auto_config(codec);
909-
if (err < 0) {
910-
via_free(codec);
911-
return err;
912-
}
919+
if (err < 0)
920+
goto error;
913921

914922
spec->init_verbs[spec->num_iverbs++] = vt1718S_init_verbs;
915923

916924
return 0;
925+
926+
error:
927+
via_free(codec);
928+
return err;
917929
}
918930

919931
/* Patch for VT1716S */
@@ -1002,17 +1014,19 @@ static int patch_vt1716S(struct hda_codec *codec)
10021014

10031015
/* automatic parse from the BIOS config */
10041016
err = via_parse_auto_config(codec);
1005-
if (err < 0) {
1006-
via_free(codec);
1007-
return err;
1008-
}
1017+
if (err < 0)
1018+
goto error;
10091019

10101020
spec->init_verbs[spec->num_iverbs++] = vt1716S_init_verbs;
10111021

10121022
spec->mixers[spec->num_mixers++] = vt1716s_dmic_mixer;
10131023
spec->mixers[spec->num_mixers++] = vt1716S_mono_out_mixer;
10141024

10151025
return 0;
1026+
1027+
error:
1028+
via_free(codec);
1029+
return err;
10161030
}
10171031

10181032
/* for vt2002P */
@@ -1109,17 +1123,19 @@ static int patch_vt2002P(struct hda_codec *codec)
11091123

11101124
/* automatic parse from the BIOS config */
11111125
err = via_parse_auto_config(codec);
1112-
if (err < 0) {
1113-
via_free(codec);
1114-
return err;
1115-
}
1126+
if (err < 0)
1127+
goto error;
11161128

11171129
if (spec->codec_type == VT1802)
11181130
spec->init_verbs[spec->num_iverbs++] = vt1802_init_verbs;
11191131
else
11201132
spec->init_verbs[spec->num_iverbs++] = vt2002P_init_verbs;
11211133

11221134
return 0;
1135+
1136+
error:
1137+
via_free(codec);
1138+
return err;
11231139
}
11241140

11251141
/* for vt1812 */
@@ -1150,14 +1166,16 @@ static int patch_vt1812(struct hda_codec *codec)
11501166

11511167
/* automatic parse from the BIOS config */
11521168
err = via_parse_auto_config(codec);
1153-
if (err < 0) {
1154-
via_free(codec);
1155-
return err;
1156-
}
1169+
if (err < 0)
1170+
goto error;
11571171

11581172
spec->init_verbs[spec->num_iverbs++] = vt1812_init_verbs;
11591173

11601174
return 0;
1175+
1176+
error:
1177+
via_free(codec);
1178+
return err;
11611179
}
11621180

11631181
/* patch for vt3476 */
@@ -1187,14 +1205,16 @@ static int patch_vt3476(struct hda_codec *codec)
11871205

11881206
/* automatic parse from the BIOS config */
11891207
err = via_parse_auto_config(codec);
1190-
if (err < 0) {
1191-
via_free(codec);
1192-
return err;
1193-
}
1208+
if (err < 0)
1209+
goto error;
11941210

11951211
spec->init_verbs[spec->num_iverbs++] = vt3476_init_verbs;
11961212

11971213
return 0;
1214+
1215+
error:
1216+
via_free(codec);
1217+
return err;
11981218
}
11991219

12001220
/*

0 commit comments

Comments
 (0)