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] tests/chamelium/kms_chamelium_audio: Add suspend/resume audio tests
Date: Wed, 13 May 2026 12:05:35 +0530 [thread overview]
Message-ID: <20260513063535.650794-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.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
---
tests/chamelium/kms_chamelium_audio.c | 152 ++++++++++++++++++++++++++
1 file changed, 152 insertions(+)
diff --git a/tests/chamelium/kms_chamelium_audio.c b/tests/chamelium/kms_chamelium_audio.c
index df8d27c0c..067e306c3 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,83 @@ 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(run_audio_tests(data, alsa, port,
+ audio_device));
+
+ igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
+ SUSPEND_TEST_NONE);
+
+ chamelium_enable_output(data, port, output,
+ mode, &fb);
+
+ igt_display_commit2(&data->display,
+ COMMIT_ATOMIC);
+
+ igt_assert(run_audio_tests(data, alsa, port,
+ audio_device));
+
+ 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 +1008,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 +1023,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-13 6:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 6:35 Jeevan B [this message]
2026-05-13 16:20 ` ✗ i915.CI.BAT: failure for tests/chamelium/kms_chamelium_audio: Add suspend/resume audio tests (rev3) Patchwork
2026-05-13 16:26 ` ✓ Xe.CI.BAT: success " Patchwork
2026-05-14 13:23 ` ✗ Xe.CI.FULL: failure " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2026-05-11 4:18 [PATCH i-g-t] tests/chamelium/kms_chamelium_audio: Add suspend/resume audio tests Jeevan B
2026-05-11 6:22 ` Bilal, Mohammed
2026-05-05 18:03 Jeevan B
2026-05-07 5:13 ` Bilal, Mohammed
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=20260513063535.650794-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.