diff options
| -rw-r--r-- | sound/arm/pxa2xx-pcm-lib.c | 1 | ||||
| -rw-r--r-- | sound/oss/vidc.c | 4 | ||||
| -rw-r--r-- | sound/pci/cmipci.c | 14 | ||||
| -rw-r--r-- | sound/soc/codecs/tlv320dac33.c | 10 | ||||
| -rw-r--r-- | sound/soc/codecs/wm_hubs.c | 2 | ||||
| -rw-r--r-- | sound/soc/imx/Kconfig | 2 | ||||
| -rw-r--r-- | sound/soc/sh/Kconfig | 1 |
7 files changed, 20 insertions, 14 deletions
diff --git a/sound/arm/pxa2xx-pcm-lib.c b/sound/arm/pxa2xx-pcm-lib.c index 743ac6a29065..fd51fa8b06a1 100644 --- a/sound/arm/pxa2xx-pcm-lib.c +++ b/sound/arm/pxa2xx-pcm-lib.c | |||
| @@ -205,6 +205,7 @@ int __pxa2xx_pcm_open(struct snd_pcm_substream *substream) | |||
| 205 | if (!rtd->dma_desc_array) | 205 | if (!rtd->dma_desc_array) |
| 206 | goto err1; | 206 | goto err1; |
| 207 | 207 | ||
| 208 | rtd->dma_ch = -1; | ||
| 208 | runtime->private_data = rtd; | 209 | runtime->private_data = rtd; |
| 209 | return 0; | 210 | return 0; |
| 210 | 211 | ||
diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c index 725fef0f59a3..a4127bab9231 100644 --- a/sound/oss/vidc.c +++ b/sound/oss/vidc.c | |||
| @@ -363,13 +363,13 @@ static void vidc_audio_trigger(int dev, int enable_bits) | |||
| 363 | struct audio_operations *adev = audio_devs[dev]; | 363 | struct audio_operations *adev = audio_devs[dev]; |
| 364 | 364 | ||
| 365 | if (enable_bits & PCM_ENABLE_OUTPUT) { | 365 | if (enable_bits & PCM_ENABLE_OUTPUT) { |
| 366 | if (!(adev->flags & DMA_ACTIVE)) { | 366 | if (!(adev->dmap_out->flags & DMA_ACTIVE)) { |
| 367 | unsigned long flags; | 367 | unsigned long flags; |
| 368 | 368 | ||
| 369 | local_irq_save(flags); | 369 | local_irq_save(flags); |
| 370 | 370 | ||
| 371 | /* prevent recusion */ | 371 | /* prevent recusion */ |
| 372 | adev->flags |= DMA_ACTIVE; | 372 | adev->dmap_out->flags |= DMA_ACTIVE; |
| 373 | 373 | ||
| 374 | dma_interrupt = vidc_audio_dma_interrupt; | 374 | dma_interrupt = vidc_audio_dma_interrupt; |
| 375 | vidc_sound_dma_irq(0, NULL); | 375 | vidc_sound_dma_irq(0, NULL); |
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 1ded64e05643..329968edca9b 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
| @@ -941,13 +941,21 @@ static snd_pcm_uframes_t snd_cmipci_pcm_pointer(struct cmipci *cm, struct cmipci | |||
| 941 | struct snd_pcm_substream *substream) | 941 | struct snd_pcm_substream *substream) |
| 942 | { | 942 | { |
| 943 | size_t ptr; | 943 | size_t ptr; |
| 944 | unsigned int reg; | 944 | unsigned int reg, rem, tries; |
| 945 | |||
| 945 | if (!rec->running) | 946 | if (!rec->running) |
| 946 | return 0; | 947 | return 0; |
| 947 | #if 1 // this seems better.. | 948 | #if 1 // this seems better.. |
| 948 | reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2; | 949 | reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2; |
| 949 | ptr = rec->dma_size - (snd_cmipci_read_w(cm, reg) + 1); | 950 | for (tries = 0; tries < 3; tries++) { |
| 950 | ptr >>= rec->shift; | 951 | rem = snd_cmipci_read_w(cm, reg); |
| 952 | if (rem < rec->dma_size) | ||
| 953 | goto ok; | ||
| 954 | } | ||
| 955 | printk(KERN_ERR "cmipci: invalid PCM pointer: %#x\n", rem); | ||
| 956 | return SNDRV_PCM_POS_XRUN; | ||
| 957 | ok: | ||
| 958 | ptr = (rec->dma_size - (rem + 1)) >> rec->shift; | ||
| 951 | #else | 959 | #else |
| 952 | reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1; | 960 | reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1; |
| 953 | ptr = snd_cmipci_read(cm, reg) - rec->offset; | 961 | ptr = snd_cmipci_read(cm, reg) - rec->offset; |
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index f9f367d29a90..d50f1699ccb2 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c | |||
| @@ -778,7 +778,7 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream) | |||
| 778 | if (dac33->fifo_mode) { | 778 | if (dac33->fifo_mode) { |
| 779 | /* Generic for all FIFO modes */ | 779 | /* Generic for all FIFO modes */ |
| 780 | /* 50-51 : ASRC Control registers */ | 780 | /* 50-51 : ASRC Control registers */ |
| 781 | dac33_write(codec, DAC33_ASRC_CTRL_A, (1 << 4)); /* div=2 */ | 781 | dac33_write(codec, DAC33_ASRC_CTRL_A, DAC33_SRCLKDIV(1)); |
| 782 | dac33_write(codec, DAC33_ASRC_CTRL_B, 1); /* ??? */ | 782 | dac33_write(codec, DAC33_ASRC_CTRL_B, 1); /* ??? */ |
| 783 | 783 | ||
| 784 | /* Write registers 0x34 and 0x35 (MSB, LSB) */ | 784 | /* Write registers 0x34 and 0x35 (MSB, LSB) */ |
| @@ -1038,11 +1038,7 @@ static int dac33_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
| 1038 | case SND_SOC_DAIFMT_DSP_A: | 1038 | case SND_SOC_DAIFMT_DSP_A: |
| 1039 | aictrl_a |= DAC33_AFMT_DSP; | 1039 | aictrl_a |= DAC33_AFMT_DSP; |
| 1040 | aictrl_b &= ~DAC33_DATA_DELAY_MASK; | 1040 | aictrl_b &= ~DAC33_DATA_DELAY_MASK; |
| 1041 | aictrl_b |= DAC33_DATA_DELAY(1); /* 1 bit delay */ | 1041 | aictrl_b |= DAC33_DATA_DELAY(0); |
| 1042 | break; | ||
| 1043 | case SND_SOC_DAIFMT_DSP_B: | ||
| 1044 | aictrl_a |= DAC33_AFMT_DSP; | ||
| 1045 | aictrl_b &= ~DAC33_DATA_DELAY_MASK; /* No delay */ | ||
| 1046 | break; | 1042 | break; |
| 1047 | case SND_SOC_DAIFMT_RIGHT_J: | 1043 | case SND_SOC_DAIFMT_RIGHT_J: |
| 1048 | aictrl_a |= DAC33_AFMT_RIGHT_J; | 1044 | aictrl_a |= DAC33_AFMT_RIGHT_J; |
| @@ -1066,7 +1062,7 @@ static void dac33_init_chip(struct snd_soc_codec *codec) | |||
| 1066 | { | 1062 | { |
| 1067 | /* 44-46: DAC Control Registers */ | 1063 | /* 44-46: DAC Control Registers */ |
| 1068 | /* A : DAC sample rate Fsref/1.5 */ | 1064 | /* A : DAC sample rate Fsref/1.5 */ |
| 1069 | dac33_write(codec, DAC33_DAC_CTRL_A, DAC33_DACRATE(1)); | 1065 | dac33_write(codec, DAC33_DAC_CTRL_A, DAC33_DACRATE(0)); |
| 1070 | /* B : DAC src=normal, not muted */ | 1066 | /* B : DAC src=normal, not muted */ |
| 1071 | dac33_write(codec, DAC33_DAC_CTRL_B, DAC33_DACSRCR_RIGHT | | 1067 | dac33_write(codec, DAC33_DAC_CTRL_B, DAC33_DACSRCR_RIGHT | |
| 1072 | DAC33_DACSRCL_LEFT); | 1068 | DAC33_DACSRCL_LEFT); |
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c index 0ad9f5d536c6..486bdd21a98a 100644 --- a/sound/soc/codecs/wm_hubs.c +++ b/sound/soc/codecs/wm_hubs.c | |||
| @@ -74,7 +74,7 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec) | |||
| 74 | msleep(1); | 74 | msleep(1); |
| 75 | reg = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_0); | 75 | reg = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_0); |
| 76 | dev_dbg(codec->dev, "DC servo: %x\n", reg); | 76 | dev_dbg(codec->dev, "DC servo: %x\n", reg); |
| 77 | } while (reg & WM8993_DCS_DATAPATH_BUSY); | 77 | } while (reg & WM8993_DCS_DATAPATH_BUSY && count < 400); |
| 78 | 78 | ||
| 79 | if (reg & WM8993_DCS_DATAPATH_BUSY) | 79 | if (reg & WM8993_DCS_DATAPATH_BUSY) |
| 80 | dev_err(codec->dev, "Timed out waiting for DC Servo\n"); | 80 | dev_err(codec->dev, "Timed out waiting for DC Servo\n"); |
diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig index c7d0fd9b7de8..7174b4c710de 100644 --- a/sound/soc/imx/Kconfig +++ b/sound/soc/imx/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config SND_IMX_SOC | 1 | config SND_IMX_SOC |
| 2 | tristate "SoC Audio for Freescale i.MX CPUs" | 2 | tristate "SoC Audio for Freescale i.MX CPUs" |
| 3 | depends on ARCH_MXC && BROKEN | 3 | depends on ARCH_MXC |
| 4 | select SND_PCM | 4 | select SND_PCM |
| 5 | select FIQ | 5 | select FIQ |
| 6 | select SND_SOC_AC97_BUS | 6 | select SND_SOC_AC97_BUS |
diff --git a/sound/soc/sh/Kconfig b/sound/soc/sh/Kconfig index 106674979b53..f07f6d8b93e1 100644 --- a/sound/soc/sh/Kconfig +++ b/sound/soc/sh/Kconfig | |||
| @@ -32,6 +32,7 @@ config SND_SOC_SH4_SIU | |||
| 32 | select DMA_ENGINE | 32 | select DMA_ENGINE |
| 33 | select DMADEVICES | 33 | select DMADEVICES |
| 34 | select SH_DMAE | 34 | select SH_DMAE |
| 35 | select FW_LOADER | ||
| 35 | 36 | ||
| 36 | ## | 37 | ## |
| 37 | ## Boards | 38 | ## Boards |
