Skip to content

Commit e4732b5

Browse files
AngeloGioacchino Del RegnoChun-Kuang Hu
authored andcommitted
drm/mediatek: dsi: Register DSI host after acquiring clocks and PHY
Registering the dsi host with its ops before getting dsi->regs is simply wrong: even though there's nothing (for now) asynchronously calling those ops before the end of the probe function, installing ops that are using iospace(s) and clocks before even initializing those is too fragile. Register the DSI host after getting clocks, iospace and PHY. This wil also allow to simplify the error paths in a later commit. Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Reviewed-by: CK Hu <ck.hu@mediatek.com> Link: https://patchwork.kernel.org/project/dri-devel/patch/20240215085316.56835-7-angelogioacchino.delregno@collabora.com/ Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
1 parent ff4e452 commit e4732b5

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

drivers/gpu/drm/mediatek/mtk_dsi.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,14 +1114,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
11141114
if (!dsi)
11151115
return -ENOMEM;
11161116

1117-
dsi->host.ops = &mtk_dsi_ops;
1118-
dsi->host.dev = dev;
1119-
ret = mipi_dsi_host_register(&dsi->host);
1120-
if (ret < 0) {
1121-
dev_err(dev, "failed to register DSI host: %d\n", ret);
1122-
return ret;
1123-
}
1124-
11251117
dsi->driver_data = of_device_get_match_data(dev);
11261118

11271119
dsi->engine_clk = devm_clk_get(dev, "engine");
@@ -1130,7 +1122,7 @@ static int mtk_dsi_probe(struct platform_device *pdev)
11301122

11311123
if (ret != -EPROBE_DEFER)
11321124
dev_err(dev, "Failed to get engine clock: %d\n", ret);
1133-
goto err_unregister_host;
1125+
return ret;
11341126
}
11351127

11361128
dsi->digital_clk = devm_clk_get(dev, "digital");
@@ -1139,35 +1131,43 @@ static int mtk_dsi_probe(struct platform_device *pdev)
11391131

11401132
if (ret != -EPROBE_DEFER)
11411133
dev_err(dev, "Failed to get digital clock: %d\n", ret);
1142-
goto err_unregister_host;
1134+
return ret;
11431135
}
11441136

11451137
dsi->hs_clk = devm_clk_get(dev, "hs");
11461138
if (IS_ERR(dsi->hs_clk)) {
11471139
ret = PTR_ERR(dsi->hs_clk);
11481140
dev_err(dev, "Failed to get hs clock: %d\n", ret);
1149-
goto err_unregister_host;
1141+
return ret;
11501142
}
11511143

11521144
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
11531145
dsi->regs = devm_ioremap_resource(dev, regs);
11541146
if (IS_ERR(dsi->regs)) {
11551147
ret = PTR_ERR(dsi->regs);
11561148
dev_err(dev, "Failed to ioremap memory: %d\n", ret);
1157-
goto err_unregister_host;
1149+
return ret;
11581150
}
11591151

11601152
dsi->phy = devm_phy_get(dev, "dphy");
11611153
if (IS_ERR(dsi->phy)) {
11621154
ret = PTR_ERR(dsi->phy);
11631155
dev_err(dev, "Failed to get MIPI-DPHY: %d\n", ret);
1164-
goto err_unregister_host;
1156+
return ret;
11651157
}
11661158

11671159
irq_num = platform_get_irq(pdev, 0);
11681160
if (irq_num < 0) {
11691161
ret = irq_num;
1170-
goto err_unregister_host;
1162+
return ret;
1163+
}
1164+
1165+
dsi->host.ops = &mtk_dsi_ops;
1166+
dsi->host.dev = dev;
1167+
ret = mipi_dsi_host_register(&dsi->host);
1168+
if (ret < 0) {
1169+
dev_err(dev, "failed to register DSI host: %d\n", ret);
1170+
return ret;
11711171
}
11721172

11731173
ret = devm_request_irq(&pdev->dev, irq_num, mtk_dsi_irq,

0 commit comments

Comments
 (0)