Skip to content

Commit 141dee7

Browse files
committed
Merge remote-tracking branches 'asoc/topic/wm8753' and 'asoc/topic/zte' into asoc-next
3 parents ebfa3dc + af4b654 + 66ead50 commit 141dee7

File tree

3 files changed

+40
-20
lines changed

3 files changed

+40
-20
lines changed

Documentation/devicetree/bindings/sound/zte,zx-i2s.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
ZTE ZX296702 I2S controller
22

33
Required properties:
4-
- compatible : Must be "zte,zx296702-i2s"
4+
- compatible : Must be one of:
5+
"zte,zx296718-i2s", "zte,zx296702-i2s"
6+
"zte,zx296702-i2s"
57
- reg : Must contain I2S core's registers location and length
68
- clocks : Pairs of phandle and specifier referencing the controller's clocks.
7-
- clock-names: "tx" for the clock to the I2S interface.
9+
- clock-names: "wclk" for the wclk, "pclk" for the pclk to the I2S interface.
810
- dmas: Pairs of phandle and specifier for the DMA channel that is used by
911
the core. The core expects two dma channels for transmit.
1012
- dma-names : Must be "tx" and "rx"
@@ -16,12 +18,12 @@ please check:
1618
* dma/dma.txt
1719

1820
Example:
19-
i2s0: i2s0@0b005000 {
21+
i2s0: i2s@b005000 {
2022
#sound-dai-cells = <0>;
21-
compatible = "zte,zx296702-i2s";
23+
compatible = "zte,zx296718-i2s", "zte,zx296702-i2s";
2224
reg = <0x0b005000 0x1000>;
23-
clocks = <&lsp0clk ZX296702_I2S0_DIV>;
24-
clock-names = "tx";
25+
clocks = <&audiocrm AUDIO_I2S0_WCLK>, <&audiocrm AUDIO_I2S0_PCLK>;
26+
clock-names = "wclk", "pclk";
2527
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
2628
dmas = <&dma 5>, <&dma 6>;
2729
dma-names = "tx", "rx";

sound/soc/codecs/wm8753.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ static const DECLARE_TLV_DB_SCALE(voice_mix_tlv, -1200, 300, 0);
280280
static const DECLARE_TLV_DB_SCALE(pga_tlv, -1725, 75, 0);
281281

282282
static const struct snd_kcontrol_new wm8753_snd_controls[] = {
283+
SOC_SINGLE("Hi-Fi DAC Left/Right channel Swap", WM8753_HIFI, 5, 1, 0),
283284
SOC_DOUBLE_R_TLV("PCM Volume", WM8753_LDAC, WM8753_RDAC, 0, 255, 0, dac_tlv),
284285

285286
SOC_DOUBLE_R_TLV("ADC Capture Volume", WM8753_LADC, WM8753_RADC, 0, 255, 0,
@@ -1087,7 +1088,7 @@ static int wm8753_i2s_set_dai_fmt(struct snd_soc_codec *codec,
10871088
{
10881089
u16 ioctl, hifi;
10891090

1090-
hifi = snd_soc_read(codec, WM8753_HIFI) & 0x011f;
1091+
hifi = snd_soc_read(codec, WM8753_HIFI) & 0x013f;
10911092
ioctl = snd_soc_read(codec, WM8753_IOCTL) & 0x00ae;
10921093

10931094
/* set master/slave audio interface */

sound/soc/zte/zx-i2s.c

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@
9595
struct zx_i2s_info {
9696
struct snd_dmaengine_dai_dma_data dma_playback;
9797
struct snd_dmaengine_dai_dma_data dma_capture;
98-
struct clk *dai_clk;
98+
struct clk *dai_wclk;
99+
struct clk *dai_pclk;
99100
void __iomem *reg_base;
100101
int master;
101102
resource_size_t mapbase;
@@ -225,7 +226,7 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
225226
struct zx_i2s_info *i2s = snd_soc_dai_get_drvdata(socdai);
226227
struct snd_dmaengine_dai_dma_data *dma_data;
227228
unsigned int lane, ch_num, len, ret = 0;
228-
unsigned long val, format;
229+
unsigned long val;
229230
unsigned long chn_cfg;
230231

231232
dma_data = snd_soc_dai_get_dma_data(socdai, substream);
@@ -238,15 +239,12 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
238239

239240
switch (params_format(params)) {
240241
case SNDRV_PCM_FORMAT_S16_LE:
241-
format = 0;
242242
len = 16;
243243
break;
244244
case SNDRV_PCM_FORMAT_S24_LE:
245-
format = 1;
246245
len = 24;
247246
break;
248247
case SNDRV_PCM_FORMAT_S32_LE:
249-
format = 2;
250248
len = 32;
251249
break;
252250
default:
@@ -278,8 +276,9 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
278276
writel_relaxed(val, i2s->reg_base + ZX_I2S_TIMING_CTRL);
279277

280278
if (i2s->master)
281-
ret = clk_set_rate(i2s->dai_clk,
282-
params_rate(params) * ch_num * CLK_RAT);
279+
ret = clk_set_rate(i2s->dai_wclk,
280+
params_rate(params) * ch_num * CLK_RAT);
281+
283282
return ret;
284283
}
285284

@@ -331,16 +330,28 @@ static int zx_i2s_startup(struct snd_pcm_substream *substream,
331330
struct snd_soc_dai *dai)
332331
{
333332
struct zx_i2s_info *zx_i2s = dev_get_drvdata(dai->dev);
333+
int ret;
334334

335-
return clk_prepare_enable(zx_i2s->dai_clk);
335+
ret = clk_prepare_enable(zx_i2s->dai_wclk);
336+
if (ret)
337+
return ret;
338+
339+
ret = clk_prepare_enable(zx_i2s->dai_pclk);
340+
if (ret) {
341+
clk_disable_unprepare(zx_i2s->dai_wclk);
342+
return ret;
343+
}
344+
345+
return ret;
336346
}
337347

338348
static void zx_i2s_shutdown(struct snd_pcm_substream *substream,
339349
struct snd_soc_dai *dai)
340350
{
341351
struct zx_i2s_info *zx_i2s = dev_get_drvdata(dai->dev);
342352

343-
clk_disable_unprepare(zx_i2s->dai_clk);
353+
clk_disable_unprepare(zx_i2s->dai_wclk);
354+
clk_disable_unprepare(zx_i2s->dai_pclk);
344355
}
345356

346357
static struct snd_soc_dai_ops zx_i2s_dai_ops = {
@@ -384,10 +395,16 @@ static int zx_i2s_probe(struct platform_device *pdev)
384395
if (!zx_i2s)
385396
return -ENOMEM;
386397

387-
zx_i2s->dai_clk = devm_clk_get(&pdev->dev, "tx");
388-
if (IS_ERR(zx_i2s->dai_clk)) {
389-
dev_err(&pdev->dev, "Fail to get clk\n");
390-
return PTR_ERR(zx_i2s->dai_clk);
398+
zx_i2s->dai_wclk = devm_clk_get(&pdev->dev, "wclk");
399+
if (IS_ERR(zx_i2s->dai_wclk)) {
400+
dev_err(&pdev->dev, "Fail to get wclk\n");
401+
return PTR_ERR(zx_i2s->dai_wclk);
402+
}
403+
404+
zx_i2s->dai_pclk = devm_clk_get(&pdev->dev, "pclk");
405+
if (IS_ERR(zx_i2s->dai_pclk)) {
406+
dev_err(&pdev->dev, "Fail to get pclk\n");
407+
return PTR_ERR(zx_i2s->dai_pclk);
391408
}
392409

393410
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

0 commit comments

Comments
 (0)