[igt-dev] [PATCH i-g-t v2 2/4] lib/igt_pm: Find HDA device when attempting to enable runtime PM
Chris Wilson
chris at chris-wilson.co.uk
Mon Jul 23 12:54:48 UTC 2018
Quoting Tvrtko Ursulin (2018-07-23 13:46:49)
> @@ -130,36 +132,77 @@ static void strchomp(char *str)
> */
> void igt_pm_enable_audio_runtime_pm(void)
> {
> + char *path = NULL;
> + struct dirent *de;
> + DIR *dir;
> int fd;
>
> /* Check if already enabled. */
> if (__igt_pm_audio_runtime_power_save[0])
> return;
>
> - fd = open("/sys/module/snd_hda_intel/parameters/power_save", O_RDWR);
> - if (fd >= 0) {
> - igt_assert(read(fd, __igt_pm_audio_runtime_power_save,
> - sizeof(__igt_pm_audio_runtime_power_save)) > 0);
> - strchomp(__igt_pm_audio_runtime_power_save);
> - igt_install_exit_handler(__igt_pm_audio_runtime_exit_handler);
> - igt_assert_eq(write(fd, "1\n", 2), 2);
> - close(fd);
> - }
> - fd = open("/sys/bus/pci/devices/0000:00:03.0/power/control", O_RDWR);
> - if (fd >= 0) {
> - igt_assert(read(fd, __igt_pm_audio_runtime_control,
> - sizeof(__igt_pm_audio_runtime_control)) > 0);
> - strchomp(__igt_pm_audio_runtime_control);
> - igt_assert_eq(write(fd, "auto\n", 5), 5);
> - close(fd);
> + dir = opendir("/sys/bus/pci/drivers/snd_hda_intel");
> + if (!dir)
> + return;
> +
> + while ((de = readdir(dir))) {
> + const char *prefix = "/sys/bus/pci/devices/";
> + const char *suffix = "/power/control";
> + const char *match = "0000:00:";
> +
> + if (strncmp(de->d_name, match, strlen(match)))
> + continue;
> +
> + path = malloc(strlen(prefix) +
> + strlen(de->d_name) +
> + strlen(suffix) +
> + 1);
> + if (!path)
> + goto err;
> +
> + strcpy(path, prefix);
> + strcat(path, de->d_name);
> + strcat(path, suffix);
if (asprintf(&path, "/sys/bus/pci/devices/%s/power/control", de->d_name) < 0)
goto err;
-Chris
More information about the igt-dev
mailing list