Lines Matching refs:dsi

212 #define REG_ADDR(dsi, reg_idx)		((dsi)->reg_base + \  argument
213 dsi->driver_data->reg_ofs[(reg_idx)])
214 #define DSI_WRITE(dsi, reg_idx, val) writel((val), \ argument
215 REG_ADDR((dsi), (reg_idx)))
216 #define DSI_READ(dsi, reg_idx) readl(REG_ADDR((dsi), (reg_idx))) argument
508 static void exynos_dsi_wait_for_reset(struct exynos_dsi *dsi) in exynos_dsi_wait_for_reset() argument
510 if (wait_for_completion_timeout(&dsi->completed, msecs_to_jiffies(300))) in exynos_dsi_wait_for_reset()
513 dev_err(dsi->dev, "timeout waiting for reset\n"); in exynos_dsi_wait_for_reset()
516 static void exynos_dsi_reset(struct exynos_dsi *dsi) in exynos_dsi_reset() argument
518 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_reset()
520 reinit_completion(&dsi->completed); in exynos_dsi_reset()
521 DSI_WRITE(dsi, DSIM_SWRST_REG, driver_data->reg_values[RESET_TYPE]); in exynos_dsi_reset()
528 static unsigned long exynos_dsi_pll_find_pms(struct exynos_dsi *dsi, in exynos_dsi_pll_find_pms() argument
531 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_pll_find_pms()
582 static unsigned long exynos_dsi_set_pll(struct exynos_dsi *dsi, in exynos_dsi_set_pll() argument
585 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_set_pll()
592 fin = dsi->pll_clk_rate; in exynos_dsi_set_pll()
593 fout = exynos_dsi_pll_find_pms(dsi, fin, freq, &p, &m, &s); in exynos_dsi_set_pll()
595 dev_err(dsi->dev, in exynos_dsi_set_pll()
599 dev_dbg(dsi->dev, "PLL freq %lu, (p %d, m %d, s %d)\n", fout, p, m, s); in exynos_dsi_set_pll()
602 dsi->reg_base + driver_data->plltmr_reg); in exynos_dsi_set_pll()
619 dev_dbg(dsi->dev, "band %d\n", band); in exynos_dsi_set_pll()
624 DSI_WRITE(dsi, DSIM_PLLCTRL_REG, reg); in exynos_dsi_set_pll()
629 dev_err(dsi->dev, "PLL failed to stabilize\n"); in exynos_dsi_set_pll()
632 reg = DSI_READ(dsi, DSIM_STATUS_REG); in exynos_dsi_set_pll()
638 static int exynos_dsi_enable_clock(struct exynos_dsi *dsi) in exynos_dsi_enable_clock() argument
644 hs_clk = exynos_dsi_set_pll(dsi, dsi->burst_clk_rate); in exynos_dsi_enable_clock()
646 dev_err(dsi->dev, "failed to configure DSI PLL\n"); in exynos_dsi_enable_clock()
651 esc_div = DIV_ROUND_UP(byte_clk, dsi->esc_clk_rate); in exynos_dsi_enable_clock()
659 dev_dbg(dsi->dev, "hs_clk = %lu, byte_clk = %lu, esc_clk = %lu\n", in exynos_dsi_enable_clock()
662 reg = DSI_READ(dsi, DSIM_CLKCTRL_REG); in exynos_dsi_enable_clock()
669 | DSIM_LANE_ESC_CLK_EN_DATA(BIT(dsi->lanes) - 1) in exynos_dsi_enable_clock()
672 DSI_WRITE(dsi, DSIM_CLKCTRL_REG, reg); in exynos_dsi_enable_clock()
677 static void exynos_dsi_set_phy_ctrl(struct exynos_dsi *dsi) in exynos_dsi_set_phy_ctrl() argument
679 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_set_phy_ctrl()
689 DSI_WRITE(dsi, DSIM_PHYCTRL_REG, reg); in exynos_dsi_set_phy_ctrl()
697 DSI_WRITE(dsi, DSIM_PHYTIMING_REG, reg); in exynos_dsi_set_phy_ctrl()
717 DSI_WRITE(dsi, DSIM_PHYTIMING1_REG, reg); in exynos_dsi_set_phy_ctrl()
730 DSI_WRITE(dsi, DSIM_PHYTIMING2_REG, reg); in exynos_dsi_set_phy_ctrl()
733 static void exynos_dsi_disable_clock(struct exynos_dsi *dsi) in exynos_dsi_disable_clock() argument
737 reg = DSI_READ(dsi, DSIM_CLKCTRL_REG); in exynos_dsi_disable_clock()
740 DSI_WRITE(dsi, DSIM_CLKCTRL_REG, reg); in exynos_dsi_disable_clock()
742 reg = DSI_READ(dsi, DSIM_PLLCTRL_REG); in exynos_dsi_disable_clock()
744 DSI_WRITE(dsi, DSIM_PLLCTRL_REG, reg); in exynos_dsi_disable_clock()
747 static void exynos_dsi_enable_lane(struct exynos_dsi *dsi, u32 lane) in exynos_dsi_enable_lane() argument
749 u32 reg = DSI_READ(dsi, DSIM_CONFIG_REG); in exynos_dsi_enable_lane()
750 reg |= (DSIM_NUM_OF_DATA_LANE(dsi->lanes - 1) | DSIM_LANE_EN_CLK | in exynos_dsi_enable_lane()
752 DSI_WRITE(dsi, DSIM_CONFIG_REG, reg); in exynos_dsi_enable_lane()
755 static int exynos_dsi_init_link(struct exynos_dsi *dsi) in exynos_dsi_init_link() argument
757 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_init_link()
763 reg = DSI_READ(dsi, DSIM_FIFOCTRL_REG); in exynos_dsi_init_link()
765 DSI_WRITE(dsi, DSIM_FIFOCTRL_REG, reg); in exynos_dsi_init_link()
770 DSI_WRITE(dsi, DSIM_FIFOCTRL_REG, reg); in exynos_dsi_init_link()
781 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) { in exynos_dsi_init_link()
788 if (!(dsi->mode_flags & MIPI_DSI_MODE_VSYNC_FLUSH)) in exynos_dsi_init_link()
790 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) in exynos_dsi_init_link()
792 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) in exynos_dsi_init_link()
794 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_AUTO_VERT) in exynos_dsi_init_link()
796 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HSE) in exynos_dsi_init_link()
798 if (!(dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HFP)) in exynos_dsi_init_link()
800 if (!(dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HBP)) in exynos_dsi_init_link()
802 if (!(dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HSA)) in exynos_dsi_init_link()
806 if (!(dsi->mode_flags & MIPI_DSI_MODE_EOT_PACKET)) in exynos_dsi_init_link()
809 switch (dsi->format) { in exynos_dsi_init_link()
823 dev_err(dsi->dev, "invalid pixel format\n"); in exynos_dsi_init_link()
836 dsi->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) { in exynos_dsi_init_link()
839 DSI_WRITE(dsi, DSIM_CONFIG_REG, reg); in exynos_dsi_init_link()
841 lanes_mask = BIT(dsi->lanes) - 1; in exynos_dsi_init_link()
842 exynos_dsi_enable_lane(dsi, lanes_mask); in exynos_dsi_init_link()
848 dev_err(dsi->dev, "waiting for bus lanes timed out\n"); in exynos_dsi_init_link()
852 reg = DSI_READ(dsi, DSIM_STATUS_REG); in exynos_dsi_init_link()
858 reg = DSI_READ(dsi, DSIM_ESCMODE_REG); in exynos_dsi_init_link()
861 DSI_WRITE(dsi, DSIM_ESCMODE_REG, reg); in exynos_dsi_init_link()
864 DSI_WRITE(dsi, DSIM_TIMEOUT_REG, reg); in exynos_dsi_init_link()
869 static void exynos_dsi_set_display_mode(struct exynos_dsi *dsi) in exynos_dsi_set_display_mode() argument
871 struct videomode *vm = &dsi->vm; in exynos_dsi_set_display_mode()
872 unsigned int num_bits_resol = dsi->driver_data->num_bits_resol; in exynos_dsi_set_display_mode()
875 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) { in exynos_dsi_set_display_mode()
879 DSI_WRITE(dsi, DSIM_MVPORCH_REG, reg); in exynos_dsi_set_display_mode()
883 DSI_WRITE(dsi, DSIM_MHPORCH_REG, reg); in exynos_dsi_set_display_mode()
887 DSI_WRITE(dsi, DSIM_MSYNC_REG, reg); in exynos_dsi_set_display_mode()
892 DSI_WRITE(dsi, DSIM_MDRESOL_REG, reg); in exynos_dsi_set_display_mode()
894 dev_dbg(dsi->dev, "LCD size = %dx%d\n", vm->hactive, vm->vactive); in exynos_dsi_set_display_mode()
897 static void exynos_dsi_set_display_enable(struct exynos_dsi *dsi, bool enable) in exynos_dsi_set_display_enable() argument
901 reg = DSI_READ(dsi, DSIM_MDRESOL_REG); in exynos_dsi_set_display_enable()
906 DSI_WRITE(dsi, DSIM_MDRESOL_REG, reg); in exynos_dsi_set_display_enable()
909 static int exynos_dsi_wait_for_hdr_fifo(struct exynos_dsi *dsi) in exynos_dsi_wait_for_hdr_fifo() argument
914 u32 reg = DSI_READ(dsi, DSIM_FIFOCTRL_REG); in exynos_dsi_wait_for_hdr_fifo()
926 static void exynos_dsi_set_cmd_lpm(struct exynos_dsi *dsi, bool lpm) in exynos_dsi_set_cmd_lpm() argument
928 u32 v = DSI_READ(dsi, DSIM_ESCMODE_REG); in exynos_dsi_set_cmd_lpm()
935 DSI_WRITE(dsi, DSIM_ESCMODE_REG, v); in exynos_dsi_set_cmd_lpm()
938 static void exynos_dsi_force_bta(struct exynos_dsi *dsi) in exynos_dsi_force_bta() argument
940 u32 v = DSI_READ(dsi, DSIM_ESCMODE_REG); in exynos_dsi_force_bta()
942 DSI_WRITE(dsi, DSIM_ESCMODE_REG, v); in exynos_dsi_force_bta()
945 static void exynos_dsi_send_to_fifo(struct exynos_dsi *dsi, in exynos_dsi_send_to_fifo() argument
948 struct device *dev = dsi->dev; in exynos_dsi_send_to_fifo()
966 DSI_WRITE(dsi, DSIM_PAYLOAD_REG, reg); in exynos_dsi_send_to_fifo()
981 DSI_WRITE(dsi, DSIM_PAYLOAD_REG, reg); in exynos_dsi_send_to_fifo()
993 if (exynos_dsi_wait_for_hdr_fifo(dsi)) { in exynos_dsi_send_to_fifo()
999 dsi->state & DSIM_STATE_CMD_LPM)) { in exynos_dsi_send_to_fifo()
1000 exynos_dsi_set_cmd_lpm(dsi, xfer->flags & MIPI_DSI_MSG_USE_LPM); in exynos_dsi_send_to_fifo()
1001 dsi->state ^= DSIM_STATE_CMD_LPM; in exynos_dsi_send_to_fifo()
1004 DSI_WRITE(dsi, DSIM_PKTHDR_REG, reg); in exynos_dsi_send_to_fifo()
1007 exynos_dsi_force_bta(dsi); in exynos_dsi_send_to_fifo()
1010 static void exynos_dsi_read_from_fifo(struct exynos_dsi *dsi, in exynos_dsi_read_from_fifo() argument
1015 struct device *dev = dsi->dev; in exynos_dsi_read_from_fifo()
1020 reg = DSI_READ(dsi, DSIM_RXFIFO_REG); in exynos_dsi_read_from_fifo()
1059 reg = DSI_READ(dsi, DSIM_RXFIFO_REG); in exynos_dsi_read_from_fifo()
1069 reg = DSI_READ(dsi, DSIM_RXFIFO_REG); in exynos_dsi_read_from_fifo()
1088 reg = DSI_READ(dsi, DSIM_RXFIFO_REG); in exynos_dsi_read_from_fifo()
1094 static void exynos_dsi_transfer_start(struct exynos_dsi *dsi) in exynos_dsi_transfer_start() argument
1101 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_transfer_start()
1103 if (list_empty(&dsi->transfer_list)) { in exynos_dsi_transfer_start()
1104 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_start()
1108 xfer = list_first_entry(&dsi->transfer_list, in exynos_dsi_transfer_start()
1111 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_start()
1117 exynos_dsi_send_to_fifo(dsi, xfer); in exynos_dsi_transfer_start()
1125 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_transfer_start()
1128 start = !list_empty(&dsi->transfer_list); in exynos_dsi_transfer_start()
1130 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_start()
1136 static bool exynos_dsi_transfer_finish(struct exynos_dsi *dsi) in exynos_dsi_transfer_finish() argument
1142 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_transfer_finish()
1144 if (list_empty(&dsi->transfer_list)) { in exynos_dsi_transfer_finish()
1145 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_finish()
1149 xfer = list_first_entry(&dsi->transfer_list, in exynos_dsi_transfer_finish()
1152 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_finish()
1154 dev_dbg(dsi->dev, in exynos_dsi_transfer_finish()
1162 exynos_dsi_read_from_fifo(dsi, xfer); in exynos_dsi_transfer_finish()
1167 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_transfer_finish()
1170 start = !list_empty(&dsi->transfer_list); in exynos_dsi_transfer_finish()
1172 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer_finish()
1181 static void exynos_dsi_remove_transfer(struct exynos_dsi *dsi, in exynos_dsi_remove_transfer() argument
1187 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_remove_transfer()
1189 if (!list_empty(&dsi->transfer_list) && in exynos_dsi_remove_transfer()
1190 xfer == list_first_entry(&dsi->transfer_list, in exynos_dsi_remove_transfer()
1193 start = !list_empty(&dsi->transfer_list); in exynos_dsi_remove_transfer()
1194 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_remove_transfer()
1196 exynos_dsi_transfer_start(dsi); in exynos_dsi_remove_transfer()
1202 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_remove_transfer()
1205 static int exynos_dsi_transfer(struct exynos_dsi *dsi, in exynos_dsi_transfer() argument
1216 spin_lock_irqsave(&dsi->transfer_lock, flags); in exynos_dsi_transfer()
1218 stopped = list_empty(&dsi->transfer_list); in exynos_dsi_transfer()
1219 list_add_tail(&xfer->list, &dsi->transfer_list); in exynos_dsi_transfer()
1221 spin_unlock_irqrestore(&dsi->transfer_lock, flags); in exynos_dsi_transfer()
1224 exynos_dsi_transfer_start(dsi); in exynos_dsi_transfer()
1229 exynos_dsi_remove_transfer(dsi, xfer); in exynos_dsi_transfer()
1230 dev_err(dsi->dev, "xfer timed out: %*ph %*ph\n", 2, xfer->data, in exynos_dsi_transfer()
1241 struct exynos_dsi *dsi = dev_id; in exynos_dsi_irq() local
1244 status = DSI_READ(dsi, DSIM_INTSRC_REG); in exynos_dsi_irq()
1248 dev_warn(dsi->dev, "spurious interrupt\n"); in exynos_dsi_irq()
1251 DSI_WRITE(dsi, DSIM_INTSRC_REG, status); in exynos_dsi_irq()
1257 DSI_WRITE(dsi, DSIM_INTMSK_REG, mask); in exynos_dsi_irq()
1258 complete(&dsi->completed); in exynos_dsi_irq()
1266 if (exynos_dsi_transfer_finish(dsi)) in exynos_dsi_irq()
1267 exynos_dsi_transfer_start(dsi); in exynos_dsi_irq()
1274 struct exynos_dsi *dsi = (struct exynos_dsi *)dev_id; in exynos_dsi_te_irq_handler() local
1275 struct drm_encoder *encoder = &dsi->encoder; in exynos_dsi_te_irq_handler()
1277 if (dsi->state & DSIM_STATE_VIDOUT_AVAILABLE) in exynos_dsi_te_irq_handler()
1283 static void exynos_dsi_enable_irq(struct exynos_dsi *dsi) in exynos_dsi_enable_irq() argument
1285 enable_irq(dsi->irq); in exynos_dsi_enable_irq()
1287 if (gpio_is_valid(dsi->te_gpio)) in exynos_dsi_enable_irq()
1288 enable_irq(gpio_to_irq(dsi->te_gpio)); in exynos_dsi_enable_irq()
1291 static void exynos_dsi_disable_irq(struct exynos_dsi *dsi) in exynos_dsi_disable_irq() argument
1293 if (gpio_is_valid(dsi->te_gpio)) in exynos_dsi_disable_irq()
1294 disable_irq(gpio_to_irq(dsi->te_gpio)); in exynos_dsi_disable_irq()
1296 disable_irq(dsi->irq); in exynos_dsi_disable_irq()
1299 static int exynos_dsi_init(struct exynos_dsi *dsi) in exynos_dsi_init() argument
1301 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_init()
1303 exynos_dsi_reset(dsi); in exynos_dsi_init()
1304 exynos_dsi_enable_irq(dsi); in exynos_dsi_init()
1307 exynos_dsi_enable_lane(dsi, BIT(dsi->lanes) - 1); in exynos_dsi_init()
1309 exynos_dsi_enable_clock(dsi); in exynos_dsi_init()
1311 exynos_dsi_wait_for_reset(dsi); in exynos_dsi_init()
1312 exynos_dsi_set_phy_ctrl(dsi); in exynos_dsi_init()
1313 exynos_dsi_init_link(dsi); in exynos_dsi_init()
1318 static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi) in exynos_dsi_register_te_irq() argument
1323 dsi->te_gpio = of_get_named_gpio(dsi->panel_node, "te-gpios", 0); in exynos_dsi_register_te_irq()
1324 if (!gpio_is_valid(dsi->te_gpio)) { in exynos_dsi_register_te_irq()
1325 dev_err(dsi->dev, "no te-gpios specified\n"); in exynos_dsi_register_te_irq()
1326 ret = dsi->te_gpio; in exynos_dsi_register_te_irq()
1330 ret = gpio_request(dsi->te_gpio, "te_gpio"); in exynos_dsi_register_te_irq()
1332 dev_err(dsi->dev, "gpio request failed with %d\n", ret); in exynos_dsi_register_te_irq()
1336 te_gpio_irq = gpio_to_irq(dsi->te_gpio); in exynos_dsi_register_te_irq()
1340 IRQF_TRIGGER_RISING, "TE", dsi); in exynos_dsi_register_te_irq()
1342 dev_err(dsi->dev, "request interrupt failed with %d\n", ret); in exynos_dsi_register_te_irq()
1343 gpio_free(dsi->te_gpio); in exynos_dsi_register_te_irq()
1351 static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi) in exynos_dsi_unregister_te_irq() argument
1353 if (gpio_is_valid(dsi->te_gpio)) { in exynos_dsi_unregister_te_irq()
1354 free_irq(gpio_to_irq(dsi->te_gpio), dsi); in exynos_dsi_unregister_te_irq()
1355 gpio_free(dsi->te_gpio); in exynos_dsi_unregister_te_irq()
1356 dsi->te_gpio = -ENOENT; in exynos_dsi_unregister_te_irq()
1363 struct exynos_dsi *dsi = host_to_dsi(host); in exynos_dsi_host_attach() local
1365 dsi->lanes = device->lanes; in exynos_dsi_host_attach()
1366 dsi->format = device->format; in exynos_dsi_host_attach()
1367 dsi->mode_flags = device->mode_flags; in exynos_dsi_host_attach()
1368 dsi->panel_node = device->dev.of_node; in exynos_dsi_host_attach()
1376 if (!(dsi->mode_flags & MIPI_DSI_MODE_VIDEO)) { in exynos_dsi_host_attach()
1377 int ret = exynos_dsi_register_te_irq(dsi); in exynos_dsi_host_attach()
1383 if (dsi->connector.dev) in exynos_dsi_host_attach()
1384 drm_helper_hpd_irq_event(dsi->connector.dev); in exynos_dsi_host_attach()
1392 struct exynos_dsi *dsi = host_to_dsi(host); in exynos_dsi_host_detach() local
1394 exynos_dsi_unregister_te_irq(dsi); in exynos_dsi_host_detach()
1396 dsi->panel_node = NULL; in exynos_dsi_host_detach()
1398 if (dsi->connector.dev) in exynos_dsi_host_detach()
1399 drm_helper_hpd_irq_event(dsi->connector.dev); in exynos_dsi_host_detach()
1413 struct exynos_dsi *dsi = host_to_dsi(host); in exynos_dsi_host_transfer() local
1417 if (!(dsi->state & DSIM_STATE_ENABLED)) in exynos_dsi_host_transfer()
1420 if (!(dsi->state & DSIM_STATE_INITIALIZED)) { in exynos_dsi_host_transfer()
1421 ret = exynos_dsi_init(dsi); in exynos_dsi_host_transfer()
1424 dsi->state |= DSIM_STATE_INITIALIZED; in exynos_dsi_host_transfer()
1451 ret = exynos_dsi_transfer(dsi, &xfer); in exynos_dsi_host_transfer()
1461 static int exynos_dsi_poweron(struct exynos_dsi *dsi) in exynos_dsi_poweron() argument
1463 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_poweron()
1466 ret = regulator_bulk_enable(ARRAY_SIZE(dsi->supplies), dsi->supplies); in exynos_dsi_poweron()
1468 dev_err(dsi->dev, "cannot enable regulators %d\n", ret); in exynos_dsi_poweron()
1473 ret = clk_prepare_enable(dsi->clks[i]); in exynos_dsi_poweron()
1478 ret = phy_power_on(dsi->phy); in exynos_dsi_poweron()
1480 dev_err(dsi->dev, "cannot enable phy %d\n", ret); in exynos_dsi_poweron()
1488 clk_disable_unprepare(dsi->clks[i]); in exynos_dsi_poweron()
1489 regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies); in exynos_dsi_poweron()
1494 static void exynos_dsi_poweroff(struct exynos_dsi *dsi) in exynos_dsi_poweroff() argument
1496 struct exynos_dsi_driver_data *driver_data = dsi->driver_data; in exynos_dsi_poweroff()
1501 if (dsi->state & DSIM_STATE_INITIALIZED) { in exynos_dsi_poweroff()
1502 dsi->state &= ~DSIM_STATE_INITIALIZED; in exynos_dsi_poweroff()
1504 exynos_dsi_disable_clock(dsi); in exynos_dsi_poweroff()
1506 exynos_dsi_disable_irq(dsi); in exynos_dsi_poweroff()
1509 dsi->state &= ~DSIM_STATE_CMD_LPM; in exynos_dsi_poweroff()
1511 phy_power_off(dsi->phy); in exynos_dsi_poweroff()
1514 clk_disable_unprepare(dsi->clks[i]); in exynos_dsi_poweroff()
1516 ret = regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies); in exynos_dsi_poweroff()
1518 dev_err(dsi->dev, "cannot disable regulators %d\n", ret); in exynos_dsi_poweroff()
1523 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_enable() local
1526 if (dsi->state & DSIM_STATE_ENABLED) in exynos_dsi_enable()
1529 ret = exynos_dsi_poweron(dsi); in exynos_dsi_enable()
1533 dsi->state |= DSIM_STATE_ENABLED; in exynos_dsi_enable()
1535 ret = drm_panel_prepare(dsi->panel); in exynos_dsi_enable()
1537 dsi->state &= ~DSIM_STATE_ENABLED; in exynos_dsi_enable()
1538 exynos_dsi_poweroff(dsi); in exynos_dsi_enable()
1542 exynos_dsi_set_display_mode(dsi); in exynos_dsi_enable()
1543 exynos_dsi_set_display_enable(dsi, true); in exynos_dsi_enable()
1545 ret = drm_panel_enable(dsi->panel); in exynos_dsi_enable()
1547 dsi->state &= ~DSIM_STATE_ENABLED; in exynos_dsi_enable()
1548 exynos_dsi_set_display_enable(dsi, false); in exynos_dsi_enable()
1549 drm_panel_unprepare(dsi->panel); in exynos_dsi_enable()
1550 exynos_dsi_poweroff(dsi); in exynos_dsi_enable()
1554 dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE; in exynos_dsi_enable()
1559 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_disable() local
1561 if (!(dsi->state & DSIM_STATE_ENABLED)) in exynos_dsi_disable()
1564 dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE; in exynos_dsi_disable()
1566 drm_panel_disable(dsi->panel); in exynos_dsi_disable()
1567 exynos_dsi_set_display_enable(dsi, false); in exynos_dsi_disable()
1568 drm_panel_unprepare(dsi->panel); in exynos_dsi_disable()
1570 dsi->state &= ~DSIM_STATE_ENABLED; in exynos_dsi_disable()
1572 exynos_dsi_poweroff(dsi); in exynos_dsi_disable()
1578 struct exynos_dsi *dsi = connector_to_dsi(connector); in exynos_dsi_detect() local
1580 if (!dsi->panel) { in exynos_dsi_detect()
1581 dsi->panel = of_drm_find_panel(dsi->panel_node); in exynos_dsi_detect()
1582 if (dsi->panel) in exynos_dsi_detect()
1583 drm_panel_attach(dsi->panel, &dsi->connector); in exynos_dsi_detect()
1584 } else if (!dsi->panel_node) { in exynos_dsi_detect()
1587 encoder = platform_get_drvdata(to_platform_device(dsi->dev)); in exynos_dsi_detect()
1589 drm_panel_detach(dsi->panel); in exynos_dsi_detect()
1590 dsi->panel = NULL; in exynos_dsi_detect()
1593 if (dsi->panel) in exynos_dsi_detect()
1618 struct exynos_dsi *dsi = connector_to_dsi(connector); in exynos_dsi_get_modes() local
1620 if (dsi->panel) in exynos_dsi_get_modes()
1621 return dsi->panel->funcs->get_modes(dsi->panel); in exynos_dsi_get_modes()
1629 struct exynos_dsi *dsi = connector_to_dsi(connector); in exynos_dsi_best_encoder() local
1631 return &dsi->encoder; in exynos_dsi_best_encoder()
1641 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_create_connector() local
1642 struct drm_connector *connector = &dsi->connector; in exynos_dsi_create_connector()
1673 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_mode_set() local
1674 struct videomode *vm = &dsi->vm; in exynos_dsi_mode_set()
1761 static int exynos_dsi_parse_dt(struct exynos_dsi *dsi) in exynos_dsi_parse_dt() argument
1763 struct device *dev = dsi->dev; in exynos_dsi_parse_dt()
1769 &dsi->pll_clk_rate); in exynos_dsi_parse_dt()
1787 &dsi->burst_clk_rate); in exynos_dsi_parse_dt()
1792 &dsi->esc_clk_rate); in exynos_dsi_parse_dt()
1804 dsi->bridge_node = of_graph_get_remote_port_parent(ep); in exynos_dsi_parse_dt()
1805 if (!dsi->bridge_node) { in exynos_dsi_parse_dt()
1819 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_bind() local
1845 bridge = of_drm_find_bridge(dsi->bridge_node); in exynos_dsi_bind()
1850 return mipi_dsi_host_register(&dsi->dsi_host); in exynos_dsi_bind()
1857 struct exynos_dsi *dsi = encoder_to_dsi(encoder); in exynos_dsi_unbind() local
1861 mipi_dsi_host_unregister(&dsi->dsi_host); in exynos_dsi_unbind()
1873 struct exynos_dsi *dsi; in exynos_dsi_probe() local
1876 dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL); in exynos_dsi_probe()
1877 if (!dsi) in exynos_dsi_probe()
1881 dsi->te_gpio = -ENOENT; in exynos_dsi_probe()
1883 init_completion(&dsi->completed); in exynos_dsi_probe()
1884 spin_lock_init(&dsi->transfer_lock); in exynos_dsi_probe()
1885 INIT_LIST_HEAD(&dsi->transfer_list); in exynos_dsi_probe()
1887 dsi->dsi_host.ops = &exynos_dsi_ops; in exynos_dsi_probe()
1888 dsi->dsi_host.dev = dev; in exynos_dsi_probe()
1890 dsi->dev = dev; in exynos_dsi_probe()
1891 dsi->driver_data = exynos_dsi_get_driver_data(pdev); in exynos_dsi_probe()
1893 ret = exynos_dsi_parse_dt(dsi); in exynos_dsi_probe()
1897 dsi->supplies[0].supply = "vddcore"; in exynos_dsi_probe()
1898 dsi->supplies[1].supply = "vddio"; in exynos_dsi_probe()
1899 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(dsi->supplies), in exynos_dsi_probe()
1900 dsi->supplies); in exynos_dsi_probe()
1906 dsi->clks = devm_kzalloc(dev, in exynos_dsi_probe()
1907 sizeof(*dsi->clks) * dsi->driver_data->num_clks, in exynos_dsi_probe()
1909 if (!dsi->clks) in exynos_dsi_probe()
1912 for (i = 0; i < dsi->driver_data->num_clks; i++) { in exynos_dsi_probe()
1913 dsi->clks[i] = devm_clk_get(dev, clk_names[i]); in exynos_dsi_probe()
1914 if (IS_ERR(dsi->clks[i])) { in exynos_dsi_probe()
1923 return PTR_ERR(dsi->clks[i]); in exynos_dsi_probe()
1928 dsi->reg_base = devm_ioremap_resource(dev, res); in exynos_dsi_probe()
1929 if (IS_ERR(dsi->reg_base)) { in exynos_dsi_probe()
1931 return PTR_ERR(dsi->reg_base); in exynos_dsi_probe()
1934 dsi->phy = devm_phy_get(dev, "dsim"); in exynos_dsi_probe()
1935 if (IS_ERR(dsi->phy)) { in exynos_dsi_probe()
1937 return PTR_ERR(dsi->phy); in exynos_dsi_probe()
1940 dsi->irq = platform_get_irq(pdev, 0); in exynos_dsi_probe()
1941 if (dsi->irq < 0) { in exynos_dsi_probe()
1943 return dsi->irq; in exynos_dsi_probe()
1946 irq_set_status_flags(dsi->irq, IRQ_NOAUTOEN); in exynos_dsi_probe()
1947 ret = devm_request_threaded_irq(dev, dsi->irq, NULL, in exynos_dsi_probe()
1949 dev_name(dev), dsi); in exynos_dsi_probe()
1955 platform_set_drvdata(pdev, &dsi->encoder); in exynos_dsi_probe()