Skip to content

Commit fb55717

Browse files
pinchartltomba
authored andcommitted
drm/omap: dss: Move src and dst check and set to connection handlers
The encoders duplicate the same omap_dss_device src and dst fields set and checks in their connect and disconnect handlers. Move the code to the connect and disconnect wrappers. 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>
1 parent 73fc0ac commit fb55717

File tree

12 files changed

+25
-74
lines changed

12 files changed

+25
-74
lines changed

drivers/gpu/drm/omapdrm/displays/encoder-opa362.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ static int opa362_connect(struct omap_dss_device *dssdev,
5151
return r;
5252
}
5353

54-
dst->src = dssdev;
55-
dssdev->dst = dst;
56-
5754
ddata->in = in;
5855
return 0;
5956
}
@@ -64,13 +61,6 @@ static void opa362_disconnect(struct omap_dss_device *dssdev,
6461
struct panel_drv_data *ddata = to_panel_data(dssdev);
6562
struct omap_dss_device *in = ddata->in;
6663

67-
WARN_ON(dst != dssdev->dst);
68-
if (dst != dssdev->dst)
69-
return;
70-
71-
dst->src = NULL;
72-
dssdev->dst = NULL;
73-
7464
omapdss_device_disconnect(in, &ddata->dssdev);
7565

7666
omap_dss_put_device(in);

drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@ static int tfp410_connect(struct omap_dss_device *dssdev,
4747
return r;
4848
}
4949

50-
dst->src = dssdev;
51-
dssdev->dst = dst;
52-
5350
ddata->in = in;
5451
return 0;
5552
}
@@ -60,13 +57,6 @@ static void tfp410_disconnect(struct omap_dss_device *dssdev,
6057
struct panel_drv_data *ddata = to_panel_data(dssdev);
6158
struct omap_dss_device *in = ddata->in;
6259

63-
WARN_ON(dst != dssdev->dst);
64-
if (dst != dssdev->dst)
65-
return;
66-
67-
dst->src = NULL;
68-
dssdev->dst = NULL;
69-
7060
omapdss_device_disconnect(in, &ddata->dssdev);
7161

7262
omap_dss_put_device(in);

drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ static int tpd_connect(struct omap_dss_device *dssdev,
5555
return r;
5656
}
5757

58-
dst->src = dssdev;
59-
dssdev->dst = dst;
60-
6158
gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 1);
6259
gpiod_set_value_cansleep(ddata->ls_oe_gpio, 1);
6360

@@ -74,17 +71,9 @@ static void tpd_disconnect(struct omap_dss_device *dssdev,
7471
struct panel_drv_data *ddata = to_panel_data(dssdev);
7572
struct omap_dss_device *in = ddata->in;
7673

77-
WARN_ON(dst != dssdev->dst);
78-
79-
if (dst != dssdev->dst)
80-
return;
81-
8274
gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 0);
8375
gpiod_set_value_cansleep(ddata->ls_oe_gpio, 0);
8476

85-
dst->src = NULL;
86-
dssdev->dst = NULL;
87-
8877
omapdss_device_disconnect(in, &ddata->dssdev);
8978

9079
omap_dss_put_device(in);

drivers/gpu/drm/omapdrm/dss/base.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,27 @@ struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
105105
int omapdss_device_connect(struct omap_dss_device *src,
106106
struct omap_dss_device *dst)
107107
{
108+
int ret;
109+
108110
dev_dbg(src->dev, "connect\n");
109111

110112
if (omapdss_device_is_connected(src))
111113
return -EBUSY;
112114

113115
if (src->driver)
114-
return src->driver->connect(src);
116+
ret = src->driver->connect(src);
115117
else
116-
return src->ops->connect(src, dst);
118+
ret = src->ops->connect(src, dst);
119+
120+
if (ret < 0)
121+
return ret;
122+
123+
if (dst) {
124+
dst->src = src;
125+
src->dst = dst;
126+
}
127+
128+
return 0;
117129
}
118130
EXPORT_SYMBOL_GPL(omapdss_device_connect);
119131

@@ -127,6 +139,14 @@ void omapdss_device_disconnect(struct omap_dss_device *src,
127139
return;
128140
}
129141

142+
if (dst) {
143+
if (WARN_ON(dst != src->dst))
144+
return;
145+
146+
dst->src = NULL;
147+
src->dst = NULL;
148+
}
149+
130150
if (src->driver)
131151
src->driver->disconnect(src);
132152
else

drivers/gpu/drm/omapdrm/dss/dpi.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,6 @@ static void dpi_disconnect(struct omap_dss_device *dssdev,
671671
{
672672
struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev);
673673

674-
WARN_ON(dst != dssdev->dst);
675-
676-
if (dst != dssdev->dst)
677-
return;
678-
679674
omapdss_output_unset_device(dssdev);
680675

681676
dss_mgr_disconnect(&dpi->output, dssdev);

drivers/gpu/drm/omapdrm/dss/dsi.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4990,11 +4990,6 @@ static void dsi_disconnect(struct omap_dss_device *dssdev,
49904990
{
49914991
struct dsi_data *dsi = to_dsi_data(dssdev);
49924992

4993-
WARN_ON(dst != dssdev->dst);
4994-
4995-
if (dst != dssdev->dst)
4996-
return;
4997-
49984993
omapdss_output_unset_device(dssdev);
49994994

50004995
dss_mgr_disconnect(&dsi->output, dssdev);

drivers/gpu/drm/omapdrm/dss/hdmi4.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -478,11 +478,6 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev,
478478
{
479479
struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
480480

481-
WARN_ON(dst != dssdev->dst);
482-
483-
if (dst != dssdev->dst)
484-
return;
485-
486481
omapdss_output_unset_device(dssdev);
487482

488483
dss_mgr_disconnect(&hdmi->output, dssdev);

drivers/gpu/drm/omapdrm/dss/hdmi5.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,11 +481,6 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev,
481481
{
482482
struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev);
483483

484-
WARN_ON(dst != dssdev->dst);
485-
486-
if (dst != dssdev->dst)
487-
return;
488-
489484
omapdss_output_unset_device(dssdev);
490485

491486
dss_mgr_disconnect(&hdmi->output, dssdev);

drivers/gpu/drm/omapdrm/dss/omapdss.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ struct omap_dss_device {
391391

392392
struct module *owner;
393393

394+
struct omap_dss_device *src;
395+
struct omap_dss_device *dst;
396+
394397
struct list_head list;
395398
struct list_head panel_list;
396399

@@ -409,8 +412,6 @@ struct omap_dss_device {
409412

410413
enum omap_display_caps caps;
411414

412-
struct omap_dss_device *src;
413-
414415
enum omap_dss_display_state state;
415416

416417
/* OMAP DSS output specific fields */
@@ -426,9 +427,6 @@ struct omap_dss_device {
426427

427428
/* the port number in the DT node */
428429
int port_num;
429-
430-
/* dynamic fields */
431-
struct omap_dss_device *dst;
432430
};
433431

434432
struct omap_dss_driver {

drivers/gpu/drm/omapdrm/dss/output.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@ int omapdss_output_set_device(struct omap_dss_device *out,
4747
goto err;
4848
}
4949

50-
out->dst = dssdev;
51-
dssdev->src = out;
52-
5350
mutex_unlock(&output_lock);
5451

5552
return 0;
@@ -81,9 +78,6 @@ int omapdss_output_unset_device(struct omap_dss_device *out)
8178
goto err;
8279
}
8380

84-
out->dst->src = NULL;
85-
out->dst = NULL;
86-
8781
mutex_unlock(&output_lock);
8882

8983
return 0;

drivers/gpu/drm/omapdrm/dss/sdi.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,6 @@ static void sdi_disconnect(struct omap_dss_device *dssdev,
301301
{
302302
struct sdi_device *sdi = dssdev_to_sdi(dssdev);
303303

304-
WARN_ON(dst != dssdev->dst);
305-
306-
if (dst != dssdev->dst)
307-
return;
308-
309304
omapdss_output_unset_device(dssdev);
310305

311306
dss_mgr_disconnect(&sdi->output, dssdev);

drivers/gpu/drm/omapdrm/dss/venc.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -740,11 +740,6 @@ static void venc_disconnect(struct omap_dss_device *dssdev,
740740
{
741741
struct venc_device *venc = dssdev_to_venc(dssdev);
742742

743-
WARN_ON(dst != dssdev->dst);
744-
745-
if (dst != dssdev->dst)
746-
return;
747-
748743
omapdss_output_unset_device(dssdev);
749744

750745
dss_mgr_disconnect(&venc->output, dssdev);

0 commit comments

Comments
 (0)