static struct drm_encoder *qxl_best_encoder(struct drm_connector *connector) { struct qxl_output *qxl_output = drm_connector_to_qxl_output(connector); DRM_DEBUG("\n"); return &qxl_output->enc; }
static void qxl_conn_destroy(struct drm_connector *connector) { struct qxl_output *qxl_output = drm_connector_to_qxl_output(connector); drm_sysfs_connector_remove(connector); drm_connector_cleanup(connector); kfree(qxl_output); }
static void qxl_conn_destroy(struct drm_connector *connector) { struct qxl_output *qxl_output = drm_connector_to_qxl_output(connector); drm_connector_unregister(connector); drm_connector_cleanup(connector); kfree(qxl_output); }
static int qxl_add_monitors_config_modes(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct qxl_device *qdev = dev->dev_private; struct qxl_output *output = drm_connector_to_qxl_output(connector); int h = output->index; struct drm_display_mode *mode = NULL; struct qxl_head *head; if (!qdev->client_monitors_config) return 0; head = &qdev->client_monitors_config->heads[h]; mode = drm_cvt_mode(dev, head->width, head->height, 60, false, false, false); mode->type |= DRM_MODE_TYPE_PREFERRED; drm_mode_probed_add(connector, mode); return 1; }
static enum drm_connector_status qxl_conn_detect( struct drm_connector *connector, bool force) { struct qxl_output *output = drm_connector_to_qxl_output(connector); struct drm_device *ddev = connector->dev; struct qxl_device *qdev = ddev->dev_private; int connected; /* The first monitor is always connected */ connected = (output->index == 0) || (qdev->client_monitors_config && qdev->client_monitors_config->count > output->index && qxl_head_enabled(&qdev->client_monitors_config->heads[output->index])); DRM_DEBUG("\n"); return connected ? connector_status_connected : connector_status_disconnected; }