mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
intel_sst: return correct output/input device id
Without this patch, the change of output/input device can't be reflected correctly. The mismatch reflects insane design, and should be fixed when switching to the ASoC framework. Signed-off-by: Lu Guanqun <guanqun.lu@intel.com> Acked-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
24298b0e66
commit
e51a34f3e8
1 changed files with 20 additions and 1 deletions
|
@ -504,8 +504,8 @@ static int snd_intelmad_device_get(struct snd_kcontrol *kcontrol,
|
|||
WARN_ON(!kcontrol);
|
||||
|
||||
intelmaddata = kcontrol->private_data;
|
||||
scard_ops = intelmaddata->sstdrv_ops->scard_ops;
|
||||
if (intelmaddata->cpu_id == CPU_CHIP_PENWELL) {
|
||||
scard_ops = intelmaddata->sstdrv_ops->scard_ops;
|
||||
if (kcontrol->id.numid == OUTPUT_SEL)
|
||||
uval->value.enumerated.item[0] =
|
||||
scard_ops->output_dev_id;
|
||||
|
@ -517,6 +517,25 @@ static int snd_intelmad_device_get(struct snd_kcontrol *kcontrol,
|
|||
scard_ops->lineout_dev_id;
|
||||
else
|
||||
return -EINVAL;
|
||||
} else if (intelmaddata->cpu_id == CPU_CHIP_LINCROFT) {
|
||||
if (kcontrol->id.numid == OUTPUT_SEL)
|
||||
/* There is a mismatch here.
|
||||
* ALSA expects 1 for internal speaker.
|
||||
* But internally, we may give 2 for internal speaker.
|
||||
*/
|
||||
if (scard_ops->output_dev_id == MONO_EARPIECE ||
|
||||
scard_ops->output_dev_id == INTERNAL_SPKR)
|
||||
uval->value.enumerated.item[0] = MONO_EARPIECE;
|
||||
else if (scard_ops->output_dev_id == STEREO_HEADPHONE)
|
||||
uval->value.enumerated.item[0] =
|
||||
STEREO_HEADPHONE;
|
||||
else
|
||||
return -EINVAL;
|
||||
else if (kcontrol->id.numid == INPUT_SEL)
|
||||
uval->value.enumerated.item[0] =
|
||||
scard_ops->input_dev_id;
|
||||
else
|
||||
return -EINVAL;
|
||||
} else
|
||||
uval->value.enumerated.item[0] = kcontrol->private_value;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue