diff options
-rw-r--r-- | MAINTAINERS | 4 | ||||
-rw-r--r-- | sound/core/pcm_lib.c | 33 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 2 | ||||
-rw-r--r-- | sound/soc/blackfin/bf5xx-ad193x.c | 4 | ||||
-rw-r--r-- | sound/soc/fsl/mpc5200_dma.c | 6 | ||||
-rw-r--r-- | sound/soc/imx/imx-pcm-fiq.c | 1 | ||||
-rw-r--r-- | sound/soc/kirkwood/kirkwood-i2s.c | 2 | ||||
-rw-r--r-- | sound/soc/soc-cache.c | 12 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 4 | ||||
-rw-r--r-- | sound/soc/soc-dapm.c | 2 | ||||
-rw-r--r-- | sound/soc/soc-jack.c | 2 |
12 files changed, 50 insertions, 28 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 7658e1ffd58e..0acf9ab3d287 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -7211,6 +7211,9 @@ W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | |||
7211 | S: Supported | 7211 | S: Supported |
7212 | F: Documentation/hwmon/wm83?? | 7212 | F: Documentation/hwmon/wm83?? |
7213 | F: drivers/leds/leds-wm83*.c | 7213 | F: drivers/leds/leds-wm83*.c |
7214 | F: drivers/input/misc/wm831x-on.c | ||
7215 | F: drivers/input/touchscreen/wm831x-ts.c | ||
7216 | F: drivers/input/touchscreen/wm97*.c | ||
7214 | F: drivers/mfd/wm8*.c | 7217 | F: drivers/mfd/wm8*.c |
7215 | F: drivers/power/wm83*.c | 7218 | F: drivers/power/wm83*.c |
7216 | F: drivers/rtc/rtc-wm83*.c | 7219 | F: drivers/rtc/rtc-wm83*.c |
@@ -7220,6 +7223,7 @@ F: drivers/watchdog/wm83*_wdt.c | |||
7220 | F: include/linux/mfd/wm831x/ | 7223 | F: include/linux/mfd/wm831x/ |
7221 | F: include/linux/mfd/wm8350/ | 7224 | F: include/linux/mfd/wm8350/ |
7222 | F: include/linux/mfd/wm8400* | 7225 | F: include/linux/mfd/wm8400* |
7226 | F: include/linux/wm97xx.h | ||
7223 | F: include/sound/wm????.h | 7227 | F: include/sound/wm????.h |
7224 | F: sound/soc/codecs/wm* | 7228 | F: sound/soc/codecs/wm* |
7225 | 7229 | ||
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index 86d0caf91b35..62e90b862a0d 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c | |||
@@ -1761,6 +1761,10 @@ static int wait_for_avail(struct snd_pcm_substream *substream, | |||
1761 | snd_pcm_uframes_t avail = 0; | 1761 | snd_pcm_uframes_t avail = 0; |
1762 | long wait_time, tout; | 1762 | long wait_time, tout; |
1763 | 1763 | ||
1764 | init_waitqueue_entry(&wait, current); | ||
1765 | set_current_state(TASK_INTERRUPTIBLE); | ||
1766 | add_wait_queue(&runtime->tsleep, &wait); | ||
1767 | |||
1764 | if (runtime->no_period_wakeup) | 1768 | if (runtime->no_period_wakeup) |
1765 | wait_time = MAX_SCHEDULE_TIMEOUT; | 1769 | wait_time = MAX_SCHEDULE_TIMEOUT; |
1766 | else { | 1770 | else { |
@@ -1771,16 +1775,32 @@ static int wait_for_avail(struct snd_pcm_substream *substream, | |||
1771 | } | 1775 | } |
1772 | wait_time = msecs_to_jiffies(wait_time * 1000); | 1776 | wait_time = msecs_to_jiffies(wait_time * 1000); |
1773 | } | 1777 | } |
1774 | init_waitqueue_entry(&wait, current); | 1778 | |
1775 | add_wait_queue(&runtime->tsleep, &wait); | ||
1776 | for (;;) { | 1779 | for (;;) { |
1777 | if (signal_pending(current)) { | 1780 | if (signal_pending(current)) { |
1778 | err = -ERESTARTSYS; | 1781 | err = -ERESTARTSYS; |
1779 | break; | 1782 | break; |
1780 | } | 1783 | } |
1784 | |||
1785 | /* | ||
1786 | * We need to check if space became available already | ||
1787 | * (and thus the wakeup happened already) first to close | ||
1788 | * the race of space already having become available. | ||
1789 | * This check must happen after been added to the waitqueue | ||
1790 | * and having current state be INTERRUPTIBLE. | ||
1791 | */ | ||
1792 | if (is_playback) | ||
1793 | avail = snd_pcm_playback_avail(runtime); | ||
1794 | else | ||
1795 | avail = snd_pcm_capture_avail(runtime); | ||
1796 | if (avail >= runtime->twake) | ||
1797 | break; | ||
1781 | snd_pcm_stream_unlock_irq(substream); | 1798 | snd_pcm_stream_unlock_irq(substream); |
1782 | tout = schedule_timeout_interruptible(wait_time); | 1799 | |
1800 | tout = schedule_timeout(wait_time); | ||
1801 | |||
1783 | snd_pcm_stream_lock_irq(substream); | 1802 | snd_pcm_stream_lock_irq(substream); |
1803 | set_current_state(TASK_INTERRUPTIBLE); | ||
1784 | switch (runtime->status->state) { | 1804 | switch (runtime->status->state) { |
1785 | case SNDRV_PCM_STATE_SUSPENDED: | 1805 | case SNDRV_PCM_STATE_SUSPENDED: |
1786 | err = -ESTRPIPE; | 1806 | err = -ESTRPIPE; |
@@ -1806,14 +1826,9 @@ static int wait_for_avail(struct snd_pcm_substream *substream, | |||
1806 | err = -EIO; | 1826 | err = -EIO; |
1807 | break; | 1827 | break; |
1808 | } | 1828 | } |
1809 | if (is_playback) | ||
1810 | avail = snd_pcm_playback_avail(runtime); | ||
1811 | else | ||
1812 | avail = snd_pcm_capture_avail(runtime); | ||
1813 | if (avail >= runtime->twake) | ||
1814 | break; | ||
1815 | } | 1829 | } |
1816 | _endloop: | 1830 | _endloop: |
1831 | set_current_state(TASK_RUNNING); | ||
1817 | remove_wait_queue(&runtime->tsleep, &wait); | 1832 | remove_wait_queue(&runtime->tsleep, &wait); |
1818 | *availp = avail; | 1833 | *availp = avail; |
1819 | return err; | 1834 | return err; |
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 3e7850c238c3..f3aefef37216 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -579,9 +579,13 @@ int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux, | |||
579 | return -1; | 579 | return -1; |
580 | } | 580 | } |
581 | recursive++; | 581 | recursive++; |
582 | for (i = 0; i < nums; i++) | 582 | for (i = 0; i < nums; i++) { |
583 | unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i])); | ||
584 | if (type == AC_WID_PIN || type == AC_WID_AUD_OUT) | ||
585 | continue; | ||
583 | if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0) | 586 | if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0) |
584 | return i; | 587 | return i; |
588 | } | ||
585 | return -1; | 589 | return -1; |
586 | } | 590 | } |
587 | EXPORT_SYMBOL_HDA(snd_hda_get_conn_index); | 591 | EXPORT_SYMBOL_HDA(snd_hda_get_conn_index); |
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index d6c93d92b550..c45f3e69bcf0 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -535,7 +535,7 @@ static int add_volume(struct hda_codec *codec, const char *name, | |||
535 | int index, unsigned int pval, int dir, | 535 | int index, unsigned int pval, int dir, |
536 | struct snd_kcontrol **kctlp) | 536 | struct snd_kcontrol **kctlp) |
537 | { | 537 | { |
538 | char tmp[32]; | 538 | char tmp[44]; |
539 | struct snd_kcontrol_new knew = | 539 | struct snd_kcontrol_new knew = |
540 | HDA_CODEC_VOLUME_IDX(tmp, index, 0, 0, HDA_OUTPUT); | 540 | HDA_CODEC_VOLUME_IDX(tmp, index, 0, 0, HDA_OUTPUT); |
541 | knew.private_value = pval; | 541 | knew.private_value = pval; |
diff --git a/sound/soc/blackfin/bf5xx-ad193x.c b/sound/soc/blackfin/bf5xx-ad193x.c index a118a0fb9d81..5956584ea3a4 100644 --- a/sound/soc/blackfin/bf5xx-ad193x.c +++ b/sound/soc/blackfin/bf5xx-ad193x.c | |||
@@ -103,7 +103,7 @@ static struct snd_soc_dai_link bf5xx_ad193x_dai[] = { | |||
103 | .cpu_dai_name = "bfin-tdm.0", | 103 | .cpu_dai_name = "bfin-tdm.0", |
104 | .codec_dai_name ="ad193x-hifi", | 104 | .codec_dai_name ="ad193x-hifi", |
105 | .platform_name = "bfin-tdm-pcm-audio", | 105 | .platform_name = "bfin-tdm-pcm-audio", |
106 | .codec_name = "ad193x.5", | 106 | .codec_name = "spi0.5", |
107 | .ops = &bf5xx_ad193x_ops, | 107 | .ops = &bf5xx_ad193x_ops, |
108 | }, | 108 | }, |
109 | { | 109 | { |
@@ -112,7 +112,7 @@ static struct snd_soc_dai_link bf5xx_ad193x_dai[] = { | |||
112 | .cpu_dai_name = "bfin-tdm.1", | 112 | .cpu_dai_name = "bfin-tdm.1", |
113 | .codec_dai_name ="ad193x-hifi", | 113 | .codec_dai_name ="ad193x-hifi", |
114 | .platform_name = "bfin-tdm-pcm-audio", | 114 | .platform_name = "bfin-tdm-pcm-audio", |
115 | .codec_name = "ad193x.5", | 115 | .codec_name = "spi0.5", |
116 | .ops = &bf5xx_ad193x_ops, | 116 | .ops = &bf5xx_ad193x_ops, |
117 | }, | 117 | }, |
118 | }; | 118 | }; |
diff --git a/sound/soc/fsl/mpc5200_dma.c b/sound/soc/fsl/mpc5200_dma.c index fd0dc46afc34..5c6c2457386e 100644 --- a/sound/soc/fsl/mpc5200_dma.c +++ b/sound/soc/fsl/mpc5200_dma.c | |||
@@ -369,7 +369,7 @@ static struct snd_soc_platform_driver mpc5200_audio_dma_platform = { | |||
369 | .pcm_free = &psc_dma_free, | 369 | .pcm_free = &psc_dma_free, |
370 | }; | 370 | }; |
371 | 371 | ||
372 | static int mpc5200_hpcd_probe(struct of_device *op) | 372 | static int mpc5200_hpcd_probe(struct platform_device *op) |
373 | { | 373 | { |
374 | phys_addr_t fifo; | 374 | phys_addr_t fifo; |
375 | struct psc_dma *psc_dma; | 375 | struct psc_dma *psc_dma; |
@@ -487,7 +487,7 @@ out_unmap: | |||
487 | return ret; | 487 | return ret; |
488 | } | 488 | } |
489 | 489 | ||
490 | static int mpc5200_hpcd_remove(struct of_device *op) | 490 | static int mpc5200_hpcd_remove(struct platform_device *op) |
491 | { | 491 | { |
492 | struct psc_dma *psc_dma = dev_get_drvdata(&op->dev); | 492 | struct psc_dma *psc_dma = dev_get_drvdata(&op->dev); |
493 | 493 | ||
@@ -519,7 +519,7 @@ MODULE_DEVICE_TABLE(of, mpc5200_hpcd_match); | |||
519 | static struct platform_driver mpc5200_hpcd_of_driver = { | 519 | static struct platform_driver mpc5200_hpcd_of_driver = { |
520 | .probe = mpc5200_hpcd_probe, | 520 | .probe = mpc5200_hpcd_probe, |
521 | .remove = mpc5200_hpcd_remove, | 521 | .remove = mpc5200_hpcd_remove, |
522 | .dev = { | 522 | .driver = { |
523 | .owner = THIS_MODULE, | 523 | .owner = THIS_MODULE, |
524 | .name = "mpc5200-pcm-audio", | 524 | .name = "mpc5200-pcm-audio", |
525 | .of_match_table = mpc5200_hpcd_match, | 525 | .of_match_table = mpc5200_hpcd_match, |
diff --git a/sound/soc/imx/imx-pcm-fiq.c b/sound/soc/imx/imx-pcm-fiq.c index 309c59e6fb6c..7945625e0e08 100644 --- a/sound/soc/imx/imx-pcm-fiq.c +++ b/sound/soc/imx/imx-pcm-fiq.c | |||
@@ -240,7 +240,6 @@ static int ssi_irq = 0; | |||
240 | 240 | ||
241 | static int imx_pcm_fiq_new(struct snd_soc_pcm_runtime *rtd) | 241 | static int imx_pcm_fiq_new(struct snd_soc_pcm_runtime *rtd) |
242 | { | 242 | { |
243 | struct snd_card *card = rtd->card->snd_card; | ||
244 | struct snd_soc_dai *dai = rtd->cpu_dai; | 243 | struct snd_soc_dai *dai = rtd->cpu_dai; |
245 | struct snd_pcm *pcm = rtd->pcm; | 244 | struct snd_pcm *pcm = rtd->pcm; |
246 | int ret; | 245 | int ret; |
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index 8f16cd37c2af..d0bcf3fcea01 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c | |||
@@ -424,7 +424,7 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev) | |||
424 | if (!priv->mem) { | 424 | if (!priv->mem) { |
425 | dev_err(&pdev->dev, "request_mem_region failed\n"); | 425 | dev_err(&pdev->dev, "request_mem_region failed\n"); |
426 | err = -EBUSY; | 426 | err = -EBUSY; |
427 | goto error_alloc; | 427 | goto err_alloc; |
428 | } | 428 | } |
429 | 429 | ||
430 | priv->io = ioremap(priv->mem->start, SZ_16K); | 430 | priv->io = ioremap(priv->mem->start, SZ_16K); |
diff --git a/sound/soc/soc-cache.c b/sound/soc/soc-cache.c index d9f8aded51f3..20b7f3b003a3 100644 --- a/sound/soc/soc-cache.c +++ b/sound/soc/soc-cache.c | |||
@@ -203,14 +203,14 @@ static int snd_soc_rbtree_cache_sync(struct snd_soc_codec *codec) | |||
203 | rbnode = rb_entry(node, struct snd_soc_rbtree_node, node); | 203 | rbnode = rb_entry(node, struct snd_soc_rbtree_node, node); |
204 | for (i = 0; i < rbnode->blklen; ++i) { | 204 | for (i = 0; i < rbnode->blklen; ++i) { |
205 | regtmp = rbnode->base_reg + i; | 205 | regtmp = rbnode->base_reg + i; |
206 | WARN_ON(codec->writable_register && | ||
207 | codec->writable_register(codec, regtmp)); | ||
208 | val = snd_soc_rbtree_get_register(rbnode, i); | 206 | val = snd_soc_rbtree_get_register(rbnode, i); |
209 | def = snd_soc_get_cache_val(codec->reg_def_copy, i, | 207 | def = snd_soc_get_cache_val(codec->reg_def_copy, i, |
210 | rbnode->word_size); | 208 | rbnode->word_size); |
211 | if (val == def) | 209 | if (val == def) |
212 | continue; | 210 | continue; |
213 | 211 | ||
212 | WARN_ON(!snd_soc_codec_writable_register(codec, regtmp)); | ||
213 | |||
214 | codec->cache_bypass = 1; | 214 | codec->cache_bypass = 1; |
215 | ret = snd_soc_write(codec, regtmp, val); | 215 | ret = snd_soc_write(codec, regtmp, val); |
216 | codec->cache_bypass = 0; | 216 | codec->cache_bypass = 0; |
@@ -563,8 +563,7 @@ static int snd_soc_lzo_cache_sync(struct snd_soc_codec *codec) | |||
563 | 563 | ||
564 | lzo_blocks = codec->reg_cache; | 564 | lzo_blocks = codec->reg_cache; |
565 | for_each_set_bit(i, lzo_blocks[0]->sync_bmp, lzo_blocks[0]->sync_bmp_nbits) { | 565 | for_each_set_bit(i, lzo_blocks[0]->sync_bmp, lzo_blocks[0]->sync_bmp_nbits) { |
566 | WARN_ON(codec->writable_register && | 566 | WARN_ON(!snd_soc_codec_writable_register(codec, i)); |
567 | codec->writable_register(codec, i)); | ||
568 | ret = snd_soc_cache_read(codec, i, &val); | 567 | ret = snd_soc_cache_read(codec, i, &val); |
569 | if (ret) | 568 | if (ret) |
570 | return ret; | 569 | return ret; |
@@ -823,8 +822,6 @@ static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec) | |||
823 | 822 | ||
824 | codec_drv = codec->driver; | 823 | codec_drv = codec->driver; |
825 | for (i = 0; i < codec_drv->reg_cache_size; ++i) { | 824 | for (i = 0; i < codec_drv->reg_cache_size; ++i) { |
826 | WARN_ON(codec->writable_register && | ||
827 | codec->writable_register(codec, i)); | ||
828 | ret = snd_soc_cache_read(codec, i, &val); | 825 | ret = snd_soc_cache_read(codec, i, &val); |
829 | if (ret) | 826 | if (ret) |
830 | return ret; | 827 | return ret; |
@@ -832,6 +829,9 @@ static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec) | |||
832 | if (snd_soc_get_cache_val(codec->reg_def_copy, | 829 | if (snd_soc_get_cache_val(codec->reg_def_copy, |
833 | i, codec_drv->reg_word_size) == val) | 830 | i, codec_drv->reg_word_size) == val) |
834 | continue; | 831 | continue; |
832 | |||
833 | WARN_ON(!snd_soc_codec_writable_register(codec, i)); | ||
834 | |||
835 | ret = snd_soc_write(codec, i, val); | 835 | ret = snd_soc_write(codec, i, val); |
836 | if (ret) | 836 | if (ret) |
837 | return ret; | 837 | return ret; |
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b085d8e87574..d2ef014af215 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -1633,7 +1633,7 @@ int snd_soc_codec_readable_register(struct snd_soc_codec *codec, | |||
1633 | if (codec->readable_register) | 1633 | if (codec->readable_register) |
1634 | return codec->readable_register(codec, reg); | 1634 | return codec->readable_register(codec, reg); |
1635 | else | 1635 | else |
1636 | return 0; | 1636 | return 1; |
1637 | } | 1637 | } |
1638 | EXPORT_SYMBOL_GPL(snd_soc_codec_readable_register); | 1638 | EXPORT_SYMBOL_GPL(snd_soc_codec_readable_register); |
1639 | 1639 | ||
@@ -1651,7 +1651,7 @@ int snd_soc_codec_writable_register(struct snd_soc_codec *codec, | |||
1651 | if (codec->writable_register) | 1651 | if (codec->writable_register) |
1652 | return codec->writable_register(codec, reg); | 1652 | return codec->writable_register(codec, reg); |
1653 | else | 1653 | else |
1654 | return 0; | 1654 | return 1; |
1655 | } | 1655 | } |
1656 | EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register); | 1656 | EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register); |
1657 | 1657 | ||
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 7e15914b3633..d67c637557a7 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -2763,7 +2763,7 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend); | |||
2763 | 2763 | ||
2764 | /** | 2764 | /** |
2765 | * snd_soc_dapm_free - free dapm resources | 2765 | * snd_soc_dapm_free - free dapm resources |
2766 | * @card: SoC device | 2766 | * @dapm: DAPM context |
2767 | * | 2767 | * |
2768 | * Free all dapm widgets and resources. | 2768 | * Free all dapm widgets and resources. |
2769 | */ | 2769 | */ |
diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c index 38b00131b2fe..fa31d9c2abd8 100644 --- a/sound/soc/soc-jack.c +++ b/sound/soc/soc-jack.c | |||
@@ -105,7 +105,7 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask) | |||
105 | 105 | ||
106 | snd_soc_dapm_sync(dapm); | 106 | snd_soc_dapm_sync(dapm); |
107 | 107 | ||
108 | snd_jack_report(jack->jack, status); | 108 | snd_jack_report(jack->jack, jack->status); |
109 | 109 | ||
110 | out: | 110 | out: |
111 | mutex_unlock(&codec->mutex); | 111 | mutex_unlock(&codec->mutex); |