Lines Matching full:dsi2

6  * This generic Synopsys DesignWare MIPI DSI2 host driver is based on the
7 * Rockchip version from rockchip/dw-mipi-dsi2.c converted to use bridge APIs.
220 static int cri_fifos_wait_avail(struct dw_mipi_dsi2 *dsi2) in cri_fifos_wait_avail() argument
226 ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_CORE_STATUS, sts, in cri_fifos_wait_avail()
229 dev_err(dsi2->dev, "command interface is busy\n"); in cri_fifos_wait_avail()
236 static void dw_mipi_dsi2_set_vid_mode(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_set_vid_mode() argument
241 if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HFP) in dw_mipi_dsi2_set_vid_mode()
244 if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HBP) in dw_mipi_dsi2_set_vid_mode()
247 if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HSA) in dw_mipi_dsi2_set_vid_mode()
250 if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) in dw_mipi_dsi2_set_vid_mode()
252 else if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) in dw_mipi_dsi2_set_vid_mode()
257 regmap_write(dsi2->regmap, DSI2_DSI_VID_TX_CFG, val); in dw_mipi_dsi2_set_vid_mode()
259 regmap_write(dsi2->regmap, DSI2_MODE_CTRL, VIDEO_MODE); in dw_mipi_dsi2_set_vid_mode()
260 ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS, in dw_mipi_dsi2_set_vid_mode()
264 dev_err(dsi2->dev, "failed to enter video mode\n"); in dw_mipi_dsi2_set_vid_mode()
267 static void dw_mipi_dsi2_set_data_stream_mode(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_set_data_stream_mode() argument
272 regmap_write(dsi2->regmap, DSI2_MODE_CTRL, DATA_STREAM_MODE); in dw_mipi_dsi2_set_data_stream_mode()
273 ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS, in dw_mipi_dsi2_set_data_stream_mode()
277 dev_err(dsi2->dev, "failed to enter data stream mode\n"); in dw_mipi_dsi2_set_data_stream_mode()
280 static void dw_mipi_dsi2_set_cmd_mode(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_set_cmd_mode() argument
285 regmap_write(dsi2->regmap, DSI2_MODE_CTRL, COMMAND_MODE); in dw_mipi_dsi2_set_cmd_mode()
286 ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS, in dw_mipi_dsi2_set_cmd_mode()
290 dev_err(dsi2->dev, "failed to enter data stream mode\n"); in dw_mipi_dsi2_set_cmd_mode()
293 static void dw_mipi_dsi2_host_softrst(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_host_softrst() argument
295 regmap_write(dsi2->regmap, DSI2_SOFT_RESET, 0x0); in dw_mipi_dsi2_host_softrst()
297 regmap_write(dsi2->regmap, DSI2_SOFT_RESET, in dw_mipi_dsi2_host_softrst()
301 static void dw_mipi_dsi2_phy_clk_mode_cfg(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_phy_clk_mode_cfg() argument
313 sys_clk = clk_get_rate(dsi2->sys_clk) / USEC_PER_SEC; in dw_mipi_dsi2_phy_clk_mode_cfg()
317 regmap_write(dsi2->regmap, DSI2_PHY_CLK_CFG, val); in dw_mipi_dsi2_phy_clk_mode_cfg()
320 static void dw_mipi_dsi2_phy_ratio_cfg(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_phy_ratio_cfg() argument
322 struct drm_display_mode *mode = &dsi2->mode; in dw_mipi_dsi2_phy_ratio_cfg()
323 u64 sys_clk = clk_get_rate(dsi2->sys_clk); in dw_mipi_dsi2_phy_ratio_cfg()
332 phy_hsclk = DIV_ROUND_CLOSEST_ULL(dsi2->lane_mbps * USEC_PER_SEC, 16); in dw_mipi_dsi2_phy_ratio_cfg()
339 regmap_write(dsi2->regmap, DSI2_PHY_IPI_RATIO_MAN_CFG, in dw_mipi_dsi2_phy_ratio_cfg()
346 regmap_write(dsi2->regmap, DSI2_PHY_SYS_RATIO_MAN_CFG, in dw_mipi_dsi2_phy_ratio_cfg()
350 static void dw_mipi_dsi2_lp2hs_or_hs2lp_cfg(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg() argument
352 const struct dw_mipi_dsi2_phy_ops *phy_ops = dsi2->plat_data->phy_ops; in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
356 ret = phy_ops->get_timing(dsi2->plat_data->priv_data, in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
357 dsi2->lane_mbps, &timing); in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
359 dev_err(dsi2->dev, "Retrieving phy timings failed\n"); in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
361 regmap_write(dsi2->regmap, DSI2_PHY_LP2HS_MAN_CFG, PHY_LP2HS_TIME(timing.data_lp2hs)); in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
362 regmap_write(dsi2->regmap, DSI2_PHY_HS2LP_MAN_CFG, PHY_HS2LP_TIME(timing.data_hs2lp)); in dw_mipi_dsi2_lp2hs_or_hs2lp_cfg()
365 static void dw_mipi_dsi2_phy_init(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_phy_init() argument
367 const struct dw_mipi_dsi2_phy_ops *phy_ops = dsi2->plat_data->phy_ops; in dw_mipi_dsi2_phy_init()
371 phy_ops->get_interface(dsi2->plat_data->priv_data, &iface); in dw_mipi_dsi2_phy_init()
388 val |= PHY_LANES(dsi2->lanes); in dw_mipi_dsi2_phy_init()
390 regmap_write(dsi2->regmap, DSI2_PHY_MODE_CFG, val); in dw_mipi_dsi2_phy_init()
392 dw_mipi_dsi2_phy_clk_mode_cfg(dsi2); in dw_mipi_dsi2_phy_init()
393 dw_mipi_dsi2_phy_ratio_cfg(dsi2); in dw_mipi_dsi2_phy_init()
394 dw_mipi_dsi2_lp2hs_or_hs2lp_cfg(dsi2); in dw_mipi_dsi2_phy_init()
399 static void dw_mipi_dsi2_tx_option_set(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_tx_option_set() argument
405 if (dsi2->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET) in dw_mipi_dsi2_tx_option_set()
408 regmap_write(dsi2->regmap, DSI2_DSI_GENERAL_CFG, val); in dw_mipi_dsi2_tx_option_set()
409 regmap_write(dsi2->regmap, DSI2_DSI_VCID_CFG, TX_VCID(dsi2->channel)); in dw_mipi_dsi2_tx_option_set()
412 static void dw_mipi_dsi2_ipi_color_coding_cfg(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_ipi_color_coding_cfg() argument
416 switch (dsi2->format) { in dw_mipi_dsi2_ipi_color_coding_cfg()
432 regmap_write(dsi2->regmap, DSI2_IPI_COLOR_MAN_CFG, val); in dw_mipi_dsi2_ipi_color_coding_cfg()
435 static void dw_mipi_dsi2_vertical_timing_config(struct dw_mipi_dsi2 *dsi2, in dw_mipi_dsi2_vertical_timing_config() argument
445 regmap_write(dsi2->regmap, DSI2_IPI_VID_VSA_MAN_CFG, VID_VSA_LINES(vsa)); in dw_mipi_dsi2_vertical_timing_config()
446 regmap_write(dsi2->regmap, DSI2_IPI_VID_VBP_MAN_CFG, VID_VBP_LINES(vbp)); in dw_mipi_dsi2_vertical_timing_config()
447 regmap_write(dsi2->regmap, DSI2_IPI_VID_VACT_MAN_CFG, VID_VACT_LINES(vactive)); in dw_mipi_dsi2_vertical_timing_config()
448 regmap_write(dsi2->regmap, DSI2_IPI_VID_VFP_MAN_CFG, VID_VFP_LINES(vfp)); in dw_mipi_dsi2_vertical_timing_config()
451 static void dw_mipi_dsi2_ipi_set(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_ipi_set() argument
453 struct drm_display_mode *mode = &dsi2->mode; in dw_mipi_dsi2_ipi_set()
461 regmap_write(dsi2->regmap, DSI2_IPI_PIX_PKT_CFG, MAX_PIX_PKT(val)); in dw_mipi_dsi2_ipi_set()
463 dw_mipi_dsi2_ipi_color_coding_cfg(dsi2); in dw_mipi_dsi2_ipi_set()
469 if (!(dsi2->mode_flags & MIPI_DSI_MODE_VIDEO)) in dw_mipi_dsi2_ipi_set()
479 phy_hs_clk = DIV_ROUND_CLOSEST_ULL(dsi2->lane_mbps * USEC_PER_SEC, 16); in dw_mipi_dsi2_ipi_set()
483 regmap_write(dsi2->regmap, DSI2_IPI_VID_HSA_MAN_CFG, VID_HSA_TIME(hsa_time)); in dw_mipi_dsi2_ipi_set()
487 regmap_write(dsi2->regmap, DSI2_IPI_VID_HBP_MAN_CFG, VID_HBP_TIME(hbp_time)); in dw_mipi_dsi2_ipi_set()
491 regmap_write(dsi2->regmap, DSI2_IPI_VID_HACT_MAN_CFG, VID_HACT_TIME(hact_time)); in dw_mipi_dsi2_ipi_set()
495 regmap_write(dsi2->regmap, DSI2_IPI_VID_HLINE_MAN_CFG, VID_HLINE_TIME(hline_time)); in dw_mipi_dsi2_ipi_set()
497 dw_mipi_dsi2_vertical_timing_config(dsi2, mode); in dw_mipi_dsi2_ipi_set()
501 dw_mipi_dsi2_work_mode(struct dw_mipi_dsi2 *dsi2, u32 mode) in dw_mipi_dsi2_work_mode() argument
508 regmap_write(dsi2->regmap, MANUAL_MODE_CFG, mode); in dw_mipi_dsi2_work_mode()
514 struct dw_mipi_dsi2 *dsi2 = host_to_dsi2(host); in dw_mipi_dsi2_host_attach() local
515 const struct dw_mipi_dsi2_plat_data *pdata = dsi2->plat_data; in dw_mipi_dsi2_host_attach()
519 if (device->lanes > dsi2->plat_data->max_data_lanes) { in dw_mipi_dsi2_host_attach()
520 dev_err(dsi2->dev, "the number of data lanes(%u) is too many\n", in dw_mipi_dsi2_host_attach()
525 dsi2->lanes = device->lanes; in dw_mipi_dsi2_host_attach()
526 dsi2->channel = device->channel; in dw_mipi_dsi2_host_attach()
527 dsi2->format = device->format; in dw_mipi_dsi2_host_attach()
528 dsi2->mode_flags = device->mode_flags; in dw_mipi_dsi2_host_attach()
530 bridge = devm_drm_of_get_bridge(dsi2->dev, dsi2->dev->of_node, 1, 0); in dw_mipi_dsi2_host_attach()
535 dsi2->panel_bridge = bridge; in dw_mipi_dsi2_host_attach()
537 drm_bridge_add(&dsi2->bridge); in dw_mipi_dsi2_host_attach()
551 struct dw_mipi_dsi2 *dsi2 = host_to_dsi2(host); in dw_mipi_dsi2_host_detach() local
552 const struct dw_mipi_dsi2_plat_data *pdata = dsi2->plat_data; in dw_mipi_dsi2_host_detach()
561 drm_bridge_remove(&dsi2->bridge); in dw_mipi_dsi2_host_detach()
568 static int dw_mipi_dsi2_gen_pkt_hdr_write(struct dw_mipi_dsi2 *dsi2, in dw_mipi_dsi2_gen_pkt_hdr_write() argument
573 regmap_write(dsi2->regmap, DSI2_CRI_TX_HDR, hdr_val | CMD_TX_MODE(lpm)); in dw_mipi_dsi2_gen_pkt_hdr_write()
575 ret = cri_fifos_wait_avail(dsi2); in dw_mipi_dsi2_gen_pkt_hdr_write()
577 dev_err(dsi2->dev, "failed to write command header\n"); in dw_mipi_dsi2_gen_pkt_hdr_write()
584 static int dw_mipi_dsi2_write(struct dw_mipi_dsi2 *dsi2, in dw_mipi_dsi2_write() argument
596 regmap_write(dsi2->regmap, DSI2_CRI_TX_PLD, le32_to_cpu(word)); in dw_mipi_dsi2_write()
600 regmap_write(dsi2->regmap, DSI2_CRI_TX_PLD, le32_to_cpu(word)); in dw_mipi_dsi2_write()
608 return dw_mipi_dsi2_gen_pkt_hdr_write(dsi2, le32_to_cpu(word), lpm); in dw_mipi_dsi2_write()
611 static int dw_mipi_dsi2_read(struct dw_mipi_dsi2 *dsi2, in dw_mipi_dsi2_read() argument
620 ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_CORE_STATUS, in dw_mipi_dsi2_read()
624 dev_err(dsi2->dev, "CRI has no available read data\n"); in dw_mipi_dsi2_read()
628 regmap_read(dsi2->regmap, DSI2_CRI_RX_HDR, &val); in dw_mipi_dsi2_read()
641 regmap_read(dsi2->regmap, DSI2_CRI_RX_PLD, &val); in dw_mipi_dsi2_read()
652 struct dw_mipi_dsi2 *dsi2 = host_to_dsi2(host); in dw_mipi_dsi2_host_transfer() local
657 regmap_update_bits(dsi2->regmap, DSI2_DSI_VID_TX_CFG, in dw_mipi_dsi2_host_transfer()
664 dev_err(dsi2->dev, "failed to create packet: %d\n", ret); in dw_mipi_dsi2_host_transfer()
668 ret = cri_fifos_wait_avail(dsi2); in dw_mipi_dsi2_host_transfer()
672 ret = dw_mipi_dsi2_write(dsi2, &packet, lpm); in dw_mipi_dsi2_host_transfer()
677 ret = dw_mipi_dsi2_read(dsi2, msg); in dw_mipi_dsi2_host_transfer()
702 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_atomic_get_input_bus_fmts() local
703 const struct dw_mipi_dsi2_plat_data *pdata = dsi2->plat_data; in dw_mipi_dsi2_bridge_atomic_get_input_bus_fmts()
727 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_atomic_check() local
728 const struct dw_mipi_dsi2_plat_data *pdata = dsi2->plat_data; in dw_mipi_dsi2_bridge_atomic_check()
750 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_post_atomic_disable() local
751 const struct dw_mipi_dsi2_phy_ops *phy_ops = dsi2->plat_data->phy_ops; in dw_mipi_dsi2_bridge_post_atomic_disable()
753 regmap_write(dsi2->regmap, DSI2_IPI_PIX_PKT_CFG, 0); in dw_mipi_dsi2_bridge_post_atomic_disable()
761 dw_mipi_dsi2_set_cmd_mode(dsi2); in dw_mipi_dsi2_bridge_post_atomic_disable()
763 regmap_write(dsi2->regmap, DSI2_PWR_UP, RESET); in dw_mipi_dsi2_bridge_post_atomic_disable()
766 phy_ops->power_off(dsi2->plat_data->priv_data); in dw_mipi_dsi2_bridge_post_atomic_disable()
768 clk_disable_unprepare(dsi2->sys_clk); in dw_mipi_dsi2_bridge_post_atomic_disable()
769 clk_disable_unprepare(dsi2->pclk); in dw_mipi_dsi2_bridge_post_atomic_disable()
770 pm_runtime_put(dsi2->dev); in dw_mipi_dsi2_bridge_post_atomic_disable()
773 static unsigned int dw_mipi_dsi2_get_lanes(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_get_lanes() argument
776 return dsi2->lanes; in dw_mipi_dsi2_get_lanes()
779 static void dw_mipi_dsi2_mode_set(struct dw_mipi_dsi2 *dsi2, in dw_mipi_dsi2_mode_set() argument
782 const struct dw_mipi_dsi2_phy_ops *phy_ops = dsi2->plat_data->phy_ops; in dw_mipi_dsi2_mode_set()
783 void *priv_data = dsi2->plat_data->priv_data; in dw_mipi_dsi2_mode_set()
784 u32 lanes = dw_mipi_dsi2_get_lanes(dsi2); in dw_mipi_dsi2_mode_set()
787 clk_prepare_enable(dsi2->pclk); in dw_mipi_dsi2_mode_set()
788 clk_prepare_enable(dsi2->sys_clk); in dw_mipi_dsi2_mode_set()
790 ret = phy_ops->get_lane_mbps(priv_data, adjusted_mode, dsi2->mode_flags, in dw_mipi_dsi2_mode_set()
791 lanes, dsi2->format, &dsi2->lane_mbps); in dw_mipi_dsi2_mode_set()
795 pm_runtime_get_sync(dsi2->dev); in dw_mipi_dsi2_mode_set()
797 dw_mipi_dsi2_host_softrst(dsi2); in dw_mipi_dsi2_mode_set()
798 regmap_write(dsi2->regmap, DSI2_PWR_UP, RESET); in dw_mipi_dsi2_mode_set()
800 dw_mipi_dsi2_work_mode(dsi2, MANUAL_MODE_EN); in dw_mipi_dsi2_mode_set()
801 dw_mipi_dsi2_phy_init(dsi2); in dw_mipi_dsi2_mode_set()
804 phy_ops->power_on(dsi2->plat_data->priv_data); in dw_mipi_dsi2_mode_set()
806 dw_mipi_dsi2_tx_option_set(dsi2); in dw_mipi_dsi2_mode_set()
813 regmap_update_bits(dsi2->regmap, DSI2_PHY_CLK_CFG, CLK_TYPE_MASK, in dw_mipi_dsi2_mode_set()
814 dsi2->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS ? NON_CONTINUOUS_CLK : in dw_mipi_dsi2_mode_set()
817 regmap_write(dsi2->regmap, DSI2_PWR_UP, POWER_UP); in dw_mipi_dsi2_mode_set()
818 dw_mipi_dsi2_set_cmd_mode(dsi2); in dw_mipi_dsi2_mode_set()
820 dw_mipi_dsi2_ipi_set(dsi2); in dw_mipi_dsi2_mode_set()
826 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_atomic_pre_enable() local
829 dw_mipi_dsi2_mode_set(dsi2, &dsi2->mode); in dw_mipi_dsi2_bridge_atomic_pre_enable()
836 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_mode_set() local
839 drm_mode_copy(&dsi2->mode, adjusted_mode); in dw_mipi_dsi2_bridge_mode_set()
845 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_atomic_enable() local
848 if (dsi2->mode_flags & MIPI_DSI_MODE_VIDEO) in dw_mipi_dsi2_bridge_atomic_enable()
849 dw_mipi_dsi2_set_vid_mode(dsi2); in dw_mipi_dsi2_bridge_atomic_enable()
851 dw_mipi_dsi2_set_data_stream_mode(dsi2); in dw_mipi_dsi2_bridge_atomic_enable()
859 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_mode_valid() local
860 const struct dw_mipi_dsi2_plat_data *pdata = dsi2->plat_data; in dw_mipi_dsi2_bridge_mode_valid()
865 dsi2->mode_flags, in dw_mipi_dsi2_bridge_mode_valid()
866 dw_mipi_dsi2_get_lanes(dsi2), in dw_mipi_dsi2_bridge_mode_valid()
867 dsi2->format); in dw_mipi_dsi2_bridge_mode_valid()
875 struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge); in dw_mipi_dsi2_bridge_attach() local
881 return drm_bridge_attach(bridge->encoder, dsi2->panel_bridge, bridge, in dw_mipi_dsi2_bridge_attach()
900 .name = "dsi2-host",
913 struct dw_mipi_dsi2 *dsi2; in __dw_mipi_dsi2_probe() local
916 dsi2 = devm_kzalloc(dev, sizeof(*dsi2), GFP_KERNEL); in __dw_mipi_dsi2_probe()
917 if (!dsi2) in __dw_mipi_dsi2_probe()
920 dsi2->dev = dev; in __dw_mipi_dsi2_probe()
921 dsi2->plat_data = plat_data; in __dw_mipi_dsi2_probe()
933 dsi2->regmap = devm_regmap_init_mmio(dev, base, in __dw_mipi_dsi2_probe()
935 if (IS_ERR(dsi2->regmap)) in __dw_mipi_dsi2_probe()
936 return dev_err_cast_probe(dev, dsi2->regmap, "failed to init regmap\n"); in __dw_mipi_dsi2_probe()
938 dsi2->regmap = plat_data->regmap; in __dw_mipi_dsi2_probe()
941 dsi2->pclk = devm_clk_get(dev, "pclk"); in __dw_mipi_dsi2_probe()
942 if (IS_ERR(dsi2->pclk)) in __dw_mipi_dsi2_probe()
943 return dev_err_cast_probe(dev, dsi2->pclk, "Unable to get pclk\n"); in __dw_mipi_dsi2_probe()
945 dsi2->sys_clk = devm_clk_get(dev, "sys"); in __dw_mipi_dsi2_probe()
946 if (IS_ERR(dsi2->sys_clk)) in __dw_mipi_dsi2_probe()
947 return dev_err_cast_probe(dev, dsi2->sys_clk, "Unable to get sys_clk\n"); in __dw_mipi_dsi2_probe()
958 ret = clk_prepare_enable(dsi2->pclk); in __dw_mipi_dsi2_probe()
968 clk_disable_unprepare(dsi2->pclk); in __dw_mipi_dsi2_probe()
973 dsi2->dsi_host.ops = &dw_mipi_dsi2_host_ops; in __dw_mipi_dsi2_probe()
974 dsi2->dsi_host.dev = dev; in __dw_mipi_dsi2_probe()
975 ret = mipi_dsi_host_register(&dsi2->dsi_host); in __dw_mipi_dsi2_probe()
982 dsi2->bridge.driver_private = dsi2; in __dw_mipi_dsi2_probe()
983 dsi2->bridge.funcs = &dw_mipi_dsi2_bridge_funcs; in __dw_mipi_dsi2_probe()
984 dsi2->bridge.of_node = pdev->dev.of_node; in __dw_mipi_dsi2_probe()
986 return dsi2; in __dw_mipi_dsi2_probe()
989 static void __dw_mipi_dsi2_remove(struct dw_mipi_dsi2 *dsi2) in __dw_mipi_dsi2_remove() argument
991 mipi_dsi_host_unregister(&dsi2->dsi_host); in __dw_mipi_dsi2_remove()
1005 void dw_mipi_dsi2_remove(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_remove() argument
1007 __dw_mipi_dsi2_remove(dsi2); in dw_mipi_dsi2_remove()
1015 int dw_mipi_dsi2_bind(struct dw_mipi_dsi2 *dsi2, struct drm_encoder *encoder) in dw_mipi_dsi2_bind() argument
1017 return drm_bridge_attach(encoder, &dsi2->bridge, NULL, 0); in dw_mipi_dsi2_bind()
1021 void dw_mipi_dsi2_unbind(struct dw_mipi_dsi2 *dsi2) in dw_mipi_dsi2_unbind() argument
1028 MODULE_DESCRIPTION("DW MIPI DSI2 host controller driver");
1030 MODULE_ALIAS("platform:dw-mipi-dsi2");