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

ALSA: ac97: Use snd_ctl_enum_info()

... and reduce the open codes. Also add missing const to text arrays.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

+53 -133
+2 -8
sound/pci/ac97/ac97_codec.c
··· 463 463 { 464 464 struct ac97_enum *e = (struct ac97_enum *)kcontrol->private_value; 465 465 466 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 467 - uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 468 - uinfo->value.enumerated.items = e->mask; 469 - 470 - if (uinfo->value.enumerated.item > e->mask - 1) 471 - uinfo->value.enumerated.item = e->mask - 1; 472 - strcpy(uinfo->value.enumerated.name, e->texts[uinfo->value.enumerated.item]); 473 - return 0; 466 + return snd_ctl_enum_info(uinfo, e->shift_l == e->shift_r ? 1 : 2, 467 + e->mask, e->texts); 474 468 } 475 469 476 470 static int snd_ac97_get_enum_double(struct snd_kcontrol *kcontrol,
+51 -125
sound/pci/ac97/ac97_patch.c
··· 81 81 /* 82 82 * shared line-in/mic controls 83 83 */ 84 - static int ac97_enum_text_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo, 85 - const char **texts, unsigned int nums) 86 - { 87 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 88 - uinfo->count = 1; 89 - uinfo->value.enumerated.items = nums; 90 - if (uinfo->value.enumerated.item > nums - 1) 91 - uinfo->value.enumerated.item = nums - 1; 92 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 93 - return 0; 94 - } 95 - 96 84 static int ac97_surround_jack_mode_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 97 85 { 98 - static const char *texts[] = { "Shared", "Independent" }; 99 - return ac97_enum_text_info(kcontrol, uinfo, texts, 2); 86 + static const char * const texts[] = { "Shared", "Independent" }; 87 + 88 + return snd_ctl_enum_info(uinfo, 1, 2, texts); 100 89 } 101 90 102 91 static int ac97_surround_jack_mode_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 112 123 113 124 static int ac97_channel_mode_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 114 125 { 115 - static const char *texts[] = { "2ch", "4ch", "6ch", "8ch" }; 116 - return ac97_enum_text_info(kcontrol, uinfo, texts, 117 - kcontrol->private_value); 126 + static const char * const texts[] = { "2ch", "4ch", "6ch", "8ch" }; 127 + 128 + return snd_ctl_enum_info(uinfo, 1, kcontrol->private_value, texts); 118 129 } 119 130 120 131 static int ac97_channel_mode_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 229 240 static int snd_ac97_ymf7x3_info_speaker(struct snd_kcontrol *kcontrol, 230 241 struct snd_ctl_elem_info *uinfo) 231 242 { 232 - static char *texts[3] = { 243 + static const char * const texts[3] = { 233 244 "Standard", "Small", "Smaller" 234 245 }; 235 246 236 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 237 - uinfo->count = 1; 238 - uinfo->value.enumerated.items = 3; 239 - if (uinfo->value.enumerated.item > 2) 240 - uinfo->value.enumerated.item = 2; 241 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 242 - return 0; 247 + return snd_ctl_enum_info(uinfo, 1, 3, texts); 243 248 } 244 249 245 250 static int snd_ac97_ymf7x3_get_speaker(struct snd_kcontrol *kcontrol, ··· 276 293 static int snd_ac97_ymf7x3_spdif_source_info(struct snd_kcontrol *kcontrol, 277 294 struct snd_ctl_elem_info *uinfo) 278 295 { 279 - static char *texts[2] = { "AC-Link", "A/D Converter" }; 296 + static const char * const texts[2] = { "AC-Link", "A/D Converter" }; 280 297 281 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 282 - uinfo->count = 1; 283 - uinfo->value.enumerated.items = 2; 284 - if (uinfo->value.enumerated.item > 1) 285 - uinfo->value.enumerated.item = 1; 286 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 287 - return 0; 298 + return snd_ctl_enum_info(uinfo, 1, 2, texts); 288 299 } 289 300 290 301 static int snd_ac97_ymf7x3_spdif_source_get(struct snd_kcontrol *kcontrol, ··· 378 401 There is also a bit to mute S/PDIF output in a vendor-specific register. */ 379 402 static int snd_ac97_ymf753_spdif_output_pin_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 380 403 { 381 - static char *texts[3] = { "Disabled", "Pin 43", "Pin 48" }; 404 + static const char * const texts[3] = { "Disabled", "Pin 43", "Pin 48" }; 382 405 383 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 384 - uinfo->count = 1; 385 - uinfo->value.enumerated.items = 3; 386 - if (uinfo->value.enumerated.item > 2) 387 - uinfo->value.enumerated.item = 2; 388 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 389 - return 0; 406 + return snd_ctl_enum_info(uinfo, 1, 3, texts); 390 407 } 391 408 392 409 static int snd_ac97_ymf753_spdif_output_pin_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 1074 1103 1075 1104 static int snd_ac97_stac9758_output_jack_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1076 1105 { 1077 - static char *texts[5] = { "Input/Disabled", "Front Output", 1106 + static const char * const texts[5] = { 1107 + "Input/Disabled", "Front Output", 1078 1108 "Rear Output", "Center/LFE Output", "Mixer Output" }; 1079 1109 1080 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1081 - uinfo->count = 1; 1082 - uinfo->value.enumerated.items = 5; 1083 - if (uinfo->value.enumerated.item > 4) 1084 - uinfo->value.enumerated.item = 4; 1085 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1086 - return 0; 1110 + return snd_ctl_enum_info(uinfo, 1, 5, texts); 1087 1111 } 1088 1112 1089 1113 static int snd_ac97_stac9758_output_jack_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 1113 1147 1114 1148 static int snd_ac97_stac9758_input_jack_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1115 1149 { 1116 - static char *texts[7] = { "Mic2 Jack", "Mic1 Jack", "Line In Jack", 1150 + static const char * const texts[7] = { 1151 + "Mic2 Jack", "Mic1 Jack", "Line In Jack", 1117 1152 "Front Jack", "Rear Jack", "Center/LFE Jack", "Mute" }; 1118 1153 1119 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1120 - uinfo->count = 1; 1121 - uinfo->value.enumerated.items = 7; 1122 - if (uinfo->value.enumerated.item > 6) 1123 - uinfo->value.enumerated.item = 6; 1124 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1125 - return 0; 1154 + return snd_ctl_enum_info(uinfo, 1, 7, texts); 1126 1155 } 1127 1156 1128 1157 static int snd_ac97_stac9758_input_jack_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 1142 1181 1143 1182 static int snd_ac97_stac9758_phonesel_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1144 1183 { 1145 - static char *texts[3] = { "None", "Front Jack", "Rear Jack" }; 1184 + static const char * const texts[3] = { 1185 + "None", "Front Jack", "Rear Jack" 1186 + }; 1146 1187 1147 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1148 - uinfo->count = 1; 1149 - uinfo->value.enumerated.items = 3; 1150 - if (uinfo->value.enumerated.item > 2) 1151 - uinfo->value.enumerated.item = 2; 1152 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1153 - return 0; 1188 + return snd_ctl_enum_info(uinfo, 1, 3, texts); 1154 1189 } 1155 1190 1156 1191 static int snd_ac97_stac9758_phonesel_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 1761 1804 1762 1805 static int snd_ac97_ad198x_spdif_source_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1763 1806 { 1764 - static char *texts[2] = { "AC-Link", "A/D Converter" }; 1807 + static const char * const texts[2] = { "AC-Link", "A/D Converter" }; 1765 1808 1766 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1767 - uinfo->count = 1; 1768 - uinfo->value.enumerated.items = 2; 1769 - if (uinfo->value.enumerated.item > 1) 1770 - uinfo->value.enumerated.item = 1; 1771 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1772 - return 0; 1809 + return snd_ctl_enum_info(uinfo, 1, 2, texts); 1773 1810 } 1774 1811 1775 1812 static int snd_ac97_ad198x_spdif_source_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 1945 1994 1946 1995 static int snd_ac97_ad1888_downmix_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1947 1996 { 1948 - static char *texts[3] = {"Off", "6 -> 4", "6 -> 2"}; 1997 + static const char * const texts[3] = {"Off", "6 -> 4", "6 -> 2"}; 1949 1998 1950 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1951 - uinfo->count = 1; 1952 - uinfo->value.enumerated.items = 3; 1953 - if (uinfo->value.enumerated.item > 2) 1954 - uinfo->value.enumerated.item = 2; 1955 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1956 - return 0; 1999 + return snd_ctl_enum_info(uinfo, 1, 3, texts); 1957 2000 } 1958 2001 1959 2002 static int snd_ac97_ad1888_downmix_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 2098 2153 static int snd_ac97_ad1985_vrefout_info(struct snd_kcontrol *kcontrol, 2099 2154 struct snd_ctl_elem_info *uinfo) 2100 2155 { 2101 - static char *texts[4] = {"High-Z", "3.7 V", "2.25 V", "0 V"}; 2156 + static const char * const texts[4] = { 2157 + "High-Z", "3.7 V", "2.25 V", "0 V" 2158 + }; 2102 2159 2103 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2104 - uinfo->count = 1; 2105 - uinfo->value.enumerated.items = 4; 2106 - if (uinfo->value.enumerated.item > 3) 2107 - uinfo->value.enumerated.item = 3; 2108 - strcpy(uinfo->value.enumerated.name, 2109 - texts[uinfo->value.enumerated.item]); 2110 - return 0; 2160 + return snd_ctl_enum_info(uinfo, 1, 4, texts); 2111 2161 } 2112 2162 2113 2163 static int snd_ac97_ad1985_vrefout_get(struct snd_kcontrol *kcontrol, ··· 2696 2756 2697 2757 static int alc655_iec958_route_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2698 2758 { 2699 - static char *texts_655[3] = { "PCM", "Analog In", "IEC958 In" }; 2700 - static char *texts_658[4] = { "PCM", "Analog1 In", "Analog2 In", "IEC958 In" }; 2759 + static const char * const texts_655[3] = { 2760 + "PCM", "Analog In", "IEC958 In" 2761 + }; 2762 + static const char * const texts_658[4] = { 2763 + "PCM", "Analog1 In", "Analog2 In", "IEC958 In" 2764 + }; 2701 2765 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); 2702 2766 2703 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2704 - uinfo->count = 1; 2705 - uinfo->value.enumerated.items = ac97->spec.dev_flags ? 4 : 3; 2706 - if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2707 - uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2708 - strcpy(uinfo->value.enumerated.name, 2709 - ac97->spec.dev_flags ? 2710 - texts_658[uinfo->value.enumerated.item] : 2711 - texts_655[uinfo->value.enumerated.item]); 2712 - return 0; 2767 + if (ac97->spec.dev_flags) 2768 + return snd_ctl_enum_info(uinfo, 1, 4, texts_658); 2769 + else 2770 + return snd_ctl_enum_info(uinfo, 1, 3, texts_655); 2713 2771 } 2714 2772 2715 2773 static int alc655_iec958_route_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 2993 3055 2994 3056 static int snd_ac97_cmedia_spdif_playback_source_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2995 3057 { 2996 - static char *texts[] = { "Analog", "Digital" }; 3058 + static const char * const texts[] = { "Analog", "Digital" }; 2997 3059 2998 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2999 - uinfo->count = 1; 3000 - uinfo->value.enumerated.items = 2; 3001 - if (uinfo->value.enumerated.item > 1) 3002 - uinfo->value.enumerated.item = 1; 3003 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 3004 - return 0; 3060 + return snd_ctl_enum_info(uinfo, 1, 2, texts); 3005 3061 } 3006 3062 3007 3063 static int snd_ac97_cmedia_spdif_playback_source_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 3167 3235 3168 3236 static int cm9761_spdif_out_source_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 3169 3237 { 3170 - static char *texts[] = { "AC-Link", "ADC", "SPDIF-In" }; 3238 + static const char * const texts[] = { "AC-Link", "ADC", "SPDIF-In" }; 3171 3239 3172 - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3173 - uinfo->count = 1; 3174 - uinfo->value.enumerated.items = 3; 3175 - if (uinfo->value.enumerated.item > 2) 3176 - uinfo->value.enumerated.item = 2; 3177 - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 3178 - return 0; 3240 + return snd_ctl_enum_info(uinfo, 1, 3, texts); 3179 3241 } 3180 3242 3181 3243 static int cm9761_spdif_out_source_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) ··· 3478 3552 * is SM51EN *AND* it's Bit14, not Bit15 so the table is very 3479 3553 * counter-intuitive */ 3480 3554 3481 - static const char* texts[] = { "LineIn Mic1", "LineIn Mic1 Mic3", 3555 + static const char * const texts[] = {"LineIn Mic1", "LineIn Mic1 Mic3", 3482 3556 "Surr LFE/C Mic3", "LineIn LFE/C Mic3", 3483 3557 "LineIn Mic2", "LineIn Mic2 Mic1", 3484 3558 "Surr LFE Mic1", "Surr LFE Mic1 Mic2"}; 3485 - return ac97_enum_text_info(kcontrol, uinfo, texts, 8); 3559 + 3560 + return snd_ctl_enum_info(uinfo, 1, 8, texts); 3486 3561 } 3487 3562 3488 3563 static int snd_ac97_vt1617a_smart51_get(struct snd_kcontrol *kcontrol, ··· 3647 3720 static int snd_ac97_vt1618_UAJ_info(struct snd_kcontrol *kcontrol, 3648 3721 struct snd_ctl_elem_info *uinfo) 3649 3722 { 3650 - return ac97_enum_text_info(kcontrol, uinfo, 3651 - vt1618_uaj[kcontrol->private_value].items, 3652 - 4); 3723 + return snd_ctl_enum_info(uinfo, 1, 4, 3724 + vt1618_uaj[kcontrol->private_value].items); 3653 3725 } 3654 3726 3655 3727 /* All of the vt1618 Universal Audio Jack twiddlers are on ··· 3693 3767 static int snd_ac97_vt1618_aux_info(struct snd_kcontrol *kcontrol, 3694 3768 struct snd_ctl_elem_info *uinfo) 3695 3769 { 3696 - static const char *txt_aux[] = {"Aux In", "Back Surr Out"}; 3770 + static const char * const txt_aux[] = {"Aux In", "Back Surr Out"}; 3697 3771 3698 - return ac97_enum_text_info(kcontrol, uinfo, txt_aux, 2); 3772 + return snd_ctl_enum_info(uinfo, 1, 2, txt_aux); 3699 3773 } 3700 3774 3701 3775 static int snd_ac97_vt1618_aux_get(struct snd_kcontrol *kcontrol,