mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-08 00:16:18 +00:00
lib/igt_kms, tests/testdisplay: allow probing of new connector modes
Fixup some fallout from the connector probing changes so testdisplay -m will pick up newly hotplugged displays correctly. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org.
This commit is contained in:
parent
e2c9a023f2
commit
e28acefc5c
@ -533,18 +533,20 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kmstest_get_connector_config:
|
* _kmstest_connector_config:
|
||||||
* @drm_fd: DRM fd
|
* @drm_fd: DRM fd
|
||||||
* @connector_id: DRM connector id
|
* @connector_id: DRM connector id
|
||||||
* @crtc_idx_mask: mask of allowed DRM CRTC indices
|
* @crtc_idx_mask: mask of allowed DRM CRTC indices
|
||||||
* @config: structure filled with the possible configuration
|
* @config: structure filled with the possible configuration
|
||||||
|
* @probe: whether to fully re-probe mode list or not
|
||||||
*
|
*
|
||||||
* This tries to find a suitable configuration for the given connector and CRTC
|
* This tries to find a suitable configuration for the given connector and CRTC
|
||||||
* constraint and fills it into @config.
|
* constraint and fills it into @config.
|
||||||
*/
|
*/
|
||||||
bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
|
||||||
unsigned long crtc_idx_mask,
|
unsigned long crtc_idx_mask,
|
||||||
struct kmstest_connector_config *config)
|
struct kmstest_connector_config *config,
|
||||||
|
bool probe)
|
||||||
{
|
{
|
||||||
drmModeRes *resources;
|
drmModeRes *resources;
|
||||||
drmModeConnector *connector;
|
drmModeConnector *connector;
|
||||||
@ -558,7 +560,11 @@ bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* First, find the connector & mode */
|
/* First, find the connector & mode */
|
||||||
|
if (probe)
|
||||||
|
connector = drmModeGetConnector(drm_fd, connector_id);
|
||||||
|
else
|
||||||
connector = drmModeGetConnectorCurrent(drm_fd, connector_id);
|
connector = drmModeGetConnectorCurrent(drm_fd, connector_id);
|
||||||
|
|
||||||
if (!connector)
|
if (!connector)
|
||||||
goto err2;
|
goto err2;
|
||||||
|
|
||||||
@ -633,6 +639,43 @@ err1:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kmstest_get_connector_config:
|
||||||
|
* @drm_fd: DRM fd
|
||||||
|
* @connector_id: DRM connector id
|
||||||
|
* @crtc_idx_mask: mask of allowed DRM CRTC indices
|
||||||
|
* @config: structure filled with the possible configuration
|
||||||
|
*
|
||||||
|
* This tries to find a suitable configuration for the given connector and CRTC
|
||||||
|
* constraint and fills it into @config.
|
||||||
|
*/
|
||||||
|
bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
||||||
|
unsigned long crtc_idx_mask,
|
||||||
|
struct kmstest_connector_config *config)
|
||||||
|
{
|
||||||
|
return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
|
||||||
|
config, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kmstest_probe_connector_config:
|
||||||
|
* @drm_fd: DRM fd
|
||||||
|
* @connector_id: DRM connector id
|
||||||
|
* @crtc_idx_mask: mask of allowed DRM CRTC indices
|
||||||
|
* @config: structure filled with the possible configuration
|
||||||
|
*
|
||||||
|
* This tries to find a suitable configuration for the given connector and CRTC
|
||||||
|
* constraint and fills it into @config, fully probing the connector in the
|
||||||
|
* process.
|
||||||
|
*/
|
||||||
|
bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
|
||||||
|
unsigned long crtc_idx_mask,
|
||||||
|
struct kmstest_connector_config *config)
|
||||||
|
{
|
||||||
|
return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
|
||||||
|
config, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kmstest_free_connector_config:
|
* kmstest_free_connector_config:
|
||||||
* @config: connector configuration structure
|
* @config: connector configuration structure
|
||||||
|
@ -140,6 +140,9 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
|
|||||||
bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
|
||||||
unsigned long crtc_idx_mask,
|
unsigned long crtc_idx_mask,
|
||||||
struct kmstest_connector_config *config);
|
struct kmstest_connector_config *config);
|
||||||
|
bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
|
||||||
|
unsigned long crtc_idx_mask,
|
||||||
|
struct kmstest_connector_config *config);
|
||||||
void kmstest_free_connector_config(struct kmstest_connector_config *config);
|
void kmstest_free_connector_config(struct kmstest_connector_config *config);
|
||||||
|
|
||||||
void kmstest_set_connector_dpms(int fd, drmModeConnector *connector, int mode);
|
void kmstest_set_connector_dpms(int fd, drmModeConnector *connector, int mode);
|
||||||
|
@ -191,12 +191,19 @@ static void dump_info(void)
|
|||||||
|
|
||||||
static void connector_find_preferred_mode(uint32_t connector_id,
|
static void connector_find_preferred_mode(uint32_t connector_id,
|
||||||
unsigned long crtc_idx_mask,
|
unsigned long crtc_idx_mask,
|
||||||
int mode_num, struct connector *c)
|
int mode_num, struct connector *c,
|
||||||
|
bool probe)
|
||||||
{
|
{
|
||||||
struct kmstest_connector_config config;
|
struct kmstest_connector_config config;
|
||||||
|
bool ret;
|
||||||
|
|
||||||
if (!kmstest_get_connector_config(drm_fd, connector_id, crtc_idx_mask,
|
if (probe)
|
||||||
&config)) {
|
ret = kmstest_probe_connector_config(drm_fd, connector_id,
|
||||||
|
crtc_idx_mask, &config);
|
||||||
|
else
|
||||||
|
ret = kmstest_get_connector_config(drm_fd, connector_id,
|
||||||
|
crtc_idx_mask, &config);
|
||||||
|
if (!ret) {
|
||||||
c->mode_valid = 0;
|
c->mode_valid = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -456,7 +463,7 @@ set_stereo_mode(struct connector *c)
|
|||||||
* Each connector has a corresponding encoder, except in the SDVO case
|
* Each connector has a corresponding encoder, except in the SDVO case
|
||||||
* where an encoder may have multiple connectors.
|
* where an encoder may have multiple connectors.
|
||||||
*/
|
*/
|
||||||
int update_display(void)
|
int update_display(bool probe)
|
||||||
{
|
{
|
||||||
struct connector *connectors;
|
struct connector *connectors;
|
||||||
int c;
|
int c;
|
||||||
@ -488,7 +495,7 @@ int update_display(void)
|
|||||||
connector_find_preferred_mode(connector->id,
|
connector_find_preferred_mode(connector->id,
|
||||||
crtc_idx_mask,
|
crtc_idx_mask,
|
||||||
specified_mode_num,
|
specified_mode_num,
|
||||||
connector);
|
connector, probe);
|
||||||
if (!connector->mode_valid)
|
if (!connector->mode_valid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -513,7 +520,7 @@ int update_display(void)
|
|||||||
connector_find_preferred_mode(connector->id,
|
connector_find_preferred_mode(connector->id,
|
||||||
-1UL,
|
-1UL,
|
||||||
specified_mode_num,
|
specified_mode_num,
|
||||||
connector);
|
connector, probe);
|
||||||
if (!connector->mode_valid)
|
if (!connector->mode_valid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -765,7 +772,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
if (!update_display()) {
|
if (!update_display(false)) {
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto out_stdio;
|
goto out_stdio;
|
||||||
}
|
}
|
||||||
|
@ -32,4 +32,4 @@ gboolean testdisplay_setup_hotplug(void);
|
|||||||
void testdisplay_cleanup_hotplug(void);
|
void testdisplay_cleanup_hotplug(void);
|
||||||
|
|
||||||
/* called by the hotplug code */
|
/* called by the hotplug code */
|
||||||
int update_display(void);
|
int update_display(bool probe);
|
||||||
|
@ -59,7 +59,7 @@ static gboolean hotplug_event(GIOChannel *source, GIOCondition condition,
|
|||||||
|
|
||||||
if (memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
|
if (memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
|
||||||
hotplug && atoi(hotplug) == 1)
|
hotplug && atoi(hotplug) == 1)
|
||||||
update_display();
|
update_display(true);
|
||||||
|
|
||||||
udev_device_unref(dev);
|
udev_device_unref(dev);
|
||||||
out:
|
out:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user