Hello,
I have a custom board with i.MX8QM and I'm noticing that the mclk0 output is not enabled. This worked fine on Linux 5.15, but now that I've upgraded to Linux 6.1 the mclk0 is no longer working. Please see clock summary below... the frequency of the clock is correct, but it is not enabled. How do I get the mclk to be enabled?
cat /sys/kernel/debug/clk/clk_summary
enable prepare protect duty hardware
clock count count count rate accuracy phase cycle enable
-------------------------------------------------------------------------------------------------------
audio_rec_clk0_clk 0 0 0 24576000 0 0 50000 Y
aud_rec_clk0_lpcg_clk 0 0 0 24576000 0 0 50000 ?
acm_aud_clk0_sel 0 0 0 24576000 0 0 50000 Y
acm_aud_clk1_sel 0 0 0 24576000 0 0 50000 Y
acm_mclkout0_sel 0 0 0 24576000 0 0 50000 Y
mclkout0_lpcg_clk 0 0 0 24576000 0 0 50000 ?
acm_mclkout1_sel 0 0 0 24576000 0 0 50000 Y
mclkout1_lpcg_clk 0 0 0 24576000 0 0 50000 ?
Device tree:
sound_card: sound-card {
compatible = "simple-audio-card";
simple-audio-card,name = "PCM3168A";
simple-audio-card,aux-devs = <&>;
simple-audio-card,widgets =
"Speaker", "Channel1out",
"Speaker", "Channel2out",
"Speaker", "Channel3out",
"Speaker", "Channel4out",
"Speaker", "Channel5out",
"Speaker", "Channel6out",
"Speaker", "Channel7out",
"Speaker", "Channel8out",
"Microphone", "Channel1in",
"Microphone", "Channel2in",
"Line", "Channel3in",
"Line", "Channel4in",
"Microphone", "Channel5in",
"Microphone", "Channel6in";
simple-audio-card,routing =
"Channel1out", "AOUT1L",
"Channel2out", "AOUT1R",
"Channel3out", "AOUT2L",
"Channel4out", "AOUT2R",
"Channel5out", "AOUT3L",
"Channel6out", "AOUT3R",
"Channel7out", "AOUT4L",
"Channel8out", "AOUT4R",
"Channel1in", "AIN1L",
"Channel2in", "AIN1R",
"Channel3in", "AIN2L",
"Channel4in", "AIN2R",
"Channel5in", "AIN3L",
"Channel6in", "AIN3R";
simple-audio-card,dai-link@0 {
format = "left_j";
bitclock-master = <&snd_cpu>;
frame-master = <&snd_cpu>;
mclk-fs = <512>;
snd_cpu: cpu {
sound-dai = <&sai0>;
clocks = <&mclkout0_lpcg 0>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
};
pcm3168_dac: codec {
sound-dai = <&pcm3168a 0>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
};
};
simple-audio-card,dai-link@2 {
format = "left_j";
bitclock-master = <&mic_cpu>;
frame-master = <&mic_cpu>;
mclk-fs = <512>;
mic_cpu: cpu {
sound-dai = <&sai0>;
clocks = <&mclkout0_lpcg 0>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
};
pcm3168_adc: codec {
sound-dai = <&pcm3168a 1>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
};
};
};
&sai0 {
#sound-dai-cells = <0>;
assigned-clocks = <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>,
<&sai0_lpcg 0>;
assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>;
clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai0>;
status = "okay";
};
&i2c0 {
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c0>;
status = "okay";
// Audio Codec (8-channel output, 6-channel input)
pcm3168a: audio-codec@44 {
compatible = "ti,pcm3168a";
reg = <0x44>;
reset-gpios = <&lsio_gpio4 24 GPIO_ACTIVE_LOW>;
clocks = <&mclkout0_lpcg 0>;
clock-names = "scki";
clock-frequency = <24576000>;
assigned-clocks = <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>,
<&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>,
<&mclkout0_lpcg 0>;
assigned-clock-rates = <786432000>, <49152000>, <24576000>, <49152000>;
#sound-dai-cells = <1>;
VDD1-supply = <®_3v3>;
VDD2-supply = <®_3v3>;
VCCAD1-supply = <®_5v0>;
VCCAD2-supply = <®_5v0>;
VCCDA1-supply = <®_5v0>;
VCCDA2-supply = <®_5v0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_codec_clk &pinctrl_audio_reset>;
};
};
pinctrl_codec_clk: codec_clk {
fsl,pins = <
IMX8QM_MCLK_OUT0_AUD_ACM_MCLK_OUT0 0xc0000020
>;
};