diff options
author | Sebastian Reichel <sebastian.reichel@collabora.com> | 2020-12-15 12:45:59 +0200 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2020-12-15 16:08:23 +0200 |
commit | 0c93a61db462e3fe1a2c63d908549d4e353a56fb (patch) | |
tree | 7c0d4c16dfd7714920d3d554c908caac609d7ba1 /drivers/gpu/drm/omapdrm/dss/dsi.c | |
parent | e9c7a0d713f09a1ca3afc789ab918c980e2a1bed (diff) | |
download | linux-0c93a61db462e3fe1a2c63d908549d4e353a56fb.tar.gz linux-0c93a61db462e3fe1a2c63d908549d4e353a56fb.tar.bz2 linux-0c93a61db462e3fe1a2c63d908549d4e353a56fb.zip |
drm/omap: dsi: do bus locking in host driver
This moves the bus locking into the host driver and unexports
the custom API in preparation for drm_panel support.
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-27-tomi.valkeinen@ti.com
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/dsi.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dsi.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index b326ad91c01c..211415135682 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -477,17 +477,13 @@ static inline u32 dsi_read_reg(struct dsi_data *dsi, const struct dsi_reg idx) return __raw_readl(base + idx.idx); } -static void dsi_bus_lock(struct omap_dss_device *dssdev) +static void dsi_bus_lock(struct dsi_data *dsi) { - struct dsi_data *dsi = to_dsi_data(dssdev); - down(&dsi->bus_lock); } -static void dsi_bus_unlock(struct omap_dss_device *dssdev) +static void dsi_bus_unlock(struct dsi_data *dsi) { - struct dsi_data *dsi = to_dsi_data(dssdev); - up(&dsi->bus_lock); } @@ -3800,6 +3796,8 @@ static void dsi_handle_framedone(struct dsi_data *dsi, int error) REG_FLD_MOD(dsi, DSI_TIMING2, 1, 15, 15); /* LP_RX_TO */ } + dsi_bus_unlock(dsi); + dsi->framedone_callback(error, dsi->framedone_data); if (!error) @@ -3854,6 +3852,8 @@ static int dsi_update(struct omap_dss_device *dssdev, int channel, { struct dsi_data *dsi = to_dsi_data(dssdev); + dsi_bus_lock(dsi); + dsi->update_channel = channel; dsi->framedone_callback = callback; dsi->framedone_data = data; @@ -4059,7 +4059,7 @@ static void dsi_display_enable(struct omap_dss_device *dssdev) DSSDBG("dsi_display_enable\n"); - WARN_ON(!dsi_bus_is_locked(dsi)); + dsi_bus_lock(dsi); mutex_lock(&dsi->lock); @@ -4075,6 +4075,8 @@ static void dsi_display_enable(struct omap_dss_device *dssdev) mutex_unlock(&dsi->lock); + dsi_bus_unlock(dsi); + return; err_init_dsi: @@ -4091,7 +4093,7 @@ static void dsi_display_disable(struct omap_dss_device *dssdev, DSSDBG("dsi_display_disable\n"); - WARN_ON(!dsi_bus_is_locked(dsi)); + dsi_bus_lock(dsi); mutex_lock(&dsi->lock); @@ -4105,6 +4107,8 @@ static void dsi_display_disable(struct omap_dss_device *dssdev, dsi_runtime_put(dsi); mutex_unlock(&dsi->lock); + + dsi_bus_unlock(dsi); } static int dsi_enable_te(struct dsi_data *dsi, bool enable) @@ -4713,10 +4717,9 @@ static enum omap_channel dsi_get_channel(struct dsi_data *dsi) } } -static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host, - const struct mipi_dsi_msg *msg) +static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, + const struct mipi_dsi_msg *msg) { - struct dsi_data *dsi = host_to_omap(host); struct omap_dss_device *dssdev = &dsi->output; int r; @@ -4765,6 +4768,19 @@ static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host, return 0; } +static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host, + const struct mipi_dsi_msg *msg) +{ + struct dsi_data *dsi = host_to_omap(host); + int r; + + dsi_bus_lock(dsi); + r = _omap_dsi_host_transfer(dsi, msg); + dsi_bus_unlock(dsi); + + return r; +} + static int dsi_get_clocks(struct dsi_data *dsi) { struct clk *clk; @@ -4798,9 +4814,6 @@ static const struct omap_dss_device_ops dsi_ops = { .enable = dsi_display_enable, .dsi = { - .bus_lock = dsi_bus_lock, - .bus_unlock = dsi_bus_unlock, - .disable = dsi_display_disable, .set_config = dsi_set_config, |