MQS audio for IMx-6ull 256 mb

We’ve configured the dtb and kernel for colibri imx6ull 256mb on a custom carrier board

Please find the details below

  1. patch file attached

  2. uname -a

    Linux colibri-imx6ull-14758037 5.4.193-42230-gb6aa3a9e071f-dirty #2 SMP PREEMPT Wed Feb 18 12:36:22 IST 2026 armv7l armv7l armv7l GNU/Linux

  3. dmesg attached

  4. aplay -l

    **** List of PLAYBACK Hardware Devices ****

    card 0: mqsaudio [mqs-audio], device 0: HiFi fsl-mqs-dai-0 []

    Subdevices: 1/1

    Subdevice #0: subdevice #0

    card 0: mqsaudio [mqs-audio], device 1: HiFi-ASRC-FE (*) []

    Subdevices: 1/1

    Subdevice #0: subdevice #0

  5. speaker-test -D hw:0,0 -c 2 -r 48000

speaker-test 1.2.1

Playback device is hw:0,0

Stream parameters are 48000Hz, S16_LE, 2 channels

Using 16 octaves of pink noise

Rate set to 48000Hz (requested 48000Hz)

Buffer size range from 64 to 16384

Period size range from 32 to 8192

Using max buffer size 16384

Periods = 4

was set period_size = 4096

was set buffer_size = 16384

0 - Front Left

1 - Front Right

Time per period = 5.641515

0 - Front Left

1 - Front Right

Time per period = 5.963883

0 - Front Left

^C 1 - Front Right

Time per period = 2.305626

_____________________________________________

20Feb-mqd_dmesg.log (25.4 KB)

20Feb-mqs.patch (197.8 KB)

The issue is that we are not able to see any signal on pad (SODIMM 31 and 23)

We tried with sodimm 6 and 8 as well but same issue. everything works but no signal on pin

kindly confirm if all the configuration is right

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I can help you troubleshoot the MQS audio configuration on your Colibri iMX6ULL. Based on your output, the audio system appears to be correctly configured at the software level, but you’re not getting signals on the expected pins.

Verification Steps

First, let me help you verify your setup. Could you run the tdx-info command to confirm your exact hardware and OS configuration? This will help ensure we’re providing the most accurate guidance. You can find more information about this command at tdx-info documentation.

Pin Configuration Analysis

For the Colibri iMX6ULL, the MQS audio pins should be:

  • SODIMM 31: MQS Left channel
  • SODIMM 23: MQS Right channel

Since your aplay -l output shows the MQS audio device is detected and speaker-test runs without errors, the issue is likely in the device tree pin configuration.

Common Issues and Solutions

1. Pin Multiplexing Conflicts

Ensure that SODIMM pins 31 and 23 are not being used by other peripherals in your device tree configuration (1). Check for any conflicting pin assignments that might prevent the MQS signals from reaching the physical pins (1).

2. Device Tree Pin Control

The MQS functionality requires proper pinctrl configuration in the device tree (2). Verify that:

  • The MQS pins are correctly muxed to their audio function
  • No other device nodes are claiming these pins
  • The pin control settings match the hardware requirements

3. Hardware Considerations

Since you mentioned this is a custom carrier board:

  • Verify the physical connections from the SoM to your audio output circuitry
  • Check if there are any pull-up/pull-down resistors or other components that might affect the signal
  • Ensure proper power supply to any external audio components

Debugging Steps

  1. Check Pin Status: Use GPIO debugging tools to verify if the pins are being driven by the MQS controller
  2. Review Device Tree: Compare your pin configuration with the reference implementation for Colibri iMX6ULL
  3. Signal Analysis: Use an oscilloscope to check for any signal activity on the pins during audio playback

Device Tree Overlay Approach

If you need to modify the pin configuration, consider creating a device tree overlay (1)(2). This approach allows you to:

  • Override default pin assignments
  • Ensure proper MQS pin multiplexing
  • Avoid conflicts with other peripherals

The fact that your software stack recognizes the audio hardware correctly suggests the core MQS driver is working, so the issue is likely in the pin-level configuration or hardware connectivity.

Best regards,
Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

It is hard to parse your patches. Here’s device tree for imx6ull Iris with MQS output on SODIMM 6 & 8.

/dts-v1/;

#include "imx6ull-colibri-nonwifi.dtsi"
#include "imx6ull-colibri-iris.dtsi"

/ {
	model = "Toradex Colibri iMX6ULL 256MB on Colibri Iris";
	compatible = "toradex,colibri-imx6ull-iris",
		     "toradex,colibri-imx6ull",
		     "fsl,imx6ull";

	sound-mqs {
		compatible = "fsl,imx6ull-mqs",
				"fsl,imx-audio-mqs";
		model = "mqs-audio";
		cpu-dai = <&sai1>;
		asrc-controller = <&asrc>;
		audio-codec = <&mqs>;
		
		status = "okay";
	};

	mqs: mqs {
		compatible = "fsl,imx6sx-mqs";
		gpr = <&gpr>;
		clocks = <&clks IMX6UL_CLK_SAI1>;
		clock-names = "mclk";
		status = "okay";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_mqs>;
	};

};

&atmel_mxt_ts {
	status = "okay";
};

&sai1 {
	status = "okay";

	assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>, <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>, <&clks IMX6UL_CLK_SAI1>;
	assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
	assigned-clock-rates = <0>, <98304000>, <49152000>;
	
};


&iomuxc {
	imx6ull-colibri {
		pinctrl_mqs: mqsgrp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO00__MQS_RIGHT 0x30
				MX6UL_PAD_GPIO1_IO01__MQS_LEFT  0x30
			>;
		};
	};
};

/* reuse ADC pads for MQS */
&adc1 {
	status = "disabled";
};

Thank you for providing this working device tree example for MQS on SODIMM 6 & 8. This is very helpful for troubleshooting your issue.

Key Differences in Your Configuration

Comparing your working example with the typical MQS setup, I can see several important configuration elements that might be missing from your original implementation:

1. Pin Multiplexing Configuration

Your working example correctly configures the pins for MQS functionality (1):

&iomuxc {
    imx6ull-colibri {
        pinctrl_mqs: mqsgrp {
            fsl,pins = <
                MX6UL_PAD_GPIO1_IO00__MQS_RIGHT 0x30
                MX6UL_PAD_GPIO1_IO01__MQS_LEFT  0x30
            >;
        };
    };
};

For the i.MX 6ULL SoC, pin configuration involves assigning a device tree node with the property fsl,pins inside the pin controller node (1). Each pin requires five cells, with the first four often provided by pre-processor macros (1).

2. Clock Configuration

The SAI1 clock configuration is crucial:

&sai1 {
    status = "okay";
    assigned-clocks = <&clks IMX6UL_CLK_SAI1_SEL>, <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>, <&clks IMX6UL_CLK_SAI1>;
    assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
    assigned-clock-rates = <0>, <98304000>, <49152000>;
};

3. Conflict Resolution

Notice how the ADC1 is disabled to avoid pin conflicts:

/* reuse ADC pads for MQS */
&adc1 {
    status = "disabled";
};

This is important because when defining a function for a pin that is already in use by other peripherals, it causes a pin conflict (2). The interface that is currently using the pin must be disabled (2).

For SODIMM 31 & 23 Configuration

If you want to use SODIMM 31 & 23 instead of SODIMM 6 & 8, you’ll need to:

  1. Identify the correct pin macros for SODIMM 31 & 23 in the pin function header file
  2. Check for conflicts with other peripherals using those pins
  3. Disable any conflicting interfaces in your device tree

The pin configuration process involves using pre-processor macros that consist of three parts: a prefix, the pad (or ball) name, and the alternate function name (1).

Troubleshooting Steps

  1. Verify pin assignments match your intended SODIMM pins
  2. Check for pin conflicts by searching the device tree files for existing usage
  3. Ensure proper clock configuration for SAI1
  4. Disable conflicting peripherals that might be using the same pins

Your software configuration appears correct since aplay -l detects the MQS device and speaker-test runs without errors. The issue is likely in the pin multiplexing configuration or pin conflicts.

Best regards,
Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hi @crsl and @Edward!

Thanks for helping, @Edward!

Were you able to test the example @crsl?

Best regards.

Hi @lucas_az.tx and @Edward

Thanks for your response

Our DTS config was same as mentioned by @Edward

The issue was, we had modified sai1 node directly in imx6ull.dtsi file (added some cloack names)
once it was reverted to original file, MQS was functional

Thanks for your support

1 Like