diff options
-rw-r--r-- | sound/soc/atmel/Kconfig | 9 | ||||
-rw-r--r-- | sound/soc/atmel/Makefile | 2 | ||||
-rw-r--r-- | sound/soc/atmel/atmel-pcm-dma.c | 4 | ||||
-rw-r--r-- | sound/soc/atmel/atmel-pcm-pdc.c | 79 | ||||
-rw-r--r-- | sound/soc/atmel/atmel-pcm.c | 121 | ||||
-rw-r--r-- | sound/soc/atmel/atmel-pcm.h | 5 | ||||
-rw-r--r-- | sound/soc/codecs/ab8500-codec.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/ak4554.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/ak4642.c | 37 | ||||
-rw-r--r-- | sound/soc/codecs/arizona.c | 6 | ||||
-rw-r--r-- | sound/soc/codecs/wm5102.c | 1 |
11 files changed, 125 insertions, 143 deletions
diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 1579e994acf8..e7d08806f3e9 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig | |||
@@ -25,7 +25,8 @@ config SND_ATMEL_SOC_SSC | |||
25 | 25 | ||
26 | config SND_AT91_SOC_SAM9G20_WM8731 | 26 | config SND_AT91_SOC_SAM9G20_WM8731 |
27 | tristate "SoC Audio support for WM8731-based At91sam9g20 evaluation board" | 27 | tristate "SoC Audio support for WM8731-based At91sam9g20 evaluation board" |
28 | depends on ARCH_AT91 && ATMEL_SSC && SND_ATMEL_SOC | 28 | depends on ARCH_AT91 || COMPILE_TEST |
29 | depends on ATMEL_SSC && SND_ATMEL_SOC && SND_SOC_I2C_AND_SPI | ||
29 | select SND_ATMEL_SOC_PDC | 30 | select SND_ATMEL_SOC_PDC |
30 | select SND_ATMEL_SOC_SSC | 31 | select SND_ATMEL_SOC_SSC |
31 | select SND_SOC_WM8731 | 32 | select SND_SOC_WM8731 |
@@ -35,7 +36,8 @@ config SND_AT91_SOC_SAM9G20_WM8731 | |||
35 | 36 | ||
36 | config SND_ATMEL_SOC_WM8904 | 37 | config SND_ATMEL_SOC_WM8904 |
37 | tristate "Atmel ASoC driver for boards using WM8904 codec" | 38 | tristate "Atmel ASoC driver for boards using WM8904 codec" |
38 | depends on ARCH_AT91 && ATMEL_SSC && SND_ATMEL_SOC && I2C | 39 | depends on ARCH_AT91 || COMPILE_TEST |
40 | depends on ATMEL_SSC && SND_ATMEL_SOC && I2C | ||
39 | select SND_ATMEL_SOC_SSC | 41 | select SND_ATMEL_SOC_SSC |
40 | select SND_ATMEL_SOC_DMA | 42 | select SND_ATMEL_SOC_DMA |
41 | select SND_SOC_WM8904 | 43 | select SND_SOC_WM8904 |
@@ -45,7 +47,8 @@ config SND_ATMEL_SOC_WM8904 | |||
45 | 47 | ||
46 | config SND_AT91_SOC_SAM9X5_WM8731 | 48 | config SND_AT91_SOC_SAM9X5_WM8731 |
47 | tristate "SoC Audio support for WM8731-based at91sam9x5 board" | 49 | tristate "SoC Audio support for WM8731-based at91sam9x5 board" |
48 | depends on ARCH_AT91 && ATMEL_SSC && SND_ATMEL_SOC | 50 | depends on ARCH_AT91 || COMPILE_TEST |
51 | depends on ATMEL_SSC && SND_ATMEL_SOC && SND_SOC_I2C_AND_SPI | ||
49 | select SND_ATMEL_SOC_SSC | 52 | select SND_ATMEL_SOC_SSC |
50 | select SND_ATMEL_SOC_DMA | 53 | select SND_ATMEL_SOC_DMA |
51 | select SND_SOC_WM8731 | 54 | select SND_SOC_WM8731 |
diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 466a821da98c..b327e5cc8de3 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile | |||
@@ -1,10 +1,8 @@ | |||
1 | # AT91 Platform Support | 1 | # AT91 Platform Support |
2 | snd-soc-atmel-pcm-objs := atmel-pcm.o | ||
3 | snd-soc-atmel-pcm-pdc-objs := atmel-pcm-pdc.o | 2 | snd-soc-atmel-pcm-pdc-objs := atmel-pcm-pdc.o |
4 | snd-soc-atmel-pcm-dma-objs := atmel-pcm-dma.o | 3 | snd-soc-atmel-pcm-dma-objs := atmel-pcm-dma.o |
5 | snd-soc-atmel_ssc_dai-objs := atmel_ssc_dai.o | 4 | snd-soc-atmel_ssc_dai-objs := atmel_ssc_dai.o |
6 | 5 | ||
7 | obj-$(CONFIG_SND_ATMEL_SOC) += snd-soc-atmel-pcm.o | ||
8 | obj-$(CONFIG_SND_ATMEL_SOC_PDC) += snd-soc-atmel-pcm-pdc.o | 6 | obj-$(CONFIG_SND_ATMEL_SOC_PDC) += snd-soc-atmel-pcm-pdc.o |
9 | obj-$(CONFIG_SND_ATMEL_SOC_DMA) += snd-soc-atmel-pcm-dma.o | 7 | obj-$(CONFIG_SND_ATMEL_SOC_DMA) += snd-soc-atmel-pcm-dma.o |
10 | obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o | 8 | obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o |
diff --git a/sound/soc/atmel/atmel-pcm-dma.c b/sound/soc/atmel/atmel-pcm-dma.c index b8e7bad05eb1..b6625c8c411b 100644 --- a/sound/soc/atmel/atmel-pcm-dma.c +++ b/sound/soc/atmel/atmel-pcm-dma.c | |||
@@ -54,7 +54,7 @@ static const struct snd_pcm_hardware atmel_pcm_dma_hardware = { | |||
54 | .period_bytes_max = 2 * 0xffff, /* if 2 bytes format */ | 54 | .period_bytes_max = 2 * 0xffff, /* if 2 bytes format */ |
55 | .periods_min = 8, | 55 | .periods_min = 8, |
56 | .periods_max = 1024, /* no limit */ | 56 | .periods_max = 1024, /* no limit */ |
57 | .buffer_bytes_max = ATMEL_SSC_DMABUF_SIZE, | 57 | .buffer_bytes_max = 512 * 1024, |
58 | }; | 58 | }; |
59 | 59 | ||
60 | /** | 60 | /** |
@@ -119,7 +119,7 @@ static int atmel_pcm_configure_dma(struct snd_pcm_substream *substream, | |||
119 | static const struct snd_dmaengine_pcm_config atmel_dmaengine_pcm_config = { | 119 | static const struct snd_dmaengine_pcm_config atmel_dmaengine_pcm_config = { |
120 | .prepare_slave_config = atmel_pcm_configure_dma, | 120 | .prepare_slave_config = atmel_pcm_configure_dma, |
121 | .pcm_hardware = &atmel_pcm_dma_hardware, | 121 | .pcm_hardware = &atmel_pcm_dma_hardware, |
122 | .prealloc_buffer_size = ATMEL_SSC_DMABUF_SIZE, | 122 | .prealloc_buffer_size = 64 * 1024, |
123 | }; | 123 | }; |
124 | 124 | ||
125 | int atmel_pcm_dma_platform_register(struct device *dev) | 125 | int atmel_pcm_dma_platform_register(struct device *dev) |
diff --git a/sound/soc/atmel/atmel-pcm-pdc.c b/sound/soc/atmel/atmel-pcm-pdc.c index a366b3503c28..da861b44413f 100644 --- a/sound/soc/atmel/atmel-pcm-pdc.c +++ b/sound/soc/atmel/atmel-pcm-pdc.c | |||
@@ -47,6 +47,85 @@ | |||
47 | #include "atmel-pcm.h" | 47 | #include "atmel-pcm.h" |
48 | 48 | ||
49 | 49 | ||
50 | static int atmel_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, | ||
51 | int stream) | ||
52 | { | ||
53 | struct snd_pcm_substream *substream = pcm->streams[stream].substream; | ||
54 | struct snd_dma_buffer *buf = &substream->dma_buffer; | ||
55 | size_t size = ATMEL_SSC_DMABUF_SIZE; | ||
56 | |||
57 | buf->dev.type = SNDRV_DMA_TYPE_DEV; | ||
58 | buf->dev.dev = pcm->card->dev; | ||
59 | buf->private_data = NULL; | ||
60 | buf->area = dma_alloc_coherent(pcm->card->dev, size, | ||
61 | &buf->addr, GFP_KERNEL); | ||
62 | pr_debug("atmel-pcm: alloc dma buffer: area=%p, addr=%p, size=%zu\n", | ||
63 | (void *)buf->area, (void *)(long)buf->addr, size); | ||
64 | |||
65 | if (!buf->area) | ||
66 | return -ENOMEM; | ||
67 | |||
68 | buf->bytes = size; | ||
69 | return 0; | ||
70 | } | ||
71 | |||
72 | static int atmel_pcm_mmap(struct snd_pcm_substream *substream, | ||
73 | struct vm_area_struct *vma) | ||
74 | { | ||
75 | return remap_pfn_range(vma, vma->vm_start, | ||
76 | substream->dma_buffer.addr >> PAGE_SHIFT, | ||
77 | vma->vm_end - vma->vm_start, vma->vm_page_prot); | ||
78 | } | ||
79 | |||
80 | static int atmel_pcm_new(struct snd_soc_pcm_runtime *rtd) | ||
81 | { | ||
82 | struct snd_card *card = rtd->card->snd_card; | ||
83 | struct snd_pcm *pcm = rtd->pcm; | ||
84 | int ret; | ||
85 | |||
86 | ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32)); | ||
87 | if (ret) | ||
88 | return ret; | ||
89 | |||
90 | if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { | ||
91 | pr_debug("atmel-pcm: allocating PCM playback DMA buffer\n"); | ||
92 | ret = atmel_pcm_preallocate_dma_buffer(pcm, | ||
93 | SNDRV_PCM_STREAM_PLAYBACK); | ||
94 | if (ret) | ||
95 | goto out; | ||
96 | } | ||
97 | |||
98 | if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) { | ||
99 | pr_debug("atmel-pcm: allocating PCM capture DMA buffer\n"); | ||
100 | ret = atmel_pcm_preallocate_dma_buffer(pcm, | ||
101 | SNDRV_PCM_STREAM_CAPTURE); | ||
102 | if (ret) | ||
103 | goto out; | ||
104 | } | ||
105 | out: | ||
106 | return ret; | ||
107 | } | ||
108 | |||
109 | static void atmel_pcm_free(struct snd_pcm *pcm) | ||
110 | { | ||
111 | struct snd_pcm_substream *substream; | ||
112 | struct snd_dma_buffer *buf; | ||
113 | int stream; | ||
114 | |||
115 | for (stream = 0; stream < 2; stream++) { | ||
116 | substream = pcm->streams[stream].substream; | ||
117 | if (!substream) | ||
118 | continue; | ||
119 | |||
120 | buf = &substream->dma_buffer; | ||
121 | if (!buf->area) | ||
122 | continue; | ||
123 | dma_free_coherent(pcm->card->dev, buf->bytes, | ||
124 | buf->area, buf->addr); | ||
125 | buf->area = NULL; | ||
126 | } | ||
127 | } | ||
128 | |||
50 | /*--------------------------------------------------------------------------*\ | 129 | /*--------------------------------------------------------------------------*\ |
51 | * Hardware definition | 130 | * Hardware definition |
52 | \*--------------------------------------------------------------------------*/ | 131 | \*--------------------------------------------------------------------------*/ |
diff --git a/sound/soc/atmel/atmel-pcm.c b/sound/soc/atmel/atmel-pcm.c deleted file mode 100644 index 8ae3fa5ac60a..000000000000 --- a/sound/soc/atmel/atmel-pcm.c +++ /dev/null | |||
@@ -1,121 +0,0 @@ | |||
1 | /* | ||
2 | * atmel-pcm.c -- ALSA PCM interface for the Atmel atmel SoC. | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * Copyright (C) 2008 Atmel | ||
6 | * | ||
7 | * Authors: Sedji Gaouaou <sedji.gaouaou@atmel.com> | ||
8 | * | ||
9 | * Based on at91-pcm. by: | ||
10 | * Frank Mandarino <fmandarino@endrelia.com> | ||
11 | * Copyright 2006 Endrelia Technologies Inc. | ||
12 | * | ||
13 | * Based on pxa2xx-pcm.c by: | ||
14 | * | ||
15 | * Author: Nicolas Pitre | ||
16 | * Created: Nov 30, 2004 | ||
17 | * Copyright: (C) 2004 MontaVista Software, Inc. | ||
18 | * | ||
19 | * This program is free software; you can redistribute it and/or modify | ||
20 | * it under the terms of the GNU General Public License as published by | ||
21 | * the Free Software Foundation; either version 2 of the License, or | ||
22 | * (at your option) any later version. | ||
23 | * | ||
24 | * This program is distributed in the hope that it will be useful, | ||
25 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
26 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
27 | * GNU General Public License for more details. | ||
28 | * | ||
29 | * You should have received a copy of the GNU General Public License | ||
30 | * along with this program; if not, write to the Free Software | ||
31 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
32 | */ | ||
33 | |||
34 | #include <linux/module.h> | ||
35 | #include <linux/dma-mapping.h> | ||
36 | #include <sound/pcm.h> | ||
37 | #include <sound/soc.h> | ||
38 | #include "atmel-pcm.h" | ||
39 | |||
40 | static int atmel_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, | ||
41 | int stream) | ||
42 | { | ||
43 | struct snd_pcm_substream *substream = pcm->streams[stream].substream; | ||
44 | struct snd_dma_buffer *buf = &substream->dma_buffer; | ||
45 | size_t size = ATMEL_SSC_DMABUF_SIZE; | ||
46 | |||
47 | buf->dev.type = SNDRV_DMA_TYPE_DEV; | ||
48 | buf->dev.dev = pcm->card->dev; | ||
49 | buf->private_data = NULL; | ||
50 | buf->area = dma_alloc_coherent(pcm->card->dev, size, | ||
51 | &buf->addr, GFP_KERNEL); | ||
52 | pr_debug("atmel-pcm: alloc dma buffer: area=%p, addr=%p, size=%zu\n", | ||
53 | (void *)buf->area, (void *)(long)buf->addr, size); | ||
54 | |||
55 | if (!buf->area) | ||
56 | return -ENOMEM; | ||
57 | |||
58 | buf->bytes = size; | ||
59 | return 0; | ||
60 | } | ||
61 | |||
62 | int atmel_pcm_mmap(struct snd_pcm_substream *substream, | ||
63 | struct vm_area_struct *vma) | ||
64 | { | ||
65 | return remap_pfn_range(vma, vma->vm_start, | ||
66 | substream->dma_buffer.addr >> PAGE_SHIFT, | ||
67 | vma->vm_end - vma->vm_start, vma->vm_page_prot); | ||
68 | } | ||
69 | EXPORT_SYMBOL_GPL(atmel_pcm_mmap); | ||
70 | |||
71 | int atmel_pcm_new(struct snd_soc_pcm_runtime *rtd) | ||
72 | { | ||
73 | struct snd_card *card = rtd->card->snd_card; | ||
74 | struct snd_pcm *pcm = rtd->pcm; | ||
75 | int ret; | ||
76 | |||
77 | ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32)); | ||
78 | if (ret) | ||
79 | return ret; | ||
80 | |||
81 | if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { | ||
82 | pr_debug("atmel-pcm: allocating PCM playback DMA buffer\n"); | ||
83 | ret = atmel_pcm_preallocate_dma_buffer(pcm, | ||
84 | SNDRV_PCM_STREAM_PLAYBACK); | ||
85 | if (ret) | ||
86 | goto out; | ||
87 | } | ||
88 | |||
89 | if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) { | ||
90 | pr_debug("atmel-pcm: allocating PCM capture DMA buffer\n"); | ||
91 | ret = atmel_pcm_preallocate_dma_buffer(pcm, | ||
92 | SNDRV_PCM_STREAM_CAPTURE); | ||
93 | if (ret) | ||
94 | goto out; | ||
95 | } | ||
96 | out: | ||
97 | return ret; | ||
98 | } | ||
99 | EXPORT_SYMBOL_GPL(atmel_pcm_new); | ||
100 | |||
101 | void atmel_pcm_free(struct snd_pcm *pcm) | ||
102 | { | ||
103 | struct snd_pcm_substream *substream; | ||
104 | struct snd_dma_buffer *buf; | ||
105 | int stream; | ||
106 | |||
107 | for (stream = 0; stream < 2; stream++) { | ||
108 | substream = pcm->streams[stream].substream; | ||
109 | if (!substream) | ||
110 | continue; | ||
111 | |||
112 | buf = &substream->dma_buffer; | ||
113 | if (!buf->area) | ||
114 | continue; | ||
115 | dma_free_coherent(pcm->card->dev, buf->bytes, | ||
116 | buf->area, buf->addr); | ||
117 | buf->area = NULL; | ||
118 | } | ||
119 | } | ||
120 | EXPORT_SYMBOL_GPL(atmel_pcm_free); | ||
121 | |||
diff --git a/sound/soc/atmel/atmel-pcm.h b/sound/soc/atmel/atmel-pcm.h index 12ae814eff21..6eaf081cad50 100644 --- a/sound/soc/atmel/atmel-pcm.h +++ b/sound/soc/atmel/atmel-pcm.h | |||
@@ -83,11 +83,6 @@ struct atmel_pcm_dma_params { | |||
83 | #define ssc_readx(base, reg) (__raw_readl((base) + (reg))) | 83 | #define ssc_readx(base, reg) (__raw_readl((base) + (reg))) |
84 | #define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg)) | 84 | #define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg)) |
85 | 85 | ||
86 | int atmel_pcm_new(struct snd_soc_pcm_runtime *rtd); | ||
87 | void atmel_pcm_free(struct snd_pcm *pcm); | ||
88 | int atmel_pcm_mmap(struct snd_pcm_substream *substream, | ||
89 | struct vm_area_struct *vma); | ||
90 | |||
91 | #if defined(CONFIG_SND_ATMEL_SOC_PDC) || \ | 86 | #if defined(CONFIG_SND_ATMEL_SOC_PDC) || \ |
92 | defined(CONFIG_SND_ATMEL_SOC_PDC_MODULE) | 87 | defined(CONFIG_SND_ATMEL_SOC_PDC_MODULE) |
93 | int atmel_pcm_pdc_platform_register(struct device *dev); | 88 | int atmel_pcm_pdc_platform_register(struct device *dev); |
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c index 7895689588da..88ca9cb0ce79 100644 --- a/sound/soc/codecs/ab8500-codec.c +++ b/sound/soc/codecs/ab8500-codec.c | |||
@@ -2003,7 +2003,6 @@ static int ab8500_audio_setup_mics(struct snd_soc_codec *codec, | |||
2003 | 2003 | ||
2004 | return 0; | 2004 | return 0; |
2005 | } | 2005 | } |
2006 | EXPORT_SYMBOL_GPL(ab8500_audio_setup_mics); | ||
2007 | 2006 | ||
2008 | static int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec, | 2007 | static int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec, |
2009 | enum ear_cm_voltage ear_cmv) | 2008 | enum ear_cm_voltage ear_cmv) |
@@ -2036,7 +2035,6 @@ static int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec, | |||
2036 | 2035 | ||
2037 | return 0; | 2036 | return 0; |
2038 | } | 2037 | } |
2039 | EXPORT_SYMBOL_GPL(ab8500_audio_set_ear_cmv); | ||
2040 | 2038 | ||
2041 | static int ab8500_audio_set_bit_delay(struct snd_soc_dai *dai, | 2039 | static int ab8500_audio_set_bit_delay(struct snd_soc_dai *dai, |
2042 | unsigned int delay) | 2040 | unsigned int delay) |
diff --git a/sound/soc/codecs/ak4554.c b/sound/soc/codecs/ak4554.c index 16ce9f9fefa1..298dedc05140 100644 --- a/sound/soc/codecs/ak4554.c +++ b/sound/soc/codecs/ak4554.c | |||
@@ -84,7 +84,7 @@ static int ak4554_soc_remove(struct platform_device *pdev) | |||
84 | return 0; | 84 | return 0; |
85 | } | 85 | } |
86 | 86 | ||
87 | static struct of_device_id ak4554_of_match[] = { | 87 | static const struct of_device_id ak4554_of_match[] = { |
88 | { .compatible = "asahi-kasei,ak4554" }, | 88 | { .compatible = "asahi-kasei,ak4554" }, |
89 | {}, | 89 | {}, |
90 | }; | 90 | }; |
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c index fba80f30de4d..13585e88f597 100644 --- a/sound/soc/codecs/ak4642.c +++ b/sound/soc/codecs/ak4642.c | |||
@@ -97,6 +97,9 @@ | |||
97 | #define PMMP (1 << 2) /* MPWR pin Power Management */ | 97 | #define PMMP (1 << 2) /* MPWR pin Power Management */ |
98 | #define MGAIN0 (1 << 0) /* MIC amp gain*/ | 98 | #define MGAIN0 (1 << 0) /* MIC amp gain*/ |
99 | 99 | ||
100 | /* SG_SL2 */ | ||
101 | #define LOPS (1 << 6) /* Stero Line-out Power Save Mode */ | ||
102 | |||
100 | /* TIMER */ | 103 | /* TIMER */ |
101 | #define ZTM(param) ((param & 0x3) << 4) /* ALC Zero Crossing TimeOut */ | 104 | #define ZTM(param) ((param & 0x3) << 4) /* ALC Zero Crossing TimeOut */ |
102 | #define WTM(param) (((param & 0x4) << 4) | ((param & 0x3) << 2)) | 105 | #define WTM(param) (((param & 0x4) << 4) | ((param & 0x3) << 2)) |
@@ -168,6 +171,29 @@ static const struct snd_kcontrol_new ak4642_lout_mixer_controls[] = { | |||
168 | SOC_DAPM_SINGLE("DACL", SG_SL1, 4, 1, 0), | 171 | SOC_DAPM_SINGLE("DACL", SG_SL1, 4, 1, 0), |
169 | }; | 172 | }; |
170 | 173 | ||
174 | /* event handlers */ | ||
175 | static int ak4642_lout_event(struct snd_soc_dapm_widget *w, | ||
176 | struct snd_kcontrol *kcontrol, int event) | ||
177 | { | ||
178 | struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); | ||
179 | |||
180 | switch (event) { | ||
181 | case SND_SOC_DAPM_PRE_PMD: | ||
182 | case SND_SOC_DAPM_PRE_PMU: | ||
183 | /* Power save mode ON */ | ||
184 | snd_soc_update_bits(codec, SG_SL2, LOPS, LOPS); | ||
185 | break; | ||
186 | case SND_SOC_DAPM_POST_PMU: | ||
187 | case SND_SOC_DAPM_POST_PMD: | ||
188 | /* Power save mode OFF */ | ||
189 | mdelay(300); | ||
190 | snd_soc_update_bits(codec, SG_SL2, LOPS, 0); | ||
191 | break; | ||
192 | } | ||
193 | |||
194 | return 0; | ||
195 | } | ||
196 | |||
171 | static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = { | 197 | static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = { |
172 | 198 | ||
173 | /* Outputs */ | 199 | /* Outputs */ |
@@ -182,12 +208,15 @@ static const struct snd_soc_dapm_widget ak4642_dapm_widgets[] = { | |||
182 | 208 | ||
183 | SND_SOC_DAPM_PGA("DACH", MD_CTL4, 0, 0, NULL, 0), | 209 | SND_SOC_DAPM_PGA("DACH", MD_CTL4, 0, 0, NULL, 0), |
184 | 210 | ||
185 | SND_SOC_DAPM_MIXER("LINEOUT Mixer", PW_MGMT1, 3, 0, | 211 | SND_SOC_DAPM_MIXER_E("LINEOUT Mixer", PW_MGMT1, 3, 0, |
186 | &ak4642_lout_mixer_controls[0], | 212 | &ak4642_lout_mixer_controls[0], |
187 | ARRAY_SIZE(ak4642_lout_mixer_controls)), | 213 | ARRAY_SIZE(ak4642_lout_mixer_controls), |
214 | ak4642_lout_event, | ||
215 | SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | | ||
216 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), | ||
188 | 217 | ||
189 | /* DAC */ | 218 | /* DAC */ |
190 | SND_SOC_DAPM_DAC("DAC", "HiFi Playback", PW_MGMT1, 2, 0), | 219 | SND_SOC_DAPM_DAC("DAC", NULL, PW_MGMT1, 2, 0), |
191 | }; | 220 | }; |
192 | 221 | ||
193 | static const struct snd_soc_dapm_route ak4642_intercon[] = { | 222 | static const struct snd_soc_dapm_route ak4642_intercon[] = { |
@@ -205,6 +234,8 @@ static const struct snd_soc_dapm_route ak4642_intercon[] = { | |||
205 | {"DACH", NULL, "DAC"}, | 234 | {"DACH", NULL, "DAC"}, |
206 | 235 | ||
207 | {"LINEOUT Mixer", "DACL", "DAC"}, | 236 | {"LINEOUT Mixer", "DACL", "DAC"}, |
237 | |||
238 | { "DAC", NULL, "Playback" }, | ||
208 | }; | 239 | }; |
209 | 240 | ||
210 | /* | 241 | /* |
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c index 29202610dd0d..9015b44a9e11 100644 --- a/sound/soc/codecs/arizona.c +++ b/sound/soc/codecs/arizona.c | |||
@@ -1901,7 +1901,7 @@ static int arizona_is_enabled_fll(struct arizona_fll *fll) | |||
1901 | static int arizona_enable_fll(struct arizona_fll *fll) | 1901 | static int arizona_enable_fll(struct arizona_fll *fll) |
1902 | { | 1902 | { |
1903 | struct arizona *arizona = fll->arizona; | 1903 | struct arizona *arizona = fll->arizona; |
1904 | int ret; | 1904 | unsigned long time_left; |
1905 | bool use_sync = false; | 1905 | bool use_sync = false; |
1906 | int already_enabled = arizona_is_enabled_fll(fll); | 1906 | int already_enabled = arizona_is_enabled_fll(fll); |
1907 | struct arizona_fll_cfg cfg; | 1907 | struct arizona_fll_cfg cfg; |
@@ -1977,9 +1977,9 @@ static int arizona_enable_fll(struct arizona_fll *fll) | |||
1977 | regmap_update_bits_async(arizona->regmap, fll->base + 1, | 1977 | regmap_update_bits_async(arizona->regmap, fll->base + 1, |
1978 | ARIZONA_FLL1_FREERUN, 0); | 1978 | ARIZONA_FLL1_FREERUN, 0); |
1979 | 1979 | ||
1980 | ret = wait_for_completion_timeout(&fll->ok, | 1980 | time_left = wait_for_completion_timeout(&fll->ok, |
1981 | msecs_to_jiffies(250)); | 1981 | msecs_to_jiffies(250)); |
1982 | if (ret == 0) | 1982 | if (time_left == 0) |
1983 | arizona_fll_warn(fll, "Timed out waiting for lock\n"); | 1983 | arizona_fll_warn(fll, "Timed out waiting for lock\n"); |
1984 | 1984 | ||
1985 | return 0; | 1985 | return 0; |
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index 6d0fe0ac95a3..0c6d1bc0526e 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -1861,7 +1861,6 @@ static unsigned int wm5102_digital_vu[] = { | |||
1861 | ARIZONA_DAC_DIGITAL_VOLUME_2L, | 1861 | ARIZONA_DAC_DIGITAL_VOLUME_2L, |
1862 | ARIZONA_DAC_DIGITAL_VOLUME_2R, | 1862 | ARIZONA_DAC_DIGITAL_VOLUME_2R, |
1863 | ARIZONA_DAC_DIGITAL_VOLUME_3L, | 1863 | ARIZONA_DAC_DIGITAL_VOLUME_3L, |
1864 | ARIZONA_DAC_DIGITAL_VOLUME_3R, | ||
1865 | ARIZONA_DAC_DIGITAL_VOLUME_4L, | 1864 | ARIZONA_DAC_DIGITAL_VOLUME_4L, |
1866 | ARIZONA_DAC_DIGITAL_VOLUME_4R, | 1865 | ARIZONA_DAC_DIGITAL_VOLUME_4R, |
1867 | ARIZONA_DAC_DIGITAL_VOLUME_5L, | 1866 | ARIZONA_DAC_DIGITAL_VOLUME_5L, |