mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2026-08-17 11:22:56 +00:00
lib: add function to change connector states
Add an API function and a test program to force a particular state on a
connector.
v2: mask the correct part of the minor number to get the card number (Chris
Wilson)
Signed-off-by: Thomas Wood <thomas.wood@intel.com>
This commit is contained in:
@@ -398,6 +398,63 @@ err1:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int get_card_number(int fd)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
/* find the minor number of the device */
|
||||
fstat(fd, &buf);
|
||||
|
||||
return minor(buf.st_rdev) & 0x3f;
|
||||
}
|
||||
|
||||
/**
|
||||
* kmstest_force_connector:
|
||||
* @fd: drm file descriptor
|
||||
* @connector: connector
|
||||
* @state: state to force on @connector
|
||||
*
|
||||
* Force the specified state on the specified connector.
|
||||
*/
|
||||
void kmstest_force_connector(int drm_fd, drmModeConnector *connector, enum
|
||||
kmstest_force_connector_state state)
|
||||
{
|
||||
char *path;
|
||||
const char *value;
|
||||
int debugfs_fd, ret;
|
||||
|
||||
switch (state) {
|
||||
case FORCE_CONNECTOR_ON:
|
||||
value = "on";
|
||||
break;
|
||||
case FORCE_CONNECTOR_DIGITAL:
|
||||
value = "digital";
|
||||
break;
|
||||
case FORCE_CONNECTOR_OFF:
|
||||
value = "off";
|
||||
break;
|
||||
|
||||
default:
|
||||
case FORCE_CONNECTOR_UNSPECIFIED:
|
||||
value = "unspecified";
|
||||
break;
|
||||
}
|
||||
|
||||
asprintf(&path, "/sys/kernel/debug/dri/%d/%s-%d/force",
|
||||
get_card_number(drm_fd),
|
||||
kmstest_connector_type_str(connector->connector_type),
|
||||
connector->connector_type_id);
|
||||
debugfs_fd = open(path, O_WRONLY | O_TRUNC);
|
||||
free(path);
|
||||
|
||||
igt_assert(debugfs_fd != -1);
|
||||
|
||||
ret = write(debugfs_fd, value, strlen(value));
|
||||
close(debugfs_fd);
|
||||
|
||||
igt_assert(ret != -1);
|
||||
}
|
||||
|
||||
void kmstest_free_connector_config(struct kmstest_connector_config *config)
|
||||
{
|
||||
drmModeFreeCrtc(config->crtc);
|
||||
|
||||
@@ -82,11 +82,27 @@ struct kmstest_connector_config {
|
||||
int pipe;
|
||||
};
|
||||
|
||||
/**
|
||||
* kmstest_force_connector_state:
|
||||
* @FORCE_CONNECTOR_UNSPECIFIED: Unspecified
|
||||
* @FORCE_CONNECTOR_ON: On
|
||||
* @FORCE_CONNECTOR_DIGITAL: Digital
|
||||
* @FORCE_CONNECTOR_OFF: Off
|
||||
*/
|
||||
enum kmstest_force_connector_state {
|
||||
FORCE_CONNECTOR_UNSPECIFIED,
|
||||
FORCE_CONNECTOR_ON,
|
||||
FORCE_CONNECTOR_DIGITAL,
|
||||
FORCE_CONNECTOR_OFF
|
||||
};
|
||||
|
||||
int kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
|
||||
drmModeModeInfo *mode);
|
||||
int kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
||||
unsigned long crtc_idx_mask,
|
||||
struct kmstest_connector_config *config);
|
||||
void kmstest_force_connector(int fd, drmModeConnector *connector,
|
||||
enum kmstest_force_connector_state state);
|
||||
void kmstest_free_connector_config(struct kmstest_connector_config *config);
|
||||
|
||||
void kmstest_dump_mode(drmModeModeInfo *mode);
|
||||
|
||||
Reference in New Issue
Block a user