Lines Matching refs:dsi

731 static int cdns_dsi_mode2cfg(struct cdns_dsi *dsi,  in cdns_dsi_mode2cfg()  argument
738 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_mode2cfg()
789 ret = cdns_dsi_get_dphy_pll_cfg(dsi->dphy, dphy_cfg, in cdns_dsi_mode2cfg()
795 ret = cdns_dsi_get_dphy_pll_cfg(dsi->dphy, dphy_cfg, in cdns_dsi_mode2cfg()
824 struct cdns_dsi *dsi = input_to_dsi(input); in cdns_dsi_bridge_attach() local
825 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_bridge_attach()
828 dev_err(dsi->base.dev, in cdns_dsi_bridge_attach()
841 struct cdns_dsi *dsi = input_to_dsi(input); in cdns_dsi_bridge_mode_valid() local
842 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_bridge_mode_valid()
865 ret = cdns_dsi_mode2cfg(dsi, mode, &dsi_cfg, &dphy_cfg, true); in cdns_dsi_bridge_mode_valid()
875 struct cdns_dsi *dsi = input_to_dsi(input); in cdns_dsi_bridge_disable() local
878 val = readl(dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_bridge_disable()
881 writel(val, dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_bridge_disable()
883 val = readl(dsi->regs + MCTL_MAIN_EN) & ~IF_EN(input->id); in cdns_dsi_bridge_disable()
884 writel(val, dsi->regs + MCTL_MAIN_EN); in cdns_dsi_bridge_disable()
885 pm_runtime_put(dsi->base.dev); in cdns_dsi_bridge_disable()
888 static void cdns_dsi_hs_init(struct cdns_dsi *dsi, in cdns_dsi_hs_init() argument
899 dsi->regs + MCTL_DPHY_CFG0); in cdns_dsi_hs_init()
905 WARN_ON_ONCE(cdns_dphy_setup_psm(dsi->dphy)); in cdns_dsi_hs_init()
914 cdns_dphy_set_clk_lane_cfg(dsi->dphy, DPHY_CLK_CFG_LEFT_DRIVES_LEFT); in cdns_dsi_hs_init()
920 cdns_dphy_set_pll_cfg(dsi->dphy, dphy_cfg); in cdns_dsi_hs_init()
924 dsi->dphy->regs + DPHY_CMN_SSM); in cdns_dsi_hs_init()
927 writel(PLL_LOCKED, dsi->regs + MCTL_MAIN_STS_CLR); in cdns_dsi_hs_init()
929 dsi->regs + MCTL_DPHY_CFG0); in cdns_dsi_hs_init()
930 WARN_ON_ONCE(readl_poll_timeout(dsi->regs + MCTL_MAIN_STS, status, in cdns_dsi_hs_init()
935 dsi->regs + MCTL_DPHY_CFG0); in cdns_dsi_hs_init()
938 static void cdns_dsi_init_link(struct cdns_dsi *dsi) in cdns_dsi_init_link() argument
940 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_init_link()
945 if (dsi->link_initialized) in cdns_dsi_init_link()
955 writel(val, dsi->regs + MCTL_MAIN_PHY_CTL); in cdns_dsi_init_link()
958 sysclk_period = NSEC_PER_SEC / clk_get_rate(dsi->dsi_sys_clk); in cdns_dsi_init_link()
961 dsi->regs + MCTL_ULPOUT_TIME); in cdns_dsi_init_link()
963 writel(LINK_EN, dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_init_link()
969 writel(val, dsi->regs + MCTL_MAIN_EN); in cdns_dsi_init_link()
971 dsi->link_initialized = true; in cdns_dsi_init_link()
977 struct cdns_dsi *dsi = input_to_dsi(input); in cdns_dsi_bridge_enable() local
978 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_bridge_enable()
986 if (WARN_ON(pm_runtime_get_sync(dsi->base.dev) < 0)) in cdns_dsi_bridge_enable()
993 WARN_ON_ONCE(cdns_dsi_mode2cfg(dsi, mode, &dsi_cfg, &dphy_cfg, false)); in cdns_dsi_bridge_enable()
995 cdns_dsi_hs_init(dsi, &dphy_cfg); in cdns_dsi_bridge_enable()
996 cdns_dsi_init_link(dsi); in cdns_dsi_bridge_enable()
999 dsi->regs + VID_HSIZE1); in cdns_dsi_bridge_enable()
1001 dsi->regs + VID_HSIZE2); in cdns_dsi_bridge_enable()
1006 dsi->regs + VID_VSIZE1); in cdns_dsi_bridge_enable()
1007 writel(mode->crtc_vdisplay, dsi->regs + VID_VSIZE2); in cdns_dsi_bridge_enable()
1012 writel(BLK_LINE_PULSE_PKT_LEN(tmp), dsi->regs + VID_BLKSIZE2); in cdns_dsi_bridge_enable()
1015 dsi->regs + VID_VCA_SETTING2); in cdns_dsi_bridge_enable()
1019 writel(BLK_LINE_EVENT_PKT_LEN(tmp), dsi->regs + VID_BLKSIZE1); in cdns_dsi_bridge_enable()
1022 dsi->regs + VID_VCA_SETTING2); in cdns_dsi_bridge_enable()
1032 reg_wakeup = cdns_dphy_get_wakeup_time_ns(dsi->dphy) / in cdns_dsi_bridge_enable()
1035 dsi->regs + VID_DPHY_TIME); in cdns_dsi_bridge_enable()
1056 dsi->regs + MCTL_DPHY_TIMEOUT1); in cdns_dsi_bridge_enable()
1058 writel(LPRX_TIMEOUT(tmp), dsi->regs + MCTL_DPHY_TIMEOUT2); in cdns_dsi_bridge_enable()
1083 dev_err(dsi->base.dev, "Unsupported DSI format\n"); in cdns_dsi_bridge_enable()
1095 writel(tmp, dsi->regs + VID_MAIN_CTL); in cdns_dsi_bridge_enable()
1098 tmp = readl(dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_bridge_enable()
1107 writel(tmp, dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_bridge_enable()
1109 tmp = readl(dsi->regs + MCTL_MAIN_EN) | IF_EN(input->id); in cdns_dsi_bridge_enable()
1110 writel(tmp, dsi->regs + MCTL_MAIN_EN); in cdns_dsi_bridge_enable()
1123 struct cdns_dsi *dsi = to_cdns_dsi(host); in cdns_dsi_attach() local
1124 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_attach()
1125 struct cdns_dsi_input *input = &dsi->input; in cdns_dsi_attach()
1149 np = of_graph_get_remote_node(dsi->base.dev->of_node, DSI_OUTPUT_PORT, in cdns_dsi_attach()
1189 struct cdns_dsi *dsi = to_cdns_dsi(host); in cdns_dsi_detach() local
1190 struct cdns_dsi_output *output = &dsi->output; in cdns_dsi_detach()
1191 struct cdns_dsi_input *input = &dsi->input; in cdns_dsi_detach()
1202 struct cdns_dsi *dsi = data; in cdns_dsi_interrupt() local
1206 flag = readl(dsi->regs + DIRECT_CMD_STS_FLAG); in cdns_dsi_interrupt()
1208 ctl = readl(dsi->regs + DIRECT_CMD_STS_CTL); in cdns_dsi_interrupt()
1210 writel(ctl, dsi->regs + DIRECT_CMD_STS_CTL); in cdns_dsi_interrupt()
1211 complete(&dsi->direct_cmd_comp); in cdns_dsi_interrupt()
1221 struct cdns_dsi *dsi = to_cdns_dsi(host); in cdns_dsi_transfer() local
1230 cdns_dsi_init_link(dsi); in cdns_dsi_transfer()
1246 if (tx_len > dsi->direct_cmd_fifo_depth) { in cdns_dsi_transfer()
1252 if (rx_len > dsi->rx_fifo_depth) { in cdns_dsi_transfer()
1276 writel(readl(dsi->regs + MCTL_MAIN_DATA_CTL) | ctl, in cdns_dsi_transfer()
1277 dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_transfer()
1279 writel(cmd, dsi->regs + DIRECT_CMD_MAIN_SETTINGS); in cdns_dsi_transfer()
1289 writel(val, dsi->regs + DIRECT_CMD_WRDATA); in cdns_dsi_transfer()
1293 writel(wait, dsi->regs + DIRECT_CMD_STS_CLR); in cdns_dsi_transfer()
1294 writel(wait, dsi->regs + DIRECT_CMD_STS_CTL); in cdns_dsi_transfer()
1295 reinit_completion(&dsi->direct_cmd_comp); in cdns_dsi_transfer()
1296 writel(0, dsi->regs + DIRECT_CMD_SEND); in cdns_dsi_transfer()
1298 wait_for_completion_timeout(&dsi->direct_cmd_comp, in cdns_dsi_transfer()
1301 sts = readl(dsi->regs + DIRECT_CMD_STS); in cdns_dsi_transfer()
1302 writel(wait, dsi->regs + DIRECT_CMD_STS_CLR); in cdns_dsi_transfer()
1303 writel(0, dsi->regs + DIRECT_CMD_STS_CTL); in cdns_dsi_transfer()
1305 writel(readl(dsi->regs + MCTL_MAIN_DATA_CTL) & ~ctl, in cdns_dsi_transfer()
1306 dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_transfer()
1324 val = readl(dsi->regs + DIRECT_CMD_RDDATA); in cdns_dsi_transfer()
1342 struct cdns_dsi *dsi = dev_get_drvdata(dev); in cdns_dsi_resume() local
1344 reset_control_deassert(dsi->dsi_p_rst); in cdns_dsi_resume()
1345 clk_prepare_enable(dsi->dsi_p_clk); in cdns_dsi_resume()
1346 clk_prepare_enable(dsi->dsi_sys_clk); in cdns_dsi_resume()
1347 clk_prepare_enable(dsi->dphy->psm_clk); in cdns_dsi_resume()
1348 clk_prepare_enable(dsi->dphy->pll_ref_clk); in cdns_dsi_resume()
1355 struct cdns_dsi *dsi = dev_get_drvdata(dev); in cdns_dsi_suspend() local
1357 clk_disable_unprepare(dsi->dphy->pll_ref_clk); in cdns_dsi_suspend()
1358 clk_disable_unprepare(dsi->dphy->psm_clk); in cdns_dsi_suspend()
1359 clk_disable_unprepare(dsi->dsi_sys_clk); in cdns_dsi_suspend()
1360 clk_disable_unprepare(dsi->dsi_p_clk); in cdns_dsi_suspend()
1361 reset_control_assert(dsi->dsi_p_rst); in cdns_dsi_suspend()
1362 dsi->link_initialized = false; in cdns_dsi_suspend()
1486 struct cdns_dsi *dsi; in cdns_dsi_drm_probe() local
1492 dsi = devm_kzalloc(&pdev->dev, sizeof(*dsi), GFP_KERNEL); in cdns_dsi_drm_probe()
1493 if (!dsi) in cdns_dsi_drm_probe()
1496 platform_set_drvdata(pdev, dsi); in cdns_dsi_drm_probe()
1498 input = &dsi->input; in cdns_dsi_drm_probe()
1501 dsi->regs = devm_ioremap_resource(&pdev->dev, res); in cdns_dsi_drm_probe()
1502 if (IS_ERR(dsi->regs)) in cdns_dsi_drm_probe()
1503 return PTR_ERR(dsi->regs); in cdns_dsi_drm_probe()
1505 dsi->dsi_p_clk = devm_clk_get(&pdev->dev, "dsi_p_clk"); in cdns_dsi_drm_probe()
1506 if (IS_ERR(dsi->dsi_p_clk)) in cdns_dsi_drm_probe()
1507 return PTR_ERR(dsi->dsi_p_clk); in cdns_dsi_drm_probe()
1509 dsi->dsi_p_rst = devm_reset_control_get_optional_exclusive(&pdev->dev, in cdns_dsi_drm_probe()
1511 if (IS_ERR(dsi->dsi_p_rst)) in cdns_dsi_drm_probe()
1512 return PTR_ERR(dsi->dsi_p_rst); in cdns_dsi_drm_probe()
1514 dsi->dsi_sys_clk = devm_clk_get(&pdev->dev, "dsi_sys_clk"); in cdns_dsi_drm_probe()
1515 if (IS_ERR(dsi->dsi_sys_clk)) in cdns_dsi_drm_probe()
1516 return PTR_ERR(dsi->dsi_sys_clk); in cdns_dsi_drm_probe()
1522 dsi->dphy = cdns_dphy_probe(pdev); in cdns_dsi_drm_probe()
1523 if (IS_ERR(dsi->dphy)) in cdns_dsi_drm_probe()
1524 return PTR_ERR(dsi->dphy); in cdns_dsi_drm_probe()
1526 ret = clk_prepare_enable(dsi->dsi_p_clk); in cdns_dsi_drm_probe()
1530 val = readl(dsi->regs + ID_REG); in cdns_dsi_drm_probe()
1537 val = readl(dsi->regs + IP_CONF); in cdns_dsi_drm_probe()
1538 dsi->direct_cmd_fifo_depth = 1 << (DIRCMD_FIFO_DEPTH(val) + 2); in cdns_dsi_drm_probe()
1539 dsi->rx_fifo_depth = RX_FIFO_DEPTH(val); in cdns_dsi_drm_probe()
1540 init_completion(&dsi->direct_cmd_comp); in cdns_dsi_drm_probe()
1542 writel(0, dsi->regs + MCTL_MAIN_DATA_CTL); in cdns_dsi_drm_probe()
1543 writel(0, dsi->regs + MCTL_MAIN_EN); in cdns_dsi_drm_probe()
1544 writel(0, dsi->regs + MCTL_MAIN_PHY_CTL); in cdns_dsi_drm_probe()
1555 writel(0, dsi->regs + MCTL_MAIN_STS_CTL); in cdns_dsi_drm_probe()
1556 writel(0, dsi->regs + MCTL_DPHY_ERR_CTL1); in cdns_dsi_drm_probe()
1557 writel(0, dsi->regs + CMD_MODE_STS_CTL); in cdns_dsi_drm_probe()
1558 writel(0, dsi->regs + DIRECT_CMD_STS_CTL); in cdns_dsi_drm_probe()
1559 writel(0, dsi->regs + DIRECT_CMD_RD_STS_CTL); in cdns_dsi_drm_probe()
1560 writel(0, dsi->regs + VID_MODE_STS_CTL); in cdns_dsi_drm_probe()
1561 writel(0, dsi->regs + TVG_STS_CTL); in cdns_dsi_drm_probe()
1562 writel(0, dsi->regs + DPI_IRQ_EN); in cdns_dsi_drm_probe()
1564 dev_name(&pdev->dev), dsi); in cdns_dsi_drm_probe()
1569 dsi->base.dev = &pdev->dev; in cdns_dsi_drm_probe()
1570 dsi->base.ops = &cdns_dsi_ops; in cdns_dsi_drm_probe()
1572 ret = mipi_dsi_host_register(&dsi->base); in cdns_dsi_drm_probe()
1576 clk_disable_unprepare(dsi->dsi_p_clk); in cdns_dsi_drm_probe()
1584 clk_disable_unprepare(dsi->dsi_p_clk); in cdns_dsi_drm_probe()
1587 cdns_dphy_remove(dsi->dphy); in cdns_dsi_drm_probe()
1594 struct cdns_dsi *dsi = platform_get_drvdata(pdev); in cdns_dsi_drm_remove() local
1596 mipi_dsi_host_unregister(&dsi->base); in cdns_dsi_drm_remove()
1598 cdns_dphy_remove(dsi->dphy); in cdns_dsi_drm_remove()