diff options
author | Jyri Sarha <jsarha@ti.com> | 2019-08-02 08:55:22 -0400 |
---|---|---|
committer | Jyri Sarha <jsarha@ti.com> | 2019-08-02 09:00:42 -0400 |
commit | 57d8396504b3a93f284e51b866740a3e7419a3d9 (patch) | |
tree | 5d62258d8f661ee1ab460127ca63de6b9cefff48 | |
parent | 93386368a138e2ccc40459af5b05dd2e39bcd3db (diff) |
drm/tilcdc: Remove obsolete crtc_mode_valid() hack
Earlier there were no mode_valid() helper for crtc and tilcdc had a
hack to over come this limitation. But now the mode_valid() helper is
there (has been since v4.13), so it is about time to get rid of that
hack.
Signed-off-by: Jyri Sarha <jsarha@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ <5c4dcb5b1e7975bd2b7ca86f7addf219cd0f9a06.1564750248.git.jsarha@ti.com
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_external.c | 88 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_external.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_panel.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | 9 |
7 files changed, 19 insertions, 119 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c index 8fa9b3e5e230..e9dd5e5cb4e7 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c | |||
@@ -650,9 +650,6 @@ static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, | |||
650 | static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, | 650 | static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, |
651 | struct drm_crtc_state *state) | 651 | struct drm_crtc_state *state) |
652 | { | 652 | { |
653 | struct drm_display_mode *mode = &state->mode; | ||
654 | int ret; | ||
655 | |||
656 | /* If we are not active we don't care */ | 653 | /* If we are not active we don't care */ |
657 | if (!state->active) | 654 | if (!state->active) |
658 | return 0; | 655 | return 0; |
@@ -664,12 +661,6 @@ static int tilcdc_crtc_atomic_check(struct drm_crtc *crtc, | |||
664 | return -EINVAL; | 661 | return -EINVAL; |
665 | } | 662 | } |
666 | 663 | ||
667 | ret = tilcdc_crtc_mode_valid(crtc, mode); | ||
668 | if (ret) { | ||
669 | dev_dbg(crtc->dev->dev, "Mode \"%s\" not valid", mode->name); | ||
670 | return -EINVAL; | ||
671 | } | ||
672 | |||
673 | return 0; | 664 | return 0; |
674 | } | 665 | } |
675 | 666 | ||
@@ -721,13 +712,6 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = { | |||
721 | .disable_vblank = tilcdc_crtc_disable_vblank, | 712 | .disable_vblank = tilcdc_crtc_disable_vblank, |
722 | }; | 713 | }; |
723 | 714 | ||
724 | static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = { | ||
725 | .mode_fixup = tilcdc_crtc_mode_fixup, | ||
726 | .atomic_check = tilcdc_crtc_atomic_check, | ||
727 | .atomic_enable = tilcdc_crtc_atomic_enable, | ||
728 | .atomic_disable = tilcdc_crtc_atomic_disable, | ||
729 | }; | ||
730 | |||
731 | int tilcdc_crtc_max_width(struct drm_crtc *crtc) | 715 | int tilcdc_crtc_max_width(struct drm_crtc *crtc) |
732 | { | 716 | { |
733 | struct drm_device *dev = crtc->dev; | 717 | struct drm_device *dev = crtc->dev; |
@@ -742,7 +726,9 @@ int tilcdc_crtc_max_width(struct drm_crtc *crtc) | |||
742 | return max_width; | 726 | return max_width; |
743 | } | 727 | } |
744 | 728 | ||
745 | int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode) | 729 | static enum drm_mode_status |
730 | tilcdc_crtc_mode_valid(struct drm_crtc *crtc, | ||
731 | const struct drm_display_mode *mode) | ||
746 | { | 732 | { |
747 | struct tilcdc_drm_private *priv = crtc->dev->dev_private; | 733 | struct tilcdc_drm_private *priv = crtc->dev->dev_private; |
748 | unsigned int bandwidth; | 734 | unsigned int bandwidth; |
@@ -830,6 +816,14 @@ int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode) | |||
830 | return MODE_OK; | 816 | return MODE_OK; |
831 | } | 817 | } |
832 | 818 | ||
819 | static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = { | ||
820 | .mode_valid = tilcdc_crtc_mode_valid, | ||
821 | .mode_fixup = tilcdc_crtc_mode_fixup, | ||
822 | .atomic_check = tilcdc_crtc_atomic_check, | ||
823 | .atomic_enable = tilcdc_crtc_atomic_enable, | ||
824 | .atomic_disable = tilcdc_crtc_atomic_disable, | ||
825 | }; | ||
826 | |||
833 | void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, | 827 | void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, |
834 | const struct tilcdc_panel_info *info) | 828 | const struct tilcdc_panel_info *info) |
835 | { | 829 | { |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c index 3046a4a4232d..2a9e67597375 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c | |||
@@ -199,7 +199,6 @@ static void tilcdc_fini(struct drm_device *dev) | |||
199 | drm_kms_helper_poll_fini(dev); | 199 | drm_kms_helper_poll_fini(dev); |
200 | drm_irq_uninstall(dev); | 200 | drm_irq_uninstall(dev); |
201 | drm_mode_config_cleanup(dev); | 201 | drm_mode_config_cleanup(dev); |
202 | tilcdc_remove_external_device(dev); | ||
203 | 202 | ||
204 | if (priv->clk) | 203 | if (priv->clk) |
205 | clk_put(priv->clk); | 204 | clk_put(priv->clk); |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h index e93f801a4ce7..18815e75ca4f 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h | |||
@@ -77,7 +77,6 @@ struct tilcdc_drm_private { | |||
77 | 77 | ||
78 | struct drm_encoder *external_encoder; | 78 | struct drm_encoder *external_encoder; |
79 | struct drm_connector *external_connector; | 79 | struct drm_connector *external_connector; |
80 | const struct drm_connector_helper_funcs *connector_funcs; | ||
81 | 80 | ||
82 | bool is_registered; | 81 | bool is_registered; |
83 | bool is_componentized; | 82 | bool is_componentized; |
@@ -159,7 +158,6 @@ void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc, | |||
159 | const struct tilcdc_panel_info *info); | 158 | const struct tilcdc_panel_info *info); |
160 | void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc, | 159 | void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc, |
161 | bool simulate_vesa_sync); | 160 | bool simulate_vesa_sync); |
162 | int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode); | ||
163 | int tilcdc_crtc_max_width(struct drm_crtc *crtc); | 161 | int tilcdc_crtc_max_width(struct drm_crtc *crtc); |
164 | void tilcdc_crtc_shutdown(struct drm_crtc *crtc); | 162 | void tilcdc_crtc_shutdown(struct drm_crtc *crtc); |
165 | int tilcdc_crtc_update_fb(struct drm_crtc *crtc, | 163 | int tilcdc_crtc_update_fb(struct drm_crtc *crtc, |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c index 39f4c0a02349..43d756b7810e 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_external.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c | |||
@@ -38,64 +38,6 @@ static const struct tilcdc_panel_info panel_info_default = { | |||
38 | .raster_order = 0, | 38 | .raster_order = 0, |
39 | }; | 39 | }; |
40 | 40 | ||
41 | static int tilcdc_external_mode_valid(struct drm_connector *connector, | ||
42 | struct drm_display_mode *mode) | ||
43 | { | ||
44 | struct tilcdc_drm_private *priv = connector->dev->dev_private; | ||
45 | int ret; | ||
46 | |||
47 | ret = tilcdc_crtc_mode_valid(priv->crtc, mode); | ||
48 | if (ret != MODE_OK) | ||
49 | return ret; | ||
50 | |||
51 | BUG_ON(priv->external_connector != connector); | ||
52 | BUG_ON(!priv->connector_funcs); | ||
53 | |||
54 | /* If the connector has its own mode_valid call it. */ | ||
55 | if (!IS_ERR(priv->connector_funcs) && | ||
56 | priv->connector_funcs->mode_valid) | ||
57 | return priv->connector_funcs->mode_valid(connector, mode); | ||
58 | |||
59 | return MODE_OK; | ||
60 | } | ||
61 | |||
62 | static int tilcdc_add_external_connector(struct drm_device *dev, | ||
63 | struct drm_connector *connector) | ||
64 | { | ||
65 | struct tilcdc_drm_private *priv = dev->dev_private; | ||
66 | struct drm_connector_helper_funcs *connector_funcs; | ||
67 | |||
68 | /* There should never be more than one connector */ | ||
69 | if (WARN_ON(priv->external_connector)) | ||
70 | return -EINVAL; | ||
71 | |||
72 | priv->external_connector = connector; | ||
73 | connector_funcs = devm_kzalloc(dev->dev, sizeof(*connector_funcs), | ||
74 | GFP_KERNEL); | ||
75 | if (!connector_funcs) | ||
76 | return -ENOMEM; | ||
77 | |||
78 | /* connector->helper_private contains always struct | ||
79 | * connector_helper_funcs pointer. For tilcdc crtc to have a | ||
80 | * say if a specific mode is Ok, we need to install our own | ||
81 | * helper functions. In our helper functions we copy | ||
82 | * everything else but use our own mode_valid() (above). | ||
83 | */ | ||
84 | if (connector->helper_private) { | ||
85 | priv->connector_funcs = connector->helper_private; | ||
86 | *connector_funcs = *priv->connector_funcs; | ||
87 | } else { | ||
88 | priv->connector_funcs = ERR_PTR(-ENOENT); | ||
89 | } | ||
90 | connector_funcs->mode_valid = tilcdc_external_mode_valid; | ||
91 | drm_connector_helper_add(connector, connector_funcs); | ||
92 | |||
93 | dev_dbg(dev->dev, "External connector '%s' connected\n", | ||
94 | connector->name); | ||
95 | |||
96 | return 0; | ||
97 | } | ||
98 | |||
99 | static | 41 | static |
100 | struct drm_connector *tilcdc_encoder_find_connector(struct drm_device *ddev, | 42 | struct drm_connector *tilcdc_encoder_find_connector(struct drm_device *ddev, |
101 | struct drm_encoder *encoder) | 43 | struct drm_encoder *encoder) |
@@ -116,7 +58,6 @@ struct drm_connector *tilcdc_encoder_find_connector(struct drm_device *ddev, | |||
116 | int tilcdc_add_component_encoder(struct drm_device *ddev) | 58 | int tilcdc_add_component_encoder(struct drm_device *ddev) |
117 | { | 59 | { |
118 | struct tilcdc_drm_private *priv = ddev->dev_private; | 60 | struct tilcdc_drm_private *priv = ddev->dev_private; |
119 | struct drm_connector *connector; | ||
120 | struct drm_encoder *encoder; | 61 | struct drm_encoder *encoder; |
121 | 62 | ||
122 | list_for_each_entry(encoder, &ddev->mode_config.encoder_list, head) | 63 | list_for_each_entry(encoder, &ddev->mode_config.encoder_list, head) |
@@ -128,28 +69,17 @@ int tilcdc_add_component_encoder(struct drm_device *ddev) | |||
128 | return -ENODEV; | 69 | return -ENODEV; |
129 | } | 70 | } |
130 | 71 | ||
131 | connector = tilcdc_encoder_find_connector(ddev, encoder); | 72 | priv->external_connector = |
73 | tilcdc_encoder_find_connector(ddev, encoder); | ||
132 | 74 | ||
133 | if (!connector) | 75 | if (!priv->external_connector) |
134 | return -ENODEV; | 76 | return -ENODEV; |
135 | 77 | ||
136 | /* Only tda998x is supported at the moment. */ | 78 | /* Only tda998x is supported at the moment. */ |
137 | tilcdc_crtc_set_simulate_vesa_sync(priv->crtc, true); | 79 | tilcdc_crtc_set_simulate_vesa_sync(priv->crtc, true); |
138 | tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_tda998x); | 80 | tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_tda998x); |
139 | 81 | ||
140 | return tilcdc_add_external_connector(ddev, connector); | 82 | return 0; |
141 | } | ||
142 | |||
143 | void tilcdc_remove_external_device(struct drm_device *dev) | ||
144 | { | ||
145 | struct tilcdc_drm_private *priv = dev->dev_private; | ||
146 | |||
147 | /* Restore the original helper functions, if any. */ | ||
148 | if (IS_ERR(priv->connector_funcs)) | ||
149 | drm_connector_helper_add(priv->external_connector, NULL); | ||
150 | else if (priv->connector_funcs) | ||
151 | drm_connector_helper_add(priv->external_connector, | ||
152 | priv->connector_funcs); | ||
153 | } | 83 | } |
154 | 84 | ||
155 | static const struct drm_encoder_funcs tilcdc_external_encoder_funcs = { | 85 | static const struct drm_encoder_funcs tilcdc_external_encoder_funcs = { |
@@ -160,7 +90,6 @@ static | |||
160 | int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge) | 90 | int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge) |
161 | { | 91 | { |
162 | struct tilcdc_drm_private *priv = ddev->dev_private; | 92 | struct tilcdc_drm_private *priv = ddev->dev_private; |
163 | struct drm_connector *connector; | ||
164 | int ret; | 93 | int ret; |
165 | 94 | ||
166 | priv->external_encoder->possible_crtcs = BIT(0); | 95 | priv->external_encoder->possible_crtcs = BIT(0); |
@@ -173,13 +102,12 @@ int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge) | |||
173 | 102 | ||
174 | tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_default); | 103 | tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_default); |
175 | 104 | ||
176 | connector = tilcdc_encoder_find_connector(ddev, priv->external_encoder); | 105 | priv->external_connector = |
177 | if (!connector) | 106 | tilcdc_encoder_find_connector(ddev, priv->external_encoder); |
107 | if (!priv->external_connector) | ||
178 | return -ENODEV; | 108 | return -ENODEV; |
179 | 109 | ||
180 | ret = tilcdc_add_external_connector(ddev, connector); | 110 | return 0; |
181 | |||
182 | return ret; | ||
183 | } | 111 | } |
184 | 112 | ||
185 | int tilcdc_attach_external_device(struct drm_device *ddev) | 113 | int tilcdc_attach_external_device(struct drm_device *ddev) |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.h b/drivers/gpu/drm/tilcdc/tilcdc_external.h index 7024b4877fdf..fb4476694cd8 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_external.h +++ b/drivers/gpu/drm/tilcdc/tilcdc_external.h | |||
@@ -8,7 +8,6 @@ | |||
8 | #define __TILCDC_EXTERNAL_H__ | 8 | #define __TILCDC_EXTERNAL_H__ |
9 | 9 | ||
10 | int tilcdc_add_component_encoder(struct drm_device *dev); | 10 | int tilcdc_add_component_encoder(struct drm_device *dev); |
11 | void tilcdc_remove_external_device(struct drm_device *dev); | ||
12 | int tilcdc_get_external_components(struct device *dev, | 11 | int tilcdc_get_external_components(struct device *dev, |
13 | struct component_match **match); | 12 | struct component_match **match); |
14 | int tilcdc_attach_external_device(struct drm_device *ddev); | 13 | int tilcdc_attach_external_device(struct drm_device *ddev); |
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c index 11eb9fd38c4e..5584e656b857 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c | |||
@@ -163,14 +163,6 @@ static int panel_connector_get_modes(struct drm_connector *connector) | |||
163 | return i; | 163 | return i; |
164 | } | 164 | } |
165 | 165 | ||
166 | static int panel_connector_mode_valid(struct drm_connector *connector, | ||
167 | struct drm_display_mode *mode) | ||
168 | { | ||
169 | struct tilcdc_drm_private *priv = connector->dev->dev_private; | ||
170 | /* our only constraints are what the crtc can generate: */ | ||
171 | return tilcdc_crtc_mode_valid(priv->crtc, mode); | ||
172 | } | ||
173 | |||
174 | static struct drm_encoder *panel_connector_best_encoder( | 166 | static struct drm_encoder *panel_connector_best_encoder( |
175 | struct drm_connector *connector) | 167 | struct drm_connector *connector) |
176 | { | 168 | { |
@@ -188,7 +180,6 @@ static const struct drm_connector_funcs panel_connector_funcs = { | |||
188 | 180 | ||
189 | static const struct drm_connector_helper_funcs panel_connector_helper_funcs = { | 181 | static const struct drm_connector_helper_funcs panel_connector_helper_funcs = { |
190 | .get_modes = panel_connector_get_modes, | 182 | .get_modes = panel_connector_get_modes, |
191 | .mode_valid = panel_connector_mode_valid, | ||
192 | .best_encoder = panel_connector_best_encoder, | 183 | .best_encoder = panel_connector_best_encoder, |
193 | }; | 184 | }; |
194 | 185 | ||
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c index c6e4e52f32bc..525dc1c0f1c1 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | |||
@@ -175,14 +175,6 @@ static int tfp410_connector_get_modes(struct drm_connector *connector) | |||
175 | return ret; | 175 | return ret; |
176 | } | 176 | } |
177 | 177 | ||
178 | static int tfp410_connector_mode_valid(struct drm_connector *connector, | ||
179 | struct drm_display_mode *mode) | ||
180 | { | ||
181 | struct tilcdc_drm_private *priv = connector->dev->dev_private; | ||
182 | /* our only constraints are what the crtc can generate: */ | ||
183 | return tilcdc_crtc_mode_valid(priv->crtc, mode); | ||
184 | } | ||
185 | |||
186 | static struct drm_encoder *tfp410_connector_best_encoder( | 178 | static struct drm_encoder *tfp410_connector_best_encoder( |
187 | struct drm_connector *connector) | 179 | struct drm_connector *connector) |
188 | { | 180 | { |
@@ -201,7 +193,6 @@ static const struct drm_connector_funcs tfp410_connector_funcs = { | |||
201 | 193 | ||
202 | static const struct drm_connector_helper_funcs tfp410_connector_helper_funcs = { | 194 | static const struct drm_connector_helper_funcs tfp410_connector_helper_funcs = { |
203 | .get_modes = tfp410_connector_get_modes, | 195 | .get_modes = tfp410_connector_get_modes, |
204 | .mode_valid = tfp410_connector_mode_valid, | ||
205 | .best_encoder = tfp410_connector_best_encoder, | 196 | .best_encoder = tfp410_connector_best_encoder, |
206 | }; | 197 | }; |
207 | 198 | ||