• Home
  • Raw
  • Download

Lines Matching full:dsi

202 static void mtk_dsi_mask(struct mtk_dsi *dsi, u32 offset, u32 mask, u32 data)  in mtk_dsi_mask()  argument
204 u32 temp = readl(dsi->regs + offset); in mtk_dsi_mask()
206 writel((temp & ~mask) | (data & mask), dsi->regs + offset); in mtk_dsi_mask()
209 static void mtk_dsi_phy_timconfig(struct mtk_dsi *dsi) in mtk_dsi_phy_timconfig() argument
214 ui = 1000 / dsi->data_rate + 0x01; in mtk_dsi_phy_timconfig()
215 cycle_time = 8000 / dsi->data_rate + 0x01; in mtk_dsi_phy_timconfig()
225 writel(timcon0, dsi->regs + DSI_PHY_TIMECON0); in mtk_dsi_phy_timconfig()
226 writel(timcon1, dsi->regs + DSI_PHY_TIMECON1); in mtk_dsi_phy_timconfig()
227 writel(timcon2, dsi->regs + DSI_PHY_TIMECON2); in mtk_dsi_phy_timconfig()
228 writel(timcon3, dsi->regs + DSI_PHY_TIMECON3); in mtk_dsi_phy_timconfig()
231 static void mtk_dsi_enable(struct mtk_dsi *dsi) in mtk_dsi_enable() argument
233 mtk_dsi_mask(dsi, DSI_CON_CTRL, DSI_EN, DSI_EN); in mtk_dsi_enable()
236 static void mtk_dsi_disable(struct mtk_dsi *dsi) in mtk_dsi_disable() argument
238 mtk_dsi_mask(dsi, DSI_CON_CTRL, DSI_EN, 0); in mtk_dsi_disable()
241 static void mtk_dsi_reset_engine(struct mtk_dsi *dsi) in mtk_dsi_reset_engine() argument
243 mtk_dsi_mask(dsi, DSI_CON_CTRL, DSI_RESET, DSI_RESET); in mtk_dsi_reset_engine()
244 mtk_dsi_mask(dsi, DSI_CON_CTRL, DSI_RESET, 0); in mtk_dsi_reset_engine()
247 static void mtk_dsi_clk_ulp_mode_enter(struct mtk_dsi *dsi) in mtk_dsi_clk_ulp_mode_enter() argument
249 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_HS_TX_EN, 0); in mtk_dsi_clk_ulp_mode_enter()
250 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_ULPM_EN, 0); in mtk_dsi_clk_ulp_mode_enter()
253 static void mtk_dsi_clk_ulp_mode_leave(struct mtk_dsi *dsi) in mtk_dsi_clk_ulp_mode_leave() argument
255 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_ULPM_EN, 0); in mtk_dsi_clk_ulp_mode_leave()
256 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_WAKEUP_EN, LC_WAKEUP_EN); in mtk_dsi_clk_ulp_mode_leave()
257 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_WAKEUP_EN, 0); in mtk_dsi_clk_ulp_mode_leave()
260 static void mtk_dsi_lane0_ulp_mode_enter(struct mtk_dsi *dsi) in mtk_dsi_lane0_ulp_mode_enter() argument
262 mtk_dsi_mask(dsi, DSI_PHY_LD0CON, LD0_HS_TX_EN, 0); in mtk_dsi_lane0_ulp_mode_enter()
263 mtk_dsi_mask(dsi, DSI_PHY_LD0CON, LD0_ULPM_EN, 0); in mtk_dsi_lane0_ulp_mode_enter()
266 static void mtk_dsi_lane0_ulp_mode_leave(struct mtk_dsi *dsi) in mtk_dsi_lane0_ulp_mode_leave() argument
268 mtk_dsi_mask(dsi, DSI_PHY_LD0CON, LD0_ULPM_EN, 0); in mtk_dsi_lane0_ulp_mode_leave()
269 mtk_dsi_mask(dsi, DSI_PHY_LD0CON, LD0_WAKEUP_EN, LD0_WAKEUP_EN); in mtk_dsi_lane0_ulp_mode_leave()
270 mtk_dsi_mask(dsi, DSI_PHY_LD0CON, LD0_WAKEUP_EN, 0); in mtk_dsi_lane0_ulp_mode_leave()
273 static bool mtk_dsi_clk_hs_state(struct mtk_dsi *dsi) in mtk_dsi_clk_hs_state() argument
277 tmp_reg1 = readl(dsi->regs + DSI_PHY_LCCON); in mtk_dsi_clk_hs_state()
281 static void mtk_dsi_clk_hs_mode(struct mtk_dsi *dsi, bool enter) in mtk_dsi_clk_hs_mode() argument
283 if (enter && !mtk_dsi_clk_hs_state(dsi)) in mtk_dsi_clk_hs_mode()
284 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_HS_TX_EN, LC_HS_TX_EN); in mtk_dsi_clk_hs_mode()
285 else if (!enter && mtk_dsi_clk_hs_state(dsi)) in mtk_dsi_clk_hs_mode()
286 mtk_dsi_mask(dsi, DSI_PHY_LCCON, LC_HS_TX_EN, 0); in mtk_dsi_clk_hs_mode()
289 static void mtk_dsi_set_mode(struct mtk_dsi *dsi) in mtk_dsi_set_mode() argument
293 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) { in mtk_dsi_set_mode()
294 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) in mtk_dsi_set_mode()
296 else if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) in mtk_dsi_set_mode()
302 writel(vid_mode, dsi->regs + DSI_MODE_CTRL); in mtk_dsi_set_mode()
305 static void mtk_dsi_set_vm_cmd(struct mtk_dsi *dsi) in mtk_dsi_set_vm_cmd() argument
307 mtk_dsi_mask(dsi, DSI_VM_CMD_CON, VM_CMD_EN, VM_CMD_EN); in mtk_dsi_set_vm_cmd()
308 mtk_dsi_mask(dsi, DSI_VM_CMD_CON, TS_VFP_EN, TS_VFP_EN); in mtk_dsi_set_vm_cmd()
311 static void mtk_dsi_ps_control_vact(struct mtk_dsi *dsi) in mtk_dsi_ps_control_vact() argument
313 struct videomode *vm = &dsi->vm; in mtk_dsi_ps_control_vact()
317 if (dsi->format == MIPI_DSI_FMT_RGB565) in mtk_dsi_ps_control_vact()
325 switch (dsi->format) { in mtk_dsi_ps_control_vact()
340 writel(vm->vactive, dsi->regs + DSI_VACT_NL); in mtk_dsi_ps_control_vact()
341 writel(ps_bpp_mode, dsi->regs + DSI_PSCTRL); in mtk_dsi_ps_control_vact()
342 writel(ps_wc, dsi->regs + DSI_HSTX_CKL_WC); in mtk_dsi_ps_control_vact()
345 static void mtk_dsi_rxtx_control(struct mtk_dsi *dsi) in mtk_dsi_rxtx_control() argument
349 switch (dsi->lanes) { in mtk_dsi_rxtx_control()
367 tmp_reg |= (dsi->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) << 6; in mtk_dsi_rxtx_control()
368 tmp_reg |= (dsi->mode_flags & MIPI_DSI_MODE_EOT_PACKET) >> 3; in mtk_dsi_rxtx_control()
370 writel(tmp_reg, dsi->regs + DSI_TXRX_CTRL); in mtk_dsi_rxtx_control()
373 static void mtk_dsi_ps_control(struct mtk_dsi *dsi) in mtk_dsi_ps_control() argument
378 switch (dsi->format) { in mtk_dsi_ps_control()
401 tmp_reg += dsi->vm.hactive * dsi_tmp_buf_bpp & DSI_PS_WC; in mtk_dsi_ps_control()
402 writel(tmp_reg, dsi->regs + DSI_PSCTRL); in mtk_dsi_ps_control()
405 static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi) in mtk_dsi_config_vdo_timing() argument
412 struct videomode *vm = &dsi->vm; in mtk_dsi_config_vdo_timing()
414 if (dsi->format == MIPI_DSI_FMT_RGB565) in mtk_dsi_config_vdo_timing()
419 writel(vm->vsync_len, dsi->regs + DSI_VSA_NL); in mtk_dsi_config_vdo_timing()
420 writel(vm->vback_porch, dsi->regs + DSI_VBP_NL); in mtk_dsi_config_vdo_timing()
421 writel(vm->vfront_porch, dsi->regs + DSI_VFP_NL); in mtk_dsi_config_vdo_timing()
422 writel(vm->vactive, dsi->regs + DSI_VACT_NL); in mtk_dsi_config_vdo_timing()
426 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) in mtk_dsi_config_vdo_timing()
435 writel(horizontal_sync_active_byte, dsi->regs + DSI_HSA_WC); in mtk_dsi_config_vdo_timing()
436 writel(horizontal_backporch_byte, dsi->regs + DSI_HBP_WC); in mtk_dsi_config_vdo_timing()
437 writel(horizontal_frontporch_byte, dsi->regs + DSI_HFP_WC); in mtk_dsi_config_vdo_timing()
439 mtk_dsi_ps_control(dsi); in mtk_dsi_config_vdo_timing()
442 static void mtk_dsi_start(struct mtk_dsi *dsi) in mtk_dsi_start() argument
444 writel(0, dsi->regs + DSI_START); in mtk_dsi_start()
445 writel(1, dsi->regs + DSI_START); in mtk_dsi_start()
448 static void mtk_dsi_stop(struct mtk_dsi *dsi) in mtk_dsi_stop() argument
450 writel(0, dsi->regs + DSI_START); in mtk_dsi_stop()
453 static void mtk_dsi_set_cmd_mode(struct mtk_dsi *dsi) in mtk_dsi_set_cmd_mode() argument
455 writel(CMD_MODE, dsi->regs + DSI_MODE_CTRL); in mtk_dsi_set_cmd_mode()
458 static void mtk_dsi_set_interrupt_enable(struct mtk_dsi *dsi) in mtk_dsi_set_interrupt_enable() argument
462 writel(inten, dsi->regs + DSI_INTEN); in mtk_dsi_set_interrupt_enable()
465 static void mtk_dsi_irq_data_set(struct mtk_dsi *dsi, u32 irq_bit) in mtk_dsi_irq_data_set() argument
467 dsi->irq_data |= irq_bit; in mtk_dsi_irq_data_set()
470 static void mtk_dsi_irq_data_clear(struct mtk_dsi *dsi, u32 irq_bit) in mtk_dsi_irq_data_clear() argument
472 dsi->irq_data &= ~irq_bit; in mtk_dsi_irq_data_clear()
475 static s32 mtk_dsi_wait_for_irq_done(struct mtk_dsi *dsi, u32 irq_flag, in mtk_dsi_wait_for_irq_done() argument
481 ret = wait_event_interruptible_timeout(dsi->irq_wait_queue, in mtk_dsi_wait_for_irq_done()
482 dsi->irq_data & irq_flag, in mtk_dsi_wait_for_irq_done()
485 DRM_WARN("Wait DSI IRQ(0x%08x) Timeout\n", irq_flag); in mtk_dsi_wait_for_irq_done()
487 mtk_dsi_enable(dsi); in mtk_dsi_wait_for_irq_done()
488 mtk_dsi_reset_engine(dsi); in mtk_dsi_wait_for_irq_done()
496 struct mtk_dsi *dsi = dev_id; in mtk_dsi_irq() local
500 status = readl(dsi->regs + DSI_INTSTA) & flag; in mtk_dsi_irq()
504 mtk_dsi_mask(dsi, DSI_RACK, RACK, RACK); in mtk_dsi_irq()
505 tmp = readl(dsi->regs + DSI_INTSTA); in mtk_dsi_irq()
508 mtk_dsi_mask(dsi, DSI_INTSTA, status, 0); in mtk_dsi_irq()
509 mtk_dsi_irq_data_set(dsi, status); in mtk_dsi_irq()
510 wake_up_interruptible(&dsi->irq_wait_queue); in mtk_dsi_irq()
516 static s32 mtk_dsi_switch_to_cmd_mode(struct mtk_dsi *dsi, u8 irq_flag, u32 t) in mtk_dsi_switch_to_cmd_mode() argument
518 mtk_dsi_irq_data_clear(dsi, irq_flag); in mtk_dsi_switch_to_cmd_mode()
519 mtk_dsi_set_cmd_mode(dsi); in mtk_dsi_switch_to_cmd_mode()
521 if (!mtk_dsi_wait_for_irq_done(dsi, irq_flag, t)) { in mtk_dsi_switch_to_cmd_mode()
529 static int mtk_dsi_poweron(struct mtk_dsi *dsi) in mtk_dsi_poweron() argument
531 struct device *dev = dsi->dev; in mtk_dsi_poweron()
536 if (++dsi->refcount != 1) in mtk_dsi_poweron()
539 switch (dsi->format) { in mtk_dsi_poweron()
559 pixel_clock = dsi->vm.pixelclock; in mtk_dsi_poweron()
560 htotal = dsi->vm.hactive + dsi->vm.hback_porch + dsi->vm.hfront_porch + in mtk_dsi_poweron()
561 dsi->vm.hsync_len; in mtk_dsi_poweron()
566 overhead_bits = overhead_cycles * dsi->lanes * 8; in mtk_dsi_poweron()
569 dsi->data_rate = DIV_ROUND_UP_ULL(pixel_clock * total_bits, in mtk_dsi_poweron()
570 htotal * dsi->lanes); in mtk_dsi_poweron()
572 ret = clk_set_rate(dsi->hs_clk, dsi->data_rate); in mtk_dsi_poweron()
578 phy_power_on(dsi->phy); in mtk_dsi_poweron()
580 ret = clk_prepare_enable(dsi->engine_clk); in mtk_dsi_poweron()
586 ret = clk_prepare_enable(dsi->digital_clk); in mtk_dsi_poweron()
592 mtk_dsi_enable(dsi); in mtk_dsi_poweron()
593 mtk_dsi_reset_engine(dsi); in mtk_dsi_poweron()
594 mtk_dsi_phy_timconfig(dsi); in mtk_dsi_poweron()
596 mtk_dsi_rxtx_control(dsi); in mtk_dsi_poweron()
597 mtk_dsi_ps_control_vact(dsi); in mtk_dsi_poweron()
598 mtk_dsi_set_vm_cmd(dsi); in mtk_dsi_poweron()
599 mtk_dsi_config_vdo_timing(dsi); in mtk_dsi_poweron()
600 mtk_dsi_set_interrupt_enable(dsi); in mtk_dsi_poweron()
602 mtk_dsi_clk_ulp_mode_leave(dsi); in mtk_dsi_poweron()
603 mtk_dsi_lane0_ulp_mode_leave(dsi); in mtk_dsi_poweron()
604 mtk_dsi_clk_hs_mode(dsi, 0); in mtk_dsi_poweron()
606 if (dsi->panel) { in mtk_dsi_poweron()
607 if (drm_panel_prepare(dsi->panel)) { in mtk_dsi_poweron()
615 clk_disable_unprepare(dsi->digital_clk); in mtk_dsi_poweron()
617 clk_disable_unprepare(dsi->engine_clk); in mtk_dsi_poweron()
619 phy_power_off(dsi->phy); in mtk_dsi_poweron()
621 dsi->refcount--; in mtk_dsi_poweron()
625 static void mtk_dsi_poweroff(struct mtk_dsi *dsi) in mtk_dsi_poweroff() argument
627 if (WARN_ON(dsi->refcount == 0)) in mtk_dsi_poweroff()
630 if (--dsi->refcount != 0) in mtk_dsi_poweroff()
638 * after dsi is fully set. in mtk_dsi_poweroff()
640 mtk_dsi_stop(dsi); in mtk_dsi_poweroff()
642 if (!mtk_dsi_switch_to_cmd_mode(dsi, VM_DONE_INT_FLAG, 500)) { in mtk_dsi_poweroff()
643 if (dsi->panel) { in mtk_dsi_poweroff()
644 if (drm_panel_unprepare(dsi->panel)) { in mtk_dsi_poweroff()
651 mtk_dsi_reset_engine(dsi); in mtk_dsi_poweroff()
652 mtk_dsi_lane0_ulp_mode_enter(dsi); in mtk_dsi_poweroff()
653 mtk_dsi_clk_ulp_mode_enter(dsi); in mtk_dsi_poweroff()
655 mtk_dsi_disable(dsi); in mtk_dsi_poweroff()
657 clk_disable_unprepare(dsi->engine_clk); in mtk_dsi_poweroff()
658 clk_disable_unprepare(dsi->digital_clk); in mtk_dsi_poweroff()
660 phy_power_off(dsi->phy); in mtk_dsi_poweroff()
663 static void mtk_output_dsi_enable(struct mtk_dsi *dsi) in mtk_output_dsi_enable() argument
667 if (dsi->enabled) in mtk_output_dsi_enable()
670 ret = mtk_dsi_poweron(dsi); in mtk_output_dsi_enable()
672 DRM_ERROR("failed to power on dsi\n"); in mtk_output_dsi_enable()
676 mtk_dsi_set_mode(dsi); in mtk_output_dsi_enable()
677 mtk_dsi_clk_hs_mode(dsi, 1); in mtk_output_dsi_enable()
679 mtk_dsi_start(dsi); in mtk_output_dsi_enable()
681 if (dsi->panel) { in mtk_output_dsi_enable()
682 if (drm_panel_enable(dsi->panel)) { in mtk_output_dsi_enable()
688 dsi->enabled = true; in mtk_output_dsi_enable()
692 mtk_dsi_stop(dsi); in mtk_output_dsi_enable()
693 mtk_dsi_poweroff(dsi); in mtk_output_dsi_enable()
696 static void mtk_output_dsi_disable(struct mtk_dsi *dsi) in mtk_output_dsi_disable() argument
698 if (!dsi->enabled) in mtk_output_dsi_disable()
701 if (dsi->panel) { in mtk_output_dsi_disable()
702 if (drm_panel_disable(dsi->panel)) { in mtk_output_dsi_disable()
708 mtk_dsi_poweroff(dsi); in mtk_output_dsi_disable()
710 dsi->enabled = false; in mtk_output_dsi_disable()
733 struct mtk_dsi *dsi = encoder_to_dsi(encoder); in mtk_dsi_encoder_mode_set() local
735 drm_display_mode_to_videomode(adjusted, &dsi->vm); in mtk_dsi_encoder_mode_set()
740 struct mtk_dsi *dsi = encoder_to_dsi(encoder); in mtk_dsi_encoder_disable() local
742 mtk_output_dsi_disable(dsi); in mtk_dsi_encoder_disable()
747 struct mtk_dsi *dsi = encoder_to_dsi(encoder); in mtk_dsi_encoder_enable() local
749 mtk_output_dsi_enable(dsi); in mtk_dsi_encoder_enable()
754 struct mtk_dsi *dsi = connector_to_dsi(connector); in mtk_dsi_connector_get_modes() local
756 return drm_panel_get_modes(dsi->panel); in mtk_dsi_connector_get_modes()
779 static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) in mtk_dsi_create_connector() argument
783 ret = drm_connector_init(drm, &dsi->conn, &mtk_dsi_connector_funcs, in mtk_dsi_create_connector()
790 drm_connector_helper_add(&dsi->conn, &mtk_dsi_connector_helper_funcs); in mtk_dsi_create_connector()
792 dsi->conn.dpms = DRM_MODE_DPMS_OFF; in mtk_dsi_create_connector()
793 drm_connector_attach_encoder(&dsi->conn, &dsi->encoder); in mtk_dsi_create_connector()
795 if (dsi->panel) { in mtk_dsi_create_connector()
796 ret = drm_panel_attach(dsi->panel, &dsi->conn); in mtk_dsi_create_connector()
806 drm_connector_cleanup(&dsi->conn); in mtk_dsi_create_connector()
810 static int mtk_dsi_create_conn_enc(struct drm_device *drm, struct mtk_dsi *dsi) in mtk_dsi_create_conn_enc() argument
814 ret = drm_encoder_init(drm, &dsi->encoder, &mtk_dsi_encoder_funcs, in mtk_dsi_create_conn_enc()
820 drm_encoder_helper_add(&dsi->encoder, &mtk_dsi_encoder_helper_funcs); in mtk_dsi_create_conn_enc()
826 dsi->encoder.possible_crtcs = 1; in mtk_dsi_create_conn_enc()
829 ret = drm_bridge_attach(&dsi->encoder, dsi->bridge, NULL); in mtk_dsi_create_conn_enc()
834 ret = mtk_dsi_create_connector(drm, dsi); in mtk_dsi_create_conn_enc()
842 drm_encoder_cleanup(&dsi->encoder); in mtk_dsi_create_conn_enc()
846 static void mtk_dsi_destroy_conn_enc(struct mtk_dsi *dsi) in mtk_dsi_destroy_conn_enc() argument
848 drm_encoder_cleanup(&dsi->encoder); in mtk_dsi_destroy_conn_enc()
850 if (dsi->conn.dev) in mtk_dsi_destroy_conn_enc()
851 drm_connector_cleanup(&dsi->conn); in mtk_dsi_destroy_conn_enc()
852 if (dsi->panel) in mtk_dsi_destroy_conn_enc()
853 drm_panel_detach(dsi->panel); in mtk_dsi_destroy_conn_enc()
858 struct mtk_dsi *dsi = container_of(comp, struct mtk_dsi, ddp_comp); in mtk_dsi_ddp_start() local
860 mtk_dsi_poweron(dsi); in mtk_dsi_ddp_start()
865 struct mtk_dsi *dsi = container_of(comp, struct mtk_dsi, ddp_comp); in mtk_dsi_ddp_stop() local
867 mtk_dsi_poweroff(dsi); in mtk_dsi_ddp_stop()
878 struct mtk_dsi *dsi = host_to_dsi(host); in mtk_dsi_host_attach() local
880 dsi->lanes = device->lanes; in mtk_dsi_host_attach()
881 dsi->format = device->format; in mtk_dsi_host_attach()
882 dsi->mode_flags = device->mode_flags; in mtk_dsi_host_attach()
884 if (dsi->conn.dev) in mtk_dsi_host_attach()
885 drm_helper_hpd_irq_event(dsi->conn.dev); in mtk_dsi_host_attach()
893 struct mtk_dsi *dsi = host_to_dsi(host); in mtk_dsi_host_detach() local
895 if (dsi->conn.dev) in mtk_dsi_host_detach()
896 drm_helper_hpd_irq_event(dsi->conn.dev); in mtk_dsi_host_detach()
901 static void mtk_dsi_wait_for_idle(struct mtk_dsi *dsi) in mtk_dsi_wait_for_idle() argument
906 ret = readl_poll_timeout(dsi->regs + DSI_INTSTA, val, !(val & DSI_BUSY), in mtk_dsi_wait_for_idle()
909 DRM_WARN("polling dsi wait not busy timeout!\n"); in mtk_dsi_wait_for_idle()
911 mtk_dsi_enable(dsi); in mtk_dsi_wait_for_idle()
912 mtk_dsi_reset_engine(dsi); in mtk_dsi_wait_for_idle()
939 static void mtk_dsi_cmdq(struct mtk_dsi *dsi, const struct mipi_dsi_msg *msg) in mtk_dsi_cmdq() argument
963 writeb(tx_buf[i], dsi->regs + DSI_CMDQ0 + cmdq_off + i); in mtk_dsi_cmdq()
965 mtk_dsi_mask(dsi, DSI_CMDQ0, cmdq_mask, reg_val); in mtk_dsi_cmdq()
966 mtk_dsi_mask(dsi, DSI_CMDQ_SIZE, CMDQ_SIZE, cmdq_size); in mtk_dsi_cmdq()
969 static ssize_t mtk_dsi_host_send_cmd(struct mtk_dsi *dsi, in mtk_dsi_host_send_cmd() argument
972 mtk_dsi_wait_for_idle(dsi); in mtk_dsi_host_send_cmd()
973 mtk_dsi_irq_data_clear(dsi, flag); in mtk_dsi_host_send_cmd()
974 mtk_dsi_cmdq(dsi, msg); in mtk_dsi_host_send_cmd()
975 mtk_dsi_start(dsi); in mtk_dsi_host_send_cmd()
977 if (!mtk_dsi_wait_for_irq_done(dsi, flag, 2000)) in mtk_dsi_host_send_cmd()
986 struct mtk_dsi *dsi = host_to_dsi(host); in mtk_dsi_host_transfer() local
992 if (readl(dsi->regs + DSI_MODE_CTRL) & MODE) { in mtk_dsi_host_transfer()
993 DRM_ERROR("dsi engine is not command mode\n"); in mtk_dsi_host_transfer()
1000 if (mtk_dsi_host_send_cmd(dsi, msg, irq_flag) < 0) in mtk_dsi_host_transfer()
1007 DRM_ERROR("dsi receive buffer size may be NULL\n"); in mtk_dsi_host_transfer()
1012 *(read_data + i) = readb(dsi->regs + DSI_RX_DATA0 + i); in mtk_dsi_host_transfer()
1030 DRM_INFO("dsi get %d byte data from the panel address(0x%x)\n", in mtk_dsi_host_transfer()
1046 struct mtk_dsi *dsi = dev_get_drvdata(dev); in mtk_dsi_bind() local
1048 ret = mtk_ddp_comp_register(drm, &dsi->ddp_comp); in mtk_dsi_bind()
1055 ret = mipi_dsi_host_register(&dsi->host); in mtk_dsi_bind()
1057 dev_err(dev, "failed to register DSI host: %d\n", ret); in mtk_dsi_bind()
1061 ret = mtk_dsi_create_conn_enc(drm, dsi); in mtk_dsi_bind()
1070 mipi_dsi_host_unregister(&dsi->host); in mtk_dsi_bind()
1072 mtk_ddp_comp_unregister(drm, &dsi->ddp_comp); in mtk_dsi_bind()
1080 struct mtk_dsi *dsi = dev_get_drvdata(dev); in mtk_dsi_unbind() local
1082 mtk_dsi_destroy_conn_enc(dsi); in mtk_dsi_unbind()
1083 mipi_dsi_host_unregister(&dsi->host); in mtk_dsi_unbind()
1084 mtk_ddp_comp_unregister(drm, &dsi->ddp_comp); in mtk_dsi_unbind()
1094 struct mtk_dsi *dsi; in mtk_dsi_probe() local
1101 dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL); in mtk_dsi_probe()
1102 if (!dsi) in mtk_dsi_probe()
1105 dsi->host.ops = &mtk_dsi_ops; in mtk_dsi_probe()
1106 dsi->host.dev = dev; in mtk_dsi_probe()
1109 &dsi->panel, &dsi->bridge); in mtk_dsi_probe()
1113 dsi->engine_clk = devm_clk_get(dev, "engine"); in mtk_dsi_probe()
1114 if (IS_ERR(dsi->engine_clk)) { in mtk_dsi_probe()
1115 ret = PTR_ERR(dsi->engine_clk); in mtk_dsi_probe()
1120 dsi->digital_clk = devm_clk_get(dev, "digital"); in mtk_dsi_probe()
1121 if (IS_ERR(dsi->digital_clk)) { in mtk_dsi_probe()
1122 ret = PTR_ERR(dsi->digital_clk); in mtk_dsi_probe()
1127 dsi->hs_clk = devm_clk_get(dev, "hs"); in mtk_dsi_probe()
1128 if (IS_ERR(dsi->hs_clk)) { in mtk_dsi_probe()
1129 ret = PTR_ERR(dsi->hs_clk); in mtk_dsi_probe()
1135 dsi->regs = devm_ioremap_resource(dev, regs); in mtk_dsi_probe()
1136 if (IS_ERR(dsi->regs)) { in mtk_dsi_probe()
1137 ret = PTR_ERR(dsi->regs); in mtk_dsi_probe()
1142 dsi->phy = devm_phy_get(dev, "dphy"); in mtk_dsi_probe()
1143 if (IS_ERR(dsi->phy)) { in mtk_dsi_probe()
1144 ret = PTR_ERR(dsi->phy); in mtk_dsi_probe()
1155 ret = mtk_ddp_comp_init(dev, dev->of_node, &dsi->ddp_comp, comp_id, in mtk_dsi_probe()
1164 dev_err(&pdev->dev, "failed to request dsi irq resource\n"); in mtk_dsi_probe()
1170 IRQF_TRIGGER_LOW, dev_name(&pdev->dev), dsi); in mtk_dsi_probe()
1172 dev_err(&pdev->dev, "failed to request mediatek dsi irq\n"); in mtk_dsi_probe()
1176 init_waitqueue_head(&dsi->irq_wait_queue); in mtk_dsi_probe()
1178 platform_set_drvdata(pdev, dsi); in mtk_dsi_probe()
1185 struct mtk_dsi *dsi = platform_get_drvdata(pdev); in mtk_dsi_remove() local
1187 mtk_output_dsi_disable(dsi); in mtk_dsi_remove()
1194 { .compatible = "mediatek,mt2701-dsi" },
1195 { .compatible = "mediatek,mt8173-dsi" },
1203 .name = "mtk-dsi",