Message ID | 1400640904-16847-7-git-send-email-airlied@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
This one looks fine to me. Reviewed-by: Todd Previte <tprevite@gmail.com> > Dave Airlie <mailto:airlied@gmail.com> > Tuesday, May 20, 2014 7:54 PM > From: Dave Airlie <airlied@redhat.com> > > This property will be used by the MST code to provide userspace > with a path to parse so it can recognise connectors around hotplugs. > > Signed-off-by: Dave Airlie <airlied@redhat.com> > --- > drivers/gpu/drm/drm_crtc.c | 26 ++++++++++++++++++++++++++ > include/drm/drm_crtc.h | 5 +++++ > 2 files changed, 31 insertions(+) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 8bf87a6..06b9255 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -1165,6 +1165,7 @@ static int > drm_mode_create_standard_connector_properties(struct drm_device *dev) > { > struct drm_property *edid; > struct drm_property *dpms; > + struct drm_property *dev_path; > > /* > * Standard properties (apply to all connectors) > @@ -1179,6 +1180,12 @@ static int > drm_mode_create_standard_connector_properties(struct drm_device *dev) > ARRAY_SIZE(drm_dpms_enum_list)); > dev->mode_config.dpms_property = dpms; > > + dev_path = drm_property_create(dev, > + DRM_MODE_PROP_BLOB | > + DRM_MODE_PROP_IMMUTABLE, > + "PATH", 0); > + dev->mode_config.path_property = dev_path; > + > return 0; > } > > @@ -3637,6 +3644,25 @@ done: > return ret; > } > > +int drm_mode_connector_set_path_property(struct drm_connector *connector, > + char *path) > +{ > + struct drm_device *dev = connector->dev; > + int ret, size; > + size = strlen(path) + 1; > + > + connector->path_blob_ptr = drm_property_create_blob(connector->dev, > + size, path); > + if (!connector->path_blob_ptr) > + return -EINVAL; > + > + ret = drm_object_property_set_value(&connector->base, > + dev->mode_config.path_property, > + connector->path_blob_ptr->base.id); > + return ret; > +} > +EXPORT_SYMBOL(drm_mode_connector_set_path_property); > + > /** > * drm_mode_connector_update_edid_property - update the edid property > of a connector > * @connector: drm connector > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index 55bc523..e33959b 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -500,6 +500,8 @@ struct drm_connector { > struct drm_property_blob *edid_blob_ptr; > struct drm_object_properties properties; > > + struct drm_property_blob *path_blob_ptr; > + > uint8_t polled; /* DRM_CONNECTOR_POLL_* */ > > /* requested DPMS state */ > @@ -774,6 +776,7 @@ struct drm_mode_config { > struct list_head property_blob_list; > struct drm_property *edid_property; > struct drm_property *dpms_property; > + struct drm_property *path_property; > struct drm_property *plane_type_property; > > /* DVI-I properties */ > @@ -926,6 +929,8 @@ extern void drm_mode_config_init(struct drm_device > *dev); > extern void drm_mode_config_reset(struct drm_device *dev); > extern void drm_mode_config_cleanup(struct drm_device *dev); > > +extern int drm_mode_connector_set_path_property(struct drm_connector > *connector, > + char *path); > extern int drm_mode_connector_update_edid_property(struct > drm_connector *connector, > struct edid *edid); > extern int drm_object_property_set_value(struct drm_mode_object *obj, > Dave Airlie <mailto:airlied@gmail.com> > Tuesday, May 20, 2014 7:54 PM > Hey, > > So this set is pretty close to what I think we should be merging > initially, > > Since the last set, it makes fbcon and suspend/resume work a lot better, > > I've also fixed a couple of bugs in -intel that make things work a lot > better. > > I've bashed on this a bit using kms-flip from intel-gpu-tools, hacked > to add 3 monitor support. > > It still generates a fair few i915 state checker backtraces, and some > of them are fairly hard to work out, it might be we should just tone > down the state checker for encoders/connectors with no actual hw backing > them. > > Dave. > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 8bf87a6..06b9255 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1165,6 +1165,7 @@ static int drm_mode_create_standard_connector_properties(struct drm_device *dev) { struct drm_property *edid; struct drm_property *dpms; + struct drm_property *dev_path; /* * Standard properties (apply to all connectors) @@ -1179,6 +1180,12 @@ static int drm_mode_create_standard_connector_properties(struct drm_device *dev) ARRAY_SIZE(drm_dpms_enum_list)); dev->mode_config.dpms_property = dpms; + dev_path = drm_property_create(dev, + DRM_MODE_PROP_BLOB | + DRM_MODE_PROP_IMMUTABLE, + "PATH", 0); + dev->mode_config.path_property = dev_path; + return 0; } @@ -3637,6 +3644,25 @@ done: return ret; } +int drm_mode_connector_set_path_property(struct drm_connector *connector, + char *path) +{ + struct drm_device *dev = connector->dev; + int ret, size; + size = strlen(path) + 1; + + connector->path_blob_ptr = drm_property_create_blob(connector->dev, + size, path); + if (!connector->path_blob_ptr) + return -EINVAL; + + ret = drm_object_property_set_value(&connector->base, + dev->mode_config.path_property, + connector->path_blob_ptr->base.id); + return ret; +} +EXPORT_SYMBOL(drm_mode_connector_set_path_property); + /** * drm_mode_connector_update_edid_property - update the edid property of a connector * @connector: drm connector diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 55bc523..e33959b 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -500,6 +500,8 @@ struct drm_connector { struct drm_property_blob *edid_blob_ptr; struct drm_object_properties properties; + struct drm_property_blob *path_blob_ptr; + uint8_t polled; /* DRM_CONNECTOR_POLL_* */ /* requested DPMS state */ @@ -774,6 +776,7 @@ struct drm_mode_config { struct list_head property_blob_list; struct drm_property *edid_property; struct drm_property *dpms_property; + struct drm_property *path_property; struct drm_property *plane_type_property; /* DVI-I properties */ @@ -926,6 +929,8 @@ extern void drm_mode_config_init(struct drm_device *dev); extern void drm_mode_config_reset(struct drm_device *dev); extern void drm_mode_config_cleanup(struct drm_device *dev); +extern int drm_mode_connector_set_path_property(struct drm_connector *connector, + char *path); extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid); extern int drm_object_property_set_value(struct drm_mode_object *obj,