提交 a34689d9 编写于 作者: L Linus Torvalds

Merge tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull more sound fixes from Takashi Iwai:
 "Yet more (a bunch of) small fixes that slipped from the previous pull
  request.  Most of commits are pending ASoC fixes, all of which are
  fairly trivial commits."

* tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ASoC: wm8904: correct the index
  ALSA: hda - Yet another position_fix quirk for ASUS machines
  ASoC: tegra: fix maxburst settings in dmaengine code
  ASoC: samsung dma - Don't indicate support for pause/resume.
  ASoC: mc13783: Remove mono support
  ASoC: arizona: Fix typo in 44.1kHz rates
  ASoC: spear: correct the check for NULL dma_buffer pointer
  sound: tegra_alc5632: remove HP detect GPIO inversion
  ASoC: atmel-ssc: include linux/io.h for raw io
  ASoC: dapm: Don't force card bias level to be updated
  ASoC: dapm: Make sure we update the bias level for CODECs with no op
  ASoC: am3517evm: fix error return code
  ASoC: ux500_msp_i2s: better use devm functions and fix error return code
  ASoC: imx-sgtl5000: fix error return code
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/io.h>
struct ssc_device { struct ssc_device {
struct list_head list; struct list_head list;
......
...@@ -2701,6 +2701,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { ...@@ -2701,6 +2701,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
SND_PCI_QUIRK(0x1043, 0x1ac3, "ASUS X53S", POS_FIX_POSBUF),
SND_PCI_QUIRK(0x1043, 0x1b43, "ASUS K53E", POS_FIX_POSBUF), SND_PCI_QUIRK(0x1043, 0x1b43, "ASUS K53E", POS_FIX_POSBUF),
SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB), SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
......
...@@ -426,7 +426,7 @@ static const int arizona_44k1_bclk_rates[] = { ...@@ -426,7 +426,7 @@ static const int arizona_44k1_bclk_rates[] = {
940800, 940800,
1411200, 1411200,
1881600, 1881600,
2882400, 2822400,
3763200, 3763200,
5644800, 5644800,
7526400, 7526400,
......
...@@ -659,7 +659,7 @@ static struct snd_soc_dai_driver mc13783_dai_async[] = { ...@@ -659,7 +659,7 @@ static struct snd_soc_dai_driver mc13783_dai_async[] = {
.id = MC13783_ID_STEREO_DAC, .id = MC13783_ID_STEREO_DAC,
.playback = { .playback = {
.stream_name = "Playback", .stream_name = "Playback",
.channels_min = 1, .channels_min = 2,
.channels_max = 2, .channels_max = 2,
.rates = SNDRV_PCM_RATE_8000_96000, .rates = SNDRV_PCM_RATE_8000_96000,
.formats = MC13783_FORMATS, .formats = MC13783_FORMATS,
...@@ -670,7 +670,7 @@ static struct snd_soc_dai_driver mc13783_dai_async[] = { ...@@ -670,7 +670,7 @@ static struct snd_soc_dai_driver mc13783_dai_async[] = {
.id = MC13783_ID_STEREO_CODEC, .id = MC13783_ID_STEREO_CODEC,
.capture = { .capture = {
.stream_name = "Capture", .stream_name = "Capture",
.channels_min = 1, .channels_min = 2,
.channels_max = 2, .channels_max = 2,
.rates = MC13783_RATES_RECORD, .rates = MC13783_RATES_RECORD,
.formats = MC13783_FORMATS, .formats = MC13783_FORMATS,
...@@ -692,14 +692,14 @@ static struct snd_soc_dai_driver mc13783_dai_sync[] = { ...@@ -692,14 +692,14 @@ static struct snd_soc_dai_driver mc13783_dai_sync[] = {
.id = MC13783_ID_SYNC, .id = MC13783_ID_SYNC,
.playback = { .playback = {
.stream_name = "Playback", .stream_name = "Playback",
.channels_min = 1, .channels_min = 2,
.channels_max = 2, .channels_max = 2,
.rates = SNDRV_PCM_RATE_8000_96000, .rates = SNDRV_PCM_RATE_8000_96000,
.formats = MC13783_FORMATS, .formats = MC13783_FORMATS,
}, },
.capture = { .capture = {
.stream_name = "Capture", .stream_name = "Capture",
.channels_min = 1, .channels_min = 2,
.channels_max = 2, .channels_max = 2,
.rates = MC13783_RATES_RECORD, .rates = MC13783_RATES_RECORD,
.formats = MC13783_FORMATS, .formats = MC13783_FORMATS,
......
...@@ -100,7 +100,7 @@ static const struct reg_default wm8904_reg_defaults[] = { ...@@ -100,7 +100,7 @@ static const struct reg_default wm8904_reg_defaults[] = {
{ 14, 0x0000 }, /* R14 - Power Management 2 */ { 14, 0x0000 }, /* R14 - Power Management 2 */
{ 15, 0x0000 }, /* R15 - Power Management 3 */ { 15, 0x0000 }, /* R15 - Power Management 3 */
{ 18, 0x0000 }, /* R18 - Power Management 6 */ { 18, 0x0000 }, /* R18 - Power Management 6 */
{ 19, 0x945E }, /* R20 - Clock Rates 0 */ { 20, 0x945E }, /* R20 - Clock Rates 0 */
{ 21, 0x0C05 }, /* R21 - Clock Rates 1 */ { 21, 0x0C05 }, /* R21 - Clock Rates 1 */
{ 22, 0x0006 }, /* R22 - Clock Rates 2 */ { 22, 0x0006 }, /* R22 - Clock Rates 2 */
{ 24, 0x0050 }, /* R24 - Audio Interface 0 */ { 24, 0x0050 }, /* R24 - Audio Interface 0 */
......
...@@ -94,7 +94,7 @@ static int __devinit imx_sgtl5000_probe(struct platform_device *pdev) ...@@ -94,7 +94,7 @@ static int __devinit imx_sgtl5000_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "audmux internal port setup failed\n"); dev_err(&pdev->dev, "audmux internal port setup failed\n");
return ret; return ret;
} }
imx_audmux_v2_configure_port(ext_port, ret = imx_audmux_v2_configure_port(ext_port,
IMX_AUDMUX_V2_PTCR_SYN, IMX_AUDMUX_V2_PTCR_SYN,
IMX_AUDMUX_V2_PDCR_RXDSEL(int_port)); IMX_AUDMUX_V2_PDCR_RXDSEL(int_port));
if (ret) { if (ret) {
......
...@@ -59,7 +59,7 @@ static int am3517evm_hw_params(struct snd_pcm_substream *substream, ...@@ -59,7 +59,7 @@ static int am3517evm_hw_params(struct snd_pcm_substream *substream,
return ret; return ret;
} }
snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_FSR_SRC_FSX, 0, ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_FSR_SRC_FSX, 0,
SND_SOC_CLOCK_IN); SND_SOC_CLOCK_IN);
if (ret < 0) { if (ret < 0) {
printk(KERN_ERR "can't set CPU system clock OMAP_MCBSP_FSR_SRC_FSX\n"); printk(KERN_ERR "can't set CPU system clock OMAP_MCBSP_FSR_SRC_FSX\n");
......
...@@ -34,9 +34,7 @@ static const struct snd_pcm_hardware dma_hardware = { ...@@ -34,9 +34,7 @@ static const struct snd_pcm_hardware dma_hardware = {
.info = SNDRV_PCM_INFO_INTERLEAVED | .info = SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_MMAP_VALID,
SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S16_LE | .formats = SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_LE |
SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_U8 |
...@@ -248,15 +246,11 @@ static int dma_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -248,15 +246,11 @@ static int dma_trigger(struct snd_pcm_substream *substream, int cmd)
switch (cmd) { switch (cmd) {
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
prtd->state |= ST_RUNNING; prtd->state |= ST_RUNNING;
prtd->params->ops->trigger(prtd->params->ch); prtd->params->ops->trigger(prtd->params->ch);
break; break;
case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_SUSPEND:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
prtd->state &= ~ST_RUNNING; prtd->state &= ~ST_RUNNING;
prtd->params->ops->stop(prtd->params->ch); prtd->params->ops->stop(prtd->params->ch);
break; break;
......
...@@ -291,8 +291,11 @@ static int snd_soc_dapm_set_bias_level(struct snd_soc_dapm_context *dapm, ...@@ -291,8 +291,11 @@ static int snd_soc_dapm_set_bias_level(struct snd_soc_dapm_context *dapm,
if (dapm->codec->driver->set_bias_level) if (dapm->codec->driver->set_bias_level)
ret = dapm->codec->driver->set_bias_level(dapm->codec, ret = dapm->codec->driver->set_bias_level(dapm->codec,
level); level);
} else else
dapm->bias_level = level;
} else if (!card || dapm != &card->dapm) {
dapm->bias_level = level; dapm->bias_level = level;
}
if (ret != 0) if (ret != 0)
goto out; goto out;
......
...@@ -138,7 +138,7 @@ static void spear_pcm_free(struct snd_pcm *pcm) ...@@ -138,7 +138,7 @@ static void spear_pcm_free(struct snd_pcm *pcm)
continue; continue;
buf = &substream->dma_buffer; buf = &substream->dma_buffer;
if (!buf && !buf->area) if (!buf || !buf->area)
continue; continue;
dma_free_writecombine(pcm->card->dev, buf->bytes, dma_free_writecombine(pcm->card->dev, buf->bytes,
......
...@@ -89,7 +89,6 @@ static struct snd_soc_jack_gpio tegra_alc5632_hp_jack_gpio = { ...@@ -89,7 +89,6 @@ static struct snd_soc_jack_gpio tegra_alc5632_hp_jack_gpio = {
.name = "Headset detection", .name = "Headset detection",
.report = SND_JACK_HEADSET, .report = SND_JACK_HEADSET,
.debounce_time = 150, .debounce_time = 150,
.invert = 1,
}; };
static const struct snd_soc_dapm_widget tegra_alc5632_dapm_widgets[] = { static const struct snd_soc_dapm_widget tegra_alc5632_dapm_widgets[] = {
......
...@@ -334,11 +334,11 @@ static int tegra_pcm_hw_params(struct snd_pcm_substream *substream, ...@@ -334,11 +334,11 @@ static int tegra_pcm_hw_params(struct snd_pcm_substream *substream,
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
slave_config.dst_addr = dmap->addr; slave_config.dst_addr = dmap->addr;
slave_config.src_maxburst = 0; slave_config.dst_maxburst = 4;
} else { } else {
slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
slave_config.src_addr = dmap->addr; slave_config.src_addr = dmap->addr;
slave_config.dst_maxburst = 0; slave_config.src_maxburst = 4;
} }
slave_config.slave_id = dmap->req_sel; slave_config.slave_id = dmap->req_sel;
......
...@@ -663,7 +663,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, ...@@ -663,7 +663,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
struct ux500_msp **msp_p, struct ux500_msp **msp_p,
struct msp_i2s_platform_data *platform_data) struct msp_i2s_platform_data *platform_data)
{ {
int ret = 0;
struct resource *res = NULL; struct resource *res = NULL;
struct i2s_controller *i2s_cont; struct i2s_controller *i2s_cont;
struct ux500_msp *msp; struct ux500_msp *msp;
...@@ -685,15 +684,14 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, ...@@ -685,15 +684,14 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
if (res == NULL) { if (res == NULL) {
dev_err(&pdev->dev, "%s: ERROR: Unable to get resource!\n", dev_err(&pdev->dev, "%s: ERROR: Unable to get resource!\n",
__func__); __func__);
ret = -ENOMEM; return -ENOMEM;
goto err_res;
} }
msp->registers = ioremap(res->start, (res->end - res->start + 1)); msp->registers = devm_ioremap(&pdev->dev, res->start,
resource_size(res));
if (msp->registers == NULL) { if (msp->registers == NULL) {
dev_err(&pdev->dev, "%s: ERROR: ioremap failed!\n", __func__); dev_err(&pdev->dev, "%s: ERROR: ioremap failed!\n", __func__);
ret = -ENOMEM; return -ENOMEM;
goto err_res;
} }
msp->msp_state = MSP_STATE_IDLE; msp->msp_state = MSP_STATE_IDLE;
...@@ -705,7 +703,7 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, ...@@ -705,7 +703,7 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
dev_err(&pdev->dev, dev_err(&pdev->dev,
"%s: ERROR: Failed to allocate I2S-controller!\n", "%s: ERROR: Failed to allocate I2S-controller!\n",
__func__); __func__);
goto err_i2s_cont; return -ENOMEM;
} }
i2s_cont->dev.parent = &pdev->dev; i2s_cont->dev.parent = &pdev->dev;
i2s_cont->data = (void *)msp; i2s_cont->data = (void *)msp;
...@@ -716,14 +714,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev, ...@@ -716,14 +714,6 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
msp->i2s_cont = i2s_cont; msp->i2s_cont = i2s_cont;
return 0; return 0;
err_i2s_cont:
iounmap(msp->registers);
err_res:
devm_kfree(&pdev->dev, msp);
return ret;
} }
void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev, void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev,
...@@ -732,11 +722,6 @@ void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev, ...@@ -732,11 +722,6 @@ void ux500_msp_i2s_cleanup_msp(struct platform_device *pdev,
dev_dbg(msp->dev, "%s: Enter (id = %d).\n", __func__, msp->id); dev_dbg(msp->dev, "%s: Enter (id = %d).\n", __func__, msp->id);
device_unregister(&msp->i2s_cont->dev); device_unregister(&msp->i2s_cont->dev);
devm_kfree(&pdev->dev, msp->i2s_cont);
iounmap(msp->registers);
devm_kfree(&pdev->dev, msp);
} }
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册