diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-07-24 14:08:13 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-07-24 14:08:13 -0400 |
commit | 43cbf02e7ad51007af38f39c5b2abdc7a5d7f5aa (patch) | |
tree | 1057babea8807af3f4a3c44fd116b7bbe99eb733 /sound | |
parent | cba59972a1191a0c1647a52fe745eed7a4b34b38 (diff) | |
parent | 996034b117b467709dec7811ef134063934fa626 (diff) |
Merge tag 'asoc-fix-v4.2-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v4.2
A lot of small fixes here, a few to the core:
- Fix for binding DAPM stream widgets on devices with prefixes assigned
to them
- Minor fixes for the newly added topology interfaces
- Locking and memory leak fixes for DAPM
- Driver specific fixes
Diffstat (limited to 'sound')
-rw-r--r-- | sound/core/hrtimer.c | 9 | ||||
-rw-r--r-- | sound/core/memalloc.c | 2 | ||||
-rw-r--r-- | sound/drivers/pcsp/pcsp.c | 17 | ||||
-rw-r--r-- | sound/pci/asihpi/hpioctl.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/pcm1681.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/rt5645.c | 3 | ||||
-rw-r--r-- | sound/soc/codecs/sgtl5000.h | 2 | ||||
-rw-r--r-- | sound/soc/codecs/ssm4567.c | 8 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_ssi.c | 2 | ||||
-rw-r--r-- | sound/soc/intel/Makefile | 2 | ||||
-rw-r--r-- | sound/soc/intel/atom/sst/sst_drv_interface.c | 14 | ||||
-rw-r--r-- | sound/soc/intel/boards/cht_bsw_max98090_ti.c | 4 | ||||
-rw-r--r-- | sound/soc/mediatek/mt8173-max98090.c | 17 | ||||
-rw-r--r-- | sound/soc/mediatek/mt8173-rt5650-rt5676.c | 19 | ||||
-rw-r--r-- | sound/soc/mediatek/mtk-afe-pcm.c | 2 | ||||
-rw-r--r-- | sound/soc/omap/omap-hdmi-audio.c | 12 | ||||
-rw-r--r-- | sound/soc/sh/migor.c | 3 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 1 | ||||
-rw-r--r-- | sound/soc/soc-dapm.c | 35 | ||||
-rw-r--r-- | sound/soc/soc-topology.c | 23 | ||||
-rw-r--r-- | sound/soc/zte/zx296702-i2s.c | 4 | ||||
-rw-r--r-- | sound/soc/zte/zx296702-spdif.c | 4 |
23 files changed, 106 insertions, 82 deletions
diff --git a/sound/core/hrtimer.c b/sound/core/hrtimer.c index 886be7da989d..f845ecf7e172 100644 --- a/sound/core/hrtimer.c +++ b/sound/core/hrtimer.c | |||
@@ -121,16 +121,9 @@ static struct snd_timer *mytimer; | |||
121 | static int __init snd_hrtimer_init(void) | 121 | static int __init snd_hrtimer_init(void) |
122 | { | 122 | { |
123 | struct snd_timer *timer; | 123 | struct snd_timer *timer; |
124 | struct timespec tp; | ||
125 | int err; | 124 | int err; |
126 | 125 | ||
127 | hrtimer_get_res(CLOCK_MONOTONIC, &tp); | 126 | resolution = hrtimer_resolution; |
128 | if (tp.tv_sec > 0 || !tp.tv_nsec) { | ||
129 | pr_err("snd-hrtimer: Invalid resolution %u.%09u", | ||
130 | (unsigned)tp.tv_sec, (unsigned)tp.tv_nsec); | ||
131 | return -EINVAL; | ||
132 | } | ||
133 | resolution = tp.tv_nsec; | ||
134 | 127 | ||
135 | /* Create a new timer and set up the fields */ | 128 | /* Create a new timer and set up the fields */ |
136 | err = snd_timer_global_new("hrtimer", SNDRV_TIMER_GLOBAL_HRTIMER, | 129 | err = snd_timer_global_new("hrtimer", SNDRV_TIMER_GLOBAL_HRTIMER, |
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 082509eb805d..f05cb6a8cbe0 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c | |||
@@ -124,7 +124,7 @@ static void snd_malloc_dev_iram(struct snd_dma_buffer *dmab, size_t size) | |||
124 | dmab->addr = 0; | 124 | dmab->addr = 0; |
125 | 125 | ||
126 | if (dev->of_node) | 126 | if (dev->of_node) |
127 | pool = of_get_named_gen_pool(dev->of_node, "iram", 0); | 127 | pool = of_gen_pool_get(dev->of_node, "iram", 0); |
128 | 128 | ||
129 | if (!pool) | 129 | if (!pool) |
130 | return; | 130 | return; |
diff --git a/sound/drivers/pcsp/pcsp.c b/sound/drivers/pcsp/pcsp.c index d9647bd84d0f..27e25bb78c97 100644 --- a/sound/drivers/pcsp/pcsp.c +++ b/sound/drivers/pcsp/pcsp.c | |||
@@ -42,16 +42,13 @@ struct snd_pcsp pcsp_chip; | |||
42 | static int snd_pcsp_create(struct snd_card *card) | 42 | static int snd_pcsp_create(struct snd_card *card) |
43 | { | 43 | { |
44 | static struct snd_device_ops ops = { }; | 44 | static struct snd_device_ops ops = { }; |
45 | struct timespec tp; | 45 | unsigned int resolution = hrtimer_resolution; |
46 | int err; | 46 | int err, div, min_div, order; |
47 | int div, min_div, order; | ||
48 | |||
49 | hrtimer_get_res(CLOCK_MONOTONIC, &tp); | ||
50 | 47 | ||
51 | if (!nopcm) { | 48 | if (!nopcm) { |
52 | if (tp.tv_sec || tp.tv_nsec > PCSP_MAX_PERIOD_NS) { | 49 | if (resolution > PCSP_MAX_PERIOD_NS) { |
53 | printk(KERN_ERR "PCSP: Timer resolution is not sufficient " | 50 | printk(KERN_ERR "PCSP: Timer resolution is not sufficient " |
54 | "(%linS)\n", tp.tv_nsec); | 51 | "(%unS)\n", resolution); |
55 | printk(KERN_ERR "PCSP: Make sure you have HPET and ACPI " | 52 | printk(KERN_ERR "PCSP: Make sure you have HPET and ACPI " |
56 | "enabled.\n"); | 53 | "enabled.\n"); |
57 | printk(KERN_ERR "PCSP: Turned into nopcm mode.\n"); | 54 | printk(KERN_ERR "PCSP: Turned into nopcm mode.\n"); |
@@ -59,13 +56,13 @@ static int snd_pcsp_create(struct snd_card *card) | |||
59 | } | 56 | } |
60 | } | 57 | } |
61 | 58 | ||
62 | if (loops_per_jiffy >= PCSP_MIN_LPJ && tp.tv_nsec <= PCSP_MIN_PERIOD_NS) | 59 | if (loops_per_jiffy >= PCSP_MIN_LPJ && resolution <= PCSP_MIN_PERIOD_NS) |
63 | min_div = MIN_DIV; | 60 | min_div = MIN_DIV; |
64 | else | 61 | else |
65 | min_div = MAX_DIV; | 62 | min_div = MAX_DIV; |
66 | #if PCSP_DEBUG | 63 | #if PCSP_DEBUG |
67 | printk(KERN_DEBUG "PCSP: lpj=%li, min_div=%i, res=%li\n", | 64 | printk(KERN_DEBUG "PCSP: lpj=%li, min_div=%i, res=%u\n", |
68 | loops_per_jiffy, min_div, tp.tv_nsec); | 65 | loops_per_jiffy, min_div, resolution); |
69 | #endif | 66 | #endif |
70 | 67 | ||
71 | div = MAX_DIV / min_div; | 68 | div = MAX_DIV / min_div; |
diff --git a/sound/pci/asihpi/hpioctl.c b/sound/pci/asihpi/hpioctl.c index 6610bd096fc9..d17937b92331 100644 --- a/sound/pci/asihpi/hpioctl.c +++ b/sound/pci/asihpi/hpioctl.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/pci.h> | 32 | #include <linux/pci.h> |
33 | #include <linux/stringify.h> | 33 | #include <linux/stringify.h> |
34 | #include <linux/module.h> | 34 | #include <linux/module.h> |
35 | #include <linux/vmalloc.h> | ||
35 | 36 | ||
36 | #ifdef MODULE_FIRMWARE | 37 | #ifdef MODULE_FIRMWARE |
37 | MODULE_FIRMWARE("asihpi/dsp5000.bin"); | 38 | MODULE_FIRMWARE("asihpi/dsp5000.bin"); |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index f581b12211e8..735bdcb04ce8 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -171,7 +171,7 @@ MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode " | |||
171 | 171 | ||
172 | #ifdef CONFIG_PM | 172 | #ifdef CONFIG_PM |
173 | static int param_set_xint(const char *val, const struct kernel_param *kp); | 173 | static int param_set_xint(const char *val, const struct kernel_param *kp); |
174 | static struct kernel_param_ops param_ops_xint = { | 174 | static const struct kernel_param_ops param_ops_xint = { |
175 | .set = param_set_xint, | 175 | .set = param_set_xint, |
176 | .get = param_get_int, | 176 | .get = param_get_int, |
177 | }; | 177 | }; |
diff --git a/sound/soc/codecs/pcm1681.c b/sound/soc/codecs/pcm1681.c index 477e13d30971..e7ba557979cb 100644 --- a/sound/soc/codecs/pcm1681.c +++ b/sound/soc/codecs/pcm1681.c | |||
@@ -102,7 +102,7 @@ static int pcm1681_set_deemph(struct snd_soc_codec *codec) | |||
102 | 102 | ||
103 | if (val != -1) { | 103 | if (val != -1) { |
104 | regmap_update_bits(priv->regmap, PCM1681_DEEMPH_CONTROL, | 104 | regmap_update_bits(priv->regmap, PCM1681_DEEMPH_CONTROL, |
105 | PCM1681_DEEMPH_RATE_MASK, val); | 105 | PCM1681_DEEMPH_RATE_MASK, val << 3); |
106 | enable = 1; | 106 | enable = 1; |
107 | } else | 107 | } else |
108 | enable = 0; | 108 | enable = 0; |
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c index 9ce311e088fc..e9cc3aae5366 100644 --- a/sound/soc/codecs/rt5645.c +++ b/sound/soc/codecs/rt5645.c | |||
@@ -2943,6 +2943,9 @@ static int rt5645_irq_detection(struct rt5645_priv *rt5645) | |||
2943 | { | 2943 | { |
2944 | int val, btn_type, gpio_state = 0, report = 0; | 2944 | int val, btn_type, gpio_state = 0, report = 0; |
2945 | 2945 | ||
2946 | if (!rt5645->codec) | ||
2947 | return -EINVAL; | ||
2948 | |||
2946 | switch (rt5645->pdata.jd_mode) { | 2949 | switch (rt5645->pdata.jd_mode) { |
2947 | case 0: /* Not using rt5645 JD */ | 2950 | case 0: /* Not using rt5645 JD */ |
2948 | if (rt5645->gpiod_hp_det) { | 2951 | if (rt5645->gpiod_hp_det) { |
diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h index bd7a344bf8c5..1c317de26176 100644 --- a/sound/soc/codecs/sgtl5000.h +++ b/sound/soc/codecs/sgtl5000.h | |||
@@ -275,7 +275,7 @@ | |||
275 | #define SGTL5000_BIAS_CTRL_MASK 0x000e | 275 | #define SGTL5000_BIAS_CTRL_MASK 0x000e |
276 | #define SGTL5000_BIAS_CTRL_SHIFT 1 | 276 | #define SGTL5000_BIAS_CTRL_SHIFT 1 |
277 | #define SGTL5000_BIAS_CTRL_WIDTH 3 | 277 | #define SGTL5000_BIAS_CTRL_WIDTH 3 |
278 | #define SGTL5000_SMALL_POP 0 | 278 | #define SGTL5000_SMALL_POP 1 |
279 | 279 | ||
280 | /* | 280 | /* |
281 | * SGTL5000_CHIP_MIC_CTRL | 281 | * SGTL5000_CHIP_MIC_CTRL |
diff --git a/sound/soc/codecs/ssm4567.c b/sound/soc/codecs/ssm4567.c index 938d2cb6d78b..84a4f5ad8064 100644 --- a/sound/soc/codecs/ssm4567.c +++ b/sound/soc/codecs/ssm4567.c | |||
@@ -315,7 +315,13 @@ static int ssm4567_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) | |||
315 | if (invert_fclk) | 315 | if (invert_fclk) |
316 | ctrl1 |= SSM4567_SAI_CTRL_1_FSYNC; | 316 | ctrl1 |= SSM4567_SAI_CTRL_1_FSYNC; |
317 | 317 | ||
318 | return regmap_write(ssm4567->regmap, SSM4567_REG_SAI_CTRL_1, ctrl1); | 318 | return regmap_update_bits(ssm4567->regmap, SSM4567_REG_SAI_CTRL_1, |
319 | SSM4567_SAI_CTRL_1_BCLK | | ||
320 | SSM4567_SAI_CTRL_1_FSYNC | | ||
321 | SSM4567_SAI_CTRL_1_LJ | | ||
322 | SSM4567_SAI_CTRL_1_TDM | | ||
323 | SSM4567_SAI_CTRL_1_PDM, | ||
324 | ctrl1); | ||
319 | } | 325 | } |
320 | 326 | ||
321 | static int ssm4567_set_power(struct ssm4567 *ssm4567, bool enable) | 327 | static int ssm4567_set_power(struct ssm4567 *ssm4567, bool enable) |
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c index c7647e066cfd..c0b940e2019f 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c | |||
@@ -633,7 +633,7 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, | |||
633 | sub *= 100000; | 633 | sub *= 100000; |
634 | do_div(sub, freq); | 634 | do_div(sub, freq); |
635 | 635 | ||
636 | if (sub < savesub) { | 636 | if (sub < savesub && !(i == 0 && psr == 0 && div2 == 0)) { |
637 | baudrate = tmprate; | 637 | baudrate = tmprate; |
638 | savesub = sub; | 638 | savesub = sub; |
639 | pm = i; | 639 | pm = i; |
diff --git a/sound/soc/intel/Makefile b/sound/soc/intel/Makefile index 3853ec2ddbc7..6de5d5cd3280 100644 --- a/sound/soc/intel/Makefile +++ b/sound/soc/intel/Makefile | |||
@@ -7,4 +7,4 @@ obj-$(CONFIG_SND_SOC_INTEL_BAYTRAIL) += baytrail/ | |||
7 | obj-$(CONFIG_SND_SST_MFLD_PLATFORM) += atom/ | 7 | obj-$(CONFIG_SND_SST_MFLD_PLATFORM) += atom/ |
8 | 8 | ||
9 | # Machine support | 9 | # Machine support |
10 | obj-$(CONFIG_SND_SOC_INTEL_SST) += boards/ | 10 | obj-$(CONFIG_SND_SOC) += boards/ |
diff --git a/sound/soc/intel/atom/sst/sst_drv_interface.c b/sound/soc/intel/atom/sst/sst_drv_interface.c index 620da1d1b9e3..0e0e4d9c021f 100644 --- a/sound/soc/intel/atom/sst/sst_drv_interface.c +++ b/sound/soc/intel/atom/sst/sst_drv_interface.c | |||
@@ -42,6 +42,11 @@ | |||
42 | #define MIN_FRAGMENT_SIZE (50 * 1024) | 42 | #define MIN_FRAGMENT_SIZE (50 * 1024) |
43 | #define MAX_FRAGMENT_SIZE (1024 * 1024) | 43 | #define MAX_FRAGMENT_SIZE (1024 * 1024) |
44 | #define SST_GET_BYTES_PER_SAMPLE(pcm_wd_sz) (((pcm_wd_sz + 15) >> 4) << 1) | 44 | #define SST_GET_BYTES_PER_SAMPLE(pcm_wd_sz) (((pcm_wd_sz + 15) >> 4) << 1) |
45 | #ifdef CONFIG_PM | ||
46 | #define GET_USAGE_COUNT(dev) (atomic_read(&dev->power.usage_count)) | ||
47 | #else | ||
48 | #define GET_USAGE_COUNT(dev) 1 | ||
49 | #endif | ||
45 | 50 | ||
46 | int free_stream_context(struct intel_sst_drv *ctx, unsigned int str_id) | 51 | int free_stream_context(struct intel_sst_drv *ctx, unsigned int str_id) |
47 | { | 52 | { |
@@ -141,15 +146,9 @@ static int sst_power_control(struct device *dev, bool state) | |||
141 | int ret = 0; | 146 | int ret = 0; |
142 | int usage_count = 0; | 147 | int usage_count = 0; |
143 | 148 | ||
144 | #ifdef CONFIG_PM | ||
145 | usage_count = atomic_read(&dev->power.usage_count); | ||
146 | #else | ||
147 | usage_count = 1; | ||
148 | #endif | ||
149 | |||
150 | if (state == true) { | 149 | if (state == true) { |
151 | ret = pm_runtime_get_sync(dev); | 150 | ret = pm_runtime_get_sync(dev); |
152 | 151 | usage_count = GET_USAGE_COUNT(dev); | |
153 | dev_dbg(ctx->dev, "Enable: pm usage count: %d\n", usage_count); | 152 | dev_dbg(ctx->dev, "Enable: pm usage count: %d\n", usage_count); |
154 | if (ret < 0) { | 153 | if (ret < 0) { |
155 | dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret); | 154 | dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret); |
@@ -164,6 +163,7 @@ static int sst_power_control(struct device *dev, bool state) | |||
164 | } | 163 | } |
165 | } | 164 | } |
166 | } else { | 165 | } else { |
166 | usage_count = GET_USAGE_COUNT(dev); | ||
167 | dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", usage_count); | 167 | dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", usage_count); |
168 | return sst_pm_runtime_put(ctx); | 168 | return sst_pm_runtime_put(ctx); |
169 | } | 169 | } |
diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c index d604ee80eda4..70f832114a5a 100644 --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c | |||
@@ -69,12 +69,12 @@ static const struct snd_soc_dapm_route cht_audio_map[] = { | |||
69 | {"Headphone", NULL, "HPR"}, | 69 | {"Headphone", NULL, "HPR"}, |
70 | {"Ext Spk", NULL, "SPKL"}, | 70 | {"Ext Spk", NULL, "SPKL"}, |
71 | {"Ext Spk", NULL, "SPKR"}, | 71 | {"Ext Spk", NULL, "SPKR"}, |
72 | {"AIF1 Playback", NULL, "ssp2 Tx"}, | 72 | {"HiFi Playback", NULL, "ssp2 Tx"}, |
73 | {"ssp2 Tx", NULL, "codec_out0"}, | 73 | {"ssp2 Tx", NULL, "codec_out0"}, |
74 | {"ssp2 Tx", NULL, "codec_out1"}, | 74 | {"ssp2 Tx", NULL, "codec_out1"}, |
75 | {"codec_in0", NULL, "ssp2 Rx" }, | 75 | {"codec_in0", NULL, "ssp2 Rx" }, |
76 | {"codec_in1", NULL, "ssp2 Rx" }, | 76 | {"codec_in1", NULL, "ssp2 Rx" }, |
77 | {"ssp2 Rx", NULL, "AIF1 Capture"}, | 77 | {"ssp2 Rx", NULL, "HiFi Capture"}, |
78 | }; | 78 | }; |
79 | 79 | ||
80 | static const struct snd_kcontrol_new cht_mc_controls[] = { | 80 | static const struct snd_kcontrol_new cht_mc_controls[] = { |
diff --git a/sound/soc/mediatek/mt8173-max98090.c b/sound/soc/mediatek/mt8173-max98090.c index 4d44b5803e55..2d2536af141f 100644 --- a/sound/soc/mediatek/mt8173-max98090.c +++ b/sound/soc/mediatek/mt8173-max98090.c | |||
@@ -103,7 +103,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { | |||
103 | .name = "MAX98090 Playback", | 103 | .name = "MAX98090 Playback", |
104 | .stream_name = "MAX98090 Playback", | 104 | .stream_name = "MAX98090 Playback", |
105 | .cpu_dai_name = "DL1", | 105 | .cpu_dai_name = "DL1", |
106 | .platform_name = "11220000.mt8173-afe-pcm", | ||
107 | .codec_name = "snd-soc-dummy", | 106 | .codec_name = "snd-soc-dummy", |
108 | .codec_dai_name = "snd-soc-dummy-dai", | 107 | .codec_dai_name = "snd-soc-dummy-dai", |
109 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, | 108 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
@@ -114,7 +113,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { | |||
114 | .name = "MAX98090 Capture", | 113 | .name = "MAX98090 Capture", |
115 | .stream_name = "MAX98090 Capture", | 114 | .stream_name = "MAX98090 Capture", |
116 | .cpu_dai_name = "VUL", | 115 | .cpu_dai_name = "VUL", |
117 | .platform_name = "11220000.mt8173-afe-pcm", | ||
118 | .codec_name = "snd-soc-dummy", | 116 | .codec_name = "snd-soc-dummy", |
119 | .codec_dai_name = "snd-soc-dummy-dai", | 117 | .codec_dai_name = "snd-soc-dummy-dai", |
120 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, | 118 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
@@ -125,7 +123,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { | |||
125 | { | 123 | { |
126 | .name = "Codec", | 124 | .name = "Codec", |
127 | .cpu_dai_name = "I2S", | 125 | .cpu_dai_name = "I2S", |
128 | .platform_name = "11220000.mt8173-afe-pcm", | ||
129 | .no_pcm = 1, | 126 | .no_pcm = 1, |
130 | .codec_dai_name = "HiFi", | 127 | .codec_dai_name = "HiFi", |
131 | .init = mt8173_max98090_init, | 128 | .init = mt8173_max98090_init, |
@@ -152,9 +149,21 @@ static struct snd_soc_card mt8173_max98090_card = { | |||
152 | static int mt8173_max98090_dev_probe(struct platform_device *pdev) | 149 | static int mt8173_max98090_dev_probe(struct platform_device *pdev) |
153 | { | 150 | { |
154 | struct snd_soc_card *card = &mt8173_max98090_card; | 151 | struct snd_soc_card *card = &mt8173_max98090_card; |
155 | struct device_node *codec_node; | 152 | struct device_node *codec_node, *platform_node; |
156 | int ret, i; | 153 | int ret, i; |
157 | 154 | ||
155 | platform_node = of_parse_phandle(pdev->dev.of_node, | ||
156 | "mediatek,platform", 0); | ||
157 | if (!platform_node) { | ||
158 | dev_err(&pdev->dev, "Property 'platform' missing or invalid\n"); | ||
159 | return -EINVAL; | ||
160 | } | ||
161 | for (i = 0; i < card->num_links; i++) { | ||
162 | if (mt8173_max98090_dais[i].platform_name) | ||
163 | continue; | ||
164 | mt8173_max98090_dais[i].platform_of_node = platform_node; | ||
165 | } | ||
166 | |||
158 | codec_node = of_parse_phandle(pdev->dev.of_node, | 167 | codec_node = of_parse_phandle(pdev->dev.of_node, |
159 | "mediatek,audio-codec", 0); | 168 | "mediatek,audio-codec", 0); |
160 | if (!codec_node) { | 169 | if (!codec_node) { |
diff --git a/sound/soc/mediatek/mt8173-rt5650-rt5676.c b/sound/soc/mediatek/mt8173-rt5650-rt5676.c index 094055323059..6f52eca05e26 100644 --- a/sound/soc/mediatek/mt8173-rt5650-rt5676.c +++ b/sound/soc/mediatek/mt8173-rt5650-rt5676.c | |||
@@ -138,7 +138,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { | |||
138 | .name = "rt5650_rt5676 Playback", | 138 | .name = "rt5650_rt5676 Playback", |
139 | .stream_name = "rt5650_rt5676 Playback", | 139 | .stream_name = "rt5650_rt5676 Playback", |
140 | .cpu_dai_name = "DL1", | 140 | .cpu_dai_name = "DL1", |
141 | .platform_name = "11220000.mt8173-afe-pcm", | ||
142 | .codec_name = "snd-soc-dummy", | 141 | .codec_name = "snd-soc-dummy", |
143 | .codec_dai_name = "snd-soc-dummy-dai", | 142 | .codec_dai_name = "snd-soc-dummy-dai", |
144 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, | 143 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
@@ -149,7 +148,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { | |||
149 | .name = "rt5650_rt5676 Capture", | 148 | .name = "rt5650_rt5676 Capture", |
150 | .stream_name = "rt5650_rt5676 Capture", | 149 | .stream_name = "rt5650_rt5676 Capture", |
151 | .cpu_dai_name = "VUL", | 150 | .cpu_dai_name = "VUL", |
152 | .platform_name = "11220000.mt8173-afe-pcm", | ||
153 | .codec_name = "snd-soc-dummy", | 151 | .codec_name = "snd-soc-dummy", |
154 | .codec_dai_name = "snd-soc-dummy-dai", | 152 | .codec_dai_name = "snd-soc-dummy-dai", |
155 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, | 153 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
@@ -161,7 +159,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { | |||
161 | { | 159 | { |
162 | .name = "Codec", | 160 | .name = "Codec", |
163 | .cpu_dai_name = "I2S", | 161 | .cpu_dai_name = "I2S", |
164 | .platform_name = "11220000.mt8173-afe-pcm", | ||
165 | .no_pcm = 1, | 162 | .no_pcm = 1, |
166 | .codecs = mt8173_rt5650_rt5676_codecs, | 163 | .codecs = mt8173_rt5650_rt5676_codecs, |
167 | .num_codecs = 2, | 164 | .num_codecs = 2, |
@@ -209,7 +206,21 @@ static struct snd_soc_card mt8173_rt5650_rt5676_card = { | |||
209 | static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev) | 206 | static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev) |
210 | { | 207 | { |
211 | struct snd_soc_card *card = &mt8173_rt5650_rt5676_card; | 208 | struct snd_soc_card *card = &mt8173_rt5650_rt5676_card; |
212 | int ret; | 209 | struct device_node *platform_node; |
210 | int i, ret; | ||
211 | |||
212 | platform_node = of_parse_phandle(pdev->dev.of_node, | ||
213 | "mediatek,platform", 0); | ||
214 | if (!platform_node) { | ||
215 | dev_err(&pdev->dev, "Property 'platform' missing or invalid\n"); | ||
216 | return -EINVAL; | ||
217 | } | ||
218 | |||
219 | for (i = 0; i < card->num_links; i++) { | ||
220 | if (mt8173_rt5650_rt5676_dais[i].platform_name) | ||
221 | continue; | ||
222 | mt8173_rt5650_rt5676_dais[i].platform_of_node = platform_node; | ||
223 | } | ||
213 | 224 | ||
214 | mt8173_rt5650_rt5676_codecs[0].of_node = | 225 | mt8173_rt5650_rt5676_codecs[0].of_node = |
215 | of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0); | 226 | of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0); |
diff --git a/sound/soc/mediatek/mtk-afe-pcm.c b/sound/soc/mediatek/mtk-afe-pcm.c index cc228db5fb76..9863da73dfe0 100644 --- a/sound/soc/mediatek/mtk-afe-pcm.c +++ b/sound/soc/mediatek/mtk-afe-pcm.c | |||
@@ -1199,6 +1199,8 @@ err_pm_disable: | |||
1199 | static int mtk_afe_pcm_dev_remove(struct platform_device *pdev) | 1199 | static int mtk_afe_pcm_dev_remove(struct platform_device *pdev) |
1200 | { | 1200 | { |
1201 | pm_runtime_disable(&pdev->dev); | 1201 | pm_runtime_disable(&pdev->dev); |
1202 | if (!pm_runtime_status_suspended(&pdev->dev)) | ||
1203 | mtk_afe_runtime_suspend(&pdev->dev); | ||
1202 | snd_soc_unregister_component(&pdev->dev); | 1204 | snd_soc_unregister_component(&pdev->dev); |
1203 | snd_soc_unregister_platform(&pdev->dev); | 1205 | snd_soc_unregister_platform(&pdev->dev); |
1204 | return 0; | 1206 | return 0; |
diff --git a/sound/soc/omap/omap-hdmi-audio.c b/sound/soc/omap/omap-hdmi-audio.c index 4775da4c4db5..aeef25c0cb3d 100644 --- a/sound/soc/omap/omap-hdmi-audio.c +++ b/sound/soc/omap/omap-hdmi-audio.c | |||
@@ -210,16 +210,18 @@ static int hdmi_dai_hw_params(struct snd_pcm_substream *substream, | |||
210 | 210 | ||
211 | cea->db3 = 0; /* not used, all zeros */ | 211 | cea->db3 = 0; /* not used, all zeros */ |
212 | 212 | ||
213 | /* | ||
214 | * The OMAP HDMI IP requires to use the 8-channel channel code when | ||
215 | * transmitting more than two channels. | ||
216 | */ | ||
217 | if (params_channels(params) == 2) | 213 | if (params_channels(params) == 2) |
218 | cea->db4_ca = 0x0; | 214 | cea->db4_ca = 0x0; |
215 | else if (params_channels(params) == 6) | ||
216 | cea->db4_ca = 0xb; | ||
219 | else | 217 | else |
220 | cea->db4_ca = 0x13; | 218 | cea->db4_ca = 0x13; |
221 | 219 | ||
222 | cea->db5_dminh_lsv = CEA861_AUDIO_INFOFRAME_DB5_DM_INH_PROHIBITED; | 220 | if (cea->db4_ca == 0x00) |
221 | cea->db5_dminh_lsv = CEA861_AUDIO_INFOFRAME_DB5_DM_INH_PERMITTED; | ||
222 | else | ||
223 | cea->db5_dminh_lsv = CEA861_AUDIO_INFOFRAME_DB5_DM_INH_PROHIBITED; | ||
224 | |||
223 | /* the expression is trivial but makes clear what we are doing */ | 225 | /* the expression is trivial but makes clear what we are doing */ |
224 | cea->db5_dminh_lsv |= (0 & CEA861_AUDIO_INFOFRAME_DB5_LSV); | 226 | cea->db5_dminh_lsv |= (0 & CEA861_AUDIO_INFOFRAME_DB5_LSV); |
225 | 227 | ||
diff --git a/sound/soc/sh/migor.c b/sound/soc/sh/migor.c index 82f582344fe7..672bcd4c252b 100644 --- a/sound/soc/sh/migor.c +++ b/sound/soc/sh/migor.c | |||
@@ -162,12 +162,11 @@ static int __init migor_init(void) | |||
162 | if (ret < 0) | 162 | if (ret < 0) |
163 | return ret; | 163 | return ret; |
164 | 164 | ||
165 | siumckb_lookup = clkdev_alloc(&siumckb_clk, "siumckb_clk", NULL); | 165 | siumckb_lookup = clkdev_create(&siumckb_clk, "siumckb_clk", NULL); |
166 | if (!siumckb_lookup) { | 166 | if (!siumckb_lookup) { |
167 | ret = -ENOMEM; | 167 | ret = -ENOMEM; |
168 | goto eclkdevalloc; | 168 | goto eclkdevalloc; |
169 | } | 169 | } |
170 | clkdev_add(siumckb_lookup); | ||
171 | 170 | ||
172 | /* Port number used on this machine: port B */ | 171 | /* Port number used on this machine: port B */ |
173 | migor_snd_device = platform_device_alloc("soc-audio", 1); | 172 | migor_snd_device = platform_device_alloc("soc-audio", 1); |
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 3a4a5c0e3f97..0e1e69c7abd5 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -1716,6 +1716,7 @@ card_probe_error: | |||
1716 | if (card->remove) | 1716 | if (card->remove) |
1717 | card->remove(card); | 1717 | card->remove(card); |
1718 | 1718 | ||
1719 | snd_soc_dapm_free(&card->dapm); | ||
1719 | soc_cleanup_card_debugfs(card); | 1720 | soc_cleanup_card_debugfs(card); |
1720 | snd_card_free(card->snd_card); | 1721 | snd_card_free(card->snd_card); |
1721 | 1722 | ||
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index aa327c92480c..e0de8072c514 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -358,9 +358,10 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, | |||
358 | data->widget = | 358 | data->widget = |
359 | snd_soc_dapm_new_control_unlocked(widget->dapm, | 359 | snd_soc_dapm_new_control_unlocked(widget->dapm, |
360 | &template); | 360 | &template); |
361 | kfree(name); | ||
361 | if (!data->widget) { | 362 | if (!data->widget) { |
362 | ret = -ENOMEM; | 363 | ret = -ENOMEM; |
363 | goto err_name; | 364 | goto err_data; |
364 | } | 365 | } |
365 | } | 366 | } |
366 | break; | 367 | break; |
@@ -389,11 +390,12 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, | |||
389 | 390 | ||
390 | data->value = template.on_val; | 391 | data->value = template.on_val; |
391 | 392 | ||
392 | data->widget = snd_soc_dapm_new_control(widget->dapm, | 393 | data->widget = snd_soc_dapm_new_control_unlocked( |
393 | &template); | 394 | widget->dapm, &template); |
395 | kfree(name); | ||
394 | if (!data->widget) { | 396 | if (!data->widget) { |
395 | ret = -ENOMEM; | 397 | ret = -ENOMEM; |
396 | goto err_name; | 398 | goto err_data; |
397 | } | 399 | } |
398 | 400 | ||
399 | snd_soc_dapm_add_path(widget->dapm, data->widget, | 401 | snd_soc_dapm_add_path(widget->dapm, data->widget, |
@@ -408,8 +410,6 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, | |||
408 | 410 | ||
409 | return 0; | 411 | return 0; |
410 | 412 | ||
411 | err_name: | ||
412 | kfree(name); | ||
413 | err_data: | 413 | err_data: |
414 | kfree(data); | 414 | kfree(data); |
415 | return ret; | 415 | return ret; |
@@ -418,8 +418,6 @@ err_data: | |||
418 | static void dapm_kcontrol_free(struct snd_kcontrol *kctl) | 418 | static void dapm_kcontrol_free(struct snd_kcontrol *kctl) |
419 | { | 419 | { |
420 | struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl); | 420 | struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl); |
421 | if (data->widget) | ||
422 | kfree(data->widget->name); | ||
423 | kfree(data->wlist); | 421 | kfree(data->wlist); |
424 | kfree(data); | 422 | kfree(data); |
425 | } | 423 | } |
@@ -1952,6 +1950,7 @@ static ssize_t dapm_widget_power_read_file(struct file *file, | |||
1952 | size_t count, loff_t *ppos) | 1950 | size_t count, loff_t *ppos) |
1953 | { | 1951 | { |
1954 | struct snd_soc_dapm_widget *w = file->private_data; | 1952 | struct snd_soc_dapm_widget *w = file->private_data; |
1953 | struct snd_soc_card *card = w->dapm->card; | ||
1955 | char *buf; | 1954 | char *buf; |
1956 | int in, out; | 1955 | int in, out; |
1957 | ssize_t ret; | 1956 | ssize_t ret; |
@@ -1961,6 +1960,8 @@ static ssize_t dapm_widget_power_read_file(struct file *file, | |||
1961 | if (!buf) | 1960 | if (!buf) |
1962 | return -ENOMEM; | 1961 | return -ENOMEM; |
1963 | 1962 | ||
1963 | mutex_lock(&card->dapm_mutex); | ||
1964 | |||
1964 | /* Supply widgets are not handled by is_connected_{input,output}_ep() */ | 1965 | /* Supply widgets are not handled by is_connected_{input,output}_ep() */ |
1965 | if (w->is_supply) { | 1966 | if (w->is_supply) { |
1966 | in = 0; | 1967 | in = 0; |
@@ -2007,6 +2008,8 @@ static ssize_t dapm_widget_power_read_file(struct file *file, | |||
2007 | p->sink->name); | 2008 | p->sink->name); |
2008 | } | 2009 | } |
2009 | 2010 | ||
2011 | mutex_unlock(&card->dapm_mutex); | ||
2012 | |||
2010 | ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); | 2013 | ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); |
2011 | 2014 | ||
2012 | kfree(buf); | 2015 | kfree(buf); |
@@ -2281,11 +2284,15 @@ static ssize_t dapm_widget_show(struct device *dev, | |||
2281 | struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); | 2284 | struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); |
2282 | int i, count = 0; | 2285 | int i, count = 0; |
2283 | 2286 | ||
2287 | mutex_lock(&rtd->card->dapm_mutex); | ||
2288 | |||
2284 | for (i = 0; i < rtd->num_codecs; i++) { | 2289 | for (i = 0; i < rtd->num_codecs; i++) { |
2285 | struct snd_soc_codec *codec = rtd->codec_dais[i]->codec; | 2290 | struct snd_soc_codec *codec = rtd->codec_dais[i]->codec; |
2286 | count += dapm_widget_show_codec(codec, buf + count); | 2291 | count += dapm_widget_show_codec(codec, buf + count); |
2287 | } | 2292 | } |
2288 | 2293 | ||
2294 | mutex_unlock(&rtd->card->dapm_mutex); | ||
2295 | |||
2289 | return count; | 2296 | return count; |
2290 | } | 2297 | } |
2291 | 2298 | ||
@@ -3334,16 +3341,10 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, | |||
3334 | } | 3341 | } |
3335 | 3342 | ||
3336 | prefix = soc_dapm_prefix(dapm); | 3343 | prefix = soc_dapm_prefix(dapm); |
3337 | if (prefix) { | 3344 | if (prefix) |
3338 | w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name); | 3345 | w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name); |
3339 | if (widget->sname) | 3346 | else |
3340 | w->sname = kasprintf(GFP_KERNEL, "%s %s", prefix, | ||
3341 | widget->sname); | ||
3342 | } else { | ||
3343 | w->name = kasprintf(GFP_KERNEL, "%s", widget->name); | 3347 | w->name = kasprintf(GFP_KERNEL, "%s", widget->name); |
3344 | if (widget->sname) | ||
3345 | w->sname = kasprintf(GFP_KERNEL, "%s", widget->sname); | ||
3346 | } | ||
3347 | if (w->name == NULL) { | 3348 | if (w->name == NULL) { |
3348 | kfree(w); | 3349 | kfree(w); |
3349 | return NULL; | 3350 | return NULL; |
@@ -3792,7 +3793,7 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) | |||
3792 | break; | 3793 | break; |
3793 | } | 3794 | } |
3794 | 3795 | ||
3795 | if (!w->sname || !strstr(w->sname, dai_w->name)) | 3796 | if (!w->sname || !strstr(w->sname, dai_w->sname)) |
3796 | continue; | 3797 | continue; |
3797 | 3798 | ||
3798 | if (dai_w->id == snd_soc_dapm_dai_in) { | 3799 | if (dai_w->id == snd_soc_dapm_dai_in) { |
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index d0960683c409..59ac211f8fe7 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c | |||
@@ -144,7 +144,7 @@ static const struct snd_soc_tplg_kcontrol_ops io_ops[] = { | |||
144 | {SND_SOC_TPLG_CTL_STROBE, snd_soc_get_strobe, | 144 | {SND_SOC_TPLG_CTL_STROBE, snd_soc_get_strobe, |
145 | snd_soc_put_strobe, NULL}, | 145 | snd_soc_put_strobe, NULL}, |
146 | {SND_SOC_TPLG_DAPM_CTL_VOLSW, snd_soc_dapm_get_volsw, | 146 | {SND_SOC_TPLG_DAPM_CTL_VOLSW, snd_soc_dapm_get_volsw, |
147 | snd_soc_dapm_put_volsw, NULL}, | 147 | snd_soc_dapm_put_volsw, snd_soc_info_volsw}, |
148 | {SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE, snd_soc_dapm_get_enum_double, | 148 | {SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE, snd_soc_dapm_get_enum_double, |
149 | snd_soc_dapm_put_enum_double, snd_soc_info_enum_double}, | 149 | snd_soc_dapm_put_enum_double, snd_soc_info_enum_double}, |
150 | {SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT, snd_soc_dapm_get_enum_double, | 150 | {SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT, snd_soc_dapm_get_enum_double, |
@@ -580,27 +580,26 @@ static int soc_tplg_init_kcontrol(struct soc_tplg *tplg, | |||
580 | } | 580 | } |
581 | 581 | ||
582 | static int soc_tplg_create_tlv(struct soc_tplg *tplg, | 582 | static int soc_tplg_create_tlv(struct soc_tplg *tplg, |
583 | struct snd_kcontrol_new *kc, u32 tlv_size) | 583 | struct snd_kcontrol_new *kc, struct snd_soc_tplg_ctl_tlv *tplg_tlv) |
584 | { | 584 | { |
585 | struct snd_soc_tplg_ctl_tlv *tplg_tlv; | ||
586 | struct snd_ctl_tlv *tlv; | 585 | struct snd_ctl_tlv *tlv; |
586 | int size; | ||
587 | 587 | ||
588 | if (tlv_size == 0) | 588 | if (tplg_tlv->count == 0) |
589 | return 0; | 589 | return 0; |
590 | 590 | ||
591 | tplg_tlv = (struct snd_soc_tplg_ctl_tlv *) tplg->pos; | 591 | size = ((tplg_tlv->count + (sizeof(unsigned int) - 1)) & |
592 | tplg->pos += tlv_size; | 592 | ~(sizeof(unsigned int) - 1)); |
593 | 593 | tlv = kzalloc(sizeof(*tlv) + size, GFP_KERNEL); | |
594 | tlv = kzalloc(sizeof(*tlv) + tlv_size, GFP_KERNEL); | ||
595 | if (tlv == NULL) | 594 | if (tlv == NULL) |
596 | return -ENOMEM; | 595 | return -ENOMEM; |
597 | 596 | ||
598 | dev_dbg(tplg->dev, " created TLV type %d size %d bytes\n", | 597 | dev_dbg(tplg->dev, " created TLV type %d size %d bytes\n", |
599 | tplg_tlv->numid, tplg_tlv->size); | 598 | tplg_tlv->numid, size); |
600 | 599 | ||
601 | tlv->numid = tplg_tlv->numid; | 600 | tlv->numid = tplg_tlv->numid; |
602 | tlv->length = tplg_tlv->size; | 601 | tlv->length = size; |
603 | memcpy(tlv->tlv, tplg_tlv + 1, tplg_tlv->size); | 602 | memcpy(&tlv->tlv[0], tplg_tlv->data, size); |
604 | kc->tlv.p = (void *)tlv; | 603 | kc->tlv.p = (void *)tlv; |
605 | 604 | ||
606 | return 0; | 605 | return 0; |
@@ -773,7 +772,7 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, unsigned int count, | |||
773 | } | 772 | } |
774 | 773 | ||
775 | /* create any TLV data */ | 774 | /* create any TLV data */ |
776 | soc_tplg_create_tlv(tplg, &kc, mc->hdr.tlv_size); | 775 | soc_tplg_create_tlv(tplg, &kc, &mc->tlv); |
777 | 776 | ||
778 | /* register control here */ | 777 | /* register control here */ |
779 | err = soc_tplg_add_kcontrol(tplg, &kc, | 778 | err = soc_tplg_add_kcontrol(tplg, &kc, |
diff --git a/sound/soc/zte/zx296702-i2s.c b/sound/soc/zte/zx296702-i2s.c index 98d96e1b17e0..1930c42e1f55 100644 --- a/sound/soc/zte/zx296702-i2s.c +++ b/sound/soc/zte/zx296702-i2s.c | |||
@@ -393,9 +393,9 @@ static int zx_i2s_probe(struct platform_device *pdev) | |||
393 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 393 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
394 | zx_i2s->mapbase = res->start; | 394 | zx_i2s->mapbase = res->start; |
395 | zx_i2s->reg_base = devm_ioremap_resource(&pdev->dev, res); | 395 | zx_i2s->reg_base = devm_ioremap_resource(&pdev->dev, res); |
396 | if (!zx_i2s->reg_base) { | 396 | if (IS_ERR(zx_i2s->reg_base)) { |
397 | dev_err(&pdev->dev, "ioremap failed!\n"); | 397 | dev_err(&pdev->dev, "ioremap failed!\n"); |
398 | return -EIO; | 398 | return PTR_ERR(zx_i2s->reg_base); |
399 | } | 399 | } |
400 | 400 | ||
401 | writel_relaxed(0, zx_i2s->reg_base + ZX_I2S_FIFO_CTRL); | 401 | writel_relaxed(0, zx_i2s->reg_base + ZX_I2S_FIFO_CTRL); |
diff --git a/sound/soc/zte/zx296702-spdif.c b/sound/soc/zte/zx296702-spdif.c index 11a0e46a1156..26265ce4caca 100644 --- a/sound/soc/zte/zx296702-spdif.c +++ b/sound/soc/zte/zx296702-spdif.c | |||
@@ -322,9 +322,9 @@ static int zx_spdif_probe(struct platform_device *pdev) | |||
322 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 322 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
323 | zx_spdif->mapbase = res->start; | 323 | zx_spdif->mapbase = res->start; |
324 | zx_spdif->reg_base = devm_ioremap_resource(&pdev->dev, res); | 324 | zx_spdif->reg_base = devm_ioremap_resource(&pdev->dev, res); |
325 | if (!zx_spdif->reg_base) { | 325 | if (IS_ERR(zx_spdif->reg_base)) { |
326 | dev_err(&pdev->dev, "ioremap failed!\n"); | 326 | dev_err(&pdev->dev, "ioremap failed!\n"); |
327 | return -EIO; | 327 | return PTR_ERR(zx_spdif->reg_base); |
328 | } | 328 | } |
329 | 329 | ||
330 | zx_spdif_dev_init(zx_spdif->reg_base); | 330 | zx_spdif_dev_init(zx_spdif->reg_base); |