Lines Matching refs:dsi
520 static inline void samsung_dsim_write(struct samsung_dsim *dsi,
523 writel(val, dsi->reg_base + dsi->driver_data->reg_ofs[idx]);
526 static inline u32 samsung_dsim_read(struct samsung_dsim *dsi, enum reg_idx idx)
528 return readl(dsi->reg_base + dsi->driver_data->reg_ofs[idx]);
531 static void samsung_dsim_wait_for_reset(struct samsung_dsim *dsi)
533 if (wait_for_completion_timeout(&dsi->completed, msecs_to_jiffies(300)))
536 dev_err(dsi->dev, "timeout waiting for reset\n");
539 static void samsung_dsim_reset(struct samsung_dsim *dsi)
541 u32 reset_val = dsi->driver_data->reg_values[RESET_TYPE];
543 reinit_completion(&dsi->completed);
544 samsung_dsim_write(dsi, DSIM_SWRST_REG, reset_val);
551 static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
556 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
607 static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
610 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
617 fin = dsi->pll_clk_rate;
618 fout = samsung_dsim_pll_find_pms(dsi, fin, freq, &p, &m, &s);
620 dev_err(dsi->dev,
624 dev_dbg(dsi->dev, "PLL freq %lu, (p %d, m %d, s %d)\n", fout, p, m, s);
627 dsi->reg_base + driver_data->plltmr_reg);
645 dev_dbg(dsi->dev, "band %d\n", band);
650 if (dsi->swap_dn_dp_clk)
652 if (dsi->swap_dn_dp_data)
655 samsung_dsim_write(dsi, DSIM_PLLCTRL_REG, reg);
660 dev_err(dsi->dev, "PLL failed to stabilize\n");
663 reg = samsung_dsim_read(dsi, DSIM_STATUS_REG);
666 dsi->hs_clock = fout;
671 static int samsung_dsim_enable_clock(struct samsung_dsim *dsi)
676 struct drm_display_mode *m = &dsi->mode;
677 int bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
683 if (dsi->burst_clk_rate)
684 hs_clk = samsung_dsim_set_pll(dsi, dsi->burst_clk_rate);
686 hs_clk = samsung_dsim_set_pll(dsi, DIV_ROUND_UP(pix_clk * bpp, dsi->lanes));
689 dev_err(dsi->dev, "failed to configure DSI PLL\n");
694 esc_div = DIV_ROUND_UP(byte_clk, dsi->esc_clk_rate);
702 dev_dbg(dsi->dev, "hs_clk = %lu, byte_clk = %lu, esc_clk = %lu\n",
705 reg = samsung_dsim_read(dsi, DSIM_CLKCTRL_REG);
712 | DSIM_LANE_ESC_CLK_EN_DATA(BIT(dsi->lanes) - 1)
715 samsung_dsim_write(dsi, DSIM_CLKCTRL_REG, reg);
720 static void samsung_dsim_set_phy_ctrl(struct samsung_dsim *dsi)
722 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
728 unsigned long long byte_clock = dsi->hs_clock / 8;
733 phy_mipi_dphy_get_default_config_for_hsclk(dsi->hs_clock,
734 dsi->lanes, &cfg);
766 samsung_dsim_write(dsi, DSIM_PHYCTRL_REG, reg);
776 samsung_dsim_write(dsi, DSIM_PHYTIMING_REG, reg);
797 samsung_dsim_write(dsi, DSIM_PHYTIMING1_REG, reg);
813 samsung_dsim_write(dsi, DSIM_PHYTIMING2_REG, reg);
816 static void samsung_dsim_disable_clock(struct samsung_dsim *dsi)
820 reg = samsung_dsim_read(dsi, DSIM_CLKCTRL_REG);
823 samsung_dsim_write(dsi, DSIM_CLKCTRL_REG, reg);
825 reg = samsung_dsim_read(dsi, DSIM_PLLCTRL_REG);
827 samsung_dsim_write(dsi, DSIM_PLLCTRL_REG, reg);
830 static void samsung_dsim_enable_lane(struct samsung_dsim *dsi, u32 lane)
832 u32 reg = samsung_dsim_read(dsi, DSIM_CONFIG_REG);
834 reg |= (DSIM_NUM_OF_DATA_LANE(dsi->lanes - 1) | DSIM_LANE_EN_CLK |
836 samsung_dsim_write(dsi, DSIM_CONFIG_REG, reg);
839 static int samsung_dsim_init_link(struct samsung_dsim *dsi)
841 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
847 reg = samsung_dsim_read(dsi, DSIM_FIFOCTRL_REG);
849 samsung_dsim_write(dsi, DSIM_FIFOCTRL_REG, reg);
854 samsung_dsim_write(dsi, DSIM_FIFOCTRL_REG, reg);
862 * If this bit is set[= MIPI_DSI_MODE_VIDEO], dsi will support video
865 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) {
872 if (!(dsi->mode_flags & MIPI_DSI_MODE_VSYNC_FLUSH))
874 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE)
876 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST)
878 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_AUTO_VERT)
880 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HSE)
882 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HFP)
884 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HBP)
886 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_NO_HSA)
890 if (dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET)
893 switch (dsi->format) {
907 dev_err(dsi->dev, "invalid pixel format\n");
920 dsi->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS)
922 samsung_dsim_write(dsi, DSIM_CONFIG_REG, reg);
924 lanes_mask = BIT(dsi->lanes) - 1;
925 samsung_dsim_enable_lane(dsi, lanes_mask);
931 dev_err(dsi->dev, "waiting for bus lanes timed out\n");
935 reg = samsung_dsim_read(dsi, DSIM_STATUS_REG);
941 reg = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
944 samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg);
947 samsung_dsim_write(dsi, DSIM_TIMEOUT_REG, reg);
952 static void samsung_dsim_set_display_mode(struct samsung_dsim *dsi)
954 struct drm_display_mode *m = &dsi->mode;
955 unsigned int num_bits_resol = dsi->driver_data->num_bits_resol;
958 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) {
959 int byte_clk_khz = dsi->hs_clock / 1000 / 8;
969 dev_dbg(dsi->dev, "calculated hfp: %u, hbp: %u, hsa: %u",
975 samsung_dsim_write(dsi, DSIM_MVPORCH_REG, reg);
978 samsung_dsim_write(dsi, DSIM_MHPORCH_REG, reg);
982 samsung_dsim_write(dsi, DSIM_MSYNC_REG, reg);
987 samsung_dsim_write(dsi, DSIM_MDRESOL_REG, reg);
989 dev_dbg(dsi->dev, "LCD size = %dx%d\n", m->hdisplay, m->vdisplay);
992 static void samsung_dsim_set_display_enable(struct samsung_dsim *dsi, bool enable)
996 reg = samsung_dsim_read(dsi, DSIM_MDRESOL_REG);
1001 samsung_dsim_write(dsi, DSIM_MDRESOL_REG, reg);
1004 static int samsung_dsim_wait_for_hdr_fifo(struct samsung_dsim *dsi)
1009 u32 reg = samsung_dsim_read(dsi, DSIM_FIFOCTRL_REG);
1011 if (!dsi->driver_data->has_broken_fifoctrl_emptyhdr) {
1033 static void samsung_dsim_set_cmd_lpm(struct samsung_dsim *dsi, bool lpm)
1035 u32 v = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
1042 samsung_dsim_write(dsi, DSIM_ESCMODE_REG, v);
1045 static void samsung_dsim_force_bta(struct samsung_dsim *dsi)
1047 u32 v = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
1050 samsung_dsim_write(dsi, DSIM_ESCMODE_REG, v);
1053 static void samsung_dsim_send_to_fifo(struct samsung_dsim *dsi,
1056 struct device *dev = dsi->dev;
1074 samsung_dsim_write(dsi, DSIM_PAYLOAD_REG, reg);
1089 samsung_dsim_write(dsi, DSIM_PAYLOAD_REG, reg);
1098 if (samsung_dsim_wait_for_hdr_fifo(dsi)) {
1104 dsi->state & DSIM_STATE_CMD_LPM)) {
1105 samsung_dsim_set_cmd_lpm(dsi, xfer->flags & MIPI_DSI_MSG_USE_LPM);
1106 dsi->state ^= DSIM_STATE_CMD_LPM;
1109 samsung_dsim_write(dsi, DSIM_PKTHDR_REG, reg);
1112 samsung_dsim_force_bta(dsi);
1115 static void samsung_dsim_read_from_fifo(struct samsung_dsim *dsi,
1120 struct device *dev = dsi->dev;
1125 reg = samsung_dsim_read(dsi, DSIM_RXFIFO_REG);
1164 reg = samsung_dsim_read(dsi, DSIM_RXFIFO_REG);
1174 reg = samsung_dsim_read(dsi, DSIM_RXFIFO_REG);
1193 reg = samsung_dsim_read(dsi, DSIM_RXFIFO_REG);
1199 static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
1206 spin_lock_irqsave(&dsi->transfer_lock, flags);
1208 if (list_empty(&dsi->transfer_list)) {
1209 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1213 xfer = list_first_entry(&dsi->transfer_list,
1216 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1223 samsung_dsim_send_to_fifo(dsi, xfer);
1231 spin_lock_irqsave(&dsi->transfer_lock, flags);
1234 start = !list_empty(&dsi->transfer_list);
1236 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1242 static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)
1248 spin_lock_irqsave(&dsi->transfer_lock, flags);
1250 if (list_empty(&dsi->transfer_list)) {
1251 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1255 xfer = list_first_entry(&dsi->transfer_list,
1258 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1260 dev_dbg(dsi->dev,
1269 samsung_dsim_read_from_fifo(dsi, xfer);
1274 spin_lock_irqsave(&dsi->transfer_lock, flags);
1277 start = !list_empty(&dsi->transfer_list);
1279 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1288 static void samsung_dsim_remove_transfer(struct samsung_dsim *dsi,
1294 spin_lock_irqsave(&dsi->transfer_lock, flags);
1296 if (!list_empty(&dsi->transfer_list) &&
1297 xfer == list_first_entry(&dsi->transfer_list,
1300 start = !list_empty(&dsi->transfer_list);
1301 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1303 samsung_dsim_transfer_start(dsi);
1309 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1312 static int samsung_dsim_transfer(struct samsung_dsim *dsi,
1323 spin_lock_irqsave(&dsi->transfer_lock, flags);
1325 stopped = list_empty(&dsi->transfer_list);
1326 list_add_tail(&xfer->list, &dsi->transfer_list);
1328 spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1331 samsung_dsim_transfer_start(dsi);
1338 samsung_dsim_remove_transfer(dsi, xfer);
1339 dev_err(dsi->dev, "xfer timed out: %*ph %*ph\n", 4, pkt->header,
1350 struct samsung_dsim *dsi = dev_id;
1353 status = samsung_dsim_read(dsi, DSIM_INTSRC_REG);
1358 dev_warn(dsi->dev, "spurious interrupt\n");
1361 samsung_dsim_write(dsi, DSIM_INTSRC_REG, status);
1369 samsung_dsim_write(dsi, DSIM_INTMSK_REG, mask);
1370 complete(&dsi->completed);
1378 if (samsung_dsim_transfer_finish(dsi))
1379 samsung_dsim_transfer_start(dsi);
1384 static void samsung_dsim_enable_irq(struct samsung_dsim *dsi)
1386 enable_irq(dsi->irq);
1388 if (dsi->te_gpio)
1389 enable_irq(gpiod_to_irq(dsi->te_gpio));
1392 static void samsung_dsim_disable_irq(struct samsung_dsim *dsi)
1394 if (dsi->te_gpio)
1395 disable_irq(gpiod_to_irq(dsi->te_gpio));
1397 disable_irq(dsi->irq);
1400 static int samsung_dsim_init(struct samsung_dsim *dsi)
1402 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
1404 if (dsi->state & DSIM_STATE_INITIALIZED)
1407 samsung_dsim_reset(dsi);
1408 samsung_dsim_enable_irq(dsi);
1411 samsung_dsim_enable_lane(dsi, BIT(dsi->lanes) - 1);
1413 samsung_dsim_enable_clock(dsi);
1415 samsung_dsim_wait_for_reset(dsi);
1416 samsung_dsim_set_phy_ctrl(dsi);
1417 samsung_dsim_init_link(dsi);
1419 dsi->state |= DSIM_STATE_INITIALIZED;
1427 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1430 if (dsi->state & DSIM_STATE_ENABLED)
1433 ret = pm_runtime_resume_and_get(dsi->dev);
1435 dev_err(dsi->dev, "failed to enable DSI device.\n");
1439 dsi->state |= DSIM_STATE_ENABLED;
1445 if (!samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) {
1446 ret = samsung_dsim_init(dsi);
1455 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1457 samsung_dsim_set_display_mode(dsi);
1458 samsung_dsim_set_display_enable(dsi, true);
1460 dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
1466 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1468 if (!(dsi->state & DSIM_STATE_ENABLED))
1471 dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
1477 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1479 samsung_dsim_set_display_enable(dsi, false);
1481 dsi->state &= ~DSIM_STATE_ENABLED;
1482 pm_runtime_put_sync(dsi->dev);
1550 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1567 if (dsi->plat_data->hw_type == DSIM_TYPE_IMX8MM) {
1570 } else if (dsi->plat_data->hw_type == DSIM_TYPE_IMX8MP) {
1582 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1584 drm_mode_copy(&dsi->mode, adjusted_mode);
1590 struct samsung_dsim *dsi = bridge_to_dsi(bridge);
1592 return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge,
1612 struct samsung_dsim *dsi = (struct samsung_dsim *)dev_id;
1613 const struct samsung_dsim_plat_data *pdata = dsi->plat_data;
1616 return pdata->host_ops->te_irq_handler(dsi);
1621 static int samsung_dsim_register_te_irq(struct samsung_dsim *dsi, struct device *dev)
1626 dsi->te_gpio = devm_gpiod_get_optional(dev, "te", GPIOD_IN);
1627 if (!dsi->te_gpio)
1629 else if (IS_ERR(dsi->te_gpio))
1630 return dev_err_probe(dev, PTR_ERR(dsi->te_gpio), "failed to get te GPIO\n");
1632 te_gpio_irq = gpiod_to_irq(dsi->te_gpio);
1635 IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN, "TE", dsi);
1637 dev_err(dsi->dev, "request interrupt failed with %d\n", ret);
1638 gpiod_put(dsi->te_gpio);
1648 struct samsung_dsim *dsi = host_to_dsi(host);
1649 const struct samsung_dsim_plat_data *pdata = dsi->plat_data;
1650 struct device *dev = dsi->dev;
1688 dsi->out_bridge = devm_drm_panel_bridge_add(dev, panel);
1690 dsi->out_bridge = of_drm_find_bridge(remote);
1691 if (!dsi->out_bridge)
1692 dsi->out_bridge = ERR_PTR(-EINVAL);
1697 if (IS_ERR(dsi->out_bridge)) {
1698 ret = PTR_ERR(dsi->out_bridge);
1705 drm_bridge_add(&dsi->bridge);
1710 * If attached panel device is for command mode one, dsi should register
1714 ret = samsung_dsim_register_te_irq(dsi, &device->dev);
1720 ret = pdata->host_ops->attach(dsi, device);
1725 dsi->lanes = device->lanes;
1726 dsi->format = device->format;
1727 dsi->mode_flags = device->mode_flags;
1732 static void samsung_dsim_unregister_te_irq(struct samsung_dsim *dsi)
1734 if (dsi->te_gpio) {
1735 free_irq(gpiod_to_irq(dsi->te_gpio), dsi);
1736 gpiod_put(dsi->te_gpio);
1743 struct samsung_dsim *dsi = host_to_dsi(host);
1744 const struct samsung_dsim_plat_data *pdata = dsi->plat_data;
1746 dsi->out_bridge = NULL;
1749 pdata->host_ops->detach(dsi, device);
1751 samsung_dsim_unregister_te_irq(dsi);
1753 drm_bridge_remove(&dsi->bridge);
1761 struct samsung_dsim *dsi = host_to_dsi(host);
1765 if (!(dsi->state & DSIM_STATE_ENABLED))
1768 ret = samsung_dsim_init(dsi);
1780 ret = samsung_dsim_transfer(dsi, &xfer);
1801 static int samsung_dsim_parse_dt(struct samsung_dsim *dsi)
1803 struct device *dev = dsi->dev;
1811 &dsi->pll_clk_rate, 1);
1817 dsi->pll_clk_rate = clk_get_rate(pll_clk);
1824 &dsi->burst_clk_rate, 1);
1827 dsi->burst_clk_rate = 0;
1831 &dsi->esc_clk_rate, 0);
1843 DRM_DEV_ERROR(dsi->dev, "Data lanes polarities do not match");
1846 dsi->swap_dn_dp_clk = true;
1848 dsi->swap_dn_dp_data = true;
1854 static int generic_dsim_register_host(struct samsung_dsim *dsi)
1856 return mipi_dsi_host_register(&dsi->dsi_host);
1859 static void generic_dsim_unregister_host(struct samsung_dsim *dsi)
1861 mipi_dsi_host_unregister(&dsi->dsi_host);
1880 struct samsung_dsim *dsi;
1883 dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
1884 if (!dsi)
1887 init_completion(&dsi->completed);
1888 spin_lock_init(&dsi->transfer_lock);
1889 INIT_LIST_HEAD(&dsi->transfer_list);
1891 dsi->dsi_host.ops = &samsung_dsim_ops;
1892 dsi->dsi_host.dev = dev;
1894 dsi->dev = dev;
1895 dsi->plat_data = of_device_get_match_data(dev);
1896 dsi->driver_data = samsung_dsim_types[dsi->plat_data->hw_type];
1898 dsi->supplies[0].supply = "vddcore";
1899 dsi->supplies[1].supply = "vddio";
1900 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(dsi->supplies),
1901 dsi->supplies);
1905 dsi->clks = devm_kcalloc(dev, dsi->driver_data->num_clks,
1906 sizeof(*dsi->clks), GFP_KERNEL);
1907 if (!dsi->clks)
1910 for (i = 0; i < dsi->driver_data->num_clks; i++) {
1911 dsi->clks[i] = devm_clk_get(dev, clk_names[i]);
1912 if (IS_ERR(dsi->clks[i])) {
1914 dsi->clks[i] = devm_clk_get(dev, OLD_SCLK_MIPI_CLK_NAME);
1915 if (!IS_ERR(dsi->clks[i]))
1920 return PTR_ERR(dsi->clks[i]);
1924 dsi->reg_base = devm_platform_ioremap_resource(pdev, 0);
1925 if (IS_ERR(dsi->reg_base))
1926 return PTR_ERR(dsi->reg_base);
1928 dsi->phy = devm_phy_optional_get(dev, "dsim");
1929 if (IS_ERR(dsi->phy)) {
1931 return PTR_ERR(dsi->phy);
1934 dsi->irq = platform_get_irq(pdev, 0);
1935 if (dsi->irq < 0)
1936 return dsi->irq;
1938 ret = devm_request_threaded_irq(dev, dsi->irq, NULL,
1941 dev_name(dev), dsi);
1943 dev_err(dev, "failed to request dsi irq\n");
1947 ret = samsung_dsim_parse_dt(dsi);
1951 platform_set_drvdata(pdev, dsi);
1955 dsi->bridge.funcs = &samsung_dsim_bridge_funcs;
1956 dsi->bridge.of_node = dev->of_node;
1957 dsi->bridge.type = DRM_MODE_CONNECTOR_DSI;
1960 if (dsi->plat_data->hw_type == DSIM_TYPE_IMX8MM)
1961 dsi->bridge.timings = &samsung_dsim_bridge_timings_de_low;
1963 dsi->bridge.timings = &samsung_dsim_bridge_timings_de_high;
1965 if (dsi->plat_data->host_ops && dsi->plat_data->host_ops->register_host)
1966 ret = dsi->plat_data->host_ops->register_host(dsi);
1982 struct samsung_dsim *dsi = platform_get_drvdata(pdev);
1986 if (dsi->plat_data->host_ops && dsi->plat_data->host_ops->unregister_host)
1987 dsi->plat_data->host_ops->unregister_host(dsi);
1995 struct samsung_dsim *dsi = dev_get_drvdata(dev);
1996 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
2001 if (dsi->state & DSIM_STATE_INITIALIZED) {
2002 dsi->state &= ~DSIM_STATE_INITIALIZED;
2004 samsung_dsim_disable_clock(dsi);
2006 samsung_dsim_disable_irq(dsi);
2009 dsi->state &= ~DSIM_STATE_CMD_LPM;
2011 phy_power_off(dsi->phy);
2014 clk_disable_unprepare(dsi->clks[i]);
2016 ret = regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies);
2018 dev_err(dsi->dev, "cannot disable regulators %d\n", ret);
2025 struct samsung_dsim *dsi = dev_get_drvdata(dev);
2026 const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
2029 ret = regulator_bulk_enable(ARRAY_SIZE(dsi->supplies), dsi->supplies);
2031 dev_err(dsi->dev, "cannot enable regulators %d\n", ret);
2036 ret = clk_prepare_enable(dsi->clks[i]);
2041 ret = phy_power_on(dsi->phy);
2043 dev_err(dsi->dev, "cannot enable phy %d\n", ret);
2051 clk_disable_unprepare(dsi->clks[i]);
2052 regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies);