summaryrefslogtreecommitdiffstats
path: root/sound/pci/lola
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-05-03 17:05:08 +0200
committerTakashi Iwai <tiwai@suse.de>2011-05-03 17:05:08 +0200
commit2db3002029d6c8fbd8ad4ab21f501475cd8c96f9 (patch)
tree1b0165b2af59214e16a5e667c2cdbf148f4879f1 /sound/pci/lola
parentALSA: lola - Add sync in loop implementation (diff)
downloadlinux-2db3002029d6c8fbd8ad4ab21f501475cd8c96f9.tar.xz
linux-2db3002029d6c8fbd8ad4ab21f501475cd8c96f9.zip
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: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/lola')
-rw-r--r--sound/pci/lola/lola.h1
-rw-r--r--sound/pci/lola/lola_mixer.c15
-rw-r--r--sound/pci/lola/lola_pcm.c4
3 files changed, 17 insertions, 3 deletions
diff --git a/sound/pci/lola/lola.h b/sound/pci/lola/lola.h
index 180c2c124620..400ab5ef4c6c 100644
--- a/sound/pci/lola/lola.h
+++ b/sound/pci/lola/lola.h
@@ -242,6 +242,7 @@ struct lola_pin {
struct lola_pin_array {
unsigned int num_pins;
+ unsigned int num_analog_pins;
struct lola_pin pins[MAX_PINS];
};
diff --git a/sound/pci/lola/lola_mixer.c b/sound/pci/lola/lola_mixer.c
index 0d09689d7b8d..5d518f1a712c 100644
--- a/sound/pci/lola/lola_mixer.c
+++ b/sound/pci/lola/lola_mixer.c
@@ -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);
if (err < 0)
return err;
+ if (chip->pin[dir].pins[i].is_analog)
+ chip->pin[dir].num_analog_pins++;
}
*nidp = nid;
return 0;
@@ -540,6 +542,9 @@ static int __devinit create_analog_mixer(struct lola *chip, int dir, char *name)
{
if (!chip->pin[dir].num_pins)
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.private_value = dir;
return snd_ctl_add(chip->card,
@@ -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,
struct snd_ctl_elem_info *uinfo)
@@ -587,15 +593,22 @@ static int lola_input_src_put(struct snd_kcontrol *kcontrol,
}
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,
.info = lola_input_src_info,
.get = lola_input_src_get,
.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)
{
+ if (!chip->input_src_caps_mask)
+ return 0;
+
return snd_ctl_add(chip->card,
snd_ctl_new1(&lola_input_src_mixer, chip));
}
diff --git a/sound/pci/lola/lola_pcm.c b/sound/pci/lola/lola_pcm.c
index 5c0014cbff07..aa21750202fc 100644
--- a/sound/pci/lola/lola_pcm.c
+++ b/sound/pci/lola/lola_pcm.c
@@ -472,7 +472,7 @@ static int lola_pcm_prepare(struct snd_pcm_substream *substream)
mutex_lock(&chip->open_mutex);
lola_stream_reset(chip, 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);
return -EINVAL;
}
@@ -538,7 +538,7 @@ static int lola_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
/*
* 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));
tstamp = lola_get_tstamp(chip, !sync_streams);