mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-20 21:29:11 +07:00
drm/omap: Remove omap_crtc_output global array
The omap_crtc_output global array is used to look up the DSS output device by channel. We can replace that by accessing the output device from the pipeline if we store the pipeline pointer in the omap_crtc structure. The global array is also used to protect against double connection of an output. This can't happen with the connection handling mechanism going from DSS outputs to displays. We can thus drop that check, allowing removal of the global array. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
e48f9f16a1
commit
67dfd2d3d0
@ -41,6 +41,7 @@ struct omap_crtc {
|
||||
struct drm_crtc base;
|
||||
|
||||
const char *name;
|
||||
struct omap_drm_pipeline *pipe;
|
||||
enum omap_channel channel;
|
||||
|
||||
struct videomode vm;
|
||||
@ -108,9 +109,6 @@ int omap_crtc_wait_pending(struct drm_crtc *crtc)
|
||||
* job of sequencing the setup of the video pipe in the proper order
|
||||
*/
|
||||
|
||||
/* ovl-mgr-id -> crtc */
|
||||
static struct omap_dss_device *omap_crtc_output[8];
|
||||
|
||||
/* we can probably ignore these until we support command-mode panels: */
|
||||
static int omap_crtc_dss_connect(struct omap_drm_private *priv,
|
||||
enum omap_channel channel,
|
||||
@ -119,13 +117,9 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv,
|
||||
const struct dispc_ops *dispc_ops = priv->dispc_ops;
|
||||
struct dispc_device *dispc = priv->dispc;
|
||||
|
||||
if (omap_crtc_output[channel])
|
||||
return -EINVAL;
|
||||
|
||||
if (!(dispc_ops->mgr_get_supported_outputs(dispc, channel) & dst->id))
|
||||
return -EINVAL;
|
||||
|
||||
omap_crtc_output[channel] = dst;
|
||||
dst->dispc_channel_connected = true;
|
||||
|
||||
return 0;
|
||||
@ -135,7 +129,6 @@ static void omap_crtc_dss_disconnect(struct omap_drm_private *priv,
|
||||
enum omap_channel channel,
|
||||
struct omap_dss_device *dst)
|
||||
{
|
||||
omap_crtc_output[channel] = NULL;
|
||||
dst->dispc_channel_connected = false;
|
||||
}
|
||||
|
||||
@ -158,7 +151,7 @@ static void omap_crtc_set_enabled(struct drm_crtc *crtc, bool enable)
|
||||
if (WARN_ON(omap_crtc->enabled == enable))
|
||||
return;
|
||||
|
||||
if (omap_crtc_output[channel]->output_type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
if (omap_crtc->pipe->output->output_type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
priv->dispc_ops->mgr_enable(priv->dispc, channel, enable);
|
||||
omap_crtc->enabled = enable;
|
||||
return;
|
||||
@ -716,6 +709,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
|
||||
|
||||
init_waitqueue_head(&omap_crtc->pending_wait);
|
||||
|
||||
omap_crtc->pipe = pipe;
|
||||
omap_crtc->channel = channel;
|
||||
omap_crtc->name = channel_names[channel];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user