"LFE Playback Volume",
"Side Playback Volume",
"Headphone Playback Volume",
- "Headphone2 Playback Volume",
"Speaker Playback Volume",
- "External Speaker Playback Volume",
- "Speaker2 Playback Volume",
NULL
};
"LFE Playback Switch",
"Side Playback Switch",
"Headphone Playback Switch",
- "Headphone2 Playback Switch",
"Speaker Playback Switch",
- "External Speaker Playback Switch",
- "Speaker2 Playback Switch",
"IEC958 Playback Switch",
NULL
};
}
/* create volume control/switch for the given prefx type */
-static int create_controls(struct hda_codec *codec, const char *pfx,
- hda_nid_t nid, int chs)
+static int create_controls_idx(struct hda_codec *codec, const char *pfx,
+ int idx, hda_nid_t nid, int chs)
{
struct sigmatel_spec *spec = codec->spec;
char name[32];
}
sprintf(name, "%s Playback Volume", pfx);
- err = stac92xx_add_control(spec, STAC_CTL_WIDGET_VOL, name,
+ err = stac92xx_add_control_idx(spec, STAC_CTL_WIDGET_VOL, idx, name,
HDA_COMPOSE_AMP_VAL_OFS(nid, chs, 0, HDA_OUTPUT,
spec->volume_offset));
if (err < 0)
return err;
sprintf(name, "%s Playback Switch", pfx);
- err = stac92xx_add_control(spec, STAC_CTL_WIDGET_MUTE, name,
+ err = stac92xx_add_control_idx(spec, STAC_CTL_WIDGET_MUTE, idx, name,
HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT));
if (err < 0)
return err;
return 0;
}
+#define create_controls(codec, pfx, nid, chs) \
+ create_controls_idx(codec, pfx, 0, nid, chs)
+
static int add_spec_dacs(struct sigmatel_spec *spec, hda_nid_t nid)
{
if (spec->multiout.num_dacs > 4) {
static const char *chname[4] = {
"Front", "Surround", NULL /*CLFE*/, "Side"
};
- static const char *hp_pfxs[] = {
- "Headphone", "Headphone2", "Headphone3", "Headphone4"
- };
- static const char *speaker_pfxs[] = {
- "Speaker", "External Speaker", "Speaker2", "Speaker3"
- };
hda_nid_t nid;
int i, err;
unsigned int wid_caps;
} else {
const char *name;
+ int idx;
switch (type) {
case AUTO_PIN_HP_OUT:
- name = hp_pfxs[i];
+ name = "Headphone";
+ idx = i;
break;
case AUTO_PIN_SPEAKER_OUT:
- name = speaker_pfxs[i];
+ name = "Speaker";
+ idx = i;
break;
default:
name = chname[i];
+ idx = 0;
break;
}
- err = create_controls(codec, name, nid, 3);
+ err = create_controls_idx(codec, name, idx, nid, 3);
if (err < 0)
return err;
if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {