forked from Minki/linux
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: cmipci: work around invalid PCM pointer ASoC: Remove BROKEN from i.MX audio after dependencies merged ALSA: hda - Fix access-after-free in patch_realtek.c ALSA: hda - Sort codec entry list of Nvidia HDMI ALSA: hda - Add support of Nvidia GT220 HDMI ALSA: hda: Fix 0 dB offset for HP laptops using CX20551 (Waikiki) ALSA: hda - Add PCI quirk for HP dv6-1110ax. sound/oss/vidc.c: change the field used with DMA_ACTIVE ASoC: pxa-pcm-lib: initialize DMA channel to -1 ASoC: Bail out of wm_hubs DC servo if calibration fails ASoC: tlv320dac33: Internal clocking changes ASoC: tlv320dac33: Fix DSP modes ASoC: SIU driver shall select FW_LOADER
This commit is contained in:
commit
20dba4596f
@ -205,6 +205,7 @@ int __pxa2xx_pcm_open(struct snd_pcm_substream *substream)
|
|||||||
if (!rtd->dma_desc_array)
|
if (!rtd->dma_desc_array)
|
||||||
goto err1;
|
goto err1;
|
||||||
|
|
||||||
|
rtd->dma_ch = -1;
|
||||||
runtime->private_data = rtd;
|
runtime->private_data = rtd;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -363,13 +363,13 @@ static void vidc_audio_trigger(int dev, int enable_bits)
|
|||||||
struct audio_operations *adev = audio_devs[dev];
|
struct audio_operations *adev = audio_devs[dev];
|
||||||
|
|
||||||
if (enable_bits & PCM_ENABLE_OUTPUT) {
|
if (enable_bits & PCM_ENABLE_OUTPUT) {
|
||||||
if (!(adev->flags & DMA_ACTIVE)) {
|
if (!(adev->dmap_out->flags & DMA_ACTIVE)) {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
/* prevent recusion */
|
/* prevent recusion */
|
||||||
adev->flags |= DMA_ACTIVE;
|
adev->dmap_out->flags |= DMA_ACTIVE;
|
||||||
|
|
||||||
dma_interrupt = vidc_audio_dma_interrupt;
|
dma_interrupt = vidc_audio_dma_interrupt;
|
||||||
vidc_sound_dma_irq(0, NULL);
|
vidc_sound_dma_irq(0, NULL);
|
||||||
|
@ -941,13 +941,21 @@ static snd_pcm_uframes_t snd_cmipci_pcm_pointer(struct cmipci *cm, struct cmipci
|
|||||||
struct snd_pcm_substream *substream)
|
struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
size_t ptr;
|
size_t ptr;
|
||||||
unsigned int reg;
|
unsigned int reg, rem, tries;
|
||||||
|
|
||||||
if (!rec->running)
|
if (!rec->running)
|
||||||
return 0;
|
return 0;
|
||||||
#if 1 // this seems better..
|
#if 1 // this seems better..
|
||||||
reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2;
|
reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2;
|
||||||
ptr = rec->dma_size - (snd_cmipci_read_w(cm, reg) + 1);
|
for (tries = 0; tries < 3; tries++) {
|
||||||
ptr >>= rec->shift;
|
rem = snd_cmipci_read_w(cm, reg);
|
||||||
|
if (rem < rec->dma_size)
|
||||||
|
goto ok;
|
||||||
|
}
|
||||||
|
printk(KERN_ERR "cmipci: invalid PCM pointer: %#x\n", rem);
|
||||||
|
return SNDRV_PCM_POS_XRUN;
|
||||||
|
ok:
|
||||||
|
ptr = (rec->dma_size - (rem + 1)) >> rec->shift;
|
||||||
#else
|
#else
|
||||||
reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1;
|
reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1;
|
||||||
ptr = snd_cmipci_read(cm, reg) - rec->offset;
|
ptr = snd_cmipci_read(cm, reg) - rec->offset;
|
||||||
|
@ -1591,6 +1591,21 @@ static int patch_cxt5047(struct hda_codec *codec)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
spec->vmaster_nid = 0x13;
|
spec->vmaster_nid = 0x13;
|
||||||
|
|
||||||
|
switch (codec->subsystem_id >> 16) {
|
||||||
|
case 0x103c:
|
||||||
|
/* HP laptops have really bad sound over 0 dB on NID 0x10.
|
||||||
|
* Fix max PCM level to 0 dB (originally it has 0x1e steps
|
||||||
|
* with 0 dB offset 0x17)
|
||||||
|
*/
|
||||||
|
snd_hda_override_amp_caps(codec, 0x10, HDA_INPUT,
|
||||||
|
(0x17 << AC_AMPCAP_OFFSET_SHIFT) |
|
||||||
|
(0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) |
|
||||||
|
(0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) |
|
||||||
|
(1 << AC_AMPCAP_MUTE_SHIFT));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,8 +538,6 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec)
|
|||||||
* patch entries
|
* patch entries
|
||||||
*/
|
*/
|
||||||
static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
|
static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
|
||||||
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
|
|
||||||
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
|
|
||||||
{ .id = 0x10de0002, .name = "MCP77/78 HDMI",
|
{ .id = 0x10de0002, .name = "MCP77/78 HDMI",
|
||||||
.patch = patch_nvhdmi_8ch_7x },
|
.patch = patch_nvhdmi_8ch_7x },
|
||||||
{ .id = 0x10de0003, .name = "MCP77/78 HDMI",
|
{ .id = 0x10de0003, .name = "MCP77/78 HDMI",
|
||||||
@ -550,12 +548,16 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
|
|||||||
.patch = patch_nvhdmi_8ch_7x },
|
.patch = patch_nvhdmi_8ch_7x },
|
||||||
{ .id = 0x10de0007, .name = "MCP79/7A HDMI",
|
{ .id = 0x10de0007, .name = "MCP79/7A HDMI",
|
||||||
.patch = patch_nvhdmi_8ch_7x },
|
.patch = patch_nvhdmi_8ch_7x },
|
||||||
{ .id = 0x10de000c, .name = "MCP89 HDMI",
|
{ .id = 0x10de000a, .name = "GT220 HDMI",
|
||||||
.patch = patch_nvhdmi_8ch_89 },
|
.patch = patch_nvhdmi_8ch_89 },
|
||||||
{ .id = 0x10de000b, .name = "GT21x HDMI",
|
{ .id = 0x10de000b, .name = "GT21x HDMI",
|
||||||
.patch = patch_nvhdmi_8ch_89 },
|
.patch = patch_nvhdmi_8ch_89 },
|
||||||
|
{ .id = 0x10de000c, .name = "MCP89 HDMI",
|
||||||
|
.patch = patch_nvhdmi_8ch_89 },
|
||||||
{ .id = 0x10de000d, .name = "GT240 HDMI",
|
{ .id = 0x10de000d, .name = "GT240 HDMI",
|
||||||
.patch = patch_nvhdmi_8ch_89 },
|
.patch = patch_nvhdmi_8ch_89 },
|
||||||
|
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
|
||||||
|
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
|
||||||
{} /* terminator */
|
{} /* terminator */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -564,11 +566,12 @@ MODULE_ALIAS("snd-hda-codec-id:10de0003");
|
|||||||
MODULE_ALIAS("snd-hda-codec-id:10de0005");
|
MODULE_ALIAS("snd-hda-codec-id:10de0005");
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de0006");
|
MODULE_ALIAS("snd-hda-codec-id:10de0006");
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de0007");
|
MODULE_ALIAS("snd-hda-codec-id:10de0007");
|
||||||
|
MODULE_ALIAS("snd-hda-codec-id:10de000a");
|
||||||
|
MODULE_ALIAS("snd-hda-codec-id:10de000b");
|
||||||
|
MODULE_ALIAS("snd-hda-codec-id:10de000c");
|
||||||
|
MODULE_ALIAS("snd-hda-codec-id:10de000d");
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de0067");
|
MODULE_ALIAS("snd-hda-codec-id:10de0067");
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de8001");
|
MODULE_ALIAS("snd-hda-codec-id:10de8001");
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de000c");
|
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de000b");
|
|
||||||
MODULE_ALIAS("snd-hda-codec-id:10de000d");
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec");
|
MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec");
|
||||||
|
@ -2532,8 +2532,6 @@ static int alc_build_controls(struct hda_codec *codec)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
alc_free_kctls(codec); /* no longer needed */
|
|
||||||
|
|
||||||
/* assign Capture Source enums to NID */
|
/* assign Capture Source enums to NID */
|
||||||
kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
|
kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
|
||||||
if (!kctl)
|
if (!kctl)
|
||||||
@ -2602,6 +2600,9 @@ static int alc_build_controls(struct hda_codec *codec)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alc_free_kctls(codec); /* no longer needed */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1730,6 +1730,8 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
|
|||||||
"HP HDX", STAC_HP_HDX), /* HDX16 */
|
"HP HDX", STAC_HP_HDX), /* HDX16 */
|
||||||
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3620,
|
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3620,
|
||||||
"HP dv6", STAC_HP_DV5),
|
"HP dv6", STAC_HP_DV5),
|
||||||
|
SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3061,
|
||||||
|
"HP dv6", STAC_HP_DV5), /* HP dv6-1110ax */
|
||||||
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x7010,
|
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x7010,
|
||||||
"HP", STAC_HP_DV5),
|
"HP", STAC_HP_DV5),
|
||||||
SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233,
|
SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233,
|
||||||
|
@ -778,7 +778,7 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream)
|
|||||||
if (dac33->fifo_mode) {
|
if (dac33->fifo_mode) {
|
||||||
/* Generic for all FIFO modes */
|
/* Generic for all FIFO modes */
|
||||||
/* 50-51 : ASRC Control registers */
|
/* 50-51 : ASRC Control registers */
|
||||||
dac33_write(codec, DAC33_ASRC_CTRL_A, (1 << 4)); /* div=2 */
|
dac33_write(codec, DAC33_ASRC_CTRL_A, DAC33_SRCLKDIV(1));
|
||||||
dac33_write(codec, DAC33_ASRC_CTRL_B, 1); /* ??? */
|
dac33_write(codec, DAC33_ASRC_CTRL_B, 1); /* ??? */
|
||||||
|
|
||||||
/* Write registers 0x34 and 0x35 (MSB, LSB) */
|
/* Write registers 0x34 and 0x35 (MSB, LSB) */
|
||||||
@ -1038,11 +1038,7 @@ static int dac33_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|||||||
case SND_SOC_DAIFMT_DSP_A:
|
case SND_SOC_DAIFMT_DSP_A:
|
||||||
aictrl_a |= DAC33_AFMT_DSP;
|
aictrl_a |= DAC33_AFMT_DSP;
|
||||||
aictrl_b &= ~DAC33_DATA_DELAY_MASK;
|
aictrl_b &= ~DAC33_DATA_DELAY_MASK;
|
||||||
aictrl_b |= DAC33_DATA_DELAY(1); /* 1 bit delay */
|
aictrl_b |= DAC33_DATA_DELAY(0);
|
||||||
break;
|
|
||||||
case SND_SOC_DAIFMT_DSP_B:
|
|
||||||
aictrl_a |= DAC33_AFMT_DSP;
|
|
||||||
aictrl_b &= ~DAC33_DATA_DELAY_MASK; /* No delay */
|
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_RIGHT_J:
|
case SND_SOC_DAIFMT_RIGHT_J:
|
||||||
aictrl_a |= DAC33_AFMT_RIGHT_J;
|
aictrl_a |= DAC33_AFMT_RIGHT_J;
|
||||||
@ -1066,7 +1062,7 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
|
|||||||
{
|
{
|
||||||
/* 44-46: DAC Control Registers */
|
/* 44-46: DAC Control Registers */
|
||||||
/* A : DAC sample rate Fsref/1.5 */
|
/* A : DAC sample rate Fsref/1.5 */
|
||||||
dac33_write(codec, DAC33_DAC_CTRL_A, DAC33_DACRATE(1));
|
dac33_write(codec, DAC33_DAC_CTRL_A, DAC33_DACRATE(0));
|
||||||
/* B : DAC src=normal, not muted */
|
/* B : DAC src=normal, not muted */
|
||||||
dac33_write(codec, DAC33_DAC_CTRL_B, DAC33_DACSRCR_RIGHT |
|
dac33_write(codec, DAC33_DAC_CTRL_B, DAC33_DACSRCR_RIGHT |
|
||||||
DAC33_DACSRCL_LEFT);
|
DAC33_DACSRCL_LEFT);
|
||||||
|
@ -74,7 +74,7 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec)
|
|||||||
msleep(1);
|
msleep(1);
|
||||||
reg = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_0);
|
reg = snd_soc_read(codec, WM8993_DC_SERVO_READBACK_0);
|
||||||
dev_dbg(codec->dev, "DC servo: %x\n", reg);
|
dev_dbg(codec->dev, "DC servo: %x\n", reg);
|
||||||
} while (reg & WM8993_DCS_DATAPATH_BUSY);
|
} while (reg & WM8993_DCS_DATAPATH_BUSY && count < 400);
|
||||||
|
|
||||||
if (reg & WM8993_DCS_DATAPATH_BUSY)
|
if (reg & WM8993_DCS_DATAPATH_BUSY)
|
||||||
dev_err(codec->dev, "Timed out waiting for DC Servo\n");
|
dev_err(codec->dev, "Timed out waiting for DC Servo\n");
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
config SND_IMX_SOC
|
config SND_IMX_SOC
|
||||||
tristate "SoC Audio for Freescale i.MX CPUs"
|
tristate "SoC Audio for Freescale i.MX CPUs"
|
||||||
depends on ARCH_MXC && BROKEN
|
depends on ARCH_MXC
|
||||||
select SND_PCM
|
select SND_PCM
|
||||||
select FIQ
|
select FIQ
|
||||||
select SND_SOC_AC97_BUS
|
select SND_SOC_AC97_BUS
|
||||||
|
@ -32,6 +32,7 @@ config SND_SOC_SH4_SIU
|
|||||||
select DMA_ENGINE
|
select DMA_ENGINE
|
||||||
select DMADEVICES
|
select DMADEVICES
|
||||||
select SH_DMAE
|
select SH_DMAE
|
||||||
|
select FW_LOADER
|
||||||
|
|
||||||
##
|
##
|
||||||
## Boards
|
## Boards
|
||||||
|
Loading…
Reference in New Issue
Block a user