Lines Matching refs:dsidev
120 #define REG_GET(dsidev, idx, start, end) \ argument
121 FLD_GET(dsi_read_reg(dsidev, idx), start, end)
123 #define REG_FLD_MOD(dsidev, idx, val, start, end) \ argument
124 dsi_write_reg(dsidev, idx, FLD_MOD(dsi_read_reg(dsidev, idx), val, start, end))
215 static int dsi_display_init_dispc(struct platform_device *dsidev,
217 static void dsi_display_uninit_dispc(struct platform_device *dsidev,
277 struct platform_device *dsidev; member
394 struct platform_device *dsidev; member
410 static inline struct dsi_data *dsi_get_dsidrv_data(struct platform_device *dsidev) in dsi_get_dsidrv_data() argument
412 return dev_get_drvdata(&dsidev->dev); in dsi_get_dsidrv_data()
441 static inline void dsi_write_reg(struct platform_device *dsidev, in dsi_write_reg() argument
444 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_write_reg()
457 static inline u32 dsi_read_reg(struct platform_device *dsidev, in dsi_read_reg() argument
460 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_read_reg()
475 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_bus_lock() local
476 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_bus_lock()
483 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_bus_unlock() local
484 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_bus_unlock()
489 static bool dsi_bus_is_locked(struct platform_device *dsidev) in dsi_bus_is_locked() argument
491 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_bus_is_locked()
501 static inline int wait_for_bit_change(struct platform_device *dsidev, in wait_for_bit_change() argument
511 if (REG_GET(dsidev, idx, bitnum, bitnum) == value) in wait_for_bit_change()
518 if (REG_GET(dsidev, idx, bitnum, bitnum) == value) in wait_for_bit_change()
546 static void dsi_perf_mark_setup(struct platform_device *dsidev) in dsi_perf_mark_setup() argument
548 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_perf_mark_setup()
552 static void dsi_perf_mark_start(struct platform_device *dsidev) in dsi_perf_mark_start() argument
554 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_perf_mark_start()
558 static void dsi_perf_show(struct platform_device *dsidev, const char *name) in dsi_perf_show() argument
560 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_perf_show()
595 static inline void dsi_perf_mark_setup(struct platform_device *dsidev) in dsi_perf_mark_setup() argument
599 static inline void dsi_perf_mark_start(struct platform_device *dsidev) in dsi_perf_mark_start() argument
603 static inline void dsi_perf_show(struct platform_device *dsidev, in dsi_perf_show() argument
701 static void dsi_collect_irq_stats(struct platform_device *dsidev, u32 irqstatus, in dsi_collect_irq_stats() argument
704 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_collect_irq_stats()
720 #define dsi_collect_irq_stats(dsidev, irqstatus, vcstatus, ciostatus) argument
725 static void dsi_handle_irq_errors(struct platform_device *dsidev, u32 irqstatus, in dsi_handle_irq_errors() argument
728 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_handle_irq_errors()
797 struct platform_device *dsidev; in omap_dsi_irq_handler() local
802 dsidev = (struct platform_device *) arg; in omap_dsi_irq_handler()
803 dsi = dsi_get_dsidrv_data(dsidev); in omap_dsi_irq_handler()
810 irqstatus = dsi_read_reg(dsidev, DSI_IRQSTATUS); in omap_dsi_irq_handler()
818 dsi_write_reg(dsidev, DSI_IRQSTATUS, irqstatus & ~DSI_IRQ_CHANNEL_MASK); in omap_dsi_irq_handler()
820 dsi_read_reg(dsidev, DSI_IRQSTATUS); in omap_dsi_irq_handler()
828 vcstatus[i] = dsi_read_reg(dsidev, DSI_VC_IRQSTATUS(i)); in omap_dsi_irq_handler()
830 dsi_write_reg(dsidev, DSI_VC_IRQSTATUS(i), vcstatus[i]); in omap_dsi_irq_handler()
832 dsi_read_reg(dsidev, DSI_VC_IRQSTATUS(i)); in omap_dsi_irq_handler()
836 ciostatus = dsi_read_reg(dsidev, DSI_COMPLEXIO_IRQ_STATUS); in omap_dsi_irq_handler()
838 dsi_write_reg(dsidev, DSI_COMPLEXIO_IRQ_STATUS, ciostatus); in omap_dsi_irq_handler()
840 dsi_read_reg(dsidev, DSI_COMPLEXIO_IRQ_STATUS); in omap_dsi_irq_handler()
859 dsi_handle_irq_errors(dsidev, irqstatus, vcstatus, ciostatus); in omap_dsi_irq_handler()
861 dsi_collect_irq_stats(dsidev, irqstatus, vcstatus, ciostatus); in omap_dsi_irq_handler()
867 static void _omap_dsi_configure_irqs(struct platform_device *dsidev, in _omap_dsi_configure_irqs() argument
889 old_mask = dsi_read_reg(dsidev, enable_reg); in _omap_dsi_configure_irqs()
891 dsi_write_reg(dsidev, status_reg, (mask ^ old_mask) & mask); in _omap_dsi_configure_irqs()
892 dsi_write_reg(dsidev, enable_reg, mask); in _omap_dsi_configure_irqs()
895 dsi_read_reg(dsidev, enable_reg); in _omap_dsi_configure_irqs()
896 dsi_read_reg(dsidev, status_reg); in _omap_dsi_configure_irqs()
900 static void _omap_dsi_set_irqs(struct platform_device *dsidev) in _omap_dsi_set_irqs() argument
902 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in _omap_dsi_set_irqs()
907 _omap_dsi_configure_irqs(dsidev, dsi->isr_tables.isr_table, in _omap_dsi_set_irqs()
913 static void _omap_dsi_set_irqs_vc(struct platform_device *dsidev, int vc) in _omap_dsi_set_irqs_vc() argument
915 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in _omap_dsi_set_irqs_vc()
917 _omap_dsi_configure_irqs(dsidev, dsi->isr_tables.isr_table_vc[vc], in _omap_dsi_set_irqs_vc()
924 static void _omap_dsi_set_irqs_cio(struct platform_device *dsidev) in _omap_dsi_set_irqs_cio() argument
926 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in _omap_dsi_set_irqs_cio()
928 _omap_dsi_configure_irqs(dsidev, dsi->isr_tables.isr_table_cio, in _omap_dsi_set_irqs_cio()
934 static void _dsi_initialize_irq(struct platform_device *dsidev) in _dsi_initialize_irq() argument
936 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in _dsi_initialize_irq()
944 _omap_dsi_set_irqs(dsidev); in _dsi_initialize_irq()
946 _omap_dsi_set_irqs_vc(dsidev, vc); in _dsi_initialize_irq()
947 _omap_dsi_set_irqs_cio(dsidev); in _dsi_initialize_irq()
1008 static int dsi_register_isr(struct platform_device *dsidev, omap_dsi_isr_t isr, in dsi_register_isr() argument
1011 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_register_isr()
1021 _omap_dsi_set_irqs(dsidev); in dsi_register_isr()
1028 static int dsi_unregister_isr(struct platform_device *dsidev, in dsi_unregister_isr() argument
1031 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_unregister_isr()
1041 _omap_dsi_set_irqs(dsidev); in dsi_unregister_isr()
1048 static int dsi_register_isr_vc(struct platform_device *dsidev, int channel, in dsi_register_isr_vc() argument
1051 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_register_isr_vc()
1062 _omap_dsi_set_irqs_vc(dsidev, channel); in dsi_register_isr_vc()
1069 static int dsi_unregister_isr_vc(struct platform_device *dsidev, int channel, in dsi_unregister_isr_vc() argument
1072 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_unregister_isr_vc()
1083 _omap_dsi_set_irqs_vc(dsidev, channel); in dsi_unregister_isr_vc()
1090 static int dsi_register_isr_cio(struct platform_device *dsidev, in dsi_register_isr_cio() argument
1093 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_register_isr_cio()
1103 _omap_dsi_set_irqs_cio(dsidev); in dsi_register_isr_cio()
1110 static int dsi_unregister_isr_cio(struct platform_device *dsidev, in dsi_unregister_isr_cio() argument
1113 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_unregister_isr_cio()
1123 _omap_dsi_set_irqs_cio(dsidev); in dsi_unregister_isr_cio()
1130 static u32 dsi_get_errors(struct platform_device *dsidev) in dsi_get_errors() argument
1132 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_errors()
1142 static int dsi_runtime_get(struct platform_device *dsidev) in dsi_runtime_get() argument
1145 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_runtime_get()
1154 static void dsi_runtime_put(struct platform_device *dsidev) in dsi_runtime_put() argument
1156 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_runtime_put()
1165 static int dsi_regulator_init(struct platform_device *dsidev) in dsi_regulator_init() argument
1167 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_regulator_init()
1196 static void _dsi_print_reset_status(struct platform_device *dsidev) in _dsi_print_reset_status() argument
1204 l = dsi_read_reg(dsidev, DSI_DSIPHY_CFG5); in _dsi_print_reset_status()
1217 FLD_GET(dsi_read_reg(dsidev, DSI_##fld), start, end) in _dsi_print_reset_status()
1232 static inline int dsi_if_enable(struct platform_device *dsidev, bool enable) in dsi_if_enable() argument
1237 REG_FLD_MOD(dsidev, DSI_CTRL, enable, 0, 0); /* IF_EN */ in dsi_if_enable()
1239 if (wait_for_bit_change(dsidev, DSI_CTRL, 0, enable) != enable) { in dsi_if_enable()
1247 static unsigned long dsi_get_pll_hsdiv_dispc_rate(struct platform_device *dsidev) in dsi_get_pll_hsdiv_dispc_rate() argument
1249 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_pll_hsdiv_dispc_rate()
1254 static unsigned long dsi_get_pll_hsdiv_dsi_rate(struct platform_device *dsidev) in dsi_get_pll_hsdiv_dsi_rate() argument
1256 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_pll_hsdiv_dsi_rate()
1261 static unsigned long dsi_get_txbyteclkhs(struct platform_device *dsidev) in dsi_get_txbyteclkhs() argument
1263 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_txbyteclkhs()
1268 static unsigned long dsi_fclk_rate(struct platform_device *dsidev) in dsi_fclk_rate() argument
1271 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_fclk_rate()
1278 r = dsi_get_pll_hsdiv_dsi_rate(dsidev); in dsi_fclk_rate()
1303 static int dsi_set_lp_clk_divisor(struct platform_device *dsidev) in dsi_set_lp_clk_divisor() argument
1305 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_set_lp_clk_divisor()
1317 dsi_fclk = dsi_fclk_rate(dsidev); in dsi_set_lp_clk_divisor()
1326 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, lp_clk_div, 12, 0); in dsi_set_lp_clk_divisor()
1329 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, dsi_fclk > 30000000 ? 1 : 0, 21, 21); in dsi_set_lp_clk_divisor()
1334 static void dsi_enable_scp_clk(struct platform_device *dsidev) in dsi_enable_scp_clk() argument
1336 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_enable_scp_clk()
1339 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 1, 14, 14); /* CIO_CLK_ICG */ in dsi_enable_scp_clk()
1342 static void dsi_disable_scp_clk(struct platform_device *dsidev) in dsi_disable_scp_clk() argument
1344 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_disable_scp_clk()
1348 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 14, 14); /* CIO_CLK_ICG */ in dsi_disable_scp_clk()
1358 static int dsi_pll_power(struct platform_device *dsidev, in dsi_pll_power() argument
1369 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, state, 31, 30); in dsi_pll_power()
1372 while (FLD_GET(dsi_read_reg(dsidev, DSI_CLK_CTRL), 29, 28) != state) { in dsi_pll_power()
1398 struct platform_device *dsidev = dsi->pdev; in dsi_pll_enable() local
1403 r = dsi_regulator_init(dsidev); in dsi_pll_enable()
1407 r = dsi_runtime_get(dsidev); in dsi_pll_enable()
1414 dsi_enable_scp_clk(dsidev); in dsi_pll_enable()
1426 if (wait_for_bit_change(dsidev, DSI_PLL_STATUS, 0, 1) != 1) { in dsi_pll_enable()
1437 r = dsi_pll_power(dsidev, DSI_PLL_POWER_ON_ALL); in dsi_pll_enable()
1451 dsi_disable_scp_clk(dsidev); in dsi_pll_enable()
1452 dsi_runtime_put(dsidev); in dsi_pll_enable()
1456 static void dsi_pll_uninit(struct platform_device *dsidev, bool disconnect_lanes) in dsi_pll_uninit() argument
1458 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_pll_uninit()
1460 dsi_pll_power(dsidev, DSI_PLL_POWER_OFF); in dsi_pll_uninit()
1467 dsi_disable_scp_clk(dsidev); in dsi_pll_uninit()
1468 dsi_runtime_put(dsidev); in dsi_pll_uninit()
1476 struct platform_device *dsidev = dsi->pdev; in dsi_pll_disable() local
1478 dsi_pll_uninit(dsidev, true); in dsi_pll_disable()
1481 static void dsi_dump_dsidev_clocks(struct platform_device *dsidev, in dsi_dump_dsidev_clocks() argument
1484 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_dump_dsidev_clocks()
1493 if (dsi_runtime_get(dsidev)) in dsi_dump_dsidev_clocks()
1529 seq_printf(s, "DSI_FCLK\t%lu\n", dsi_fclk_rate(dsidev)); in dsi_dump_dsidev_clocks()
1534 seq_printf(s, "TxByteClkHS\t%lu\n", dsi_get_txbyteclkhs(dsidev)); in dsi_dump_dsidev_clocks()
1538 dsi_runtime_put(dsidev); in dsi_dump_dsidev_clocks()
1543 struct platform_device *dsidev; in dsi_dump_clocks() local
1547 dsidev = dsi_get_dsidev_from_id(i); in dsi_dump_clocks()
1548 if (dsidev) in dsi_dump_clocks()
1549 dsi_dump_dsidev_clocks(dsidev, s); in dsi_dump_clocks()
1554 static void dsi_dump_dsidev_irqs(struct platform_device *dsidev, in dsi_dump_dsidev_irqs() argument
1557 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_dump_dsidev_irqs()
1645 struct platform_device *dsidev = dsi_get_dsidev_from_id(0); in dsi1_dump_irqs() local
1647 dsi_dump_dsidev_irqs(dsidev, s); in dsi1_dump_irqs()
1652 struct platform_device *dsidev = dsi_get_dsidev_from_id(1); in dsi2_dump_irqs() local
1654 dsi_dump_dsidev_irqs(dsidev, s); in dsi2_dump_irqs()
1658 static void dsi_dump_dsidev_regs(struct platform_device *dsidev, in dsi_dump_dsidev_regs() argument
1661 #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, dsi_read_reg(dsidev, r)) in dsi_dump_dsidev_regs()
1663 if (dsi_runtime_get(dsidev)) in dsi_dump_dsidev_regs()
1665 dsi_enable_scp_clk(dsidev); in dsi_dump_dsidev_regs()
1737 dsi_disable_scp_clk(dsidev); in dsi_dump_dsidev_regs()
1738 dsi_runtime_put(dsidev); in dsi_dump_dsidev_regs()
1744 struct platform_device *dsidev = dsi_get_dsidev_from_id(0); in dsi1_dump_regs() local
1746 dsi_dump_dsidev_regs(dsidev, s); in dsi1_dump_regs()
1751 struct platform_device *dsidev = dsi_get_dsidev_from_id(1); in dsi2_dump_regs() local
1753 dsi_dump_dsidev_regs(dsidev, s); in dsi2_dump_regs()
1762 static int dsi_cio_power(struct platform_device *dsidev, in dsi_cio_power() argument
1768 REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG1, state, 28, 27); in dsi_cio_power()
1771 while (FLD_GET(dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG1), in dsi_cio_power()
1784 static unsigned dsi_get_line_buf_size(struct platform_device *dsidev) in dsi_get_line_buf_size() argument
1795 val = REG_GET(dsidev, DSI_GNQ, 14, 12); /* VP1_LINE_BUFFER_SIZE */ in dsi_get_line_buf_size()
1818 static int dsi_set_lane_config(struct platform_device *dsidev) in dsi_set_lane_config() argument
1820 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_set_lane_config()
1832 r = dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG1); in dsi_set_lane_config()
1861 dsi_write_reg(dsidev, DSI_COMPLEXIO_CFG1, r); in dsi_set_lane_config()
1866 static inline unsigned ns2ddr(struct platform_device *dsidev, unsigned ns) in ns2ddr() argument
1868 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in ns2ddr()
1875 static inline unsigned ddr2ns(struct platform_device *dsidev, unsigned ddr) in ddr2ns() argument
1877 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in ddr2ns()
1883 static void dsi_cio_timings(struct platform_device *dsidev) in dsi_cio_timings() argument
1895 ths_prepare = ns2ddr(dsidev, 70) + 2; in dsi_cio_timings()
1898 ths_prepare_ths_zero = ns2ddr(dsidev, 175) + 2; in dsi_cio_timings()
1901 ths_trail = ns2ddr(dsidev, 60) + 5; in dsi_cio_timings()
1904 ths_exit = ns2ddr(dsidev, 145); in dsi_cio_timings()
1907 tlpx_half = ns2ddr(dsidev, 25); in dsi_cio_timings()
1910 tclk_trail = ns2ddr(dsidev, 60) + 2; in dsi_cio_timings()
1913 tclk_prepare = ns2ddr(dsidev, 65); in dsi_cio_timings()
1916 tclk_zero = ns2ddr(dsidev, 260); in dsi_cio_timings()
1919 ths_prepare, ddr2ns(dsidev, ths_prepare), in dsi_cio_timings()
1920 ths_prepare_ths_zero, ddr2ns(dsidev, ths_prepare_ths_zero)); in dsi_cio_timings()
1922 ths_trail, ddr2ns(dsidev, ths_trail), in dsi_cio_timings()
1923 ths_exit, ddr2ns(dsidev, ths_exit)); in dsi_cio_timings()
1927 tlpx_half, ddr2ns(dsidev, tlpx_half), in dsi_cio_timings()
1928 tclk_trail, ddr2ns(dsidev, tclk_trail), in dsi_cio_timings()
1929 tclk_zero, ddr2ns(dsidev, tclk_zero)); in dsi_cio_timings()
1931 tclk_prepare, ddr2ns(dsidev, tclk_prepare)); in dsi_cio_timings()
1935 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0); in dsi_cio_timings()
1940 dsi_write_reg(dsidev, DSI_DSIPHY_CFG0, r); in dsi_cio_timings()
1942 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG1); in dsi_cio_timings()
1953 dsi_write_reg(dsidev, DSI_DSIPHY_CFG1, r); in dsi_cio_timings()
1955 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG2); in dsi_cio_timings()
1957 dsi_write_reg(dsidev, DSI_DSIPHY_CFG2, r); in dsi_cio_timings()
1961 static void dsi_cio_enable_lane_override(struct platform_device *dsidev, in dsi_cio_enable_lane_override() argument
1964 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_cio_enable_lane_override()
1993 REG_FLD_MOD(dsidev, DSI_DSIPHY_CFG10, l, lptxscp_start, 17); in dsi_cio_enable_lane_override()
1998 REG_FLD_MOD(dsidev, DSI_DSIPHY_CFG10, 1, 27, 27); in dsi_cio_enable_lane_override()
2001 static void dsi_cio_disable_lane_override(struct platform_device *dsidev) in dsi_cio_disable_lane_override() argument
2004 REG_FLD_MOD(dsidev, DSI_DSIPHY_CFG10, 0, 27, 27); /* ENLPTXSCPDAT */ in dsi_cio_disable_lane_override()
2007 REG_FLD_MOD(dsidev, DSI_DSIPHY_CFG10, 0, 22, 17); in dsi_cio_disable_lane_override()
2010 static int dsi_cio_wait_tx_clk_esc_reset(struct platform_device *dsidev) in dsi_cio_wait_tx_clk_esc_reset() argument
2012 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_cio_wait_tx_clk_esc_reset()
2032 l = dsi_read_reg(dsidev, DSI_DSIPHY_CFG5); in dsi_cio_wait_tx_clk_esc_reset()
2059 static unsigned dsi_get_lane_mask(struct platform_device *dsidev) in dsi_get_lane_mask() argument
2061 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_lane_mask()
2073 static int dsi_cio_init(struct platform_device *dsidev) in dsi_cio_init() argument
2075 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_cio_init()
2081 r = dss_dsi_enable_pads(dsi->module_id, dsi_get_lane_mask(dsidev)); in dsi_cio_init()
2085 dsi_enable_scp_clk(dsidev); in dsi_cio_init()
2090 dsi_read_reg(dsidev, DSI_DSIPHY_CFG5); in dsi_cio_init()
2092 if (wait_for_bit_change(dsidev, DSI_DSIPHY_CFG5, 30, 1) != 1) { in dsi_cio_init()
2098 r = dsi_set_lane_config(dsidev); in dsi_cio_init()
2103 l = dsi_read_reg(dsidev, DSI_TIMING1); in dsi_cio_init()
2108 dsi_write_reg(dsidev, DSI_TIMING1, l); in dsi_cio_init()
2133 dsi_cio_enable_lane_override(dsidev, mask_p, 0); in dsi_cio_init()
2136 r = dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_ON); in dsi_cio_init()
2140 if (wait_for_bit_change(dsidev, DSI_COMPLEXIO_CFG1, 29, 1) != 1) { in dsi_cio_init()
2146 dsi_if_enable(dsidev, true); in dsi_cio_init()
2147 dsi_if_enable(dsidev, false); in dsi_cio_init()
2148 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 1, 20, 20); /* LP_CLK_ENABLE */ in dsi_cio_init()
2150 r = dsi_cio_wait_tx_clk_esc_reset(dsidev); in dsi_cio_init()
2162 dsi_cio_disable_lane_override(dsidev); in dsi_cio_init()
2166 REG_FLD_MOD(dsidev, DSI_TIMING1, 0, 15, 15); in dsi_cio_init()
2168 dsi_cio_timings(dsidev); in dsi_cio_init()
2172 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, in dsi_cio_init()
2183 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 20, 20); /* LP_CLK_ENABLE */ in dsi_cio_init()
2185 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF); in dsi_cio_init()
2188 dsi_cio_disable_lane_override(dsidev); in dsi_cio_init()
2190 dsi_disable_scp_clk(dsidev); in dsi_cio_init()
2191 dss_dsi_disable_pads(dsi->module_id, dsi_get_lane_mask(dsidev)); in dsi_cio_init()
2195 static void dsi_cio_uninit(struct platform_device *dsidev) in dsi_cio_uninit() argument
2197 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_cio_uninit()
2200 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 13, 13); in dsi_cio_uninit()
2202 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_OFF); in dsi_cio_uninit()
2203 dsi_disable_scp_clk(dsidev); in dsi_cio_uninit()
2204 dss_dsi_disable_pads(dsi->module_id, dsi_get_lane_mask(dsidev)); in dsi_cio_uninit()
2207 static void dsi_config_tx_fifo(struct platform_device *dsidev, in dsi_config_tx_fifo() argument
2211 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_tx_fifo()
2237 dsi_write_reg(dsidev, DSI_TX_FIFO_VC_SIZE, r); in dsi_config_tx_fifo()
2240 static void dsi_config_rx_fifo(struct platform_device *dsidev, in dsi_config_rx_fifo() argument
2244 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_rx_fifo()
2270 dsi_write_reg(dsidev, DSI_RX_FIFO_VC_SIZE, r); in dsi_config_rx_fifo()
2273 static int dsi_force_tx_stop_mode_io(struct platform_device *dsidev) in dsi_force_tx_stop_mode_io() argument
2277 r = dsi_read_reg(dsidev, DSI_TIMING1); in dsi_force_tx_stop_mode_io()
2279 dsi_write_reg(dsidev, DSI_TIMING1, r); in dsi_force_tx_stop_mode_io()
2281 if (wait_for_bit_change(dsidev, DSI_TIMING1, 15, 0) != 0) { in dsi_force_tx_stop_mode_io()
2289 static bool dsi_vc_is_enabled(struct platform_device *dsidev, int channel) in dsi_vc_is_enabled() argument
2291 return REG_GET(dsidev, DSI_VC_CTRL(channel), 0, 0); in dsi_vc_is_enabled()
2298 struct dsi_data *dsi = dsi_get_dsidrv_data(vp_data->dsidev); in dsi_packet_sent_handler_vp()
2302 if (REG_GET(vp_data->dsidev, DSI_VC_TE(channel), bit, bit) == 0) in dsi_packet_sent_handler_vp()
2306 static int dsi_sync_vc_vp(struct platform_device *dsidev, int channel) in dsi_sync_vc_vp() argument
2308 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_sync_vc_vp()
2311 .dsidev = dsidev, in dsi_sync_vc_vp()
2319 r = dsi_register_isr_vc(dsidev, channel, dsi_packet_sent_handler_vp, in dsi_sync_vc_vp()
2325 if (REG_GET(dsidev, DSI_VC_TE(channel), bit, bit)) { in dsi_sync_vc_vp()
2334 dsi_unregister_isr_vc(dsidev, channel, dsi_packet_sent_handler_vp, in dsi_sync_vc_vp()
2339 dsi_unregister_isr_vc(dsidev, channel, dsi_packet_sent_handler_vp, in dsi_sync_vc_vp()
2349 struct dsi_data *dsi = dsi_get_dsidrv_data(l4_data->dsidev); in dsi_packet_sent_handler_l4()
2352 if (REG_GET(l4_data->dsidev, DSI_VC_CTRL(channel), 5, 5) == 0) in dsi_packet_sent_handler_l4()
2356 static int dsi_sync_vc_l4(struct platform_device *dsidev, int channel) in dsi_sync_vc_l4() argument
2360 .dsidev = dsidev, in dsi_sync_vc_l4()
2365 r = dsi_register_isr_vc(dsidev, channel, dsi_packet_sent_handler_l4, in dsi_sync_vc_l4()
2371 if (REG_GET(dsidev, DSI_VC_CTRL(channel), 5, 5)) { in dsi_sync_vc_l4()
2380 dsi_unregister_isr_vc(dsidev, channel, dsi_packet_sent_handler_l4, in dsi_sync_vc_l4()
2385 dsi_unregister_isr_vc(dsidev, channel, dsi_packet_sent_handler_l4, in dsi_sync_vc_l4()
2391 static int dsi_sync_vc(struct platform_device *dsidev, int channel) in dsi_sync_vc() argument
2393 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_sync_vc()
2395 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_sync_vc()
2399 if (!dsi_vc_is_enabled(dsidev, channel)) in dsi_sync_vc()
2404 return dsi_sync_vc_vp(dsidev, channel); in dsi_sync_vc()
2406 return dsi_sync_vc_l4(dsidev, channel); in dsi_sync_vc()
2413 static int dsi_vc_enable(struct platform_device *dsidev, int channel, in dsi_vc_enable() argument
2421 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), enable, 0, 0); in dsi_vc_enable()
2423 if (wait_for_bit_change(dsidev, DSI_VC_CTRL(channel), in dsi_vc_enable()
2432 static void dsi_vc_initial_config(struct platform_device *dsidev, int channel) in dsi_vc_initial_config() argument
2434 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_initial_config()
2439 r = dsi_read_reg(dsidev, DSI_VC_CTRL(channel)); in dsi_vc_initial_config()
2458 dsi_write_reg(dsidev, DSI_VC_CTRL(channel), r); in dsi_vc_initial_config()
2463 static int dsi_vc_config_source(struct platform_device *dsidev, int channel, in dsi_vc_config_source() argument
2466 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_config_source()
2473 dsi_sync_vc(dsidev, channel); in dsi_vc_config_source()
2475 dsi_vc_enable(dsidev, channel, 0); in dsi_vc_config_source()
2478 if (wait_for_bit_change(dsidev, DSI_VC_CTRL(channel), 15, 0) != 0) { in dsi_vc_config_source()
2484 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), source, 1, 1); in dsi_vc_config_source()
2489 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), enable, 30, 30); in dsi_vc_config_source()
2492 dsi_vc_enable(dsidev, channel, 1); in dsi_vc_config_source()
2502 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_enable_hs() local
2503 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_enable_hs()
2507 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_vc_enable_hs()
2509 dsi_vc_enable(dsidev, channel, 0); in dsi_vc_enable_hs()
2510 dsi_if_enable(dsidev, 0); in dsi_vc_enable_hs()
2512 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), enable, 9, 9); in dsi_vc_enable_hs()
2514 dsi_vc_enable(dsidev, channel, 1); in dsi_vc_enable_hs()
2515 dsi_if_enable(dsidev, 1); in dsi_vc_enable_hs()
2517 dsi_force_tx_stop_mode_io(dsidev); in dsi_vc_enable_hs()
2524 static void dsi_vc_flush_long_data(struct platform_device *dsidev, int channel) in dsi_vc_flush_long_data() argument
2526 while (REG_GET(dsidev, DSI_VC_CTRL(channel), 20, 20)) { in dsi_vc_flush_long_data()
2528 val = dsi_read_reg(dsidev, DSI_VC_SHORT_PACKET_HEADER(channel)); in dsi_vc_flush_long_data()
2574 static u16 dsi_vc_flush_receive_data(struct platform_device *dsidev, in dsi_vc_flush_receive_data() argument
2578 while (REG_GET(dsidev, DSI_VC_CTRL(channel), 20, 20)) { in dsi_vc_flush_receive_data()
2581 val = dsi_read_reg(dsidev, DSI_VC_SHORT_PACKET_HEADER(channel)); in dsi_vc_flush_receive_data()
2596 dsi_vc_flush_long_data(dsidev, channel); in dsi_vc_flush_receive_data()
2604 static int dsi_vc_send_bta(struct platform_device *dsidev, int channel) in dsi_vc_send_bta() argument
2606 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_send_bta()
2611 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_vc_send_bta()
2614 if (REG_GET(dsidev, DSI_VC_CTRL(channel), 20, 20)) { in dsi_vc_send_bta()
2616 dsi_vc_flush_receive_data(dsidev, channel); in dsi_vc_send_bta()
2619 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 6, 6); /* BTA_EN */ in dsi_vc_send_bta()
2622 dsi_read_reg(dsidev, DSI_VC_CTRL(channel)); in dsi_vc_send_bta()
2629 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_send_bta_sync() local
2634 r = dsi_register_isr_vc(dsidev, channel, dsi_completion_handler, in dsi_vc_send_bta_sync()
2639 r = dsi_register_isr(dsidev, dsi_completion_handler, &completion, in dsi_vc_send_bta_sync()
2644 r = dsi_vc_send_bta(dsidev, channel); in dsi_vc_send_bta_sync()
2655 err = dsi_get_errors(dsidev); in dsi_vc_send_bta_sync()
2662 dsi_unregister_isr(dsidev, dsi_completion_handler, &completion, in dsi_vc_send_bta_sync()
2665 dsi_unregister_isr_vc(dsidev, channel, dsi_completion_handler, in dsi_vc_send_bta_sync()
2671 static inline void dsi_vc_write_long_header(struct platform_device *dsidev, in dsi_vc_write_long_header() argument
2674 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_write_long_header()
2678 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_vc_write_long_header()
2685 dsi_write_reg(dsidev, DSI_VC_LONG_PACKET_HEADER(channel), val); in dsi_vc_write_long_header()
2688 static inline void dsi_vc_write_long_payload(struct platform_device *dsidev, in dsi_vc_write_long_payload() argument
2698 dsi_write_reg(dsidev, DSI_VC_LONG_PACKET_PAYLOAD(channel), val); in dsi_vc_write_long_payload()
2701 static int dsi_vc_send_long(struct platform_device *dsidev, int channel, in dsi_vc_send_long() argument
2705 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_send_long()
2720 dsi_vc_config_source(dsidev, channel, DSI_VC_SOURCE_L4); in dsi_vc_send_long()
2722 dsi_vc_write_long_header(dsidev, channel, data_type, len, ecc); in dsi_vc_send_long()
2734 dsi_vc_write_long_payload(dsidev, channel, b1, b2, b3, b4); in dsi_vc_send_long()
2759 dsi_vc_write_long_payload(dsidev, channel, b1, b2, b3, 0); in dsi_vc_send_long()
2765 static int dsi_vc_send_short(struct platform_device *dsidev, int channel, in dsi_vc_send_short() argument
2768 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_send_short()
2772 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_vc_send_short()
2779 dsi_vc_config_source(dsidev, channel, DSI_VC_SOURCE_L4); in dsi_vc_send_short()
2781 if (FLD_GET(dsi_read_reg(dsidev, DSI_VC_CTRL(channel)), 16, 16)) { in dsi_vc_send_short()
2790 dsi_write_reg(dsidev, DSI_VC_SHORT_PACKET_HEADER(channel), r); in dsi_vc_send_short()
2797 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_send_null() local
2799 return dsi_vc_send_long(dsidev, channel, MIPI_DSI_NULL_PACKET, NULL, in dsi_vc_send_null()
2803 static int dsi_vc_write_nosync_common(struct platform_device *dsidev, in dsi_vc_write_nosync_common() argument
2810 r = dsi_vc_send_short(dsidev, channel, in dsi_vc_write_nosync_common()
2813 r = dsi_vc_send_short(dsidev, channel, in dsi_vc_write_nosync_common()
2818 r = dsi_vc_send_short(dsidev, channel, in dsi_vc_write_nosync_common()
2824 r = dsi_vc_send_long(dsidev, channel, in dsi_vc_write_nosync_common()
2836 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_dcs_write_nosync() local
2838 return dsi_vc_write_nosync_common(dsidev, channel, data, len, in dsi_vc_dcs_write_nosync()
2845 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_generic_write_nosync() local
2847 return dsi_vc_write_nosync_common(dsidev, channel, data, len, in dsi_vc_generic_write_nosync()
2854 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_write_common() local
2857 r = dsi_vc_write_nosync_common(dsidev, channel, data, len, type); in dsi_vc_write_common()
2866 if (REG_GET(dsidev, DSI_VC_CTRL(channel), 20, 20)) { in dsi_vc_write_common()
2868 dsi_vc_flush_receive_data(dsidev, channel); in dsi_vc_write_common()
2894 static int dsi_vc_dcs_send_read_request(struct platform_device *dsidev, in dsi_vc_dcs_send_read_request() argument
2897 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_dcs_send_read_request()
2904 r = dsi_vc_send_short(dsidev, channel, MIPI_DSI_DCS_READ, dcs_cmd, 0); in dsi_vc_dcs_send_read_request()
2914 static int dsi_vc_generic_send_read_request(struct platform_device *dsidev, in dsi_vc_generic_send_read_request() argument
2917 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_generic_send_read_request()
2940 r = dsi_vc_send_short(dsidev, channel, data_type, data, 0); in dsi_vc_generic_send_read_request()
2950 static int dsi_vc_read_rx_fifo(struct platform_device *dsidev, int channel, in dsi_vc_read_rx_fifo() argument
2953 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_vc_read_rx_fifo()
2959 if (REG_GET(dsidev, DSI_VC_CTRL(channel), 20, 20) == 0) { in dsi_vc_read_rx_fifo()
2965 val = dsi_read_reg(dsidev, DSI_VC_SHORT_PACKET_HEADER(channel)); in dsi_vc_read_rx_fifo()
3028 val = dsi_read_reg(dsidev, in dsi_vc_read_rx_fifo()
3062 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_dcs_read() local
3065 r = dsi_vc_dcs_send_read_request(dsidev, channel, dcs_cmd); in dsi_vc_dcs_read()
3073 r = dsi_vc_read_rx_fifo(dsidev, channel, buf, buflen, in dsi_vc_dcs_read()
3092 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_generic_read() local
3095 r = dsi_vc_generic_send_read_request(dsidev, channel, reqdata, reqlen); in dsi_vc_generic_read()
3103 r = dsi_vc_read_rx_fifo(dsidev, channel, buf, buflen, in dsi_vc_generic_read()
3119 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_vc_set_max_rx_packet_size() local
3121 return dsi_vc_send_short(dsidev, channel, in dsi_vc_set_max_rx_packet_size()
3125 static int dsi_enter_ulps(struct platform_device *dsidev) in dsi_enter_ulps() argument
3127 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_enter_ulps()
3134 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_enter_ulps()
3142 if (REG_GET(dsidev, DSI_CLK_CTRL, 13, 13)) { in dsi_enter_ulps()
3143 dsi_if_enable(dsidev, 0); in dsi_enter_ulps()
3144 REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 13, 13); in dsi_enter_ulps()
3145 dsi_if_enable(dsidev, 1); in dsi_enter_ulps()
3148 dsi_sync_vc(dsidev, 0); in dsi_enter_ulps()
3149 dsi_sync_vc(dsidev, 1); in dsi_enter_ulps()
3150 dsi_sync_vc(dsidev, 2); in dsi_enter_ulps()
3151 dsi_sync_vc(dsidev, 3); in dsi_enter_ulps()
3153 dsi_force_tx_stop_mode_io(dsidev); in dsi_enter_ulps()
3155 dsi_vc_enable(dsidev, 0, false); in dsi_enter_ulps()
3156 dsi_vc_enable(dsidev, 1, false); in dsi_enter_ulps()
3157 dsi_vc_enable(dsidev, 2, false); in dsi_enter_ulps()
3158 dsi_vc_enable(dsidev, 3, false); in dsi_enter_ulps()
3160 if (REG_GET(dsidev, DSI_COMPLEXIO_CFG2, 16, 16)) { /* HS_BUSY */ in dsi_enter_ulps()
3165 if (REG_GET(dsidev, DSI_COMPLEXIO_CFG2, 17, 17)) { /* LP_BUSY */ in dsi_enter_ulps()
3170 r = dsi_register_isr_cio(dsidev, dsi_completion_handler, &completion, in dsi_enter_ulps()
3184 REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, mask, 9, 5); in dsi_enter_ulps()
3187 dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2); in dsi_enter_ulps()
3196 dsi_unregister_isr_cio(dsidev, dsi_completion_handler, &completion, in dsi_enter_ulps()
3200 REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, 0, 9, 5); in dsi_enter_ulps()
3203 dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2); in dsi_enter_ulps()
3205 dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_ULPS); in dsi_enter_ulps()
3207 dsi_if_enable(dsidev, false); in dsi_enter_ulps()
3214 dsi_unregister_isr_cio(dsidev, dsi_completion_handler, &completion, in dsi_enter_ulps()
3219 static void dsi_set_lp_rx_timeout(struct platform_device *dsidev, in dsi_set_lp_rx_timeout() argument
3229 fck = dsi_fclk_rate(dsidev); in dsi_set_lp_rx_timeout()
3231 r = dsi_read_reg(dsidev, DSI_TIMING2); in dsi_set_lp_rx_timeout()
3236 dsi_write_reg(dsidev, DSI_TIMING2, r); in dsi_set_lp_rx_timeout()
3246 static void dsi_set_ta_timeout(struct platform_device *dsidev, unsigned ticks, in dsi_set_ta_timeout() argument
3256 fck = dsi_fclk_rate(dsidev); in dsi_set_ta_timeout()
3258 r = dsi_read_reg(dsidev, DSI_TIMING1); in dsi_set_ta_timeout()
3263 dsi_write_reg(dsidev, DSI_TIMING1, r); in dsi_set_ta_timeout()
3273 static void dsi_set_stop_state_counter(struct platform_device *dsidev, in dsi_set_stop_state_counter() argument
3283 fck = dsi_fclk_rate(dsidev); in dsi_set_stop_state_counter()
3285 r = dsi_read_reg(dsidev, DSI_TIMING1); in dsi_set_stop_state_counter()
3290 dsi_write_reg(dsidev, DSI_TIMING1, r); in dsi_set_stop_state_counter()
3300 static void dsi_set_hs_tx_timeout(struct platform_device *dsidev, in dsi_set_hs_tx_timeout() argument
3310 fck = dsi_get_txbyteclkhs(dsidev); in dsi_set_hs_tx_timeout()
3312 r = dsi_read_reg(dsidev, DSI_TIMING2); in dsi_set_hs_tx_timeout()
3317 dsi_write_reg(dsidev, DSI_TIMING2, r); in dsi_set_hs_tx_timeout()
3327 static void dsi_config_vp_num_line_buffers(struct platform_device *dsidev) in dsi_config_vp_num_line_buffers() argument
3329 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_vp_num_line_buffers()
3349 REG_FLD_MOD(dsidev, DSI_CTRL, num_line_buffers, 13, 12); in dsi_config_vp_num_line_buffers()
3352 static void dsi_config_vp_sync_events(struct platform_device *dsidev) in dsi_config_vp_sync_events() argument
3354 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_vp_sync_events()
3363 r = dsi_read_reg(dsidev, DSI_CTRL); in dsi_config_vp_sync_events()
3371 dsi_write_reg(dsidev, DSI_CTRL, r); in dsi_config_vp_sync_events()
3374 static void dsi_config_blanking_modes(struct platform_device *dsidev) in dsi_config_blanking_modes() argument
3376 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_blanking_modes()
3387 r = dsi_read_reg(dsidev, DSI_CTRL); in dsi_config_blanking_modes()
3392 dsi_write_reg(dsidev, DSI_CTRL, r); in dsi_config_blanking_modes()
3457 static void dsi_config_cmd_mode_interleaving(struct platform_device *dsidev) in dsi_config_cmd_mode_interleaving() argument
3459 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_config_cmd_mode_interleaving()
3476 r = dsi_read_reg(dsidev, DSI_CTRL); in dsi_config_cmd_mode_interleaving()
3482 r = dsi_read_reg(dsidev, DSI_VM_TIMING1); in dsi_config_cmd_mode_interleaving()
3487 r = dsi_read_reg(dsidev, DSI_CLK_TIMING); in dsi_config_cmd_mode_interleaving()
3491 r = dsi_read_reg(dsidev, DSI_VM_TIMING7); in dsi_config_cmd_mode_interleaving()
3495 r = dsi_read_reg(dsidev, DSI_CLK_CTRL); in dsi_config_cmd_mode_interleaving()
3499 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0); in dsi_config_cmd_mode_interleaving()
3502 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG1); in dsi_config_cmd_mode_interleaving()
3556 r = dsi_read_reg(dsidev, DSI_VM_TIMING4); in dsi_config_cmd_mode_interleaving()
3560 dsi_write_reg(dsidev, DSI_VM_TIMING4, r); in dsi_config_cmd_mode_interleaving()
3562 r = dsi_read_reg(dsidev, DSI_VM_TIMING5); in dsi_config_cmd_mode_interleaving()
3566 dsi_write_reg(dsidev, DSI_VM_TIMING5, r); in dsi_config_cmd_mode_interleaving()
3568 r = dsi_read_reg(dsidev, DSI_VM_TIMING6); in dsi_config_cmd_mode_interleaving()
3571 dsi_write_reg(dsidev, DSI_VM_TIMING6, r); in dsi_config_cmd_mode_interleaving()
3574 static int dsi_proto_config(struct platform_device *dsidev) in dsi_proto_config() argument
3576 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_proto_config()
3580 dsi_config_tx_fifo(dsidev, DSI_FIFO_SIZE_32, in dsi_proto_config()
3585 dsi_config_rx_fifo(dsidev, DSI_FIFO_SIZE_32, in dsi_proto_config()
3591 dsi_set_stop_state_counter(dsidev, 0x1000, false, false); in dsi_proto_config()
3592 dsi_set_ta_timeout(dsidev, 0x1fff, true, true); in dsi_proto_config()
3593 dsi_set_lp_rx_timeout(dsidev, 0x1fff, true, true); in dsi_proto_config()
3594 dsi_set_hs_tx_timeout(dsidev, 0x1fff, true, true); in dsi_proto_config()
3611 r = dsi_read_reg(dsidev, DSI_CTRL); in dsi_proto_config()
3626 dsi_write_reg(dsidev, DSI_CTRL, r); in dsi_proto_config()
3628 dsi_config_vp_num_line_buffers(dsidev); in dsi_proto_config()
3631 dsi_config_vp_sync_events(dsidev); in dsi_proto_config()
3632 dsi_config_blanking_modes(dsidev); in dsi_proto_config()
3633 dsi_config_cmd_mode_interleaving(dsidev); in dsi_proto_config()
3636 dsi_vc_initial_config(dsidev, 0); in dsi_proto_config()
3637 dsi_vc_initial_config(dsidev, 1); in dsi_proto_config()
3638 dsi_vc_initial_config(dsidev, 2); in dsi_proto_config()
3639 dsi_vc_initial_config(dsidev, 3); in dsi_proto_config()
3644 static void dsi_proto_timings(struct platform_device *dsidev) in dsi_proto_timings() argument
3646 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_proto_timings()
3657 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0); in dsi_proto_timings()
3664 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG1); in dsi_proto_timings()
3669 r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG2); in dsi_proto_timings()
3675 tclk_post = ns2ddr(dsidev, 60) + 26; in dsi_proto_timings()
3686 r = dsi_read_reg(dsidev, DSI_CLK_TIMING); in dsi_proto_timings()
3689 dsi_write_reg(dsidev, DSI_CLK_TIMING, r); in dsi_proto_timings()
3703 dsi_write_reg(dsidev, DSI_VM_TIMING7, r); in dsi_proto_timings()
3737 r = dsi_read_reg(dsidev, DSI_VM_TIMING1); in dsi_proto_timings()
3741 dsi_write_reg(dsidev, DSI_VM_TIMING1, r); in dsi_proto_timings()
3743 r = dsi_read_reg(dsidev, DSI_VM_TIMING2); in dsi_proto_timings()
3748 dsi_write_reg(dsidev, DSI_VM_TIMING2, r); in dsi_proto_timings()
3750 r = dsi_read_reg(dsidev, DSI_VM_TIMING3); in dsi_proto_timings()
3753 dsi_write_reg(dsidev, DSI_VM_TIMING3, r); in dsi_proto_timings()
3760 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_configure_pins() local
3761 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_configure_pins()
3826 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_enable_video_output() local
3827 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_enable_video_output()
3840 r = dsi_display_init_dispc(dsidev, mgr); in dsi_enable_video_output()
3863 dsi_if_enable(dsidev, false); in dsi_enable_video_output()
3864 dsi_vc_enable(dsidev, channel, false); in dsi_enable_video_output()
3867 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4); in dsi_enable_video_output()
3871 dsi_vc_write_long_header(dsidev, channel, data_type, in dsi_enable_video_output()
3874 dsi_vc_enable(dsidev, channel, true); in dsi_enable_video_output()
3875 dsi_if_enable(dsidev, true); in dsi_enable_video_output()
3886 dsi_if_enable(dsidev, false); in dsi_enable_video_output()
3887 dsi_vc_enable(dsidev, channel, false); in dsi_enable_video_output()
3890 dsi_display_uninit_dispc(dsidev, mgr); in dsi_enable_video_output()
3897 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_disable_video_output() local
3898 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_disable_video_output()
3902 dsi_if_enable(dsidev, false); in dsi_disable_video_output()
3903 dsi_vc_enable(dsidev, channel, false); in dsi_disable_video_output()
3906 REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 0, 4, 4); in dsi_disable_video_output()
3908 dsi_vc_enable(dsidev, channel, true); in dsi_disable_video_output()
3909 dsi_if_enable(dsidev, true); in dsi_disable_video_output()
3914 dsi_display_uninit_dispc(dsidev, mgr); in dsi_disable_video_output()
3917 static void dsi_update_screen_dispc(struct platform_device *dsidev) in dsi_update_screen_dispc() argument
3919 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_update_screen_dispc()
3936 dsi_vc_config_source(dsidev, channel, DSI_VC_SOURCE_VP); in dsi_update_screen_dispc()
3957 dsi_write_reg(dsidev, DSI_VC_TE(channel), l); in dsi_update_screen_dispc()
3959 dsi_vc_write_long_header(dsidev, channel, MIPI_DSI_DCS_LONG_WRITE, in dsi_update_screen_dispc()
3966 dsi_write_reg(dsidev, DSI_VC_TE(channel), l); in dsi_update_screen_dispc()
3976 dsi_perf_mark_start(dsidev); in dsi_update_screen_dispc()
3989 REG_FLD_MOD(dsidev, DSI_TIMING2, 0, 15, 15); /* LP_RX_TO */ in dsi_update_screen_dispc()
3991 dsi_vc_send_bta(dsidev, channel); in dsi_update_screen_dispc()
4006 static void dsi_handle_framedone(struct platform_device *dsidev, int error) in dsi_handle_framedone() argument
4008 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_handle_framedone()
4015 REG_FLD_MOD(dsidev, DSI_TIMING2, 1, 15, 15); /* LP_RX_TO */ in dsi_handle_framedone()
4021 dsi_perf_show(dsidev, "DISPC"); in dsi_handle_framedone()
4042 struct platform_device *dsidev = (struct platform_device *) data; in dsi_framedone_irq_callback() local
4043 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_framedone_irq_callback()
4052 dsi_handle_framedone(dsidev, 0); in dsi_framedone_irq_callback()
4058 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_update() local
4059 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_update()
4062 dsi_perf_mark_setup(dsidev); in dsi_update()
4076 dsi_update_screen_dispc(dsidev); in dsi_update()
4083 static int dsi_configure_dispc_clocks(struct platform_device *dsidev) in dsi_configure_dispc_clocks() argument
4085 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_configure_dispc_clocks()
4090 fck = dsi_get_pll_hsdiv_dispc_rate(dsidev); in dsi_configure_dispc_clocks()
4106 static int dsi_display_init_dispc(struct platform_device *dsidev, in dsi_display_init_dispc() argument
4109 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_init_dispc()
4118 dsi_framedone_irq_callback, dsidev); in dsi_display_init_dispc()
4144 r = dsi_configure_dispc_clocks(dsidev); in dsi_display_init_dispc()
4159 dsi_framedone_irq_callback, dsidev); in dsi_display_init_dispc()
4165 static void dsi_display_uninit_dispc(struct platform_device *dsidev, in dsi_display_uninit_dispc() argument
4168 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_uninit_dispc()
4172 dsi_framedone_irq_callback, dsidev); in dsi_display_uninit_dispc()
4177 static int dsi_configure_dsi_clocks(struct platform_device *dsidev) in dsi_configure_dsi_clocks() argument
4179 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_configure_dsi_clocks()
4194 static int dsi_display_init_dsi(struct platform_device *dsidev) in dsi_display_init_dsi() argument
4196 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_init_dsi()
4203 r = dsi_configure_dsi_clocks(dsidev); in dsi_display_init_dsi()
4213 r = dsi_cio_init(dsidev); in dsi_display_init_dsi()
4217 _dsi_print_reset_status(dsidev); in dsi_display_init_dsi()
4219 dsi_proto_timings(dsidev); in dsi_display_init_dsi()
4220 dsi_set_lp_clk_divisor(dsidev); in dsi_display_init_dsi()
4223 _dsi_print_reset_status(dsidev); in dsi_display_init_dsi()
4225 r = dsi_proto_config(dsidev); in dsi_display_init_dsi()
4230 dsi_vc_enable(dsidev, 0, 1); in dsi_display_init_dsi()
4231 dsi_vc_enable(dsidev, 1, 1); in dsi_display_init_dsi()
4232 dsi_vc_enable(dsidev, 2, 1); in dsi_display_init_dsi()
4233 dsi_vc_enable(dsidev, 3, 1); in dsi_display_init_dsi()
4234 dsi_if_enable(dsidev, 1); in dsi_display_init_dsi()
4235 dsi_force_tx_stop_mode_io(dsidev); in dsi_display_init_dsi()
4239 dsi_cio_uninit(dsidev); in dsi_display_init_dsi()
4248 static void dsi_display_uninit_dsi(struct platform_device *dsidev, in dsi_display_uninit_dsi() argument
4251 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_uninit_dsi()
4254 dsi_enter_ulps(dsidev); in dsi_display_uninit_dsi()
4257 dsi_if_enable(dsidev, 0); in dsi_display_uninit_dsi()
4258 dsi_vc_enable(dsidev, 0, 0); in dsi_display_uninit_dsi()
4259 dsi_vc_enable(dsidev, 1, 0); in dsi_display_uninit_dsi()
4260 dsi_vc_enable(dsidev, 2, 0); in dsi_display_uninit_dsi()
4261 dsi_vc_enable(dsidev, 3, 0); in dsi_display_uninit_dsi()
4264 dsi_cio_uninit(dsidev); in dsi_display_uninit_dsi()
4265 dsi_pll_uninit(dsidev, disconnect_lanes); in dsi_display_uninit_dsi()
4270 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_display_enable() local
4271 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_enable()
4276 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_display_enable()
4280 r = dsi_runtime_get(dsidev); in dsi_display_enable()
4284 _dsi_initialize_irq(dsidev); in dsi_display_enable()
4286 r = dsi_display_init_dsi(dsidev); in dsi_display_enable()
4295 dsi_runtime_put(dsidev); in dsi_display_enable()
4305 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_display_disable() local
4306 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_display_disable()
4310 WARN_ON(!dsi_bus_is_locked(dsidev)); in dsi_display_disable()
4314 dsi_sync_vc(dsidev, 0); in dsi_display_disable()
4315 dsi_sync_vc(dsidev, 1); in dsi_display_disable()
4316 dsi_sync_vc(dsidev, 2); in dsi_display_disable()
4317 dsi_sync_vc(dsidev, 3); in dsi_display_disable()
4319 dsi_display_uninit_dsi(dsidev, disconnect_lanes, enter_ulps); in dsi_display_disable()
4321 dsi_runtime_put(dsidev); in dsi_display_disable()
4328 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_enable_te() local
4329 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_enable_te()
4493 ctx->dsidev = dsi->pdev; in dsi_cm_calc()
4510 struct dsi_data *dsi = dsi_get_dsidrv_data(ctx->dsidev); in dsi_vm_calc_blanking()
4782 ctx->dsidev = dsi->pdev; in dsi_vm_calc()
4812 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_set_config() local
4813 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_set_config()
4910 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_request_vc() local
4911 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_request_vc()
4928 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_set_vc_id() local
4929 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_set_vc_id()
4954 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_release_vc() local
4955 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_release_vc()
4965 static int dsi_get_clocks(struct platform_device *dsidev) in dsi_get_clocks() argument
4967 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_get_clocks()
4970 clk = devm_clk_get(&dsidev->dev, "fck"); in dsi_get_clocks()
4984 struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev); in dsi_connect() local
4988 r = dsi_regulator_init(dsidev); in dsi_connect()
5064 static void dsi_init_output(struct platform_device *dsidev) in dsi_init_output() argument
5066 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_init_output()
5069 out->dev = &dsidev->dev; in dsi_init_output()
5082 static void dsi_uninit_output(struct platform_device *dsidev) in dsi_uninit_output() argument
5084 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_uninit_output()
5227 static int dsi_init_pll_data(struct platform_device *dsidev) in dsi_init_pll_data() argument
5229 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in dsi_init_pll_data()
5234 clk = devm_clk_get(&dsidev->dev, "sys_clk"); in dsi_init_pll_data()
5277 static int omap_dsihw_probe(struct platform_device *dsidev) in omap_dsihw_probe() argument
5286 dsi = devm_kzalloc(&dsidev->dev, sizeof(*dsi), GFP_KERNEL); in omap_dsihw_probe()
5290 dsi->pdev = dsidev; in omap_dsihw_probe()
5291 dev_set_drvdata(&dsidev->dev, dsi); in omap_dsihw_probe()
5314 res = platform_get_resource_byname(dsidev, IORESOURCE_MEM, "proto"); in omap_dsihw_probe()
5316 res = platform_get_resource(dsidev, IORESOURCE_MEM, 0); in omap_dsihw_probe()
5329 dsi->proto_base = devm_ioremap(&dsidev->dev, res->start, in omap_dsihw_probe()
5336 res = platform_get_resource_byname(dsidev, IORESOURCE_MEM, "phy"); in omap_dsihw_probe()
5338 res = platform_get_resource(dsidev, IORESOURCE_MEM, 0); in omap_dsihw_probe()
5349 dsi->phy_base = devm_ioremap(&dsidev->dev, res->start, in omap_dsihw_probe()
5356 res = platform_get_resource_byname(dsidev, IORESOURCE_MEM, "pll"); in omap_dsihw_probe()
5358 res = platform_get_resource(dsidev, IORESOURCE_MEM, 0); in omap_dsihw_probe()
5369 dsi->pll_base = devm_ioremap(&dsidev->dev, res->start, in omap_dsihw_probe()
5382 r = devm_request_irq(&dsidev->dev, dsi->irq, omap_dsi_irq_handler, in omap_dsihw_probe()
5383 IRQF_SHARED, dev_name(&dsidev->dev), dsi->pdev); in omap_dsihw_probe()
5389 if (dsidev->dev.of_node) { in omap_dsihw_probe()
5393 match = of_match_node(dsi_of_match, dsidev->dev.of_node); in omap_dsihw_probe()
5411 dsi->module_id = dsidev->id; in omap_dsihw_probe()
5421 r = dsi_get_clocks(dsidev); in omap_dsihw_probe()
5425 dsi_init_pll_data(dsidev); in omap_dsihw_probe()
5427 pm_runtime_enable(&dsidev->dev); in omap_dsihw_probe()
5429 r = dsi_runtime_get(dsidev); in omap_dsihw_probe()
5433 rev = dsi_read_reg(dsidev, DSI_REVISION); in omap_dsihw_probe()
5434 dev_dbg(&dsidev->dev, "OMAP DSI rev %d.%d\n", in omap_dsihw_probe()
5441 dsi->num_lanes_supported = 1 + REG_GET(dsidev, DSI_GNQ, 11, 9); in omap_dsihw_probe()
5445 dsi->line_buffer_size = dsi_get_line_buf_size(dsidev); in omap_dsihw_probe()
5447 dsi_init_output(dsidev); in omap_dsihw_probe()
5449 if (dsidev->dev.of_node) { in omap_dsihw_probe()
5450 r = dsi_probe_of(dsidev); in omap_dsihw_probe()
5456 r = of_platform_populate(dsidev->dev.of_node, NULL, NULL, in omap_dsihw_probe()
5457 &dsidev->dev); in omap_dsihw_probe()
5462 dsi_runtime_put(dsidev); in omap_dsihw_probe()
5479 dsi_uninit_output(dsidev); in omap_dsihw_probe()
5480 dsi_runtime_put(dsidev); in omap_dsihw_probe()
5483 pm_runtime_disable(&dsidev->dev); in omap_dsihw_probe()
5487 static int __exit omap_dsihw_remove(struct platform_device *dsidev) in omap_dsihw_remove() argument
5489 struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); in omap_dsihw_remove()
5491 of_platform_depopulate(&dsidev->dev); in omap_dsihw_remove()
5497 dsi_uninit_output(dsidev); in omap_dsihw_remove()
5499 pm_runtime_disable(&dsidev->dev); in omap_dsihw_remove()