Loading sound/pci/hda/hda_codec.c +28 −0 Original line number Diff line number Diff line Loading @@ -4791,6 +4791,34 @@ int snd_hda_input_mux_put(struct hda_codec *codec, EXPORT_SYMBOL_HDA(snd_hda_input_mux_put); /* * process kcontrol info callback of a simple string enum array * when @num_items is 0 or @texts is NULL, assume a boolean enum array */ int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo, int num_items, const char * const *texts) { static const char * const texts_default[] = { "Disabled", "Enabled" }; if (!texts || !num_items) { num_items = 2; texts = texts_default; } uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; uinfo->value.enumerated.items = num_items; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; } EXPORT_SYMBOL_HDA(snd_hda_enum_helper_info); /* * Multi-channel / digital-out PCM helper functions */ Loading sound/pci/hda/hda_local.h +9 −0 Original line number Diff line number Diff line Loading @@ -600,6 +600,15 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec, #define get_amp_offset(kc) (((kc)->private_value >> 23) & 0x3f) #define get_amp_min_mute(kc) (((kc)->private_value >> 29) & 0x1) /* * enum control helper */ int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo, int num_entries, const char * const *texts); #define snd_hda_enum_bool_helper_info(kcontrol, uinfo) \ snd_hda_enum_helper_info(kcontrol, uinfo, 0, NULL) /* * CEA Short Audio Descriptor data */ Loading sound/pci/hda/patch_conexant.c +3 −18 Original line number Diff line number Diff line Loading @@ -3435,28 +3435,13 @@ static int cx_automute_mode_info(struct snd_kcontrol *kcontrol, { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct conexant_spec *spec = codec->spec; static const char * const texts2[] = { "Disabled", "Enabled" }; static const char * const texts3[] = { "Disabled", "Speaker Only", "Line Out+Speaker" }; const char * const *texts; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; if (spec->automute_hp_lo) { uinfo->value.enumerated.items = 3; texts = texts3; } else { uinfo->value.enumerated.items = 2; texts = texts2; } if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; if (spec->automute_hp_lo) return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3); return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int cx_automute_mode_get(struct snd_kcontrol *kcontrol, Loading sound/pci/hda/patch_realtek.c +3 −18 Original line number Diff line number Diff line Loading @@ -815,28 +815,13 @@ static int alc_automute_mode_info(struct snd_kcontrol *kcontrol, { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct alc_spec *spec = codec->spec; static const char * const texts2[] = { "Disabled", "Enabled" }; static const char * const texts3[] = { "Disabled", "Speaker Only", "Line Out+Speaker" }; const char * const *texts; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; if (spec->automute_speaker_possible && spec->automute_lo_possible) { uinfo->value.enumerated.items = 3; texts = texts3; } else { uinfo->value.enumerated.items = 2; texts = texts2; } if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; if (spec->automute_speaker_possible && spec->automute_lo_possible) return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3); return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int alc_automute_mode_get(struct snd_kcontrol *kcontrol, Loading sound/pci/hda/patch_via.c +1 −12 Original line number Diff line number Diff line Loading @@ -739,18 +739,7 @@ static void set_pin_power_state(struct hda_codec *codec, hda_nid_t nid, static int via_pin_power_ctl_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { static const char * const texts[] = { "Disabled", "Enabled" }; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; uinfo->value.enumerated.items = 2; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int via_pin_power_ctl_get(struct snd_kcontrol *kcontrol, Loading Loading
sound/pci/hda/hda_codec.c +28 −0 Original line number Diff line number Diff line Loading @@ -4791,6 +4791,34 @@ int snd_hda_input_mux_put(struct hda_codec *codec, EXPORT_SYMBOL_HDA(snd_hda_input_mux_put); /* * process kcontrol info callback of a simple string enum array * when @num_items is 0 or @texts is NULL, assume a boolean enum array */ int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo, int num_items, const char * const *texts) { static const char * const texts_default[] = { "Disabled", "Enabled" }; if (!texts || !num_items) { num_items = 2; texts = texts_default; } uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; uinfo->value.enumerated.items = num_items; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; } EXPORT_SYMBOL_HDA(snd_hda_enum_helper_info); /* * Multi-channel / digital-out PCM helper functions */ Loading
sound/pci/hda/hda_local.h +9 −0 Original line number Diff line number Diff line Loading @@ -600,6 +600,15 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec, #define get_amp_offset(kc) (((kc)->private_value >> 23) & 0x3f) #define get_amp_min_mute(kc) (((kc)->private_value >> 29) & 0x1) /* * enum control helper */ int snd_hda_enum_helper_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo, int num_entries, const char * const *texts); #define snd_hda_enum_bool_helper_info(kcontrol, uinfo) \ snd_hda_enum_helper_info(kcontrol, uinfo, 0, NULL) /* * CEA Short Audio Descriptor data */ Loading
sound/pci/hda/patch_conexant.c +3 −18 Original line number Diff line number Diff line Loading @@ -3435,28 +3435,13 @@ static int cx_automute_mode_info(struct snd_kcontrol *kcontrol, { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct conexant_spec *spec = codec->spec; static const char * const texts2[] = { "Disabled", "Enabled" }; static const char * const texts3[] = { "Disabled", "Speaker Only", "Line Out+Speaker" }; const char * const *texts; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; if (spec->automute_hp_lo) { uinfo->value.enumerated.items = 3; texts = texts3; } else { uinfo->value.enumerated.items = 2; texts = texts2; } if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; if (spec->automute_hp_lo) return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3); return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int cx_automute_mode_get(struct snd_kcontrol *kcontrol, Loading
sound/pci/hda/patch_realtek.c +3 −18 Original line number Diff line number Diff line Loading @@ -815,28 +815,13 @@ static int alc_automute_mode_info(struct snd_kcontrol *kcontrol, { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct alc_spec *spec = codec->spec; static const char * const texts2[] = { "Disabled", "Enabled" }; static const char * const texts3[] = { "Disabled", "Speaker Only", "Line Out+Speaker" }; const char * const *texts; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; if (spec->automute_speaker_possible && spec->automute_lo_possible) { uinfo->value.enumerated.items = 3; texts = texts3; } else { uinfo->value.enumerated.items = 2; texts = texts2; } if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; if (spec->automute_speaker_possible && spec->automute_lo_possible) return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3); return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int alc_automute_mode_get(struct snd_kcontrol *kcontrol, Loading
sound/pci/hda/patch_via.c +1 −12 Original line number Diff line number Diff line Loading @@ -739,18 +739,7 @@ static void set_pin_power_state(struct hda_codec *codec, hda_nid_t nid, static int via_pin_power_ctl_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { static const char * const texts[] = { "Disabled", "Enabled" }; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; uinfo->value.enumerated.items = 2; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; return snd_hda_enum_bool_helper_info(kcontrol, uinfo); } static int via_pin_power_ctl_get(struct snd_kcontrol *kcontrol, Loading