Sound fixes #2 for 3.6-rc6

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.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iQIcBAABAgAGBQJQVGAHAAoJEGwxgFQ9KSmkyW8P/idw2CiiB2bdU3SwDfg6AXJE
 CmvpTHtxAVtYvejq/WIFP9NkUAwZZePg+DQoVTOYmzdrZjNyCIW0rq7TG2PCo4Dx
 v6Ek9MITrWbT8dil75SF0JeqglWznQFNkUinBCVIZPEzvpvTmjbnQNvja9iVQ41G
 LpWbB0KPTNw88cILnH8YTO0tlvPFhOTx4ZRMZpq26q7nmph5abSjLlkKmYMa59sp
 lbq8P9y2HRSLM7YR5WAV7ydg3L+euFe7ppbCqnp0l0mmhYjj3/ltI/wxkGIWNfRN
 mSAW3ZM2Xz0ZO0NLuLEMcgoCZAoHy3KUMOJqt+DKe91Vn7DpBU/xWrcwU+wT7I3v
 9O4vM6C4h89xxB41n1AejUQivPHIyT1ZmfSRByB5t5l2KwUI2VDD2p7VNHvY6FWF
 JkbYfb2c1VB3sUZKDv0dKDfZDsc5ddLVSnujoRjApel9ghVI7wDZr5ZsLPMW8z/Y
 6wJ5PsBAf1iPc+CS05mQXrLc8LQB3u3bR7xTEt9yVsj8lQIXmN6W6Vm0N0hut6Vs
 snDpKHD0AQ9LjQZysUsX45qPPiSX6PlX2wEFyA49C1ahBKUJ0Nh7wmqvvF9/GA2R
 kqK652uM7Mworw26eYrNfbyL2/DFrPea67lks1tqW3s1o7NQ9A1gNmrF0ZIIbaTt
 zY0D01eyFWkIeeKqKtoU
 =fIXH
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2012-09-16 12:57:59 -07:00
commit a34689d980
13 changed files with 23 additions and 40 deletions

View file

@ -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;

View file

@ -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),

View file

@ -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,

View file

@ -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[] = {
.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[] = {
.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,

View file

@ -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 */

View file

@ -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) {

View file

@ -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");

View file

@ -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)
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;

View file

@ -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;

View file

@ -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,

View file

@ -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[] = {

View file

@ -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;

View file

@ -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,
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,
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,
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,
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");