[PATCH v1 10/10] ARM: tegra: transformers: bind FM34NE DSP on supported devices

From: Svyatoslav Ryhel
Date: Tue Feb 21 2023 - 13:33:08 EST


FM34NE is mandatory for correct sound work on ASUS Transformers.

Signed-off-by: Svyatoslav Ryhel <clamor95@xxxxxxxxx>
---
arch/arm/boot/dts/tegra20-asus-tf101.dts | 14 +++++++++
arch/arm/boot/dts/tegra30-asus-tf201.dts | 29 +++++++++++++++++++
arch/arm/boot/dts/tegra30-asus-tf300t.dts | 29 +++++++++++++++++++
arch/arm/boot/dts/tegra30-asus-tf300tg.dts | 19 ++++++++++++
arch/arm/boot/dts/tegra30-asus-tf700t.dts | 19 ++++++++++++
.../arm/boot/dts/tegra30-pegatron-chagall.dts | 27 +++++++++++++++++
6 files changed, 137 insertions(+)

diff --git a/arch/arm/boot/dts/tegra20-asus-tf101.dts b/arch/arm/boot/dts/tegra20-asus-tf101.dts
index 8d0613567e82..8a51a4c53014 100644
--- a/arch/arm/boot/dts/tegra20-asus-tf101.dts
+++ b/arch/arm/boot/dts/tegra20-asus-tf101.dts
@@ -493,6 +493,20 @@ i2c@7000c000 {
status = "okay";
clock-frequency = <400000>;

+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "asus,tf101-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(H, 3) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_sys>;
+
+ clocks = <&tegra_car TEGRA20_CLK_CDEV1>;
+ clock-names = "mclk";
+ };
+
/* Aichi AMI306 digital compass */
magnetometer@e {
compatible = "asahi-kasei,ak8974";
diff --git a/arch/arm/boot/dts/tegra30-asus-tf201.dts b/arch/arm/boot/dts/tegra30-asus-tf201.dts
index 47865deeb88a..e214fc23609e 100644
--- a/arch/arm/boot/dts/tegra30-asus-tf201.dts
+++ b/arch/arm/boot/dts/tegra30-asus-tf201.dts
@@ -60,6 +60,25 @@ bluetooth {
};
};

+ i2c@7000c000 {
+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "asus,tf201-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_dsp>;
+
+ clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ clock-names = "mclk";
+
+ assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>;
+ };
+ };
+
i2c@7000c400 {
/* Atmel MXT768E touchscreen */
touchscreen@4d {
@@ -606,6 +625,16 @@ haptic-feedback {
vcc-supply = <&vdd_3v3_sys>;
};

+ vdd_1v8_dsp: regulator-dsp {
+ compatible = "regulator-fixed";
+ regulator-name = "vdd_1v8_dsp";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ gpio = <&gpio TEGRA_GPIO(U, 5) GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ vin-supply = <&vdd_1v8_vio>;
+ };
+
sound {
compatible = "asus,tegra-audio-rt5631-tf201",
"nvidia,tegra-audio-rt5631";
diff --git a/arch/arm/boot/dts/tegra30-asus-tf300t.dts b/arch/arm/boot/dts/tegra30-asus-tf300t.dts
index 78f78cca337a..2dcf0e1f6ca2 100644
--- a/arch/arm/boot/dts/tegra30-asus-tf300t.dts
+++ b/arch/arm/boot/dts/tegra30-asus-tf300t.dts
@@ -68,6 +68,25 @@ bluetooth {
};
};

+ i2c@7000c000 {
+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "asus,tf300t-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_dsp>;
+
+ clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ clock-names = "mclk";
+
+ assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>;
+ };
+ };
+
i2c@7000c400 {
/* Elantech EKTH1036 touchscreen */
touchscreen@10 {
@@ -999,6 +1018,16 @@ display-panel {
compatible = "innolux,g101ice-l01";
};

+ vdd_1v8_dsp: regulator-dsp {
+ compatible = "regulator-fixed";
+ regulator-name = "vdd_1v8_dsp";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ gpio = <&gpio TEGRA_GPIO(P, 3) GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ vin-supply = <&vdd_1v8_vio>;
+ };
+
sound {
compatible = "asus,tegra-audio-wm8903-tf300t",
"nvidia,tegra-audio-wm8903";
diff --git a/arch/arm/boot/dts/tegra30-asus-tf300tg.dts b/arch/arm/boot/dts/tegra30-asus-tf300tg.dts
index 82c51e177a70..7f23021611a4 100644
--- a/arch/arm/boot/dts/tegra30-asus-tf300tg.dts
+++ b/arch/arm/boot/dts/tegra30-asus-tf300tg.dts
@@ -164,6 +164,25 @@ bluetooth {
};
};

+ i2c@7000c000 {
+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "asus,tf300t-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_vio>;
+
+ clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ clock-names = "mclk";
+
+ assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>;
+ };
+ };
+
i2c@7000c400 {
/* Elantech EKTH1036 touchscreen */
touchscreen@10 {
diff --git a/arch/arm/boot/dts/tegra30-asus-tf700t.dts b/arch/arm/boot/dts/tegra30-asus-tf700t.dts
index 766225ebdeab..bbb33119780e 100644
--- a/arch/arm/boot/dts/tegra30-asus-tf700t.dts
+++ b/arch/arm/boot/dts/tegra30-asus-tf700t.dts
@@ -85,6 +85,25 @@ bluetooth {
};
};

+ i2c@7000c000 {
+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "asus,tf700t-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_vio>;
+
+ clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ clock-names = "mclk";
+
+ assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>;
+ };
+ };
+
i2c@7000c400 {
/* Elantech ELAN-3024-7053 or 5184N FPC-1 REV: 2/3 touchscreen */
touchscreen@10 {
diff --git a/arch/arm/boot/dts/tegra30-pegatron-chagall.dts b/arch/arm/boot/dts/tegra30-pegatron-chagall.dts
index 6e24b095713b..007ba3f3e95e 100644
--- a/arch/arm/boot/dts/tegra30-pegatron-chagall.dts
+++ b/arch/arm/boot/dts/tegra30-pegatron-chagall.dts
@@ -1145,6 +1145,23 @@ lcd_ddc: i2c@7000c000 {
status = "okay";
clock-frequency = <400000>;

+ /* Fortemedia FM34NE voice processor */
+ dsp@60 {
+ compatible = "pegatron,chagall-dsp", "fortemedia,fm34";
+ reg = <0x60>;
+
+ bypass-gpios = <&gpio TEGRA_GPIO(N, 3) GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio TEGRA_GPIO(N, 0) GPIO_ACTIVE_LOW>;
+
+ vdd-supply = <&vdd_1v8_dsp>;
+
+ clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ clock-names = "mclk";
+
+ assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+ assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>;
+ };
+
/* Wolfson Microelectronics WM8903 audio codec */
wm8903: audio-codec@1a {
compatible = "wlf,wm8903";
@@ -1500,6 +1517,16 @@ vdd_vbus_usb3: regulator-usb3 {
vin-supply = <&vdd_5v0_sys>;
};

+ vdd_1v8_dsp: regulator-dsp {
+ compatible = "regulator-fixed";
+ regulator-name = "vdd_1v8_dsp";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ gpio = <&gpio TEGRA_GPIO(N, 1) GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ vin-supply = <&vdd_1v8_vio>;
+ };
+
pmc@7000e400 {
status = "okay";
nvidia,invert-interrupt;
--
2.37.2