Re: [RFC v2 4/5] drm/dsi: Add routine to unregister dsi device
From: Andrzej Hajda
Date: Fri Oct 30 2015 - 10:22:08 EST
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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/