Message ID | 55039da3.6a07c20a.1b00.ffffa602@mx.google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
At Sat, 14 Mar 2015 03:31:41 +0100, klem.dev@gmail.com wrote: > > From: Clément Guedez <klem.dev@gmail.com> > > Add text Line in/Mic for selecting input gain state in mixer for ESI W192M. > > Signed-off-by: Clément Guedez <klem.dev@gmail.com> > > diff --git a/sound/pci/ice1712/wtm.c b/sound/pci/ice1712/wtm.c > index 3af9daf..497ff1a 100644 > --- a/sound/pci/ice1712/wtm.c > +++ b/sound/pci/ice1712/wtm.c > @@ -339,8 +339,23 @@ static int stac9460_adc_vol_put(struct snd_kcontrol *kcontrol, > /* > * MIC / LINE switch fonction > */ > +static int stac9460_mic_sw_info(struct snd_kcontrol *kcontrol, > + struct snd_ctl_elem_info *uinfo) > +{ > + static char *texts[2] = { "Line In", "Mic" }; > + > + 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; You can use snd_ctl_enum_info() helper. Also, if you change from a switch to an enum, fix the control name suffix, too. Takashi > +} > > -#define stac9460_mic_sw_info snd_ctl_boolean_mono_info > > static int stac9460_mic_sw_get(struct snd_kcontrol *kcontrol, > struct snd_ctl_elem_value *ucontrol) > @@ -354,7 +369,7 @@ static int stac9460_mic_sw_get(struct snd_kcontrol *kcontrol, > val = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); > else > val = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); > - ucontrol->value.integer.value[0] = ~val>>7 & 0x1; > + ucontrol->value.enumerated.item[0] = (val >> 7) & 0x1; > return 0; > } > > @@ -370,7 +385,7 @@ static int stac9460_mic_sw_put(struct snd_kcontrol *kcontrol, > old = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); > else > old = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); > - new = (~ucontrol->value.integer.value[0] << 7 & 0x80) | (old & ~0x80); > + new = (ucontrol->value.enumerated.item[0] << 7 & 0x80) | (old & ~0x80); > change = (new != old); > if (change) { > if (id == 0) > -- > 2.1.4 >
Hi, I had a look on the snd_ctl_enum_info function, it will be better with it for sure. Excuse me, but what do you mean by the control name suffix ? After correcting those, I will send the whole patchset. Thanks 2015-03-14 9:10 GMT+01:00 Takashi Iwai <tiwai@suse.de>: > At Sat, 14 Mar 2015 03:31:41 +0100, > klem.dev@gmail.com wrote: > > > > From: Clément Guedez <klem.dev@gmail.com> > > > > Add text Line in/Mic for selecting input gain state in mixer for ESI > W192M. > > > > Signed-off-by: Clément Guedez <klem.dev@gmail.com> > > > > diff --git a/sound/pci/ice1712/wtm.c b/sound/pci/ice1712/wtm.c > > index 3af9daf..497ff1a 100644 > > --- a/sound/pci/ice1712/wtm.c > > +++ b/sound/pci/ice1712/wtm.c > > @@ -339,8 +339,23 @@ static int stac9460_adc_vol_put(struct snd_kcontrol > *kcontrol, > > /* > > * MIC / LINE switch fonction > > */ > > +static int stac9460_mic_sw_info(struct snd_kcontrol *kcontrol, > > + struct snd_ctl_elem_info *uinfo) > > +{ > > + static char *texts[2] = { "Line In", "Mic" }; > > + > > + 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; > > You can use snd_ctl_enum_info() helper. > > Also, if you change from a switch to an enum, fix the control name > suffix, too. > > > Takashi > > > > +} > > > > -#define stac9460_mic_sw_info snd_ctl_boolean_mono_info > > > > static int stac9460_mic_sw_get(struct snd_kcontrol *kcontrol, > > struct snd_ctl_elem_value *ucontrol) > > @@ -354,7 +369,7 @@ static int stac9460_mic_sw_get(struct snd_kcontrol > *kcontrol, > > val = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); > > else > > val = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); > > - ucontrol->value.integer.value[0] = ~val>>7 & 0x1; > > + ucontrol->value.enumerated.item[0] = (val >> 7) & 0x1; > > return 0; > > } > > > > @@ -370,7 +385,7 @@ static int stac9460_mic_sw_put(struct snd_kcontrol > *kcontrol, > > old = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); > > else > > old = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); > > - new = (~ucontrol->value.integer.value[0] << 7 & 0x80) | (old & > ~0x80); > > + new = (ucontrol->value.enumerated.item[0] << 7 & 0x80) | (old & > ~0x80); > > change = (new != old); > > if (change) { > > if (id == 0) > > -- > > 2.1.4 > > >
diff --git a/sound/pci/ice1712/wtm.c b/sound/pci/ice1712/wtm.c index 3af9daf..497ff1a 100644 --- a/sound/pci/ice1712/wtm.c +++ b/sound/pci/ice1712/wtm.c @@ -339,8 +339,23 @@ static int stac9460_adc_vol_put(struct snd_kcontrol *kcontrol, /* * MIC / LINE switch fonction */ +static int stac9460_mic_sw_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + static char *texts[2] = { "Line In", "Mic" }; + + 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; +} -#define stac9460_mic_sw_info snd_ctl_boolean_mono_info static int stac9460_mic_sw_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) @@ -354,7 +369,7 @@ static int stac9460_mic_sw_get(struct snd_kcontrol *kcontrol, val = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); else val = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); - ucontrol->value.integer.value[0] = ~val>>7 & 0x1; + ucontrol->value.enumerated.item[0] = (val >> 7) & 0x1; return 0; } @@ -370,7 +385,7 @@ static int stac9460_mic_sw_put(struct snd_kcontrol *kcontrol, old = stac9460_get(ice, STAC946X_GENERAL_PURPOSE); else old = stac9460_2_get(ice, STAC946X_GENERAL_PURPOSE); - new = (~ucontrol->value.integer.value[0] << 7 & 0x80) | (old & ~0x80); + new = (ucontrol->value.enumerated.item[0] << 7 & 0x80) | (old & ~0x80); change = (new != old); if (change) { if (id == 0)