Skip to content

Commit edd12a5

Browse files
committed
Implement TDM driver for JH7110 SoC
Signed-off-by: Walker Chen <[email protected]>
1 parent 70a6a66 commit edd12a5

File tree

13 files changed

+591
-325
lines changed

13 files changed

+591
-325
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
&sound{
2+
simple-audio-card,dai-link@0 {
3+
reg = <0>;
4+
status = "okay";
5+
format = "i2s";
6+
bitclock-master = <&dailink_master>;
7+
frame-master = <&dailink_master>;
8+
9+
dailink_master:cpu {
10+
sound-dai = <&i2srx_3ch>;
11+
};
12+
13+
dailink_slave:codec {
14+
sound-dai = <&pdm>;
15+
};
16+
};
17+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
&sound{
2+
simple-audio-card,dai-link@0 {
3+
reg = <0>;
4+
status = "okay";
5+
format = "dsp_a";
6+
bitclock-master = <&dailink_master>;
7+
frame-master = <&dailink_master>;
8+
9+
widgets =
10+
"Microphone", "Mic Jack",
11+
"Line", "Line In",
12+
"Line", "Line Out",
13+
"Speaker", "Speaker",
14+
"Headphone", "Headphone Jack";
15+
routing =
16+
"Headphone Jack", "HP_L",
17+
"Headphone Jack", "HP_R",
18+
"Speaker", "SPK_LP",
19+
"Speaker", "SPK_LN",
20+
"LINPUT1", "Mic Jack",
21+
"LINPUT3", "Mic Jack",
22+
"RINPUT1", "Mic Jack",
23+
"RINPUT2", "Mic Jack";
24+
cpu {
25+
sound-dai = <&tdm>;
26+
};
27+
28+
dailink_master:codec {
29+
sound-dai = <&wm8960>;
30+
clocks = <&wm8960_mclk>;
31+
clock-names = "mclk";
32+
};
33+
};
34+
};

arch/riscv/boot/dts/starfive/jh7110-common.dtsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@
438438
&tdm {
439439
pinctrl-names = "default";
440440
pinctrl-0 = <&tdm0_pins>;
441-
status = "disabled";
441+
status = "okay";
442442
};
443443

444444
&spdif0 {

arch/riscv/boot/dts/starfive/jh7110.dtsi

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,10 +1035,14 @@
10351035
<&clkgen JH7110_TDM_CLK_AHB>,
10361036
<&clkgen JH7110_APB0>,
10371037
<&clkgen JH7110_TDM_CLK_APB>,
1038-
<&clkgen JH7110_TDM_INTERNAL>;
1038+
<&clkgen JH7110_TDM_INTERNAL>,
1039+
<&tdm_ext>,
1040+
<&clkgen JH7110_TDM_CLK_TDM>,
1041+
<&clkgen JH7110_MCLK_INNER>;
10391042
clock-names = "clk_ahb0", "clk_tdm_ahb",
10401043
"clk_apb0", "clk_tdm_apb",
1041-
"clk_tdm_intl";
1044+
"clk_tdm_internal", "clk_tdm_ext",
1045+
"clk_tdm", "mclk_inner";
10421046
resets = <&rstgen RSTN_U0_TDM16SLOT_AHB>,
10431047
<&rstgen RSTN_U0_TDM16SLOT_APB>,
10441048
<&rstgen RSTN_U0_TDM16SLOT_TDM>;
@@ -1588,33 +1592,34 @@
15881592

15891593
simple-audio-card,dai-link@0 {
15901594
reg = <0>;
1591-
format = "left_j";
1592-
bitclock-master = <&sndcpu0>;
1593-
frame-master = <&sndcpu0>;
15941595
status = "okay";
1595-
1596-
sndcpu0: cpu {
1597-
sound-dai = <&pwmdac>;
1598-
};
1599-
1600-
codec {
1601-
sound-dai = <&pwmdac_codec>;
1602-
};
1603-
};
1604-
1605-
simple-audio-card,dai-link@1 {
1606-
reg = <0>;
1607-
status = "okay";
1608-
format = "i2s";
1596+
format = "dsp_a";
16091597
bitclock-master = <&dailink_master>;
16101598
frame-master = <&dailink_master>;
1611-
1612-
dailink_master:cpu {
1613-
sound-dai = <&i2srx_3ch>;
1599+
1600+
widgets =
1601+
"Microphone", "Mic Jack",
1602+
"Line", "Line In",
1603+
"Line", "Line Out",
1604+
"Speaker", "Speaker",
1605+
"Headphone", "Headphone Jack";
1606+
routing =
1607+
"Headphone Jack", "HP_L",
1608+
"Headphone Jack", "HP_R",
1609+
"Speaker", "SPK_LP",
1610+
"Speaker", "SPK_LN",
1611+
"LINPUT1", "Mic Jack",
1612+
"LINPUT3", "Mic Jack",
1613+
"RINPUT1", "Mic Jack",
1614+
"RINPUT2", "Mic Jack";
1615+
cpu {
1616+
sound-dai = <&tdm>;
16141617
};
1615-
1616-
dailink_slave:codec {
1617-
sound-dai = <&pdm>;
1618+
1619+
dailink_master:codec {
1620+
sound-dai = <&wm8960>;
1621+
clocks = <&wm8960_mclk>;
1622+
clock-names = "mclk";
16181623
};
16191624
};
16201625
};

arch/riscv/boot/dts/starfive/jh7110_clk.dtsi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,10 @@
117117
#clock-cells = <0>;
118118
clock-frequency = <297000000>;
119119
};
120+
121+
wm8960_mclk: wm8960_mclk {
122+
compatible = "fixed-clock";
123+
#clock-cells = <0>;
124+
clock-frequency = <24576000>;
125+
};
120126
};

arch/riscv/boot/dts/starfive/jh7110_pinctrl.dtsi

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,17 @@
198198

199199
i2c0_pins: i2c0-pins {
200200
i2c0-pins-scl {
201-
sf,pins = <PAD_GPIO36>;
202-
sf,pinmux = <PAD_GPIO36_FUNC_SEL 0>;
201+
sf,pins = <PAD_GPIO57>;
202+
sf,pinmux = <PAD_GPIO57_FUNC_SEL 0>;
203203
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
204204
sf,pin-gpio-dout = <GPO_LOW>;
205205
sf,pin-gpio-doen = <OEN_I2C0_IC_CLK_OE>;
206206
sf,pin-gpio-din = <GPI_I2C0_IC_CLK_IN_A>;
207207
};
208208

209209
i2c0-pins-sda {
210-
sf,pins = <PAD_GPIO37>;
211-
sf,pinmux = <PAD_GPIO37_FUNC_SEL 0>;
210+
sf,pins = <PAD_GPIO58>;
211+
sf,pinmux = <PAD_GPIO58_FUNC_SEL 0>;
212212
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
213213
sf,pin-gpio-dout = <GPO_LOW>;
214214
sf,pin-gpio-doen = <OEN_I2C0_IC_DATA_OE>;
@@ -412,13 +412,15 @@
412412
};
413413

414414
pwmdac0_pins: pwmdac0-pins {
415+
/*
415416
pwmdac0-pins-left {
416417
sf,pins = <PAD_GPIO57>;
417418
sf,pinmux = <PAD_GPIO57_FUNC_SEL 0>;
418419
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
419420
sf,pin-gpio-dout = <GPO_PWMDAC0_LEFT_OUTPUT>;
420421
sf,pin-gpio-doen = <OEN_LOW>;
421422
};
423+
*/
422424

423425
pwmdac0-pins-right {
424426
sf,pins = <PAD_GPIO42>;
@@ -449,54 +451,48 @@
449451

450452
tdm0_pins: tdm0-pins {
451453
tdm0-pins-tx {
452-
sf,pins = <PAD_GPIO21>;
453-
sf,pinmux = <PAD_GPIO21_FUNC_SEL 0>;
454+
sf,pins = <PAD_GPIO44>;
455+
sf,pinmux = <PAD_GPIO44_FUNC_SEL 0>;
454456
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
455457
sf,pin-gpio-dout = <GPO_TDM0_PCM_TXD>;
456458
sf,pin-gpio-doen = <OEN_LOW>;
457459
};
458460

459461
tdm0-pins-rx {
460-
sf,pins = <PAD_GPIO15>;
461-
sf,pinmux = <PAD_GPIO15_FUNC_SEL 0>;
462+
sf,pins = <PAD_GPIO61>;
463+
sf,pinmux = <PAD_GPIO61_FUNC_SEL 0>;
462464
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
463465
sf,pin-gpio-doen = <OEN_HIGH>;
464466
sf,pin-gpio-din = <GPI_TDM0_PCM_RXD>;
465467
};
466468

467469
tdm0-pins-sync {
468-
sf,pins = <PAD_GPIO22>;
469-
sf,pinmux = <PAD_GPIO22_FUNC_SEL 0>;
470-
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
471-
sf,pin-gpio-dout = <GPO_TDM0_PCM_SYNCOUT>;
472-
sf,pin-gpio-doen = <OEN_LOW>;
473-
};
474-
475-
tdm0-pins-mclk {
476-
sf,pins = <PAD_GPIO30>;
477-
sf,pinmux = <PAD_GPIO30_FUNC_SEL 0>;
470+
sf,pins = <PAD_GPIO63>;
471+
sf,pinmux = <PAD_GPIO63_FUNC_SEL 0>;
478472
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
479-
sf,pin-gpio-dout = <GPO_CRG0_MCLK_OUT>;
480-
sf,pin-gpio-doen = <OEN_LOW>;
473+
sf,pin-gpio-doen = <OEN_HIGH>;
474+
sf,pin-gpio-din = <GPI_TDM0_PCM_SYNCIN>;
481475
};
482476

483-
tdm0-pins-mst {
484-
sf,pins = <PAD_GPIO39>;
485-
sf,pinmux = <PAD_GPIO39_FUNC_SEL 0>;
477+
tdm0-pins-pcmclk {
478+
sf,pins = <PAD_GPIO38>;
479+
sf,pinmux = <PAD_GPIO38_FUNC_SEL 0>;
486480
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
487-
sf,pin-gpio-dout = <GPO_TDM0_CLK_MST>;
488-
sf,pin-gpio-doen = <OEN_LOW>;
481+
sf,pin-gpio-doen = <OEN_HIGH>;
482+
sf,pin-gpio-din = <GPI_TDM0_CLK_SLV>;
489483
};
490484
};
491485

492486
i2s_clk_pins: i2s-clk0 {
487+
/*
493488
i2s-clk0_mclk {
494489
sf,pins = <PAD_GPIO58>;
495490
sf,pinmux = <PAD_GPIO58_FUNC_SEL 0>;
496491
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
497492
sf,pin-gpio-dout = <GPO_CRG0_MCLK_OUT>;
498493
sf,pin-gpio-doen = <OEN_LOW>;
499494
};
495+
*/
500496
};
501497

502498
i2stx_pins: i2stx-pins {
@@ -937,11 +933,13 @@
937933
sf,pinmux = <PAD_GPIO37_FUNC_SEL 1>;
938934
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
939935
};
936+
/*
940937
rgb-2-pins {
941938
sf,pins = <PAD_GPIO38>;
942939
sf,pinmux = <PAD_GPIO38_FUNC_SEL 1>;
943940
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
944941
};
942+
*/
945943
rgb-3-pins {
946944
sf,pins = <PAD_GPIO39>;
947945
sf,pinmux = <PAD_GPIO39_FUNC_SEL 1>;
@@ -967,11 +965,13 @@
967965
sf,pinmux = <PAD_GPIO43_FUNC_SEL 1>;
968966
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
969967
};
968+
/*
970969
rgb-8-pins {
971970
sf,pins = <PAD_GPIO44>;
972971
sf,pinmux = <PAD_GPIO44_FUNC_SEL 1>;
973972
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
974973
};
974+
*/
975975
rgb-9-pins {
976976
sf,pins = <PAD_GPIO45>;
977977
sf,pinmux = <PAD_GPIO45_FUNC_SEL 1>;
@@ -1032,6 +1032,7 @@
10321032
sf,pinmux = <PAD_GPIO56_FUNC_SEL 1>;
10331033
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
10341034
};
1035+
/*
10351036
rgb-21-pins {
10361037
sf,pins = <PAD_GPIO57>;
10371038
sf,pinmux = <PAD_GPIO57_FUNC_SEL 1>;
@@ -1042,6 +1043,7 @@
10421043
sf,pinmux = <PAD_GPIO58_FUNC_SEL 1>;
10431044
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
10441045
};
1046+
*/
10451047
rgb-23-pins {
10461048
sf,pins = <PAD_GPIO59>;
10471049
sf,pinmux = <PAD_GPIO59_FUNC_SEL 1>;
@@ -1062,11 +1064,13 @@
10621064
sf,pinmux = <PAD_GPIO62_FUNC_SEL 1>;
10631065
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
10641066
};
1067+
/*
10651068
rgb-27-pins {
10661069
sf,pins = <PAD_GPIO63>;
10671070
sf,pinmux = <PAD_GPIO63_FUNC_SEL 1>;
10681071
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
10691072
};
1073+
*/
10701074
};
10711075
inno_hdmi_pins: inno_hdmi-pins {
10721076
inno_hdmi-scl {
@@ -1114,11 +1118,13 @@
11141118
sf,pinmux = <PAD_GPIO37_FUNC_SEL 1>;
11151119
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
11161120
};
1121+
/*
11171122
mipitx-3-pins {
11181123
sf,pins = <PAD_GPIO38>;
11191124
sf,pinmux = <PAD_GPIO38_FUNC_SEL 1>;
11201125
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
11211126
};
1127+
*/
11221128
mipitx-4-pins {
11231129
sf,pins = <PAD_GPIO39>;
11241130
sf,pinmux = <PAD_GPIO39_FUNC_SEL 1>;

arch/riscv/configs/starfive_jh7110_defconfig

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,8 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
192192
CONFIG_SOUND=y
193193
CONFIG_SND=y
194194
CONFIG_SND_SOC=y
195-
CONFIG_SND_DESIGNWARE_I2S=y
196-
CONFIG_SND_DESIGNWARE_I2S_STARFIVE_JH7110=y
197-
CONFIG_SND_STARFIVE_PWMDAC=y
198-
CONFIG_SND_STARFIVE_PDM=y
195+
CONFIG_SND_STARFIVE_TDM=y
196+
CONFIG_SND_SOC_WM8960=y
199197
CONFIG_SND_SIMPLE_CARD=y
200198
CONFIG_USB=y
201199
CONFIG_USB_XHCI_HCD=y

0 commit comments

Comments
 (0)