From: Jeevan B <jeevan.b@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: chaitanya.kumar.borah@intel.com, mohammed.bilal@intel.com,
Jeevan B <jeevan.b@intel.com>
Subject: [PATCH i-g-t v3] tests/chamelium/kms_chamelium_audio: Add suspend/resume audio tests
Date: Fri, 15 May 2026 11:57:33 +0530 [thread overview]
Message-ID: <20260515062733.732263-1-jeevan.b@intel.com> (raw)
Add test to validate audio works before and after suspend/resume on
HDMI/DP connector.
v2: Perform a single suspend/resume for all audio combinations.
Re-enable chamelium after suspend and separate pre-suspend
and post-resume validation paths for clearer failure diagnostics.
v3: Drop commit and use igt_assert_f with explicit messages to
distinguish failure in audio tests.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
---
tests/chamelium/kms_chamelium_audio.c | 149 ++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
diff --git a/tests/chamelium/kms_chamelium_audio.c b/tests/chamelium/kms_chamelium_audio.c
index df8d27c0c..5714411ae 100644
--- a/tests/chamelium/kms_chamelium_audio.c
+++ b/tests/chamelium/kms_chamelium_audio.c
@@ -52,6 +52,12 @@
* SUBTEST: hdmi-audio-edid
* Description: Plug a connector with an EDID suitable for audio, check ALSA's
* EDID-Like Data reports the correct audio parameters
+ *
+ * SUBTEST: dp-audio-after-suspend
+ * Description: Verify audio works before and after system suspend/resume
+ *
+ * SUBTEST: hdmi-audio-after-suspend
+ * Description: Verify audio works before and after system suspend/resume
*/
/* Playback parameters control the audio signal we synthesize and send */
@@ -695,6 +701,65 @@ static bool check_audio_configuration(struct alsa *alsa,
return true;
}
+static bool run_audio_test_once(chamelium_data_t *data,
+ struct alsa *alsa,
+ struct chamelium_port *port,
+ snd_pcm_format_t format,
+ int channels,
+ int sampling_rate)
+{
+ struct audio_state state;
+ bool success;
+
+ audio_state_init(&state, data, alsa, port, format, channels,
+ sampling_rate);
+ success = test_audio_frequencies(&state);
+ success &= test_audio_flatline(&state);
+ audio_state_fini(&state);
+
+ return success;
+}
+
+static bool run_audio_tests(chamelium_data_t *data,
+ struct alsa *alsa,
+ struct chamelium_port *port,
+ const char *audio_device)
+{
+ bool run = false;
+ int ret, i, j;
+ int channels, sampling_rate;
+ snd_pcm_format_t format;
+
+ for (i = 0; i < test_sampling_rates_count; i++) {
+ for (j = 0; j < test_formats_count; j++) {
+ ret = alsa_open_output(alsa, audio_device);
+ igt_assert_f(ret >= 0,
+ "Failed to open ALSA output\n");
+
+ format = test_formats[j];
+ channels = PLAYBACK_CHANNELS;
+ sampling_rate = test_sampling_rates[i];
+
+ if (!check_audio_configuration(alsa, format,
+ channels,
+ sampling_rate)) {
+ alsa_close_output(alsa);
+ continue;
+ }
+
+ run = true;
+
+ igt_assert(run_audio_test_once(data, alsa, port,
+ format, channels,
+ sampling_rate));
+
+ alsa_close_output(alsa);
+ }
+ }
+
+ return run;
+}
+
static const char test_display_audio_desc[] =
"Playback various audio signals with various audio formats/rates, "
"capture them and check they are correct";
@@ -789,6 +854,80 @@ static void test_display_audio(chamelium_data_t *data,
free(alsa);
}
+static const char test_display_audio_suspend_resume_desc[] =
+ "Verify audio works before and after system suspend/resume";
+static void test_display_audio_suspend_resume(
+ chamelium_data_t *data,
+ struct chamelium_port *port,
+ const char *audio_device,
+ enum igt_custom_edid_type edid)
+{
+ struct alsa *alsa;
+ igt_output_t *output;
+ igt_plane_t *primary;
+ struct igt_fb fb;
+ drmModeModeInfo *mode;
+ drmModeConnector *connector;
+ int fb_id;
+
+ igt_require(alsa_has_exclusive_access());
+
+ igt_require(chamelium_has_audio_support(data->chamelium,
+ port));
+
+ alsa = alsa_init();
+ igt_assert(alsa);
+
+ igt_modeset_disable_all_outputs(&data->display);
+
+ chamelium_reset_state(&data->display, data->chamelium,
+ port, data->ports,
+ data->port_count);
+
+ output = chamelium_prepare_output(data, port, edid);
+
+ connector = chamelium_port_get_connector(data->chamelium,
+ port, false);
+
+ primary = igt_output_get_plane_type(output,
+ DRM_PLANE_TYPE_PRIMARY);
+ igt_assert(primary);
+
+ igt_assert(connector->count_modes > 0);
+
+ mode = &connector->modes[0];
+
+ fb_id = igt_create_color_pattern_fb(data->drm_fd,
+ mode->hdisplay,
+ mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_MOD_LINEAR,
+ 0, 0, 0, &fb);
+
+ igt_assert(fb_id > 0);
+
+ chamelium_enable_output(data, port, output,
+ mode, &fb);
+
+ igt_assert_f(run_audio_tests(data, alsa, port, audio_device),
+ "Audio test failed before suspend\n");
+
+ igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
+ SUSPEND_TEST_NONE);
+
+ chamelium_enable_output(data, port, output,
+ mode, &fb);
+
+ igt_assert_f(run_audio_tests(data, alsa, port, audio_device),
+ "Audio test failed after suspend\n");
+
+ igt_remove_fb(data->drm_fd, &fb);
+
+ drmModeFreeConnector(connector);
+
+ free(alsa);
+}
+
static const char test_display_audio_edid_desc[] =
"Plug a connector with an EDID suitable for audio, check ALSA's "
"EDID-Like Data reports the correct audio parameters";
@@ -866,6 +1005,11 @@ int igt_main()
connector_subtest("dp-audio-edid", DisplayPort, &data, test_display_audio_edid,
IGT_CUSTOM_EDID_DP_AUDIO);
+ igt_describe(test_display_audio_suspend_resume_desc);
+ connector_subtest("dp-audio-after-suspend", DisplayPort, &data,
+ test_display_audio_suspend_resume,
+ "HDMI", IGT_CUSTOM_EDID_DP_AUDIO);
+
igt_describe("HDMI tests");
igt_describe(test_display_audio_desc);
@@ -876,6 +1020,11 @@ int igt_main()
connector_subtest("hdmi-audio-edid", HDMIA, &data, test_display_audio_edid,
IGT_CUSTOM_EDID_HDMI_AUDIO);
+ igt_describe(test_display_audio_suspend_resume_desc);
+ connector_subtest("hdmi-audio-after-suspend", HDMIA, &data,
+ test_display_audio_suspend_resume,
+ "HDMI", IGT_CUSTOM_EDID_HDMI_AUDIO);
+
igt_fixture() {
igt_display_fini(&data.display);
drm_close_driver(data.drm_fd);
--
2.43.0
next reply other threads:[~2026-05-15 6:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 6:27 Jeevan B [this message]
2026-05-15 10:11 ` ✓ Xe.CI.BAT: success for tests/chamelium/kms_chamelium_audio: Add suspend/resume audio tests (rev4) Patchwork
2026-05-15 10:41 ` ✗ i915.CI.BAT: failure " Patchwork
2026-05-16 0:09 ` ✗ Xe.CI.FULL: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260515062733.732263-1-jeevan.b@intel.com \
--to=jeevan.b@intel.com \
--cc=chaitanya.kumar.borah@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=mohammed.bilal@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.