Browse Source

1.Audio add DMA transmission mode.
2.Add multiple sound card dts

jenny.zhang 2 years ago
parent
commit
868fc771ad

+ 31 - 15
arch/riscv/dts/codecs/sf_ac108.dtsi

@@ -1,18 +1,34 @@
 &sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,format = "i2s";
-	simple-audio-card,name = "sf-ac108-voicecard"; 
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	simple-audio-card,codec-clock-rate = <12288000>;
-	status = "okay";
-	
-	simple-audio-card,cpu {
-		sound-dai = <&i2sadc0>;
-	};
-	dailink0_master:simple-audio-card,codec {
-		sound-dai = <&ac108_a>;
-		clocks = <&ac108_mclk>;
-		clock-names = "mclk";
+	/* i2s + ac108 */
+	simple-audio-card,dai-link@1 {
+		reg = <1>;
+		format = "i2s";
+		bitclock-master = <&sndcodec1>;
+		frame-master = <&sndcodec1>;
+		
+		widgets =
+				"Microphone", "Mic Jack",
+				"Line", "Line In",
+				"Line", "Line Out",
+				"Speaker", "Speaker",
+				"Headphone", "Headphone Jack";
+		routing =
+				"Headphone Jack", "HP_L",
+				"Headphone Jack", "HP_R",
+				"Speaker", "SPK_LP",
+				"Speaker", "SPK_LN",
+				"LINPUT1", "Mic Jack",
+				"LINPUT3", "Mic Jack",
+				"RINPUT1", "Mic Jack",
+				"RINPUT2", "Mic Jack";
+				
+		cpu {
+			sound-dai = <&i2sadc0>;
+		};
+		sndcodec1: codec {
+			sound-dai = <&ac108_a>;
+			clocks = <&ac108_mclk>;
+			clock-names = "mclk";
+		};
 	};
 };

+ 14 - 15
arch/riscv/dts/codecs/sf_pdm.dtsi

@@ -1,18 +1,17 @@
 &sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,format = "i2s";
-	simple-audio-card,name = "SF-PDM-Sound-Card";
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	status = "okay";
-	
-	simple-audio-card,cpu {
-		sound-dai = <&i2sadc0>;
-	};
-	
-	dailink0_master:simple-audio-card,codec {
-		sound-dai = <&pdm>;
+	/* pdm + i2s */
+	simple-audio-card,dai-link@1 {
+		reg = <1>;
+		format = "i2s";
+		bitclock-master = <&sndcodec1>;
+		frame-master = <&sndcodec1>;
+		
+		cpu {
+			sound-dai = <&i2sadc0>;
+		};
+		
+		sndcodec1: codec {
+			sound-dai = <&pdm>;
+		};
 	};
 };
-
-

+ 0 - 14
arch/riscv/dts/codecs/sf_pwmdac.dtsi

@@ -1,14 +0,0 @@
-&sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,name = "SF-PWMDAC-Sound-Card";
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	simple-audio-card,format = "left_j";
-	dailink0_master:simple-audio-card,cpu {
-		sound-dai = <&pwmdac>;
-	};
-
-	simple-audio-card,codec {
-		sound-dai = <&codec>;
-	};
-};

+ 14 - 12
arch/riscv/dts/codecs/sf_spdif.dtsi

@@ -1,14 +1,16 @@
 &sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,name = "SF-SPDIF-Sound-Card";
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	simple-audio-card,format = "left_j";
-	dailink0_master:simple-audio-card,cpu {
-		sound-dai = <&spdif0>;
+	/* spdif */
+	simple-audio-card,dai-link@1 {
+		reg = <1>;
+		format = "left_j";
+		bitclock-master = <&sndcpu1>;
+		frame-master = <&sndcpu1>;
+		
+		sndcpu1: cpu {
+			sound-dai = <&spdif0>;
+		};
+		codec {
+			sound-dai = <&spdif_transmitter>;
+		};
 	};
-
-	simple-audio-card,codec {
-		sound-dai = <&spdif_transmitter>;
-	};
-};
+};

+ 14 - 12
arch/riscv/dts/codecs/sf_vad.dtsi

@@ -1,18 +1,20 @@
 &sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,format = "i2s";
-	simple-audio-card,name = "SF-VAD-Sound-Card";
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	status = "okay";
-	
-	simple-audio-card,cpu {
-		sound-dai = <&i2svad>;
+	/* pdm + i2svad */
+	simple-audio-card,dai-link@1 {
+		reg = <1>;
+		format = "i2s";
+		bitclock-master = <&sndcodec1>;
+		frame-master = <&sndcodec1>;
+		
+		cpu {
+			sound-dai = <&i2svad>;
+		};
+		
+		sndcodec1: codec {
+			sound-dai = <&pdm>;
+		};
 	};
 	
-	dailink0_master:simple-audio-card,codec {
-		sound-dai = <&pdm>;
-	};
 };
 
 

+ 19 - 17
arch/riscv/dts/codecs/sf_wm8960.dtsi

@@ -1,18 +1,19 @@
 &sound{
-		compatible = "simple-audio-card";
-		simple-audio-card,format = "i2s";
-		simple-audio-card,name = "seeed-2mic-voicecard"; 
-		simple-audio-card,bitclock-master = <&dailink0_master>;
-		simple-audio-card,frame-master = <&dailink0_master>;
-		simple-audio-card,codec-clock-rate = <12288000>;
+	/* i2s + wm8960 */
+	simple-audio-card,dai-link@1 {
+		reg = <1>;
 		status = "okay";
-		simple-audio-card,widgets =
+		format = "i2s";
+		bitclock-master = <&sndcodec1>;
+		frame-master = <&sndcodec1>;
+		
+		widgets =
 				"Microphone", "Mic Jack",
 				"Line", "Line In",
 				"Line", "Line Out",
 				"Speaker", "Speaker",
 				"Headphone", "Headphone Jack";
-		simple-audio-card,routing =
+		routing =
 				"Headphone Jack", "HP_L",
 				"Headphone Jack", "HP_R",
 				"Speaker", "SPK_LP",
@@ -21,16 +22,17 @@
 				"LINPUT3", "Mic Jack",
 				"RINPUT1", "Mic Jack",
 				"RINPUT2", "Mic Jack";
-		simple-audio-card,cpu0 {
-                sound-dai = <&i2sdac0>;
-            };
-            cpu1 {
-                sound-dai = <&i2sadc0>;
-            };
-
-		dailink0_master:simple-audio-card,codec {
+		cpu0 {
+			sound-dai = <&i2sdac0>;
+		};
+		cpu1 {
+			sound-dai = <&i2sadc0>;
+		};
+		
+		sndcodec1:codec {
 			sound-dai = <&wm8960>;
 			clocks = <&wm8960_mclk>;
 			clock-names = "mclk";
 		};
-    };
+	};
+};

+ 35 - 15
arch/riscv/dts/starfive_vic7100_evb.dts

@@ -238,6 +238,7 @@
 			clock-names = "core-clk", "cfgr-clk";
 			interrupt-parent = <&plic>;
 			interrupts = <2>;
+			#dma-cells = <1>;
 			dma-channels = <4>;
 			snps,dma-masters = <1>;
 			snps,data-width = <4>;
@@ -254,6 +255,7 @@
 			clock-names = "core-clk", "cfgr-clk";
 			interrupt-parent = <&plic>;
 			interrupts = <1>;
+			#dma-cells = <1>;
 			dma-channels = <16>;
 			snps,dma-masters = <1>;
 			snps,data-width = <3>;
@@ -674,8 +676,8 @@
 			compatible = "snps,designware-i2sadc0";
 			reg = <0x0 0x10400000 0x0 0x1000>;
 			interrupt-parent = <&plic>;
-			interrupts = <59>;
-			interrupt-names = "rx";
+			/*interrupts = <59>;*/
+			/*interrupt-names = "rx";*/
 			clocks = <&apb1clk>;
 			clock-names = "i2sclk";
 			#sound-dai-cells = <0>;
@@ -693,13 +695,13 @@
 			clock-names = "i2sclk";
 			#sound-dai-cells = <0>;
 		};
-		
+
 		i2sdac0: i2sdac0@10450000 {
 			compatible = "snps,designware-i2sdac0";
 			reg = <0x0 0x10450000 0x0 0x1000>;
 			interrupt-parent = <&plic>;
-			interrupts = <64>;
-			interrupt-names = "tx";
+			/*interrupts = <64>; */
+			/*interrupt-names = "tx";*/
 			clocks = <&apb1clk>;
 			clock-names = "i2sclk";
 			#sound-dai-cells = <0>;
@@ -711,28 +713,28 @@
 			compatible = "snps,designware-i2sdac1";
 			reg = <0x0 0x10460000 0x0 0x1000>;
 			interrupt-parent = <&plic>;
-			interrupts = <66>;
-			interrupt-names = "tx";
+			/*interrupts = <66>;*/
+			/*interrupt-names = "tx";*/
 			clocks = <&apb1clk>;
 			clock-names = "i2sclk";
 			#sound-dai-cells = <0>;
 			dmas = <&dma2p 31>;
 			dma-names = "tx";
 		};
-		
+
 		i2sdac16k: i2sdac16k@10470000 {
 			compatible = "snps,designware-i2sdac16k";
 			reg = <0x0 0x10470000 0x0 0x1000>;
 			interrupt-parent = <&plic>;
-			interrupts = <68>;
-			interrupt-names = "tx";
+			/* interrupts = <68>; */
+			/* interrupt-names = "tx"; */
 			clocks = <&apb1clk>;
 			clock-names = "i2sclk";
 			#sound-dai-cells = <0>;
 			dmas = <&dma2p 29>;
 			dma-names = "tx";
 		};
-		
+
 		spdif0: spdif0@10430000 {
 			compatible = "starfive,sf-spdif";
 			reg = <0x0 0x10430000 0x0 0x1000>;
@@ -743,7 +745,7 @@
 			clock-names = "audioclk";
 			#sound-dai-cells = <0>;
 		};
-		
+
 		pdm: pdm@10410000 {
 			compatible = "starfive,sf-pdm";
 			reg = <0x0 0x10410000 0x0 0x1000>, <0x0 0x10480000 0x0 0x1000>;
@@ -784,7 +786,7 @@
 			#sound-dai-cells = <0>;
 		};
 		
-		codec: pwmdac-transmitter {
+		pwmdac_codec: pwmdac-transmitter {
 			compatible = "linux,pwmdac-dit";
 			#sound-dai-cells = <0>;
 		};
@@ -795,13 +797,31 @@
 		}; 
 
 		sound:snd-card{
-			compatible = "sf-audio-card";
+			compatible = "simple-audio-card";
+			simple-audio-card,name = "Starfive-Multi-Sound-Card";
+			
+			/* pwmdac */
+			simple-audio-card,dai-link@0 {
+				reg = <0>;
+				status = "okay";
+				format = "left_j";
+				bitclock-master = <&sndcpu0>;
+				frame-master = <&sndcpu0>;
+				
+				sndcpu0: cpu {
+					sound-dai = <&pwmdac>;
+				};
+
+				codec {
+					sound-dai = <&pwmdac_codec>;
+				};
+			};
 		};
 	};
 };
 #include "tda998x_1080p.dtsi"
 /* #include "codecs/sf_pdm.dtsi" */
-#include "codecs/sf_spdif.dtsi"
+/* #include "codecs/sf_spdif.dtsi" */
 /* #include "codecs/sf_ac108.dtsi" */
 /* #include "codecs/sf_wm8960.dtsi" */
 /* #include "codecs/sf_vad.dtsi" */

+ 12 - 14
board/starfive/vic7100/vic7100.c

@@ -38,8 +38,7 @@
 #define STARFIVE_AUDIO_AC108	0
 #define STARFIVE_AUDIO_WM8960	0
 #define STARFIVE_AUDIO_VAD		0
-#define STARFIVE_AUDIO_PWMDAC	0
-#define STARFIVE_AUDIO_SPDIF	1
+#define STARFIVE_AUDIO_SPDIF	0
 #define STARFIVE_AUDIO_PDM		0
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -1044,20 +1043,20 @@ int board_ac108_init(void)
 	INIT_FUNC_CALL(i2srx_3ch);
 	INIT_FUNC_CALL(i2svad);
 
-	SET_GPIO_i2srx_bclk_in(45); 	
+	SET_GPIO_i2srx_bclk_in(45);
 	SET_GPIO_45_doen_HIGH;
 	#if 0
-	SET_GPIO_i2srx_lrck_in(6);	 
+	SET_GPIO_i2srx_lrck_in(6);
 	SET_GPIO_6_doen_HIGH;
 	SET_GPIO_i2srx_sdin_bit0(8);
 	SET_GPIO_8_doen_HIGH;
 	#else
-	SET_GPIO_i2srx_lrck_in(3);	 
+	SET_GPIO_i2srx_lrck_in(3);
 	SET_GPIO_3_doen_HIGH;
 	SET_GPIO_i2srx_sdin_bit0(2);
 	SET_GPIO_2_doen_HIGH;
-	#endif 
-	
+	#endif
+
 	INIT_FUNC_CALL(i2sgpiorx);
 }
 
@@ -1067,14 +1066,14 @@ int board_wm8960_init(void)
 	INIT_FUNC_CALL(i2svad);
 	INIT_FUNC_CALL(i2sdac0);
 	//INIT_FUNC_CALL(i2sdac1);
-	
-	SET_GPIO_i2srx_bclk_in(45); 	
+
+	SET_GPIO_i2srx_bclk_in(45);	
 	SET_GPIO_45_doen_HIGH;
-	SET_GPIO_i2srx_lrck_in(3);	 
+	SET_GPIO_i2srx_lrck_in(3);
 	SET_GPIO_3_doen_HIGH;
 	SET_GPIO_i2srx_sdin_bit0(2);
 	SET_GPIO_2_doen_HIGH;
-	
+
 	INIT_FUNC_CALL(i2sgpiorx);
 }
 
@@ -1091,7 +1090,6 @@ int board_pwmdac_init(void)
 
 int board_spdif_init(void)
 {
-	//INIT_FUNC_CALL(i2svad);
 	INIT_FUNC_CALL(spdif);
 }
 
@@ -1116,7 +1114,7 @@ int board_audio_init(void)
 	#elif STARFIVE_AUDIO_PDM
 	board_pdm_init();
 	#endif
-	
+
 	board_pwmdac_init();
 }
 
@@ -1138,7 +1136,7 @@ int board_hw_init(void)
 	INIT_FUNC_CALL(audio_subsys);
 
 	board_audio_init();
-	
+
 	INIT_FUNC_CALL(usb);
 	INIT_FUNC_CALL(sgdma1p);
 	//INIT_FUNC_CALL(qspi);