2023-01-11 07:40:23

by Hardevsinh Palaniya

[permalink] [raw]
Subject: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

From: Hardevsinh Palaniya <[email protected]>
Date: Sat, 7 Jan 2023 17:08:28 +0530
Subject: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

- Adding node for MAX98090/91 in dts imx8mm-evk.dtsi
- Adding tristate option in <sound/soc/codecs/Kconfig>

Signed-off-by: Hardevsinh Palaniya <[email protected]>

diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
index e0b604ac0da4..58ff63cbc930 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
@@ -132,6 +132,32 @@ simple-audio-card,codec {
                 clocks = <&clk IMX8MM_CLK_SAI3_ROOT>;
           };
     };
+
+     sound-max98090 {
+           compatible = "simple-audio-card";
+           simple-audio-card,name = "max98090-audio";
+           simple-audio-card,format = "i2s";
+           simple-audio-card,frame-master = <&cpudai>;
+           simple-audio-card,bitclock-master = <&cpudai>;
+           simple-audio-card,widgets = "Speakers", "Speakers";
+           simple-audio-card,routing =
+                       "Speakers", "SPKR",
+                       "Speakers", "SPKL",
+                       "IN1", "MICBIAS",
+                       "MIC1","IN1",
+                       "MIC2","IN1";
+
+           cpudai: simple-audio-card,cpu {
+                 sound-dai = <&sai5>;
+                 dai-tdm-slot-num = <2>;
+                 dai-tdm-slot-width = <32>;
+           };
+
+           simple-audio-card,codec {
+                 sound-dai = <&max98090>;
+                 clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
+           };
+     };
};

&A53_0 {
@@ -339,6 +365,14 @@ &i2c3 {
     pinctrl-0 = <&pinctrl_i2c3>;
     status = "okay";

+     max98090: max98090@10 {
+           #sound-dai-cells = <0>;
+           compatible = "maxim,max98090";
+           reg = <0x10>;
+           clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
+           clock-names = "mclk";
+     };
+
     pca6416: gpio@20 {
           compatible = "ti,tca6416";
           reg = <0x20>;
@@ -391,6 +425,20 @@ &sai3 {
     status = "okay";
};

+&sai5 {
+     pinctrl-names = "default";
+     pinctrl-0 = <&pinctrl_sai5>;
+     assigned-clocks = <&clk IMX8MM_CLK_SAI5>;
+     assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL1_OUT>;
+     assigned-clock-rates = <24576000>;
+     clocks = <&clk IMX8MM_CLK_SAI5_IPG>, <&clk IMX8MM_CLK_DUMMY>,
+           <&clk IMX8MM_CLK_SAI5_ROOT>, <&clk IMX8MM_CLK_DUMMY>,
+           <&clk IMX8MM_CLK_DUMMY>, <&clk IMX8MM_AUDIO_PLL1_OUT>,
+           <&clk IMX8MM_AUDIO_PLL2_OUT>;
+     clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
+     status = "okay";
+};
+
&snvs_pwrkey {
     status = "okay";
};
@@ -552,6 +600,16 @@ MX8MM_IOMUXC_SAI3_TXD_SAI3_TX_DATA0 0xd6
           >;
     };

+     pinctrl_sai5: sai5grp {
+           fsl,pins = <
+                 MX8MM_IOMUXC_SAI5_MCLK_SAI5_MCLK 0xd6
+                 MX8MM_IOMUXC_SAI5_RXD2_SAI5_TX_BCLK 0xd6
+                 MX8MM_IOMUXC_SAI5_RXD1_SAI5_TX_SYNC 0xd6
+                 MX8MM_IOMUXC_SAI5_RXD0_SAI5_RX_DATA0 0xd6
+                 MX8MM_IOMUXC_SAI5_RXD3_SAI5_TX_DATA0 0xd6
+           >;
+     }
+
     pinctrl_typec1: typec1grp {
           fsl,pins = <
                 MX8MM_IOMUXC_SD1_STROBE_GPIO2_IO11  0x159
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 0f9d71490075..efef2df362a4 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -1009,7 +1009,7 @@ config SND_SOC_MAX98088
     depends on I2C

config SND_SOC_MAX98090
-     tristate
+     tristate "Maxim MAX98090/1, Stereo Audio Codec"
     depends on I2C

config SND_SOC_MAX98095
--
2.25.1


2023-01-11 09:22:39

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

On 11/01/2023 08:16, Hardevsinh Palaniya wrote:
> From: Hardevsinh Palaniya <[email protected]>
> Date: Sat, 7 Jan 2023 17:08:28 +0530
> Subject: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

Use subject prefixes matching the subsystem (which you can get for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching).

>
> - Adding node for MAX98090/91 in dts imx8mm-evk.dtsi
> - Adding tristate option in <sound/soc/codecs/Kconfig>
>
> Signed-off-by: Hardevsinh Palaniya <[email protected]>

Your CC list insane. Use get_maintainers.pl.

>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
> index e0b604ac0da4..58ff63cbc930 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
> @@ -132,6 +132,32 @@ simple-audio-card,codec {
>                  clocks = <&clk IMX8MM_CLK_SAI3_ROOT>;
>            };
>      };
> +
> +     sound-max98090 {
> +           compatible = "simple-audio-card";
> +           simple-audio-card,name = "max98090-audio";
> +           simple-audio-card,format = "i2s";
> +           simple-audio-card,frame-master = <&cpudai>;
> +           simple-audio-card,bitclock-master = <&cpudai>;
> +           simple-audio-card,widgets = "Speakers", "Speakers";
> +           simple-audio-card,routing =
> +                       "Speakers", "SPKR",
> +                       "Speakers", "SPKL",
> +                       "IN1", "MICBIAS",
> +                       "MIC1","IN1",
> +                       "MIC2","IN1";
> +
> +           cpudai: simple-audio-card,cpu {
> +                 sound-dai = <&sai5>;
> +                 dai-tdm-slot-num = <2>;
> +                 dai-tdm-slot-width = <32>;
> +           };
> +
> +           simple-audio-card,codec {
> +                 sound-dai = <&max98090>;
> +                 clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
> +           };
> +     };
> };
>
> &A53_0 {
> @@ -339,6 +365,14 @@ &i2c3 {
>      pinctrl-0 = <&pinctrl_i2c3>;
>      status = "okay";
>
> +     max98090: max98090@10 {

Node names should be generic.
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation

> +           #sound-dai-cells = <0>;
> +           compatible = "maxim,max98090";

compatible is first, then reg.

> +           reg = <0x10>;
> +           clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
> +           clock-names = "mclk";
> +     };
> +
>      pca6416: gpio@20 {
>            compatible = "ti,tca6416";
>            reg = <0x20>;
> @@ -391,6 +425,20 @@ &sai3 {
>      status = "okay";
> };
>
> +&sai5 {
> +     pinctrl-names = "default";
> +     pinctrl-0 = <&pinctrl_sai5>;
> +     assigned-clocks = <&clk IMX8MM_CLK_SAI5>;
> +     assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL1_OUT>;
> +     assigned-clock-rates = <24576000>;
> +     clocks = <&clk IMX8MM_CLK_SAI5_IPG>, <&clk IMX8MM_CLK_DUMMY>,
> +           <&clk IMX8MM_CLK_SAI5_ROOT>, <&clk IMX8MM_CLK_DUMMY>,
> +           <&clk IMX8MM_CLK_DUMMY>, <&clk IMX8MM_AUDIO_PLL1_OUT>,
> +           <&clk IMX8MM_AUDIO_PLL2_OUT>;
> +     clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
> +     status = "okay";
> +};
> +
> &snvs_pwrkey {
>      status = "okay";
> };
> @@ -552,6 +600,16 @@ MX8MM_IOMUXC_SAI3_TXD_SAI3_TX_DATA0 0xd6
>            >;
>      };
>
> +     pinctrl_sai5: sai5grp {
> +           fsl,pins = <
> +                 MX8MM_IOMUXC_SAI5_MCLK_SAI5_MCLK 0xd6
> +                 MX8MM_IOMUXC_SAI5_RXD2_SAI5_TX_BCLK 0xd6
> +                 MX8MM_IOMUXC_SAI5_RXD1_SAI5_TX_SYNC 0xd6
> +                 MX8MM_IOMUXC_SAI5_RXD0_SAI5_RX_DATA0 0xd6
> +                 MX8MM_IOMUXC_SAI5_RXD3_SAI5_TX_DATA0 0xd6
> +           >;
> +     }
> +
>      pinctrl_typec1: typec1grp {
>            fsl,pins = <
>                  MX8MM_IOMUXC_SD1_STROBE_GPIO2_IO11  0x159
> diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
> index 0f9d71490075..efef2df362a4 100644
> --- a/sound/soc/codecs/Kconfig
> +++ b/sound/soc/codecs/Kconfig
> @@ -1009,7 +1009,7 @@ config SND_SOC_MAX98088
>      depends on I2C
>
> config SND_SOC_MAX98090
> -     tristate
> +     tristate "Maxim MAX98090/1, Stereo Audio Codec"

No, code cannot be mixed with DTS. This is unrelated and not explained
in commit msg.

>      depends on I2C
>
> config SND_SOC_MAX98095
> --
> 2.25.1

Best regards,
Krzysztof

2023-01-11 09:25:04

by Daniel Baluta

[permalink] [raw]
Subject: Re: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

Hi Hardevsinh,

Does your imx8mm-evk have a max98090 codec? That's very strange
because I thought that EVK has wm8524?


On Wed, Jan 11, 2023 at 9:31 AM Hardevsinh Palaniya
<[email protected]> wrote:
>
> From: Hardevsinh Palaniya <[email protected]>
> Date: Sat, 7 Jan 2023 17:08:28 +0530
> Subject: [PATCH] Support for MAX98090/91 codec in iMX8MM evk
>
> - Adding node for MAX98090/91 in dts imx8mm-evk.dtsi
> - Adding tristate option in <sound/soc/codecs/Kconfig>

This should come as a separate patch.

2023-01-13 06:06:40

by Hardevsinh Palaniya

[permalink] [raw]
Subject: Re: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

From d2001cdbc2fda3345af307b4cf3d0f2e53d80c35 Mon Sep 17 00:00:00 2001
From: Hardevsinh Palaniya <[email protected]>
Date: Fri, 13 Jan 2023 11:01:22 +0530
Subject: [PATCH] Add dts to support MAX98090/91 with i.MX8MM-evk

- Add sound-max98090 node to support external codec MAX98090/91
- Use i2c3 for i2c communicate with codec
- Use sai5 for i2s communication

Signed-off-by: Hardevsinh Palaniya <[email protected]>

diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts b/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts
new file mode 100644
index 000000000000..d053c586514a
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts
@@ -0,0 +1,65 @@
+#include "imx8mm-evk.dtsi"
+
+/ {
+ sound-max98090 {
+ compatible = "simple-audio-card";
+ simple-audio-card,name = "max98090-audio";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,frame-master = <&cpudai>;
+ simple-audio-card,bitclock-master = <&cpudai>;
+ simple-audio-card,widgets = "Speakers", "Speakers";
+ simple-audio-card,routing =
+ "Speakers", "SPKR",
+ "Speakers", "SPKL",
+ "IN1", "MICBIAS",
+ "MIC1","IN1",
+ "MIC2","IN1";
+
+ cpudai: simple-audio-card,cpu {
+ sound-dai = <&sai5>;
+ dai-tdm-slot-num = <2>;
+ dai-tdm-slot-width = <32>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&max98090>;
+ clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
+ };
+ };
+}
+
+&i2c3 {
+ max98090: audio-codec@10 {
+ compatible = "maxim,max98090","maxim,max98091";
+ #sound-dai-ceddlls = <0>;
+ reg = <0x10>;
+ clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
+ clock-names = "mclk";
+ };
+}
+
+&sai5 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sai5>;
+ assigned-clocks = <&clk IMX8MM_CLK_SAI5>;
+ assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL1_OUT>;
+ assigned-clock-rates = <24576000>;
+ clocks = <&clk IMX8MM_CLK_SAI5_IPG>, <&clk IMX8MM_CLK_DUMMY>,
+ <&clk IMX8MM_CLK_SAI5_ROOT>, <&clk IMX8MM_CLK_DUMMY>,
+ <&clk IMX8MM_CLK_DUMMY>, <&clk IMX8MM_AUDIO_PLL1_OUT>,
+ <&clk IMX8MM_AUDIO_PLL2_OUT>;
+ clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
+ status = "okay";
+};
+
+&iomuxc {
+ pinctrl_sai5: sai5grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI5_MCLK_SAI5_MCLK 0xd6
+ MX8MM_IOMUXC_SAI5_RXD2_SAI5_TX_BCLK 0xd6
+ MX8MM_IOMUXC_SAI5_RXD1_SAI5_TX_SYNC 0xd6
+ MX8MM_IOMUXC_SAI5_RXD0_SAI5_RX_DATA0 0xd6
+ MX8MM_IOMUXC_SAI5_RXD3_SAI5_TX_DATA0 0xd6
+ >;
+ }
+}
--
2.25.1
________________________________________
From: Daniel Baluta <[email protected]>
Sent: Wednesday, January 11, 2023 5:26 PM
To: Hardevsinh Palaniya; Daniel Baluta
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH] Support for MAX98090/91 codec in iMX8MM evk


> I have added support for the external codec MAX98091 with I.MX8MM-EVK.

Please fix your email client to start sending email in text format only.

Now, going back to the matter at hand.

I do think that for an external codec we should find a smarter way of enabling it.

What would happen if you enable MAX codec in the dts but expander board is not plugged in?

Maybe create a separate dts which includes imx8mm-evk.dtsi?


2023-01-13 08:51:37

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH] Support for MAX98090/91 codec in iMX8MM evk

On 13/01/2023 06:50, Hardevsinh Palaniya wrote:
> From d2001cdbc2fda3345af307b4cf3d0f2e53d80c35 Mon Sep 17 00:00:00 2001
> From: Hardevsinh Palaniya <[email protected]>
> Date: Fri, 13 Jan 2023 11:01:22 +0530

That's still not correct patch format.

> Subject: [PATCH] Add dts to support MAX98090/91 with i.MX8MM-evk

That's still not correct subject. You already got this comment and
ignored it.

Your recipient list is enormous. Use get_maintainers.pl. You already got
this comment and ignored it.

If you intend to ignore all the comments, then this is NAK.

This is v2? Patch subject should be marked with it. You need to add
changelog.

>
> - Add sound-max98090 node to support external codec MAX98090/91

Why? Explain what you want to achieve and why do you do it.

> - Use i2c3 for i2c communicate with codec
> - Use sai5 for i2s communication
>
> Signed-off-by: Hardevsinh Palaniya <[email protected]>
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts b/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts
> new file mode 100644
> index 000000000000..d053c586514a
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx8mm-evk-max98090-91.dts

That's a dead code without Makefile.

Missing bindings.

> @@ -0,0 +1,65 @@
> +#include "imx8mm-evk.dtsi"
> +
> +/ {
> + sound-max98090 {
> + compatible = "simple-audio-card";
> + simple-audio-card,name = "max98090-audio";
> + simple-audio-card,format = "i2s";
> + simple-audio-card,frame-master = <&cpudai>;
> + simple-audio-card,bitclock-master = <&cpudai>;
> + simple-audio-card,widgets = "Speakers", "Speakers";
> + simple-audio-card,routing =
> + "Speakers", "SPKR",
> + "Speakers", "SPKL",
> + "IN1", "MICBIAS",
> + "MIC1","IN1",
> + "MIC2","IN1";
> +
> + cpudai: simple-audio-card,cpu {
> + sound-dai = <&sai5>;
> + dai-tdm-slot-num = <2>;
> + dai-tdm-slot-width = <32>;
> + };
> +
> + simple-audio-card,codec {
> + sound-dai = <&max98090>;
> + clocks = <&clk IMX8MM_CLK_SAI5_ROOT>;
> + };
> + };
> +}
> +
> +&i2c3 {
> + max98090: audio-codec@10 {
> + compatible = "maxim,max98090","maxim,max98091";

You either ignored the comment or misread it. Go back to previous code.

> + #sound-dai-ceddlls = <0>;

This is no way working... Test your code against bindings. Please run
`make dtbs_check` (see
Documentation/devicetree/bindings/writing-schema.rst for instructions).


Best regards,
Krzysztof