On Wed, Aug 3, 2016 at 11:42 PM, Emily Deng <Emily.Deng at amd.com> wrote: > For virtual display feature, add one connector type in amdgpu_connector_add. > > Signed-off-by: Emily Deng <Emily.Deng at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 95 ++++++++++++++++++++++++++ > 1 file changed, 95 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c > index cb07da4..e40724a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c > @@ -1504,6 +1504,86 @@ static const struct drm_connector_funcs amdgpu_connector_edp_funcs = { > .force = amdgpu_connector_dvi_force, > }; > > +static struct drm_encoder * > +amdgpu_connector_virtual_encoder(struct drm_connector *connector) > +{ > + int enc_id = connector->encoder_ids[0]; > + struct drm_encoder *encoder; > + int i; > + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { > + if (connector->encoder_ids[i] == 0) > + break; > + > + encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); > + if (!encoder) > + continue; > + > + if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL) > + return encoder; > + } > + > + /* pick the first one */ > + if (enc_id) > + return drm_encoder_find(connector->dev, enc_id); > + return NULL; > +} > + > +static int amdgpu_connector_virtual_get_modes(struct drm_connector *connector) > +{ > + struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector); > + > + if (encoder) { > + amdgpu_connector_add_common_modes(encoder, connector); > + } > + > + return 0; > +} > + > +static int amdgpu_connector_virtual_mode_valid(struct drm_connector *connector, > + struct drm_display_mode *mode) > +{ > + return MODE_OK; > +} > + > +int amdgpu_connector_virtual_dpms(struct drm_connector *connector, int mode) > +{ > + return 0; > +} > + > +static enum drm_connector_status > + > +amdgpu_connector_virtual_detect(struct drm_connector *connector, bool force) > +{ > + return connector_status_connected; > +} > + > +int amdgpu_connector_virtual_set_property(struct drm_connector *connector, > + struct drm_property *property, > + uint64_t val) > +{ > + return 0; > +} > + > +static void amdgpu_connector_virtual_force(struct drm_connector *connector) > +{ > + return; > +} > + > +static const struct drm_connector_helper_funcs amdgpu_connector_virtual_helper_funcs = { > + .get_modes = amdgpu_connector_virtual_get_modes, > + .mode_valid = amdgpu_connector_virtual_mode_valid, > + .best_encoder = amdgpu_connector_virtual_encoder, > +}; > + > +static const struct drm_connector_funcs amdgpu_connector_virtual_funcs = { > + .dpms = amdgpu_connector_virtual_dpms, > + .detect = amdgpu_connector_virtual_detect, > + .fill_modes = drm_helper_probe_single_connector_modes, > + .set_property = amdgpu_connector_virtual_set_property, > + .destroy = amdgpu_connector_destroy, > + .force = amdgpu_connector_virtual_force, > +}; > + > void > amdgpu_connector_add(struct amdgpu_device *adev, > uint32_t connector_id, > @@ -1889,6 +1969,21 @@ amdgpu_connector_add(struct amdgpu_device *adev, > connector->interlace_allowed = false; > connector->doublescan_allowed = false; > break; > + case DRM_MODE_CONNECTOR_VIRTUAL: > + amdgpu_dig_connector = kzalloc(sizeof(struct amdgpu_connector_atom_dig), GFP_KERNEL); > + if (!amdgpu_dig_connector) > + goto failed; > + amdgpu_connector->con_priv = amdgpu_dig_connector; > + drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_virtual_funcs, connector_type); > + drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_virtual_helper_funcs); > + drm_object_attach_property(&amdgpu_connector->base.base, > + dev->mode_config.scaling_mode_property, > + DRM_MODE_SCALE_FULLSCREEN); No need to expose a the scaling property. Please remove it. > + subpixel_order = SubPixelHorizontalRGB; > + connector->interlace_allowed = false; > + connector->doublescan_allowed = false; > + > + break; > } > } > > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx