Lines Matching refs:imx8qxp_ldb
44 struct imx8qxp_ldb { struct
60 static inline struct imx8qxp_ldb *base_to_imx8qxp_ldb(struct ldb *base) in base_to_imx8qxp_ldb() argument
62 return container_of(base, struct imx8qxp_ldb, base); in base_to_imx8qxp_ldb()
65 static void imx8qxp_ldb_set_phy_cfg(struct imx8qxp_ldb *imx8qxp_ldb, in imx8qxp_ldb_set_phy_cfg() argument
74 phy_cfg->is_slave = !imx8qxp_ldb->companion; in imx8qxp_ldb_set_phy_cfg()
91 struct imx8qxp_ldb *imx8qxp_ldb = base_to_imx8qxp_ldb(ldb); in imx8qxp_ldb_bridge_atomic_check() local
92 struct drm_bridge *companion = imx8qxp_ldb->companion; in imx8qxp_ldb_bridge_atomic_check()
105 imx8qxp_ldb_set_phy_cfg(imx8qxp_ldb, di_clk, is_split, phy_cfg); in imx8qxp_ldb_bridge_atomic_check()
108 DRM_DEV_DEBUG_DRIVER(imx8qxp_ldb->dev, in imx8qxp_ldb_bridge_atomic_check()
133 struct imx8qxp_ldb *imx8qxp_ldb = base_to_imx8qxp_ldb(ldb); in imx8qxp_ldb_bridge_mode_set() local
134 struct drm_bridge *companion = imx8qxp_ldb->companion; in imx8qxp_ldb_bridge_mode_set()
135 struct device *dev = imx8qxp_ldb->dev; in imx8qxp_ldb_bridge_mode_set()
162 clk_set_rate(imx8qxp_ldb->clk_bypass, di_clk); in imx8qxp_ldb_bridge_mode_set()
163 clk_set_rate(imx8qxp_ldb->clk_pixel, di_clk); in imx8qxp_ldb_bridge_mode_set()
165 imx8qxp_ldb_set_phy_cfg(imx8qxp_ldb, di_clk, is_split, phy_cfg); in imx8qxp_ldb_bridge_mode_set()
212 struct imx8qxp_ldb *imx8qxp_ldb = base_to_imx8qxp_ldb(ldb); in imx8qxp_ldb_bridge_atomic_pre_enable() local
213 struct drm_bridge *companion = imx8qxp_ldb->companion; in imx8qxp_ldb_bridge_atomic_pre_enable()
216 clk_prepare_enable(imx8qxp_ldb->clk_pixel); in imx8qxp_ldb_bridge_atomic_pre_enable()
217 clk_prepare_enable(imx8qxp_ldb->clk_bypass); in imx8qxp_ldb_bridge_atomic_pre_enable()
231 struct imx8qxp_ldb *imx8qxp_ldb = base_to_imx8qxp_ldb(ldb); in imx8qxp_ldb_bridge_atomic_enable() local
232 struct drm_bridge *companion = imx8qxp_ldb->companion; in imx8qxp_ldb_bridge_atomic_enable()
233 struct device *dev = imx8qxp_ldb->dev; in imx8qxp_ldb_bridge_atomic_enable()
266 struct imx8qxp_ldb *imx8qxp_ldb = base_to_imx8qxp_ldb(ldb); in imx8qxp_ldb_bridge_atomic_disable() local
267 struct drm_bridge *companion = imx8qxp_ldb->companion; in imx8qxp_ldb_bridge_atomic_disable()
268 struct device *dev = imx8qxp_ldb->dev; in imx8qxp_ldb_bridge_atomic_disable()
282 clk_disable_unprepare(imx8qxp_ldb->clk_bypass); in imx8qxp_ldb_bridge_atomic_disable()
283 clk_disable_unprepare(imx8qxp_ldb->clk_pixel); in imx8qxp_ldb_bridge_atomic_disable()
413 static int imx8qxp_ldb_set_di_id(struct imx8qxp_ldb *imx8qxp_ldb) in imx8qxp_ldb_set_di_id() argument
416 &imx8qxp_ldb->channel[imx8qxp_ldb->active_chno]; in imx8qxp_ldb_set_di_id()
419 struct device *dev = imx8qxp_ldb->dev; in imx8qxp_ldb_set_di_id()
459 static int imx8qxp_ldb_parse_dt_companion(struct imx8qxp_ldb *imx8qxp_ldb) in imx8qxp_ldb_parse_dt_companion() argument
462 &imx8qxp_ldb->channel[imx8qxp_ldb->active_chno]; in imx8qxp_ldb_parse_dt_companion()
469 struct device *dev = imx8qxp_ldb->dev; in imx8qxp_ldb_parse_dt_companion()
558 imx8qxp_ldb->companion = of_drm_find_bridge(companion_port); in imx8qxp_ldb_parse_dt_companion()
559 if (!imx8qxp_ldb->companion) { in imx8qxp_ldb_parse_dt_companion()
571 companion_ldb_ch = bridge_to_ldb_ch(imx8qxp_ldb->companion); in imx8qxp_ldb_parse_dt_companion()
582 struct imx8qxp_ldb *imx8qxp_ldb; in imx8qxp_ldb_probe() local
588 imx8qxp_ldb = devm_kzalloc(dev, sizeof(*imx8qxp_ldb), GFP_KERNEL); in imx8qxp_ldb_probe()
589 if (!imx8qxp_ldb) in imx8qxp_ldb_probe()
592 imx8qxp_ldb->clk_pixel = devm_clk_get(dev, "pixel"); in imx8qxp_ldb_probe()
593 if (IS_ERR(imx8qxp_ldb->clk_pixel)) { in imx8qxp_ldb_probe()
594 ret = PTR_ERR(imx8qxp_ldb->clk_pixel); in imx8qxp_ldb_probe()
601 imx8qxp_ldb->clk_bypass = devm_clk_get(dev, "bypass"); in imx8qxp_ldb_probe()
602 if (IS_ERR(imx8qxp_ldb->clk_bypass)) { in imx8qxp_ldb_probe()
603 ret = PTR_ERR(imx8qxp_ldb->clk_bypass); in imx8qxp_ldb_probe()
610 imx8qxp_ldb->dev = dev; in imx8qxp_ldb_probe()
612 ldb = &imx8qxp_ldb->base; in imx8qxp_ldb_probe()
617 ldb->channel[i] = &imx8qxp_ldb->channel[i].base; in imx8qxp_ldb_probe()
633 imx8qxp_ldb_ch = &imx8qxp_ldb->channel[i]; in imx8qxp_ldb_probe()
637 imx8qxp_ldb->active_chno = ldb_ch->chno; in imx8qxp_ldb_probe()
647 imx8qxp_ldb->active_chno, ret); in imx8qxp_ldb_probe()
655 ret = imx8qxp_ldb_set_di_id(imx8qxp_ldb); in imx8qxp_ldb_probe()
659 ret = imx8qxp_ldb_parse_dt_companion(imx8qxp_ldb); in imx8qxp_ldb_probe()
663 platform_set_drvdata(pdev, imx8qxp_ldb); in imx8qxp_ldb_probe()
673 struct imx8qxp_ldb *imx8qxp_ldb = platform_get_drvdata(pdev); in imx8qxp_ldb_remove() local
674 struct ldb *ldb = &imx8qxp_ldb->base; in imx8qxp_ldb_remove()
688 struct imx8qxp_ldb *imx8qxp_ldb = dev_get_drvdata(dev); in imx8qxp_ldb_runtime_resume() local
689 struct ldb *ldb = &imx8qxp_ldb->base; in imx8qxp_ldb_runtime_resume()