Commit 2db30020 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: lola - Rename to Digital SRC Capture Switch

Renamed to Digial SRC Capture Switch for more correct representation.
Also fixed analog volume control on Lola161611 and lola881.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c7aad3c3
...@@ -242,6 +242,7 @@ struct lola_pin { ...@@ -242,6 +242,7 @@ struct lola_pin {
struct lola_pin_array { struct lola_pin_array {
unsigned int num_pins; unsigned int num_pins;
unsigned int num_analog_pins;
struct lola_pin pins[MAX_PINS]; struct lola_pin pins[MAX_PINS];
}; };
......
...@@ -99,6 +99,8 @@ int __devinit lola_init_pins(struct lola *chip, int dir, int *nidp) ...@@ -99,6 +99,8 @@ int __devinit lola_init_pins(struct lola *chip, int dir, int *nidp)
err = lola_init_pin(chip, &chip->pin[dir].pins[i], dir, nid); err = lola_init_pin(chip, &chip->pin[dir].pins[i], dir, nid);
if (err < 0) if (err < 0)
return err; return err;
if (chip->pin[dir].pins[i].is_analog)
chip->pin[dir].num_analog_pins++;
} }
*nidp = nid; *nidp = nid;
return 0; return 0;
...@@ -540,6 +542,9 @@ static int __devinit create_analog_mixer(struct lola *chip, int dir, char *name) ...@@ -540,6 +542,9 @@ static int __devinit create_analog_mixer(struct lola *chip, int dir, char *name)
{ {
if (!chip->pin[dir].num_pins) if (!chip->pin[dir].num_pins)
return 0; return 0;
/* no analog volumes on digital only adapters */
if (chip->pin[dir].num_pins != chip->pin[dir].num_analog_pins)
return 0;
lola_analog_mixer.name = name; lola_analog_mixer.name = name;
lola_analog_mixer.private_value = dir; lola_analog_mixer.private_value = dir;
return snd_ctl_add(chip->card, return snd_ctl_add(chip->card,
...@@ -547,6 +552,7 @@ static int __devinit create_analog_mixer(struct lola *chip, int dir, char *name) ...@@ -547,6 +552,7 @@ static int __devinit create_analog_mixer(struct lola *chip, int dir, char *name)
} }
/* /*
* Hardware sample rate converter on digital input
*/ */
static int lola_input_src_info(struct snd_kcontrol *kcontrol, static int lola_input_src_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo) struct snd_ctl_elem_info *uinfo)
...@@ -587,15 +593,22 @@ static int lola_input_src_put(struct snd_kcontrol *kcontrol, ...@@ -587,15 +593,22 @@ static int lola_input_src_put(struct snd_kcontrol *kcontrol,
} }
static struct snd_kcontrol_new lola_input_src_mixer __devinitdata = { static struct snd_kcontrol_new lola_input_src_mixer __devinitdata = {
.name = "Analog Capture Switch", .name = "Digital SRC Capture Switch",
.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.info = lola_input_src_info, .info = lola_input_src_info,
.get = lola_input_src_get, .get = lola_input_src_get,
.put = lola_input_src_put, .put = lola_input_src_put,
}; };
/*
* Lola16161 or Lola881 can have Hardware sample rate converters
* on its digital input pins
*/
static int __devinit create_input_src_mixer(struct lola *chip) static int __devinit create_input_src_mixer(struct lola *chip)
{ {
if (!chip->input_src_caps_mask)
return 0;
return snd_ctl_add(chip->card, return snd_ctl_add(chip->card,
snd_ctl_new1(&lola_input_src_mixer, chip)); snd_ctl_new1(&lola_input_src_mixer, chip));
} }
......
...@@ -472,7 +472,7 @@ static int lola_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -472,7 +472,7 @@ static int lola_pcm_prepare(struct snd_pcm_substream *substream)
mutex_lock(&chip->open_mutex); mutex_lock(&chip->open_mutex);
lola_stream_reset(chip, str); lola_stream_reset(chip, str);
lola_cleanup_slave_streams(pcm, str); lola_cleanup_slave_streams(pcm, str);
if (str->index + runtime->channels >= pcm->num_streams) { if (str->index + runtime->channels > pcm->num_streams) {
mutex_unlock(&chip->open_mutex); mutex_unlock(&chip->open_mutex);
return -EINVAL; return -EINVAL;
} }
...@@ -538,7 +538,7 @@ static int lola_pcm_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -538,7 +538,7 @@ static int lola_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
/* /*
* sample correct synchronization is only needed starting several * sample correct synchronization is only needed starting several
* streams on stop or if only one stream do as quick as possible * streams. On stop or if only one stream do as quick as possible
*/ */
sync_streams = (start && snd_pcm_stream_linked(substream)); sync_streams = (start && snd_pcm_stream_linked(substream));
tstamp = lola_get_tstamp(chip, !sync_streams); tstamp = lola_get_tstamp(chip, !sync_streams);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment