On 04/04/2017 11:52 AM, Daniel Vetter wrote: > - remove docs for internal func, doesn't add value > - add short overview snippet instead explaining that drivers don't > have to bother themselves with reg/unreg concerns > - drop the ttm comment about drmP.h, drmP.h is disappearing ... > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > Documentation/gpu/drm-uapi.rst | 10 ++++++ > drivers/gpu/drm/drm_sysfs.c | 70 ++++++++++++++++-------------------------- > include/drm/drmP.h | 5 +-- > include/drm/drm_sysfs.h | 8 ++--- > 4 files changed, 42 insertions(+), 51 deletions(-) > > diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst > index 76356c86e358..8b0f0e403f0c 100644 > --- a/Documentation/gpu/drm-uapi.rst > +++ b/Documentation/gpu/drm-uapi.rst > @@ -219,6 +219,16 @@ Debugfs Support > .. kernel-doc:: drivers/gpu/drm/drm_debugfs.c > :export: > > +Sysfs Support > +============= > + > +.. kernel-doc:: drivers/gpu/drm/drm_sysfs.c > + :doc: overview > + > +.. kernel-doc:: drivers/gpu/drm/drm_sysfs.c > + :export: > + > + > VBlank event handling > ===================== > > diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c > index 513288b5c2f6..1c5b5ce1fd7f 100644 > --- a/drivers/gpu/drm/drm_sysfs.c > +++ b/drivers/gpu/drm/drm_sysfs.c > @@ -25,6 +25,20 @@ > #define to_drm_minor(d) dev_get_drvdata(d) > #define to_drm_connector(d) dev_get_drvdata(d) > > +/** > + * DOC: overview > + * > + * DRM provides very little additional support to drivers for sysfs > + * interactions, beyond just all the standard stuff. Drivers who want to expose > + * additional sysfs properties and property groups can attach them at either > + * &drm_device.dev or &drm_connector.kdev. > + * > + * Registration is automatically handled when calling drm_dev_register(), or > + * drm_connector_register() in case of hot-plugged connectors. Unregistration is > + * also automatically handled by drm_dev_unregister() and > + * drm_connector_unregister(). > + */ > + > static struct device_type drm_sysfs_device_minor = { > .name = "drm_minor" > }; > @@ -250,15 +264,6 @@ static const struct attribute_group *connector_dev_groups[] = { > NULL > }; > > -/** > - * drm_sysfs_connector_add - add a connector to sysfs > - * @connector: connector to add > - * > - * Create a connector device in sysfs, along with its associated connector > - * properties (so far, connection status, dpms, mode list and edid) and > - * generate a hotplug event so userspace knows there's a new connector > - * available. > - */ > int drm_sysfs_connector_add(struct drm_connector *connector) > { > struct drm_device *dev = connector->dev; > @@ -285,19 +290,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector) > return 0; > } > > -/** > - * drm_sysfs_connector_remove - remove an connector device from sysfs > - * @connector: connector to remove > - * > - * Remove @connector and its associated attributes from sysfs. Note that > - * the device model core will take care of sending the "remove" uevent > - * at this time, so we don't need to do it. > - * > - * Note: > - * This routine should only be called if the connector was previously > - * successfully registered. If @connector hasn't been registered yet, > - * you'll likely see a panic somewhere deep in sysfs code when called. > - */ > void drm_sysfs_connector_remove(struct drm_connector *connector) > { > if (!connector->kdev) > @@ -333,20 +325,6 @@ static void drm_sysfs_release(struct device *dev) > kfree(dev); > } > > -/** > - * drm_sysfs_minor_alloc() - Allocate sysfs device for given minor > - * @minor: minor to allocate sysfs device for > - * > - * This allocates a new sysfs device for @minor and returns it. The device is > - * not registered nor linked. The caller has to use device_add() and > - * device_del() to register and unregister it. > - * > - * Note that dev_get_drvdata() on the new device will return the minor. > - * However, the device does not hold a ref-count to the minor nor to the > - * underlying drm_device. This is unproblematic as long as you access the > - * private data only in sysfs callbacks. device_del() disables those > - * synchronously, so they cannot be called after you cleanup a minor. > - */ > struct device *drm_sysfs_minor_alloc(struct drm_minor *minor) > { > const char *minor_str; > @@ -384,15 +362,13 @@ struct device *drm_sysfs_minor_alloc(struct drm_minor *minor) > } > > /** > - * drm_class_device_register - Register a struct device in the drm class. > + * drm_class_device_register - register new device with the DRM sysfs class > + * @dev: device to register > * > - * @dev: pointer to struct device to register. > - * > - * @dev should have all relevant members pre-filled with the exception > - * of the class member. In particular, the device_type member must > - * be set. > + * Registers a new &struct device within the DRM sysfs class. Essentially only > + * used by ttm to have a place for its global settings. Drivers should never use > + * this. > */ > - > int drm_class_device_register(struct device *dev) > { > if (!drm_class || IS_ERR(drm_class)) > @@ -403,6 +379,14 @@ int drm_class_device_register(struct device *dev) > } > EXPORT_SYMBOL_GPL(drm_class_device_register); > > +/** > + * drm_class_device_unregister - unregister device with the DRM sysfs class > + * @dev: device to unregister > + * > + * Unregisters a &struct device from the DRM sysfs class. Essentially only used > + * by ttm to have a place for its global settings. Drivers should never use > + * this. > + */ > void drm_class_device_unregister(struct device *dev) > { > return device_unregister(dev); > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 3bfafcdb8710..e1daa4f343cd 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -80,6 +80,7 @@ > #include <drm/drm_file.h> > #include <drm/drm_debugfs.h> > #include <drm/drm_ioctl.h> > +#include <drm/drm_sysfs.h> > > struct module; > > @@ -512,10 +513,6 @@ static inline int drm_device_is_unplugged(struct drm_device *dev) > * DMA quiscent + idle. DMA quiescent usually requires the hardware lock. > */ > > - /* sysfs support (drm_sysfs.c) */ > -extern void drm_sysfs_hotplug_event(struct drm_device *dev); > - > - > /*@}*/ > > /* returns true if currently okay to sleep */ > diff --git a/include/drm/drm_sysfs.h b/include/drm/drm_sysfs.h > index 23418c1f10d1..70c9a1074aca 100644 > --- a/include/drm/drm_sysfs.h > +++ b/include/drm/drm_sysfs.h > @@ -1,12 +1,12 @@ > #ifndef _DRM_SYSFS_H_ > #define _DRM_SYSFS_H_ > > -/** > - * This minimalistic include file is intended for users (read TTM) that > - * don't want to include the full drmP.h file. > - */ > +struct drm_device; > +struct device; > > int drm_class_device_register(struct device *dev); > void drm_class_device_unregister(struct device *dev); > > +void drm_sysfs_hotplug_event(struct drm_device *dev); > + > #endif > Reviewed-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel