xf86drmMode: introduce drmModeConnectorGetPossibleCrtcs

Nowadays, users don't really care about encoders except for retrieving
the list of CRTCs compatible with a connector. Introduce a new function
so that users no longer need to deal with encoders.

This is a re-do of [1], but with a slightly different API.

Signed-off-by: Simon Ser <contact@emersion.fr>

[1]: https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/102
main
Simon Ser 2022-01-21 23:14:50 +01:00
parent 0427c1f669
commit 3ee004ef52
3 changed files with 37 additions and 0 deletions

View File

@ -103,6 +103,7 @@ drmModeAtomicGetCursor
drmModeAtomicMerge drmModeAtomicMerge
drmModeAtomicSetCursor drmModeAtomicSetCursor
drmModeAttachMode drmModeAttachMode
drmModeConnectorGetPossibleCrtcs
drmModeConnectorSetProperty drmModeConnectorSetProperty
drmModeCreateLease drmModeCreateLease
drmModeCreatePropertyBlob drmModeCreatePropertyBlob

View File

@ -610,6 +610,29 @@ drm_public drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, uint32_t conne
return _drmModeGetConnector(fd, connector_id, 0); return _drmModeGetConnector(fd, connector_id, 0);
} }
drm_public uint32_t drmModeConnectorGetPossibleCrtcs(int fd,
const drmModeConnector *connector)
{
drmModeEncoder *encoder;
int i;
uint32_t possible_crtcs;
possible_crtcs = 0;
for (i = 0; i < connector->count_encoders; i++) {
encoder = drmModeGetEncoder(fd, connector->encoders[i]);
if (!encoder) {
return 0;
}
possible_crtcs |= encoder->possible_crtcs;
drmModeFreeEncoder(encoder);
}
if (possible_crtcs == 0)
errno = ENOENT;
return possible_crtcs;
}
drm_public int drmModeAttachMode(int fd, uint32_t connector_id, drmModeModeInfoPtr mode_info) drm_public int drmModeAttachMode(int fd, uint32_t connector_id, drmModeModeInfoPtr mode_info)
{ {
struct drm_mode_mode_cmd res; struct drm_mode_mode_cmd res;

View File

@ -380,6 +380,19 @@ extern drmModeConnectorPtr drmModeGetConnector(int fd,
extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd,
uint32_t connector_id); uint32_t connector_id);
/**
* Get a bitmask of CRTCs a connector is compatible with.
*
* The bits reference CRTC indices. If the n-th CRTC is compatible with the
* connector, the n-th bit will be set. The indices are taken from the array
* returned by drmModeGetResources(). The indices are different from the object
* IDs.
*
* Zero is returned on error.
*/
extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd,
const drmModeConnector *connector);
/** /**
* Attaches the given mode to an connector. * Attaches the given mode to an connector.
*/ */