Skip to content

Commit 5722a9e

Browse files
Hai Lirobclark
authored andcommitted
drm/msm/mdp5: Move *_modeset_init out of construct_encoder function
This change is to make the content in construct_encoder reflect its name. Also, DSI connector may be connected to video mode or command mode encoder, so that 2 different encoders need to be constructed for DSI. Signed-off-by: Hai Li <[email protected]> Signed-off-by: Rob Clark <[email protected]>
1 parent 81ddd1b commit 5722a9e

File tree

1 file changed

+54
-35
lines changed

1 file changed

+54
-35
lines changed

drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c

Lines changed: 54 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -161,39 +161,74 @@ int mdp5_enable(struct mdp5_kms *mdp5_kms)
161161
return 0;
162162
}
163163

164-
static int construct_encoder(struct mdp5_kms *mdp5_kms,
165-
enum mdp5_intf_type intf_type, int intf_num)
164+
static struct drm_encoder *construct_encoder(struct mdp5_kms *mdp5_kms,
165+
enum mdp5_intf_type intf_type, int intf_num,
166+
enum mdp5_intf_mode intf_mode)
166167
{
167168
struct drm_device *dev = mdp5_kms->dev;
168169
struct msm_drm_private *priv = dev->dev_private;
169170
struct drm_encoder *encoder;
170171
struct mdp5_interface intf = {
171172
.num = intf_num,
172173
.type = intf_type,
173-
.mode = MDP5_INTF_MODE_NONE,
174+
.mode = intf_mode,
174175
};
175-
int ret = 0;
176176

177177
encoder = mdp5_encoder_init(dev, &intf);
178178
if (IS_ERR(encoder)) {
179-
ret = PTR_ERR(encoder);
180-
dev_err(dev->dev, "failed to construct encoder: %d\n", ret);
181-
return ret;
179+
dev_err(dev->dev, "failed to construct encoder\n");
180+
return encoder;
182181
}
183182

184183
encoder->possible_crtcs = (1 << priv->num_crtcs) - 1;
185184
priv->encoders[priv->num_encoders++] = encoder;
186185

187-
if (intf_type == INTF_HDMI) {
188-
ret = hdmi_modeset_init(priv->hdmi, dev, encoder);
189-
if (ret)
190-
dev_err(dev->dev, "failed to init HDMI: %d\n", ret);
186+
return encoder;
187+
}
188+
189+
static int modeset_init_intf(struct mdp5_kms *mdp5_kms, int intf_num)
190+
{
191+
struct drm_device *dev = mdp5_kms->dev;
192+
struct msm_drm_private *priv = dev->dev_private;
193+
const struct mdp5_cfg_hw *hw_cfg =
194+
mdp5_cfg_get_hw_config(mdp5_kms->cfg);
195+
enum mdp5_intf_type intf_type = hw_cfg->intfs[intf_num];
196+
struct drm_encoder *encoder;
197+
int ret = 0;
198+
199+
switch (intf_type) {
200+
case INTF_DISABLED:
201+
break;
202+
case INTF_eDP:
203+
if (!priv->edp)
204+
break;
205+
206+
encoder = construct_encoder(mdp5_kms, INTF_eDP, intf_num,
207+
MDP5_INTF_MODE_NONE);
208+
if (IS_ERR(encoder)) {
209+
ret = PTR_ERR(encoder);
210+
break;
211+
}
191212

192-
} else if (intf_type == INTF_eDP) {
193-
/* Construct bridge/connector for eDP: */
194213
ret = msm_edp_modeset_init(priv->edp, dev, encoder);
195-
if (ret)
196-
dev_err(dev->dev, "failed to init eDP: %d\n", ret);
214+
break;
215+
case INTF_HDMI:
216+
if (!priv->hdmi)
217+
break;
218+
219+
encoder = construct_encoder(mdp5_kms, INTF_HDMI, intf_num,
220+
MDP5_INTF_MODE_NONE);
221+
if (IS_ERR(encoder)) {
222+
ret = PTR_ERR(encoder);
223+
break;
224+
}
225+
226+
ret = hdmi_modeset_init(priv->hdmi, dev, encoder);
227+
break;
228+
default:
229+
dev_err(dev->dev, "unknown intf: %d\n", intf_type);
230+
ret = -EINVAL;
231+
break;
197232
}
198233

199234
return ret;
@@ -259,27 +294,11 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
259294
}
260295
}
261296

262-
/* Construct external display interfaces' encoders: */
297+
/* Construct encoders and modeset initialize connector devices
298+
* for each external display interface.
299+
*/
263300
for (i = 0; i < ARRAY_SIZE(hw_cfg->intfs); i++) {
264-
enum mdp5_intf_type intf_type = hw_cfg->intfs[i];
265-
266-
switch (intf_type) {
267-
case INTF_DISABLED:
268-
break;
269-
case INTF_eDP:
270-
if (priv->edp)
271-
ret = construct_encoder(mdp5_kms, INTF_eDP, i);
272-
break;
273-
case INTF_HDMI:
274-
if (priv->hdmi)
275-
ret = construct_encoder(mdp5_kms, INTF_HDMI, i);
276-
break;
277-
default:
278-
dev_err(dev->dev, "unknown intf: %d\n", intf_type);
279-
ret = -EINVAL;
280-
break;
281-
}
282-
301+
ret = modeset_init_intf(mdp5_kms, i);
283302
if (ret)
284303
goto fail;
285304
}

0 commit comments

Comments
 (0)