Skip to content

Commit

Permalink
ALSA: lola - Allow granularity changes
Browse files Browse the repository at this point in the history
Add some sanity checks.
Change PCM parameters appropriately per granularity.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
tiwai committed May 3, 2011
1 parent 972505c commit 8bd172d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
27 changes: 22 additions & 5 deletions sound/pci/lola/lola.c
Original file line number Diff line number Diff line change
Expand Up @@ -587,14 +587,31 @@ static int __devinit lola_create(struct snd_card *card, struct pci_dev *pci,
chip->pci = pci;
chip->irq = -1;

chip->sample_rate_min = sample_rate_min[dev];
chip->granularity = granularity[dev];
/* FIXME */
if (chip->granularity != LOLA_GRANULARITY_MAX) {
switch (chip->granularity) {
case 8:
chip->sample_rate_max = 48000;
break;
case 16:
chip->sample_rate_max = 96000;
break;
case 32:
chip->sample_rate_max = 192000;
break;
default:
snd_printk(KERN_WARNING SFX
"Only %d granularity is supported for now\n",
LOLA_GRANULARITY_MAX);
"Invalid granularity %d, reset to %d\n",
chip->granularity, LOLA_GRANULARITY_MAX);
chip->granularity = LOLA_GRANULARITY_MAX;
chip->sample_rate_max = 192000;
break;
}
chip->sample_rate_min = sample_rate_min[dev];
if (chip->sample_rate_min > chip->sample_rate_max) {
snd_printk(KERN_WARNING SFX
"Invalid sample_rate_min %d, reset to 16000\n",
chip->sample_rate_min);
chip->sample_rate_min = 16000;
}

err = pci_request_regions(pci, DRVNAME);
Expand Down
1 change: 1 addition & 0 deletions sound/pci/lola/lola.h
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ struct lola {
/* parameters */
unsigned int granularity;
unsigned int sample_rate_min;
unsigned int sample_rate_max;

/* flags */
unsigned int running :1;
Expand Down
6 changes: 4 additions & 2 deletions sound/pci/lola/lola_pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,14 +178,16 @@ static int lola_pcm_open(struct snd_pcm_substream *substream)
str->opened = 1;
runtime->hw = lola_pcm_hw;
runtime->hw.channels_max = pcm->num_streams - str->index;
runtime->hw.rate_min = chip->sample_rate_min;
runtime->hw.rate_max = chip->sample_rate_max;
snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
/* period size = multiple of chip->granularity (8, 16 or 32 frames)
* use LOLA_GRANULARITY_MAX = 32 for instance
*/
snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
LOLA_GRANULARITY_MAX);
chip->granularity);
snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
LOLA_GRANULARITY_MAX);
chip->granularity);
mutex_unlock(&chip->open_mutex);
return 0;
}
Expand Down

0 comments on commit 8bd172d

Please sign in to comment.