Lines Matching +full:mdss +full:- +full:dsi +full:- +full:ctrl

1 // SPDX-License-Identifier: GPL-2.0-only
6 #include "dsi.h"
13 return msm_dsi->encoder; in msm_dsi_get_encoder()
18 unsigned long host_flags = msm_dsi_host_get_mode_flags(msm_dsi->host); in msm_dsi_is_cmd_mode()
25 struct platform_device *pdev = msm_dsi->pdev; in dsi_get_phy()
29 phy_node = of_parse_phandle(pdev->dev.of_node, "phys", 0); in dsi_get_phy()
31 DRM_DEV_ERROR(&pdev->dev, "cannot find phy device\n"); in dsi_get_phy()
32 return -ENXIO; in dsi_get_phy()
37 msm_dsi->phy = platform_get_drvdata(phy_pdev); in dsi_get_phy()
38 msm_dsi->phy_dev = &phy_pdev->dev; in dsi_get_phy()
43 if (!phy_pdev || !msm_dsi->phy) { in dsi_get_phy()
44 DRM_DEV_ERROR(&pdev->dev, "%s: phy driver is not ready\n", __func__); in dsi_get_phy()
45 return -EPROBE_DEFER; in dsi_get_phy()
58 if (msm_dsi->phy_dev) { in dsi_destroy()
59 put_device(msm_dsi->phy_dev); in dsi_destroy()
60 msm_dsi->phy = NULL; in dsi_destroy()
61 msm_dsi->phy_dev = NULL; in dsi_destroy()
64 if (msm_dsi->host) { in dsi_destroy()
65 msm_dsi_host_destroy(msm_dsi->host); in dsi_destroy()
66 msm_dsi->host = NULL; in dsi_destroy()
69 platform_set_drvdata(msm_dsi->pdev, NULL); in dsi_destroy()
78 return ERR_PTR(-ENXIO); in dsi_init()
80 msm_dsi = devm_kzalloc(&pdev->dev, sizeof(*msm_dsi), GFP_KERNEL); in dsi_init()
82 return ERR_PTR(-ENOMEM); in dsi_init()
83 DBG("dsi probed=%p", msm_dsi); in dsi_init()
85 msm_dsi->id = -1; in dsi_init()
86 msm_dsi->pdev = pdev; in dsi_init()
89 /* Init dsi host */ in dsi_init()
94 /* GET dsi PHY */ in dsi_init()
99 /* Register to dsi manager */ in dsi_init()
114 struct msm_drm_private *priv = drm->dev_private; in dsi_bind()
121 /* Don't fail the bind if the dsi port is not connected */ in dsi_bind()
122 if (PTR_ERR(msm_dsi) == -ENODEV) in dsi_bind()
128 priv->dsi[msm_dsi->id] = msm_dsi; in dsi_bind()
137 struct msm_drm_private *priv = drm->dev_private; in dsi_unbind()
139 int id = msm_dsi->id; in dsi_unbind()
141 if (priv->dsi[id]) { in dsi_unbind()
143 priv->dsi[id] = NULL; in dsi_unbind()
154 return component_add(&pdev->dev, &dsi_ops); in dsi_dev_probe()
160 component_del(&pdev->dev, &dsi_ops); in dsi_dev_remove()
165 { .compatible = "qcom,mdss-dsi-ctrl" },
207 return -EINVAL; in msm_dsi_modeset_init()
209 priv = dev->dev_private; in msm_dsi_modeset_init()
210 msm_dsi->dev = dev; in msm_dsi_modeset_init()
212 ret = msm_dsi_host_modeset_init(msm_dsi->host, dev); in msm_dsi_modeset_init()
214 DRM_DEV_ERROR(dev->dev, "failed to modeset init host: %d\n", ret); in msm_dsi_modeset_init()
218 if (!msm_dsi_manager_validate_current_config(msm_dsi->id)) { in msm_dsi_modeset_init()
219 ret = -EINVAL; in msm_dsi_modeset_init()
223 msm_dsi->encoder = encoder; in msm_dsi_modeset_init()
225 msm_dsi->bridge = msm_dsi_manager_bridge_init(msm_dsi->id); in msm_dsi_modeset_init()
226 if (IS_ERR(msm_dsi->bridge)) { in msm_dsi_modeset_init()
227 ret = PTR_ERR(msm_dsi->bridge); in msm_dsi_modeset_init()
228 DRM_DEV_ERROR(dev->dev, "failed to create dsi bridge: %d\n", ret); in msm_dsi_modeset_init()
229 msm_dsi->bridge = NULL; in msm_dsi_modeset_init()
234 * check if the dsi encoder output is connected to a panel or an in msm_dsi_modeset_init()
239 ext_bridge = msm_dsi_host_get_bridge(msm_dsi->host); in msm_dsi_modeset_init()
242 msm_dsi->connector = in msm_dsi_modeset_init()
243 msm_dsi_manager_ext_bridge_init(msm_dsi->id); in msm_dsi_modeset_init()
245 msm_dsi->connector = in msm_dsi_modeset_init()
246 msm_dsi_manager_connector_init(msm_dsi->id); in msm_dsi_modeset_init()
248 if (IS_ERR(msm_dsi->connector)) { in msm_dsi_modeset_init()
249 ret = PTR_ERR(msm_dsi->connector); in msm_dsi_modeset_init()
250 DRM_DEV_ERROR(dev->dev, in msm_dsi_modeset_init()
251 "failed to create dsi connector: %d\n", ret); in msm_dsi_modeset_init()
252 msm_dsi->connector = NULL; in msm_dsi_modeset_init()
256 priv->bridges[priv->num_bridges++] = msm_dsi->bridge; in msm_dsi_modeset_init()
257 priv->connectors[priv->num_connectors++] = msm_dsi->connector; in msm_dsi_modeset_init()
262 if (msm_dsi->bridge) { in msm_dsi_modeset_init()
263 msm_dsi_manager_bridge_destroy(msm_dsi->bridge); in msm_dsi_modeset_init()
264 msm_dsi->bridge = NULL; in msm_dsi_modeset_init()
268 if (msm_dsi->connector && !msm_dsi->external_bridge) in msm_dsi_modeset_init()
269 msm_dsi->connector->funcs->destroy(msm_dsi->connector); in msm_dsi_modeset_init()
271 msm_dsi->connector = NULL; in msm_dsi_modeset_init()
278 msm_dsi_host_snapshot(disp_state, msm_dsi->host); in msm_dsi_snapshot()
279 msm_dsi_phy_snapshot(disp_state, msm_dsi->phy); in msm_dsi_snapshot()