On Fri, 2009-05-22 at 20:15 +0800, Ma Ling wrote: > We use connector type id as sequence to avoid duplicate connector name. > However for some connectors that advertise multiple functions > we have to meet the same issue, i.e. connector advertise two functions- > DVI and VGA, actually only VGA is real one, in init function card0-VGA-1 > is allocated for CRT, and card0-DVI-D-1 is allocated for DVI, but until > detection process complete we could be aware of VGA, not DVI for this > connector, > then we change constructed connector type as VGA, which cause that > the name card0-VGA-1 would be allocated to both a CRT and that connector. > The patch intends to avoid above case by exporting get and put connector type > id.
This whole renaming connectors thing seems broken to me. Whatever detection is required should be done once at init, and appropriate connectors created. Is there something preventing that? > Signed-off-by: Ma Ling <[email protected]> > --- > drivers/gpu/drm/drm_crtc.c | 14 ++++++++++++-- > drivers/gpu/drm/drm_sysfs.c | 3 +++ > include/drm/drm_crtc.h | 3 +++ > 3 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 94a7688..a876f71 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -148,6 +148,16 @@ static struct drm_conn_prop_enum_list > drm_connector_enum_list[] = > { DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 }, > }; > > +int drm_get_connector_type_id(struct drm_connector *connector) > +{ > + return ++drm_connector_enum_list[connector->connector_type].count; > +} > + > +void drm_put_connector_type_id(struct drm_connector *connector) > +{ > + --drm_connector_enum_list[connector->connector_type].count; > +} > + > static struct drm_prop_enum_list drm_encoder_enum_list[] = > { { DRM_MODE_ENCODER_NONE, "None" }, > { DRM_MODE_ENCODER_DAC, "DAC" }, > @@ -451,8 +461,7 @@ void drm_connector_init(struct drm_device *dev, > connector->funcs = funcs; > drm_mode_object_get(dev, &connector->base, DRM_MODE_OBJECT_CONNECTOR); > connector->connector_type = connector_type; > - connector->connector_type_id = > - ++drm_connector_enum_list[connector_type].count; /* TODO */ > + connector->connector_type_id = drm_get_connector_type_id(connector); > INIT_LIST_HEAD(&connector->user_modes); > INIT_LIST_HEAD(&connector->probed_modes); > INIT_LIST_HEAD(&connector->modes); > @@ -485,6 +494,7 @@ void drm_connector_cleanup(struct drm_connector > *connector) > struct drm_device *dev = connector->dev; > struct drm_display_mode *mode, *t; > > + drm_put_connector_type_id(connector); > list_for_each_entry_safe(mode, t, &connector->probed_modes, head) > drm_mode_remove(connector, mode); > > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index 8f93729..b56c0b9 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -343,6 +343,8 @@ int drm_sysfs_connector_add(struct drm_connector > *connector) > /* We shouldn't get called more than once for the same connector */ > BUG_ON(device_is_registered(&connector->kdev)); > > + drm_put_connector_type_id(connector); > + drm_get_connector_type_id(connector); > connector->kdev.parent = &dev->primary->kdev; > connector->kdev.class = drm_class; > connector->kdev.release = drm_sysfs_device_release; > @@ -428,6 +430,7 @@ void drm_sysfs_connector_remove(struct drm_connector > *connector) > DRM_DEBUG("removing \"%s\" from sysfs\n", > drm_get_connector_name(connector)); > > + drm_put_connector_type_id(connector); > for (i = 0; i < ARRAY_SIZE(connector_attrs); i++) > device_remove_file(&connector->kdev, &connector_attrs[i]); > sysfs_remove_bin_file(&connector->kdev.kobj, &edid_attr); > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index 3c1924c..64ce824 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -733,4 +733,7 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device > *dev, > extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, > void *data, struct drm_file *file_priv); > extern bool drm_detect_hdmi_monitor(struct edid *edid); > + > +extern int drm_get_connector_type_id(struct drm_connector *connector); > +extern void drm_put_connector_type_id(struct drm_connector *connector); > #endif /* __DRM_CRTC_H__ */ > -- > 1.5.4.4 > > > > _______________________________________________ > Intel-gfx mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Eric Anholt [email protected] [email protected]
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------------ Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers & brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, & iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, & Big Spaceship. http://www.creativitycat.com
-- _______________________________________________ Dri-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/dri-devel
