Re: [RFC v2 4/5] drm/dsi: Add routine to unregister dsi device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux