Bring inline with current modesetting-101 branch for connector/encoder changes
This commit is contained in:
parent
000ead4503
commit
cba8b25a7e
|
@ -104,7 +104,7 @@ crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
|
||||||
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
|
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
|
||||||
modesettingPtr ms = modesettingPTR(crtc->scrn);
|
modesettingPtr ms = modesettingPTR(crtc->scrn);
|
||||||
xf86OutputPtr output = config->output[config->compat_output];
|
xf86OutputPtr output = config->output[config->compat_output];
|
||||||
drmModeOutputPtr drm_output = output->driver_private;
|
drmModeConnectorPtr drm_connector = output->driver_private;
|
||||||
struct crtc_private *crtcp = crtc->driver_private;
|
struct crtc_private *crtcp = crtc->driver_private;
|
||||||
drmModeCrtcPtr drm_crtc = crtcp->drm_crtc;
|
drmModeCrtcPtr drm_crtc = crtcp->drm_crtc;
|
||||||
struct drm_mode_modeinfo drm_mode;
|
struct drm_mode_modeinfo drm_mode;
|
||||||
|
@ -125,7 +125,7 @@ crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
|
||||||
strncpy(drm_mode.name, mode->name, DRM_DISPLAY_MODE_LEN);
|
strncpy(drm_mode.name, mode->name, DRM_DISPLAY_MODE_LEN);
|
||||||
|
|
||||||
drmModeSetCrtc(ms->fd, drm_crtc->crtc_id, ms->fb_id, x, y,
|
drmModeSetCrtc(ms->fd, drm_crtc->crtc_id, ms->fb_id, x, y,
|
||||||
&drm_output->output_id, 1, &drm_mode);
|
&drm_connector->connector_id, 1, &drm_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -103,9 +103,9 @@ commit(xf86OutputPtr output)
|
||||||
static xf86OutputStatus
|
static xf86OutputStatus
|
||||||
detect(xf86OutputPtr output)
|
detect(xf86OutputPtr output)
|
||||||
{
|
{
|
||||||
drmModeOutputPtr drm_output = output->driver_private;
|
drmModeConnectorPtr drm_connector = output->driver_private;
|
||||||
|
|
||||||
switch (drm_output->connection) {
|
switch (drm_connector->connection) {
|
||||||
case DRM_MODE_CONNECTED:
|
case DRM_MODE_CONNECTED:
|
||||||
return XF86OutputStatusConnected;
|
return XF86OutputStatusConnected;
|
||||||
case DRM_MODE_DISCONNECTED:
|
case DRM_MODE_DISCONNECTED:
|
||||||
|
@ -118,13 +118,13 @@ detect(xf86OutputPtr output)
|
||||||
static DisplayModePtr
|
static DisplayModePtr
|
||||||
get_modes(xf86OutputPtr output)
|
get_modes(xf86OutputPtr output)
|
||||||
{
|
{
|
||||||
drmModeOutputPtr drm_output = output->driver_private;
|
drmModeConnectorPtr drm_connector = output->driver_private;
|
||||||
struct drm_mode_modeinfo *drm_mode = NULL;
|
struct drm_mode_modeinfo *drm_mode = NULL;
|
||||||
DisplayModePtr modes = NULL, mode = NULL;
|
DisplayModePtr modes = NULL, mode = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < drm_output->count_modes; i++) {
|
for (i = 0; i < drm_connector->count_modes; i++) {
|
||||||
drm_mode = &drm_output->modes[i];
|
drm_mode = &drm_connector->modes[i];
|
||||||
if (drm_mode) {
|
if (drm_mode) {
|
||||||
mode = xcalloc(1, sizeof(DisplayModeRec));
|
mode = xcalloc(1, sizeof(DisplayModeRec));
|
||||||
if (!mode)
|
if (!mode)
|
||||||
|
@ -156,7 +156,7 @@ get_modes(xf86OutputPtr output)
|
||||||
static void
|
static void
|
||||||
destroy(xf86OutputPtr output)
|
destroy(xf86OutputPtr output)
|
||||||
{
|
{
|
||||||
drmModeFreeOutput(output->driver_private);
|
drmModeFreeConnector(output->driver_private);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -220,10 +220,11 @@ output_init(ScrnInfoPtr pScrn)
|
||||||
modesettingPtr ms = modesettingPTR(pScrn);
|
modesettingPtr ms = modesettingPTR(pScrn);
|
||||||
xf86OutputPtr output;
|
xf86OutputPtr output;
|
||||||
drmModeResPtr res;
|
drmModeResPtr res;
|
||||||
drmModeOutputPtr drm_output = NULL;
|
drmModeConnectorPtr drm_connector = NULL;
|
||||||
|
drmModeEncoderPtr drm_encoder = NULL;
|
||||||
drmModeCrtcPtr crtc;
|
drmModeCrtcPtr crtc;
|
||||||
char *name;
|
char *name;
|
||||||
int o, v, p;
|
int c, v, p;
|
||||||
|
|
||||||
res = drmModeGetResources(ms->fd);
|
res = drmModeGetResources(ms->fd);
|
||||||
if (res == 0) {
|
if (res == 0) {
|
||||||
|
@ -231,15 +232,16 @@ output_init(ScrnInfoPtr pScrn)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (o = 0; o < res->count_outputs; o++) {
|
for (c = 0; c < res->count_connectors; c++) {
|
||||||
drm_output = drmModeGetOutput(ms->fd, res->outputs[o]);
|
drm_connector = drmModeGetConnector(ms->fd, res->connectors[c]);
|
||||||
if (!drm_output)
|
if (!drm_connector)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for (p = 0; p < drm_output->count_props; p++) {
|
#if 0
|
||||||
|
for (p = 0; p < drm_connector->count_props; p++) {
|
||||||
drmModePropertyPtr prop;
|
drmModePropertyPtr prop;
|
||||||
|
|
||||||
prop = drmModeGetProperty(ms->fd, drm_output->props[p]);
|
prop = drmModeGetProperty(ms->fd, drm_connector->props[p]);
|
||||||
|
|
||||||
name = NULL;
|
name = NULL;
|
||||||
if (prop) {
|
if (prop) {
|
||||||
|
@ -250,7 +252,7 @@ output_init(ScrnInfoPtr pScrn)
|
||||||
|
|
||||||
for (v = 0; v < prop->count_enums; v++) {
|
for (v = 0; v < prop->count_enums; v++) {
|
||||||
ErrorF("%s %s\n", prop->name, prop->enums[v].name);
|
ErrorF("%s %s\n", prop->name, prop->enums[v].name);
|
||||||
if (drm_output->prop_values[p] == prop->enums[v].value) {
|
if (drm_connector->prop_values[p] == prop->enums[v].value) {
|
||||||
if (!strncmp("Connector Type", prop->name, 14)) {
|
if (!strncmp("Connector Type", prop->name, 14)) {
|
||||||
ErrorF("WE'VE GOT %s\n", prop->enums[v].name);
|
ErrorF("WE'VE GOT %s\n", prop->enums[v].name);
|
||||||
name = xalloc(strlen(prop->enums[v].name));
|
name = xalloc(strlen(prop->enums[v].name));
|
||||||
|
@ -267,16 +269,29 @@ output_init(ScrnInfoPtr pScrn)
|
||||||
|
|
||||||
if (!name)
|
if (!name)
|
||||||
continue;
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
free(name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
name = "Unknown";
|
||||||
|
|
||||||
output = xf86OutputCreate(pScrn, &output_funcs, name);
|
output = xf86OutputCreate(pScrn, &output_funcs, name);
|
||||||
if (!output)
|
if (!output)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
free(name);
|
drm_encoder = drmModeGetEncoder(ms->fd, drm_connector->encoder);
|
||||||
|
if (drm_encoder) {
|
||||||
output->possible_crtcs = drm_output->crtcs;
|
output->possible_crtcs = drm_encoder->crtcs;
|
||||||
output->possible_clones = drm_output->clones;
|
output->possible_clones = drm_encoder->clones;
|
||||||
output->driver_private = drm_output;
|
} else {
|
||||||
|
output->possible_crtcs = 0;
|
||||||
|
output->possible_clones = 0;
|
||||||
|
}
|
||||||
|
output->driver_private = drm_connector;
|
||||||
output->subpixel_order = SubPixelHorizontalRGB;
|
output->subpixel_order = SubPixelHorizontalRGB;
|
||||||
output->interlaceAllowed = FALSE;
|
output->interlaceAllowed = FALSE;
|
||||||
output->doubleScanAllowed = FALSE;
|
output->doubleScanAllowed = FALSE;
|
||||||
|
|
Loading…
Reference in New Issue