diff options
author | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2013-06-12 14:05:19 +0200 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2013-06-12 14:07:36 +0200 |
commit | a299400b8404f935e5e2bc6a5b9c17821844bd0d (patch) | |
tree | f1b87c4dbcc4f1008ce168a2649ec3719471eb53 | |
parent | a62d5e60896166be88fcf3778921b8d10baec2c1 (diff) |
modesetting: probe only succeeds if connectors are detected
This will prevent modesetting being used for outputless intel or nvidia cards.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
-rw-r--r-- | src/driver.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/driver.c b/src/driver.c index c3d78be..cc526f6 100644 --- a/src/driver.c +++ b/src/driver.c @@ -201,12 +201,25 @@ static int open_hw(char *dev) return fd; } +static int check_outputs(int fd) +{ + drmModeResPtr res = drmModeGetResources(fd); + int ret; + + if (!res) + return FALSE; + ret = res->count_connectors > 0; + drmModeFreeResources(res); + return ret; +} + static Bool probe_hw(char *dev) { int fd = open_hw(dev); if (fd != -1) { + int ret = check_outputs(fd); close(fd); - return TRUE; + return ret; } return FALSE; } @@ -226,7 +239,7 @@ ms_DRICreatePCIBusID(const struct pci_device *dev) static Bool probe_hw_pci(char *dev, struct pci_device *pdev) { - int fd = open_hw(dev); + int ret = FALSE, fd = open_hw(dev); char *id, *devid; drmSetVersion sv; @@ -247,13 +260,12 @@ static Bool probe_hw_pci(char *dev, struct pci_device *pdev) devid = ms_DRICreatePCIBusID(pdev); close(fd); - if (!id || !devid) - return FALSE; - - if (!strcmp(id, devid)) - return TRUE; + if (id && devid && !strcmp(id, devid)) + ret = check_outputs(fd); - return FALSE; + free(id); + free(devid); + return ret; } static const OptionInfoRec * AvailableOptions(int chipid, int busid) |