On 10/06/2015 11:24 AM, Archit Taneja wrote: > A driver calling mipi_dsi_device_new might want to unregister the device > once it's done. It might also require it in an error handling path in > case something didn't go right. > > When the dsi host driver calls mipi_dsi_host_unregister, the devices > created by both DT and and without DT will be removed. This does leave > the possibility of the host removing the dsi device without the > peripheral driver being aware of it. I don't know a good way to solve > this. Some suggestions here would be of help too. The 2nd paragraph is not relevant here. It is another issue. Some comments about it: I am not sure, but I guess device should not be removed if it is refcounted properly, it will be just detached from the driver, bus and system (whatever it means:) ). It does not mean it will be usable and probably some races can occur anyway. I guess i2c and other buses have the same problem, am I right? > > Signed-off-by: Archit Taneja <architt@xxxxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_mipi_dsi.c | 7 +++++++ > include/drm/drm_mipi_dsi.h | 2 ++ > 2 files changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c > index db6130a..cbb7373 100644 > --- a/drivers/gpu/drm/drm_mipi_dsi.c > +++ b/drivers/gpu/drm/drm_mipi_dsi.c > @@ -183,6 +183,13 @@ err: > } > EXPORT_SYMBOL(mipi_dsi_device_new); > > +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi) > +{ > + if (dsi) > + device_unregister(&dsi->dev); > +} > +EXPORT_SYMBOL(mipi_dsi_device_unregister); > + I guess NULL check can be removed and the whole function can be inlined. Regards Andrzej > static struct mipi_dsi_device * > of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) > { > diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h > index 93dec7b..68f49f4 100644 > --- a/include/drm/drm_mipi_dsi.h > +++ b/include/drm/drm_mipi_dsi.h > @@ -197,6 +197,8 @@ ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, > > struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host, > struct mipi_dsi_device_info *info); > +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi); > + > /** > * enum mipi_dsi_dcs_tear_mode - Tearing Effect Output Line mode > * @MIPI_DSI_DCS_TEAR_MODE_VBLANK: the TE output line consists of V-Blanking -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html