Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: hda/realtek: Rewrite to new probe method

Convert the Realtek codec drivers to use the new hda_codec_ops probe.
No functional changes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20250709160434.1859-12-tiwai@suse.de

+244 -128
+17 -3
sound/hda/codecs/realtek/alc260.c
··· 211 211 212 212 /* 213 213 */ 214 - static int patch_alc260(struct hda_codec *codec) 214 + static int alc260_probe(struct hda_codec *codec, const struct hda_device_id *id) 215 215 { 216 216 struct alc_spec *spec; 217 217 int err; ··· 252 252 return 0; 253 253 254 254 error: 255 - alc_free(codec); 255 + snd_hda_gen_remove(codec); 256 256 return err; 257 257 } 258 + 259 + static const struct hda_codec_ops alc260_codec_ops = { 260 + .probe = alc260_probe, 261 + .remove = snd_hda_gen_remove, 262 + .build_controls = alc_build_controls, 263 + .build_pcms = snd_hda_gen_build_pcms, 264 + .init = alc_init, 265 + .unsol_event = snd_hda_jack_unsol_event, 266 + .resume = alc_resume, 267 + .suspend = alc_suspend, 268 + .check_power_status = snd_hda_gen_check_power_status, 269 + .stream_pm = snd_hda_gen_stream_pm, 270 + }; 258 271 259 272 /* 260 273 * driver entries 261 274 */ 262 275 static const struct hda_device_id snd_hda_id_alc260[] = { 263 - HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260), 276 + HDA_CODEC_ID(0x10ec0260, "ALC260"), 264 277 {} /* terminator */ 265 278 }; 266 279 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc260); ··· 284 271 285 272 static struct hda_codec_driver alc260_driver = { 286 273 .id = snd_hda_id_alc260, 274 + .ops = &alc260_codec_ops, 287 275 }; 288 276 289 277 module_hda_codec_driver(alc260_driver);
+17 -3
sound/hda/codecs/realtek/alc262.c
··· 126 126 127 127 /* 128 128 */ 129 - static int patch_alc262(struct hda_codec *codec) 129 + static int alc262_probe(struct hda_codec *codec, const struct hda_device_id *id) 130 130 { 131 131 struct alc_spec *spec; 132 132 int err; ··· 175 175 return 0; 176 176 177 177 error: 178 - alc_free(codec); 178 + snd_hda_gen_remove(codec); 179 179 return err; 180 180 } 181 + 182 + static const struct hda_codec_ops alc262_codec_ops = { 183 + .probe = alc262_probe, 184 + .remove = snd_hda_gen_remove, 185 + .build_controls = alc_build_controls, 186 + .build_pcms = snd_hda_gen_build_pcms, 187 + .init = alc_init, 188 + .unsol_event = snd_hda_jack_unsol_event, 189 + .resume = alc_resume, 190 + .suspend = alc_suspend, 191 + .check_power_status = snd_hda_gen_check_power_status, 192 + .stream_pm = snd_hda_gen_stream_pm, 193 + }; 181 194 182 195 /* 183 196 * driver entries 184 197 */ 185 198 static const struct hda_device_id snd_hda_id_alc262[] = { 186 - HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262), 199 + HDA_CODEC_ID(0x10ec0262, "ALC262"), 187 200 {} /* terminator */ 188 201 }; 189 202 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc262); ··· 207 194 208 195 static struct hda_codec_driver alc262_driver = { 209 196 .id = snd_hda_id_alc262, 197 + .ops = &alc262_codec_ops, 210 198 }; 211 199 212 200 module_hda_codec_driver(alc262_driver);
+18 -4
sound/hda/codecs/realtek/alc268.c
··· 101 101 102 102 /* 103 103 */ 104 - static int patch_alc268(struct hda_codec *codec) 104 + static int alc268_probe(struct hda_codec *codec, const struct hda_device_id *id) 105 105 { 106 106 struct alc_spec *spec; 107 107 int i, err; ··· 151 151 return 0; 152 152 153 153 error: 154 - alc_free(codec); 154 + snd_hda_gen_remove(codec); 155 155 return err; 156 156 } 157 + 158 + static const struct hda_codec_ops alc268_codec_ops = { 159 + .probe = alc268_probe, 160 + .remove = snd_hda_gen_remove, 161 + .build_controls = alc_build_controls, 162 + .build_pcms = snd_hda_gen_build_pcms, 163 + .init = alc_init, 164 + .unsol_event = snd_hda_jack_unsol_event, 165 + .resume = alc_resume, 166 + .suspend = alc_suspend, 167 + .check_power_status = snd_hda_gen_check_power_status, 168 + .stream_pm = snd_hda_gen_stream_pm, 169 + }; 157 170 158 171 /* 159 172 * driver entries 160 173 */ 161 174 static const struct hda_device_id snd_hda_id_alc268[] = { 162 - HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268), 163 - HDA_CODEC_ENTRY(0x10ec0268, "ALC268", patch_alc268), 175 + HDA_CODEC_ID(0x10ec0267, "ALC267"), 176 + HDA_CODEC_ID(0x10ec0268, "ALC268"), 164 177 {} /* terminator */ 165 178 }; 166 179 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc268); ··· 184 171 185 172 static struct hda_codec_driver alc268_driver = { 186 173 .id = snd_hda_id_alc268, 174 + .ops = &alc268_codec_ops, 187 175 }; 188 176 189 177 module_hda_codec_driver(alc268_driver);
+61 -50
sound/hda/codecs/realtek/alc269.c
··· 992 992 msleep(150); 993 993 } 994 994 995 - codec->patch_ops.init(codec); 995 + snd_hda_codec_init(codec); 996 996 997 997 if (spec->codec_variant == ALC269_TYPE_ALC269VB) 998 998 alc269vb_toggle_power_output(codec, 1); ··· 7842 7842 alc_update_coef_idx(codec, 0x4, 0, 1<<11); 7843 7843 } 7844 7844 7845 - static void alc269_free(struct hda_codec *codec) 7845 + static void alc269_remove(struct hda_codec *codec) 7846 7846 { 7847 7847 struct alc_spec *spec = codec->spec; 7848 7848 7849 7849 if (spec) 7850 7850 hda_component_manager_free(&spec->comps, &comp_master_ops); 7851 7851 7852 - alc_free(codec); 7852 + snd_hda_gen_remove(codec); 7853 7853 } 7854 7854 7855 7855 /* 7856 7856 */ 7857 - static int patch_alc269(struct hda_codec *codec) 7857 + static int alc269_probe(struct hda_codec *codec, const struct hda_device_id *id) 7858 7858 { 7859 7859 struct alc_spec *spec; 7860 7860 int err; ··· 7868 7868 codec->power_save_node = 0; 7869 7869 spec->en_3kpull_low = true; 7870 7870 7871 - codec->patch_ops.suspend = alc269_suspend; 7872 - codec->patch_ops.resume = alc269_resume; 7873 - codec->patch_ops.free = alc269_free; 7874 7871 spec->shutup = alc_default_shutup; 7875 7872 spec->init_hook = alc_default_init; 7876 7873 ··· 8065 8068 return 0; 8066 8069 8067 8070 error: 8068 - alc_free(codec); 8071 + alc269_remove(codec); 8069 8072 return err; 8070 8073 } 8074 + 8075 + static const struct hda_codec_ops alc269_codec_ops = { 8076 + .probe = alc269_probe, 8077 + .remove = alc269_remove, 8078 + .build_controls = alc_build_controls, 8079 + .build_pcms = snd_hda_gen_build_pcms, 8080 + .init = alc_init, 8081 + .unsol_event = snd_hda_jack_unsol_event, 8082 + .suspend = alc269_suspend, 8083 + .resume = alc269_resume, 8084 + .check_power_status = snd_hda_gen_check_power_status, 8085 + .stream_pm = snd_hda_gen_stream_pm, 8086 + }; 8071 8087 8072 8088 /* 8073 8089 * driver entries 8074 8090 */ 8075 8091 static const struct hda_device_id snd_hda_id_alc269[] = { 8076 - HDA_CODEC_ENTRY(0x10ec0215, "ALC215", patch_alc269), 8077 - HDA_CODEC_ENTRY(0x10ec0221, "ALC221", patch_alc269), 8078 - HDA_CODEC_ENTRY(0x10ec0222, "ALC222", patch_alc269), 8079 - HDA_CODEC_ENTRY(0x10ec0225, "ALC225", patch_alc269), 8080 - HDA_CODEC_ENTRY(0x10ec0230, "ALC236", patch_alc269), 8081 - HDA_CODEC_ENTRY(0x10ec0231, "ALC231", patch_alc269), 8082 - HDA_CODEC_ENTRY(0x10ec0233, "ALC233", patch_alc269), 8083 - HDA_CODEC_ENTRY(0x10ec0234, "ALC234", patch_alc269), 8084 - HDA_CODEC_ENTRY(0x10ec0235, "ALC233", patch_alc269), 8085 - HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269), 8086 - HDA_CODEC_ENTRY(0x10ec0245, "ALC245", patch_alc269), 8087 - HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269), 8088 - HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269), 8089 - HDA_CODEC_ENTRY(0x10ec0257, "ALC257", patch_alc269), 8090 - HDA_CODEC_ENTRY(0x10ec0269, "ALC269", patch_alc269), 8091 - HDA_CODEC_ENTRY(0x10ec0270, "ALC270", patch_alc269), 8092 - HDA_CODEC_ENTRY(0x10ec0274, "ALC274", patch_alc269), 8093 - HDA_CODEC_ENTRY(0x10ec0275, "ALC275", patch_alc269), 8094 - HDA_CODEC_ENTRY(0x10ec0276, "ALC276", patch_alc269), 8095 - HDA_CODEC_ENTRY(0x10ec0280, "ALC280", patch_alc269), 8096 - HDA_CODEC_ENTRY(0x10ec0282, "ALC282", patch_alc269), 8097 - HDA_CODEC_ENTRY(0x10ec0283, "ALC283", patch_alc269), 8098 - HDA_CODEC_ENTRY(0x10ec0284, "ALC284", patch_alc269), 8099 - HDA_CODEC_ENTRY(0x10ec0285, "ALC285", patch_alc269), 8100 - HDA_CODEC_ENTRY(0x10ec0286, "ALC286", patch_alc269), 8101 - HDA_CODEC_ENTRY(0x10ec0287, "ALC287", patch_alc269), 8102 - HDA_CODEC_ENTRY(0x10ec0288, "ALC288", patch_alc269), 8103 - HDA_CODEC_ENTRY(0x10ec0289, "ALC289", patch_alc269), 8104 - HDA_CODEC_ENTRY(0x10ec0290, "ALC290", patch_alc269), 8105 - HDA_CODEC_ENTRY(0x10ec0292, "ALC292", patch_alc269), 8106 - HDA_CODEC_ENTRY(0x10ec0293, "ALC293", patch_alc269), 8107 - HDA_CODEC_ENTRY(0x10ec0294, "ALC294", patch_alc269), 8108 - HDA_CODEC_ENTRY(0x10ec0295, "ALC295", patch_alc269), 8109 - HDA_CODEC_ENTRY(0x10ec0298, "ALC298", patch_alc269), 8110 - HDA_CODEC_ENTRY(0x10ec0299, "ALC299", patch_alc269), 8111 - HDA_CODEC_ENTRY(0x10ec0300, "ALC300", patch_alc269), 8112 - HDA_CODEC_ENTRY(0x10ec0623, "ALC623", patch_alc269), 8113 - HDA_CODEC_ENTRY(0x10ec0700, "ALC700", patch_alc269), 8114 - HDA_CODEC_ENTRY(0x10ec0701, "ALC701", patch_alc269), 8115 - HDA_CODEC_ENTRY(0x10ec0703, "ALC703", patch_alc269), 8116 - HDA_CODEC_ENTRY(0x10ec0711, "ALC711", patch_alc269), 8117 - HDA_CODEC_ENTRY(0x19e58326, "HW8326", patch_alc269), 8092 + HDA_CODEC_ID(0x10ec0215, "ALC215"), 8093 + HDA_CODEC_ID(0x10ec0221, "ALC221"), 8094 + HDA_CODEC_ID(0x10ec0222, "ALC222"), 8095 + HDA_CODEC_ID(0x10ec0225, "ALC225"), 8096 + HDA_CODEC_ID(0x10ec0230, "ALC236"), 8097 + HDA_CODEC_ID(0x10ec0231, "ALC231"), 8098 + HDA_CODEC_ID(0x10ec0233, "ALC233"), 8099 + HDA_CODEC_ID(0x10ec0234, "ALC234"), 8100 + HDA_CODEC_ID(0x10ec0235, "ALC233"), 8101 + HDA_CODEC_ID(0x10ec0236, "ALC236"), 8102 + HDA_CODEC_ID(0x10ec0245, "ALC245"), 8103 + HDA_CODEC_ID(0x10ec0255, "ALC255"), 8104 + HDA_CODEC_ID(0x10ec0256, "ALC256"), 8105 + HDA_CODEC_ID(0x10ec0257, "ALC257"), 8106 + HDA_CODEC_ID(0x10ec0269, "ALC269"), 8107 + HDA_CODEC_ID(0x10ec0270, "ALC270"), 8108 + HDA_CODEC_ID(0x10ec0274, "ALC274"), 8109 + HDA_CODEC_ID(0x10ec0275, "ALC275"), 8110 + HDA_CODEC_ID(0x10ec0276, "ALC276"), 8111 + HDA_CODEC_ID(0x10ec0280, "ALC280"), 8112 + HDA_CODEC_ID(0x10ec0282, "ALC282"), 8113 + HDA_CODEC_ID(0x10ec0283, "ALC283"), 8114 + HDA_CODEC_ID(0x10ec0284, "ALC284"), 8115 + HDA_CODEC_ID(0x10ec0285, "ALC285"), 8116 + HDA_CODEC_ID(0x10ec0286, "ALC286"), 8117 + HDA_CODEC_ID(0x10ec0287, "ALC287"), 8118 + HDA_CODEC_ID(0x10ec0288, "ALC288"), 8119 + HDA_CODEC_ID(0x10ec0289, "ALC289"), 8120 + HDA_CODEC_ID(0x10ec0290, "ALC290"), 8121 + HDA_CODEC_ID(0x10ec0292, "ALC292"), 8122 + HDA_CODEC_ID(0x10ec0293, "ALC293"), 8123 + HDA_CODEC_ID(0x10ec0294, "ALC294"), 8124 + HDA_CODEC_ID(0x10ec0295, "ALC295"), 8125 + HDA_CODEC_ID(0x10ec0298, "ALC298"), 8126 + HDA_CODEC_ID(0x10ec0299, "ALC299"), 8127 + HDA_CODEC_ID(0x10ec0300, "ALC300"), 8128 + HDA_CODEC_ID(0x10ec0623, "ALC623"), 8129 + HDA_CODEC_ID(0x10ec0700, "ALC700"), 8130 + HDA_CODEC_ID(0x10ec0701, "ALC701"), 8131 + HDA_CODEC_ID(0x10ec0703, "ALC703"), 8132 + HDA_CODEC_ID(0x10ec0711, "ALC711"), 8133 + HDA_CODEC_ID(0x19e58326, "HW8326"), 8118 8134 {} /* terminator */ 8119 8135 }; 8120 8136 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc269); ··· 8139 8129 8140 8130 static struct hda_codec_driver alc269_driver = { 8141 8131 .id = snd_hda_id_alc269, 8132 + .ops = &alc269_codec_ops, 8142 8133 }; 8143 8134 8144 8135 module_hda_codec_driver(alc269_driver);
+28 -14
sound/hda/codecs/realtek/alc662.c
··· 994 994 995 995 /* 996 996 */ 997 - static int patch_alc662(struct hda_codec *codec) 997 + static int alc662_probe(struct hda_codec *codec, const struct hda_device_id *id) 998 998 { 999 999 struct alc_spec *spec; 1000 1000 int err; ··· 1067 1067 return 0; 1068 1068 1069 1069 error: 1070 - alc_free(codec); 1070 + snd_hda_gen_remove(codec); 1071 1071 return err; 1072 1072 } 1073 + 1074 + static const struct hda_codec_ops alc662_codec_ops = { 1075 + .probe = alc662_probe, 1076 + .remove = snd_hda_gen_remove, 1077 + .build_controls = alc_build_controls, 1078 + .build_pcms = snd_hda_gen_build_pcms, 1079 + .init = alc_init, 1080 + .unsol_event = snd_hda_jack_unsol_event, 1081 + .resume = alc_resume, 1082 + .suspend = alc_suspend, 1083 + .check_power_status = snd_hda_gen_check_power_status, 1084 + .stream_pm = snd_hda_gen_stream_pm, 1085 + }; 1073 1086 1074 1087 /* 1075 1088 * driver entries 1076 1089 */ 1077 1090 static const struct hda_device_id snd_hda_id_alc662[] = { 1078 - HDA_CODEC_ENTRY(0x10ec0272, "ALC272", patch_alc662), 1079 - HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100101, "ALC662 rev1", patch_alc662), 1080 - HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100300, "ALC662 rev3", patch_alc662), 1081 - HDA_CODEC_ENTRY(0x10ec0663, "ALC663", patch_alc662), 1082 - HDA_CODEC_ENTRY(0x10ec0665, "ALC665", patch_alc662), 1083 - HDA_CODEC_ENTRY(0x10ec0667, "ALC667", patch_alc662), 1084 - HDA_CODEC_ENTRY(0x10ec0668, "ALC668", patch_alc662), 1085 - HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662), 1086 - HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662), 1087 - HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc662), 1088 - HDA_CODEC_ENTRY(0x10ec0892, "ALC892", patch_alc662), 1089 - HDA_CODEC_ENTRY(0x10ec0897, "ALC897", patch_alc662), 1091 + HDA_CODEC_ID(0x10ec0272, "ALC272"), 1092 + HDA_CODEC_ID_REV(0x10ec0662, 0x100101, "ALC662 rev1"), 1093 + HDA_CODEC_ID_REV(0x10ec0662, 0x100300, "ALC662 rev3"), 1094 + HDA_CODEC_ID(0x10ec0663, "ALC663"), 1095 + HDA_CODEC_ID(0x10ec0665, "ALC665"), 1096 + HDA_CODEC_ID(0x10ec0667, "ALC667"), 1097 + HDA_CODEC_ID(0x10ec0668, "ALC668"), 1098 + HDA_CODEC_ID(0x10ec0670, "ALC670"), 1099 + HDA_CODEC_ID(0x10ec0671, "ALC671"), 1100 + HDA_CODEC_ID(0x10ec0867, "ALC891"), 1101 + HDA_CODEC_ID(0x10ec0892, "ALC892"), 1102 + HDA_CODEC_ID(0x10ec0897, "ALC897"), 1090 1103 {} /* terminator */ 1091 1104 }; 1092 1105 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc662); ··· 1110 1097 1111 1098 static struct hda_codec_driver alc662_driver = { 1112 1099 .id = snd_hda_id_alc662, 1100 + .ops = &alc662_codec_ops, 1113 1101 }; 1114 1102 1115 1103 module_hda_codec_driver(alc662_driver);
+17 -3
sound/hda/codecs/realtek/alc680.c
··· 14 14 15 15 /* 16 16 */ 17 - static int patch_alc680(struct hda_codec *codec) 17 + static int alc680_probe(struct hda_codec *codec, const struct hda_device_id *id) 18 18 { 19 19 int err; 20 20 ··· 26 26 /* automatic parse from the BIOS config */ 27 27 err = alc680_parse_auto_config(codec); 28 28 if (err < 0) { 29 - alc_free(codec); 29 + snd_hda_gen_remove(codec); 30 30 return err; 31 31 } 32 32 33 33 return 0; 34 34 } 35 35 36 + static const struct hda_codec_ops alc680_codec_ops = { 37 + .probe = alc680_probe, 38 + .remove = snd_hda_gen_remove, 39 + .build_controls = alc_build_controls, 40 + .build_pcms = snd_hda_gen_build_pcms, 41 + .init = alc_init, 42 + .unsol_event = snd_hda_jack_unsol_event, 43 + .resume = alc_resume, 44 + .suspend = alc_suspend, 45 + .check_power_status = snd_hda_gen_check_power_status, 46 + .stream_pm = snd_hda_gen_stream_pm, 47 + }; 48 + 36 49 /* 37 50 * driver entries 38 51 */ 39 52 static const struct hda_device_id snd_hda_id_alc680[] = { 40 - HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680), 53 + HDA_CODEC_ID(0x10ec0680, "ALC680"), 41 54 {} /* terminator */ 42 55 }; 43 56 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc680); ··· 61 48 62 49 static struct hda_codec_driver alc680_driver = { 63 50 .id = snd_hda_id_alc680, 51 + .ops = &alc680_codec_ops, 64 52 }; 65 53 66 54 module_hda_codec_driver(alc680_driver);
+18 -4
sound/hda/codecs/realtek/alc861.c
··· 88 88 89 89 /* 90 90 */ 91 - static int patch_alc861(struct hda_codec *codec) 91 + static int alc861_probe(struct hda_codec *codec, const struct hda_device_id *id) 92 92 { 93 93 struct alc_spec *spec; 94 94 int err; ··· 124 124 return 0; 125 125 126 126 error: 127 - alc_free(codec); 127 + snd_hda_gen_remove(codec); 128 128 return err; 129 129 } 130 + 131 + static const struct hda_codec_ops alc861_codec_ops = { 132 + .probe = alc861_probe, 133 + .remove = snd_hda_gen_remove, 134 + .build_controls = alc_build_controls, 135 + .build_pcms = snd_hda_gen_build_pcms, 136 + .init = alc_init, 137 + .unsol_event = snd_hda_jack_unsol_event, 138 + .resume = alc_resume, 139 + .suspend = alc_suspend, 140 + .check_power_status = snd_hda_gen_check_power_status, 141 + .stream_pm = snd_hda_gen_stream_pm, 142 + }; 130 143 131 144 /* 132 145 * driver entries 133 146 */ 134 147 static const struct hda_device_id snd_hda_id_alc861[] = { 135 - HDA_CODEC_REV_ENTRY(0x10ec0861, 0x100340, "ALC660", patch_alc861), 136 - HDA_CODEC_ENTRY(0x10ec0861, "ALC861", patch_alc861), 148 + HDA_CODEC_ID_REV(0x10ec0861, 0x100340, "ALC660"), 149 + HDA_CODEC_ID(0x10ec0861, "ALC861"), 137 150 {} /* terminator */ 138 151 }; 139 152 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc861); ··· 157 144 158 145 static struct hda_codec_driver alc861_driver = { 159 146 .id = snd_hda_id_alc861, 147 + .ops = &alc861_codec_ops, 160 148 }; 161 149 162 150 module_hda_codec_driver(alc861_driver);
+18 -4
sound/hda/codecs/realtek/alc861vd.c
··· 62 62 63 63 /* 64 64 */ 65 - static int patch_alc861vd(struct hda_codec *codec) 65 + static int alc861vd_probe(struct hda_codec *codec, const struct hda_device_id *id) 66 66 { 67 67 struct alc_spec *spec; 68 68 int err; ··· 98 98 return 0; 99 99 100 100 error: 101 - alc_free(codec); 101 + snd_hda_gen_remove(codec); 102 102 return err; 103 103 } 104 + 105 + static const struct hda_codec_ops alc861vd_codec_ops = { 106 + .probe = alc861vd_probe, 107 + .remove = snd_hda_gen_remove, 108 + .build_controls = alc_build_controls, 109 + .build_pcms = snd_hda_gen_build_pcms, 110 + .init = alc_init, 111 + .unsol_event = snd_hda_jack_unsol_event, 112 + .resume = alc_resume, 113 + .suspend = alc_suspend, 114 + .check_power_status = snd_hda_gen_check_power_status, 115 + .stream_pm = snd_hda_gen_stream_pm, 116 + }; 104 117 105 118 /* 106 119 * driver entries 107 120 */ 108 121 static const struct hda_device_id snd_hda_id_alc861vd[] = { 109 - HDA_CODEC_ENTRY(0x10ec0660, "ALC660-VD", patch_alc861vd), 110 - HDA_CODEC_ENTRY(0x10ec0862, "ALC861-VD", patch_alc861vd), 122 + HDA_CODEC_ID(0x10ec0660, "ALC660-VD"), 123 + HDA_CODEC_ID(0x10ec0862, "ALC861-VD"), 111 124 {} /* terminator */ 112 125 }; 113 126 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc861vd); ··· 131 118 132 119 static struct hda_codec_driver alc861vd_driver = { 133 120 .id = snd_hda_id_alc861vd, 121 + .ops = &alc861vd_codec_ops, 134 122 }; 135 123 136 124 module_hda_codec_driver(alc861vd_driver);
+18 -6
sound/hda/codecs/realtek/alc880.c
··· 434 434 435 435 436 436 /* 437 - * OK, here we have finally the patch for ALC880 437 + * OK, here we have finally the probe for ALC880 438 438 */ 439 - static int patch_alc880(struct hda_codec *codec) 439 + static int alc880_probe(struct hda_codec *codec, const struct hda_device_id *id) 440 440 { 441 441 struct alc_spec *spec; 442 442 int err; ··· 448 448 spec = codec->spec; 449 449 spec->gen.need_dac_fix = 1; 450 450 spec->gen.beep_nid = 0x01; 451 - 452 - codec->patch_ops.unsol_event = alc880_unsol_event; 453 451 454 452 alc_pre_init(codec); 455 453 ··· 471 473 return 0; 472 474 473 475 error: 474 - alc_free(codec); 476 + snd_hda_gen_remove(codec); 475 477 return err; 476 478 } 479 + 480 + static const struct hda_codec_ops alc880_codec_ops = { 481 + .probe = alc880_probe, 482 + .remove = snd_hda_gen_remove, 483 + .build_controls = alc_build_controls, 484 + .build_pcms = snd_hda_gen_build_pcms, 485 + .init = alc_init, 486 + .unsol_event = alc880_unsol_event, 487 + .resume = alc_resume, 488 + .suspend = alc_suspend, 489 + .check_power_status = snd_hda_gen_check_power_status, 490 + .stream_pm = snd_hda_gen_stream_pm, 491 + }; 477 492 478 493 /* 479 494 * driver entries 480 495 */ 481 496 static const struct hda_device_id snd_hda_id_alc880[] = { 482 - HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880), 497 + HDA_CODEC_ID(0x10ec0880, "ALC880"), 483 498 {} /* terminator */ 484 499 }; 485 500 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc880); ··· 503 492 504 493 static struct hda_codec_driver alc880_driver = { 505 494 .id = snd_hda_id_alc880, 495 + .ops = &alc880_codec_ops, 506 496 }; 507 497 508 498 module_hda_codec_driver(alc880_driver);
+31 -17
sound/hda/codecs/realtek/alc882.c
··· 757 757 758 758 /* 759 759 */ 760 - static int patch_alc882(struct hda_codec *codec) 760 + static int alc882_probe(struct hda_codec *codec, const struct hda_device_id *id) 761 761 { 762 762 struct alc_spec *spec; 763 763 int err; ··· 809 809 return 0; 810 810 811 811 error: 812 - alc_free(codec); 812 + snd_hda_gen_remove(codec); 813 813 return err; 814 814 } 815 + 816 + static const struct hda_codec_ops alc882_codec_ops = { 817 + .probe = alc882_probe, 818 + .remove = snd_hda_gen_remove, 819 + .build_controls = alc_build_controls, 820 + .build_pcms = snd_hda_gen_build_pcms, 821 + .init = alc_init, 822 + .unsol_event = snd_hda_jack_unsol_event, 823 + .resume = alc_resume, 824 + .suspend = alc_suspend, 825 + .check_power_status = snd_hda_gen_check_power_status, 826 + .stream_pm = snd_hda_gen_stream_pm, 827 + }; 815 828 816 829 /* 817 830 * driver entries 818 831 */ 819 832 static const struct hda_device_id snd_hda_id_alc882[] = { 820 - HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100002, "ALC662 rev2", patch_alc882), 821 - HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882), 822 - HDA_CODEC_ENTRY(0x10ec0883, "ALC883", patch_alc882), 823 - HDA_CODEC_REV_ENTRY(0x10ec0885, 0x100101, "ALC889A", patch_alc882), 824 - HDA_CODEC_REV_ENTRY(0x10ec0885, 0x100103, "ALC889A", patch_alc882), 825 - HDA_CODEC_ENTRY(0x10ec0885, "ALC885", patch_alc882), 826 - HDA_CODEC_ENTRY(0x10ec0887, "ALC887", patch_alc882), 827 - HDA_CODEC_REV_ENTRY(0x10ec0888, 0x100101, "ALC1200", patch_alc882), 828 - HDA_CODEC_ENTRY(0x10ec0888, "ALC888", patch_alc882), 829 - HDA_CODEC_ENTRY(0x10ec0889, "ALC889", patch_alc882), 830 - HDA_CODEC_ENTRY(0x10ec0899, "ALC898", patch_alc882), 831 - HDA_CODEC_ENTRY(0x10ec0900, "ALC1150", patch_alc882), 832 - HDA_CODEC_ENTRY(0x10ec0b00, "ALCS1200A", patch_alc882), 833 - HDA_CODEC_ENTRY(0x10ec1168, "ALC1220", patch_alc882), 834 - HDA_CODEC_ENTRY(0x10ec1220, "ALC1220", patch_alc882), 833 + HDA_CODEC_ID_REV(0x10ec0662, 0x100002, "ALC662 rev2"), 834 + HDA_CODEC_ID(0x10ec0882, "ALC882"), 835 + HDA_CODEC_ID(0x10ec0883, "ALC883"), 836 + HDA_CODEC_ID_REV(0x10ec0885, 0x100101, "ALC889A"), 837 + HDA_CODEC_ID_REV(0x10ec0885, 0x100103, "ALC889A"), 838 + HDA_CODEC_ID(0x10ec0885, "ALC885"), 839 + HDA_CODEC_ID(0x10ec0887, "ALC887"), 840 + HDA_CODEC_ID_REV(0x10ec0888, 0x100101, "ALC1200"), 841 + HDA_CODEC_ID(0x10ec0888, "ALC888"), 842 + HDA_CODEC_ID(0x10ec0889, "ALC889"), 843 + HDA_CODEC_ID(0x10ec0899, "ALC898"), 844 + HDA_CODEC_ID(0x10ec0900, "ALC1150"), 845 + HDA_CODEC_ID(0x10ec0b00, "ALCS1200A"), 846 + HDA_CODEC_ID(0x10ec1168, "ALC1220"), 847 + HDA_CODEC_ID(0x10ec1220, "ALC1220"), 835 848 {} /* terminator */ 836 849 }; 837 850 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_alc882); ··· 855 842 856 843 static struct hda_codec_driver alc882_driver = { 857 844 .id = snd_hda_id_alc882, 845 + .ops = &alc882_codec_ops, 858 846 }; 859 847 860 848 module_hda_codec_driver(alc882_driver);
+1 -16
sound/hda/codecs/realtek/realtek.c
··· 862 862 863 863 if (!spec->no_depop_delay) 864 864 msleep(150); /* to avoid pop noise */ 865 - codec->patch_ops.init(codec); 865 + snd_hda_codec_init(codec); 866 866 snd_hda_regmap_sync(codec); 867 867 hda_call_check_power_status(codec, 0x01); 868 868 return 0; 869 869 } 870 870 EXPORT_SYMBOL_NS_GPL(alc_resume, "SND_HDA_CODEC_REALTEK"); 871 - 872 - /* 873 - */ 874 - const struct hda_codec_ops alc_patch_ops = { 875 - .build_controls = alc_build_controls, 876 - .build_pcms = snd_hda_gen_build_pcms, 877 - .init = alc_init, 878 - .free = alc_free, 879 - .unsol_event = snd_hda_jack_unsol_event, 880 - .resume = alc_resume, 881 - .suspend = alc_suspend, 882 - .check_power_status = snd_hda_gen_check_power_status, 883 - }; 884 - EXPORT_SYMBOL_NS_GPL(alc_patch_ops, "SND_HDA_CODEC_REALTEK"); 885 871 886 872 /* 887 873 * Rename codecs appropriately from COEF value or subvendor id ··· 1068 1082 /* FIXME: do we need this for all Realtek codec models? */ 1069 1083 codec->spdif_status_reset = 1; 1070 1084 codec->forced_resume = 1; 1071 - codec->patch_ops = alc_patch_ops; 1072 1085 mutex_init(&spec->coef_mutex); 1073 1086 1074 1087 err = alc_codec_rename_from_preset(codec);
-4
sound/hda/codecs/realtek/realtek.h
··· 226 226 int alc_suspend(struct hda_codec *codec); 227 227 int alc_resume(struct hda_codec *codec); 228 228 229 - #define alc_free snd_hda_gen_free 230 - 231 229 int alc_parse_auto_config(struct hda_codec *codec, 232 230 const hda_nid_t *ignore_nids, 233 231 const hda_nid_t *ssid_nids); 234 232 int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid); 235 - 236 - extern const struct hda_codec_ops alc_patch_ops; 237 233 238 234 #define alc_codec_rename(codec, name) snd_hda_codec_set_name(codec, name) 239 235