forked from Minki/linux
[ALSA] PCM resume cleanups
Digigram VX core,CS4231 driver,ATIIXP driver,VIA82xx driver VIA82xx-modem driver,au88x0 driver,CS46xx driver,Trident driver This patch disables SNDRV_PCM_INFO_RESUME flag for drivers which does not support the full resume. Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
parent
61be3ce0f2
commit
41e4845c42
@ -549,8 +549,8 @@ static int vx_stop_stream(vx_core_t *chip, vx_pipe_t *pipe)
|
||||
|
||||
static snd_pcm_hardware_t vx_pcm_playback_hw = {
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID |
|
||||
SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID /*|*/
|
||||
/*SNDRV_PCM_INFO_RESUME*/),
|
||||
.formats = /*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
|
||||
.rate_min = 5000,
|
||||
@ -949,8 +949,8 @@ static snd_pcm_ops_t vx_pcm_playback_ops = {
|
||||
|
||||
static snd_pcm_hardware_t vx_pcm_capture_hw = {
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID |
|
||||
SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID /*|*/
|
||||
/*SNDRV_PCM_INFO_RESUME*/),
|
||||
.formats = /*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_3LE,
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
|
||||
.rate_min = 5000,
|
||||
|
@ -1346,6 +1346,8 @@ static void snd_cs4231_suspend(cs4231_t *chip)
|
||||
int reg;
|
||||
unsigned long flags;
|
||||
|
||||
if (chip->pcm)
|
||||
snd_pcm_suspend_all(chip->pcm);
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
for (reg = 0; reg < 32; reg++)
|
||||
chip->image[reg] = snd_cs4231_in(chip, reg);
|
||||
|
@ -248,6 +248,7 @@ struct snd_atiixp_dma {
|
||||
unsigned int period_bytes, periods;
|
||||
int opened;
|
||||
int running;
|
||||
int suspended;
|
||||
int pcm_open_flag;
|
||||
int ac97_pcm_type; /* index # of ac97_pcm to access, -1 = not used */
|
||||
unsigned int saved_curptr;
|
||||
@ -699,12 +700,18 @@ static int snd_atiixp_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
|
||||
spin_lock(&chip->reg_lock);
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
dma->ops->enable_transfer(chip, 1);
|
||||
dma->running = 1;
|
||||
dma->suspended = 0;
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
dma->ops->enable_transfer(chip, 0);
|
||||
dma->running = 0;
|
||||
dma->suspended = cmd == SNDRV_PCM_TRIGGER_SUSPEND;
|
||||
break;
|
||||
default:
|
||||
err = -EINVAL;
|
||||
@ -975,6 +982,7 @@ static snd_pcm_hardware_t snd_atiixp_pcm_hw =
|
||||
{
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_PAUSE |
|
||||
SNDRV_PCM_INFO_RESUME |
|
||||
SNDRV_PCM_INFO_MMAP_VALID),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
|
||||
@ -1443,7 +1451,7 @@ static int snd_atiixp_resume(snd_card_t *card)
|
||||
for (i = 0; i < NUM_ATI_PCMDEVS; i++)
|
||||
if (chip->pcmdevs[i]) {
|
||||
atiixp_dma_t *dma = &chip->dmas[i];
|
||||
if (dma->substream && dma->running) {
|
||||
if (dma->substream && dma->suspended) {
|
||||
dma->ops->enable_dma(chip, 1);
|
||||
writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
|
||||
chip->remap_addr + dma->ops->llp_offset);
|
||||
|
@ -33,7 +33,7 @@
|
||||
/* hardware definition */
|
||||
static snd_pcm_hardware_t snd_vortex_playback_hw_adb = {
|
||||
.info =
|
||||
(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME |
|
||||
(SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_MMAP_VALID),
|
||||
.formats =
|
||||
@ -58,7 +58,7 @@ static snd_pcm_hardware_t snd_vortex_playback_hw_adb = {
|
||||
#ifndef CHIP_AU8820
|
||||
static snd_pcm_hardware_t snd_vortex_playback_hw_a3d = {
|
||||
.info =
|
||||
(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME |
|
||||
(SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_MMAP_VALID),
|
||||
.formats =
|
||||
@ -78,7 +78,7 @@ static snd_pcm_hardware_t snd_vortex_playback_hw_a3d = {
|
||||
#endif
|
||||
static snd_pcm_hardware_t snd_vortex_playback_hw_spdif = {
|
||||
.info =
|
||||
(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME |
|
||||
(SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_MMAP_VALID),
|
||||
.formats =
|
||||
|
@ -1243,8 +1243,8 @@ static snd_pcm_hardware_t snd_cs46xx_playback =
|
||||
{
|
||||
.info = (SNDRV_PCM_INFO_MMAP |
|
||||
SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER /*|*/
|
||||
/*SNDRV_PCM_INFO_RESUME*/),
|
||||
.formats = (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U8 |
|
||||
SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
|
||||
SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE),
|
||||
@ -1265,8 +1265,8 @@ static snd_pcm_hardware_t snd_cs46xx_capture =
|
||||
{
|
||||
.info = (SNDRV_PCM_INFO_MMAP |
|
||||
SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER /*|*/
|
||||
/*SNDRV_PCM_INFO_RESUME*/),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
|
||||
.rate_min = 5500,
|
||||
|
@ -1689,7 +1689,7 @@ static snd_pcm_hardware_t snd_trident_playback =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE /* | SNDRV_PCM_INFO_RESUME */),
|
||||
.formats = (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U16_LE),
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
|
||||
@ -1714,7 +1714,7 @@ static snd_pcm_hardware_t snd_trident_capture =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE /* | SNDRV_PCM_INFO_RESUME */),
|
||||
.formats = (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U16_LE),
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
|
||||
@ -1739,7 +1739,7 @@ static snd_pcm_hardware_t snd_trident_foldback =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE /* | SNDRV_PCM_INFO_RESUME */),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.rate_min = 48000,
|
||||
@ -1763,7 +1763,7 @@ static snd_pcm_hardware_t snd_trident_spdif =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE /* | SNDRV_PCM_INFO_RESUME */),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
|
||||
SNDRV_PCM_RATE_48000),
|
||||
@ -1784,7 +1784,7 @@ static snd_pcm_hardware_t snd_trident_spdif_7018 =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_SYNC_START |
|
||||
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME),
|
||||
SNDRV_PCM_INFO_PAUSE /* | SNDRV_PCM_INFO_RESUME */),
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.rate_min = 48000,
|
||||
|
@ -663,10 +663,12 @@ static int snd_via82xx_pcm_trigger(snd_pcm_substream_t * substream, int cmd)
|
||||
val = 0;
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
val |= VIA_REG_CTRL_START;
|
||||
viadev->running = 1;
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
val = VIA_REG_CTRL_TERMINATE;
|
||||
viadev->running = 0;
|
||||
break;
|
||||
@ -1035,7 +1037,7 @@ static snd_pcm_hardware_t snd_via82xx_hw =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID |
|
||||
SNDRV_PCM_INFO_RESUME |
|
||||
/* SNDRV_PCM_INFO_RESUME | */
|
||||
SNDRV_PCM_INFO_PAUSE),
|
||||
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
|
@ -521,6 +521,7 @@ static int snd_via82xx_pcm_trigger(snd_pcm_substream_t * substream, int cmd)
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
val |= VIA_REG_CTRL_START;
|
||||
viadev->running = 1;
|
||||
break;
|
||||
@ -697,7 +698,7 @@ static snd_pcm_hardware_t snd_via82xx_hw =
|
||||
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_BLOCK_TRANSFER |
|
||||
SNDRV_PCM_INFO_MMAP_VALID |
|
||||
SNDRV_PCM_INFO_RESUME |
|
||||
/* SNDRV_PCM_INFO_RESUME | */
|
||||
SNDRV_PCM_INFO_PAUSE),
|
||||
.formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_KNOT,
|
||||
|
Loading…
Reference in New Issue
Block a user