Lines Matching full:dsi
46 /* MIPI DSI Processor-to-Peripheral transaction types */
97 /* MIPI DSI Peripheral-to-Processor transaction types */
164 * struct mipi_dsi_msg - read/write DSI buffer
186 * struct mipi_dsi_packet - represents a MIPI DSI packet in protocol format
200 static inline int dsi_write(struct rk628 *rk628, const struct rk628_dsi *dsi, in dsi_write() argument
205 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in dsi_write()
210 static inline int dsi_read(struct rk628 *rk628, const struct rk628_dsi *dsi, in dsi_read() argument
215 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in dsi_read()
221 const struct rk628_dsi *dsi, in dsi_update_bits() argument
226 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in dsi_update_bits()
245 if (!of_property_read_u32(dsi_np, "dsi,lanes", &val)) in rk628_dsi_parse()
248 if (of_property_read_bool(dsi_np, "dsi,video-mode")) in rk628_dsi_parse()
254 if (of_property_read_bool(dsi_np, "dsi,eotp")) in rk628_dsi_parse()
257 if (!of_property_read_string(dsi_np, "dsi,format", &string)) { in rk628_dsi_parse()
292 const struct rk628_dsi *dsi) in genif_wait_w_pld_fifo_not_full() argument
299 dev_id = dsi->id ? RK628_DEV_DSI1 : RK628_DEV_DSI0; in genif_wait_w_pld_fifo_not_full()
300 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in genif_wait_w_pld_fifo_not_full()
315 const struct rk628_dsi *dsi) in genif_wait_cmd_fifo_not_full() argument
322 dev_id = dsi->id ? RK628_DEV_DSI1 : RK628_DEV_DSI0; in genif_wait_cmd_fifo_not_full()
323 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in genif_wait_cmd_fifo_not_full()
337 static int genif_wait_write_fifo_empty(struct rk628 *rk628, const struct rk628_dsi *dsi) in genif_wait_write_fifo_empty() argument
345 dev_id = dsi->id ? RK628_DEV_DSI1 : RK628_DEV_DSI0; in genif_wait_write_fifo_empty()
346 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in genif_wait_write_fifo_empty()
364 const struct rk628_dsi *dsi, in rk628_dsi_read_from_fifo() argument
375 dev_id = dsi->id ? RK628_DEV_DSI1 : RK628_DEV_DSI0; in rk628_dsi_read_from_fifo()
376 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in rk628_dsi_read_from_fifo()
389 dsi_read(rk628, dsi, DSI_CMD_PKT_STATUS, &val); in rk628_dsi_read_from_fifo()
393 dev_err(rk628->dev, "dsi Read payload FIFO is empty\n"); in rk628_dsi_read_from_fifo()
397 dsi_read(rk628, dsi, DSI_GEN_PLD_DATA, &val); in rk628_dsi_read_from_fifo()
423 * @type: MIPI DSI data type of the packet
459 * @type: MIPI DSI data type of the packet
490 * DSI protocol
491 * @packet: pointer to a DSI packet structure
540 static int rk628_dsi_transfer(struct rk628 *rk628, const struct rk628_dsi *dsi, in rk628_dsi_transfer() argument
548 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, in rk628_dsi_transfer()
552 dsi_update_bits(rk628, dsi, DSI_VID_MODE_CFG, in rk628_dsi_transfer()
555 dsi_update_bits(rk628, dsi, DSI_VID_MODE_CFG, LP_CMD_EN, 0); in rk628_dsi_transfer()
556 dsi_update_bits(rk628, dsi, DSI_LPCLK_CTRL, in rk628_dsi_transfer()
562 //return rk628_dsi_shutdown_peripheral(dsi); in rk628_dsi_transfer()
564 //return rk628_dsi_turn_on_peripheral(dsi); in rk628_dsi_transfer()
566 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, DCS_SW_0P_TX, in rk628_dsi_transfer()
571 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, DCS_SW_1P_TX, in rk628_dsi_transfer()
576 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, DCS_LW_TX, in rk628_dsi_transfer()
581 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, DCS_SR_0P_TX, in rk628_dsi_transfer()
586 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, MAX_RD_PKT_SIZE, in rk628_dsi_transfer()
591 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SW_0P_TX, in rk628_dsi_transfer()
596 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SW_1P_TX, in rk628_dsi_transfer()
601 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SW_2P_TX, in rk628_dsi_transfer()
606 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_LW_TX, in rk628_dsi_transfer()
611 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SR_0P_TX, in rk628_dsi_transfer()
615 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SR_1P_TX, in rk628_dsi_transfer()
619 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, GEN_SR_2P_TX, in rk628_dsi_transfer()
626 /* create a packet to the DSI protocol */ in rk628_dsi_transfer()
644 ret = genif_wait_w_pld_fifo_not_full(rk628, dsi); in rk628_dsi_transfer()
650 dsi_write(rk628, dsi, DSI_GEN_PLD_DATA, val); in rk628_dsi_transfer()
668 dsi_write(rk628, dsi, DSI_GEN_PLD_DATA, val); in rk628_dsi_transfer()
672 ret = genif_wait_cmd_fifo_not_full(rk628, dsi); in rk628_dsi_transfer()
679 dsi_write(rk628, dsi, DSI_GEN_HDR, val); in rk628_dsi_transfer()
681 ret = genif_wait_write_fifo_empty(rk628, dsi); in rk628_dsi_transfer()
686 ret = rk628_dsi_read_from_fifo(rk628, dsi, msg); in rk628_dsi_transfer()
691 if (dsi->slave) { in rk628_dsi_transfer()
703 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_mipi_dsi_generic_write() local
707 msg.channel = dsi->channel; in rk628_mipi_dsi_generic_write()
728 if (dsi->mode_flags & MIPI_DSI_MODE_LPM) in rk628_mipi_dsi_generic_write()
731 return rk628_dsi_transfer(rk628, dsi, &msg); in rk628_mipi_dsi_generic_write()
737 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_mipi_dsi_dcs_write_buffer() local
741 msg.channel = dsi->channel; in rk628_mipi_dsi_dcs_write_buffer()
760 if (dsi->mode_flags & MIPI_DSI_MODE_LPM) in rk628_mipi_dsi_dcs_write_buffer()
763 return rk628_dsi_transfer(rk628, dsi, &msg); in rk628_mipi_dsi_dcs_write_buffer()
768 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_mipi_dsi_dcs_read() local
772 msg.channel = dsi->channel; in rk628_mipi_dsi_dcs_read()
779 return rk628_dsi_transfer(rk628, dsi, &msg); in rk628_mipi_dsi_dcs_read()
823 static u32 rk628_dsi_get_lane_rate(const struct rk628_dsi *dsi) in rk628_dsi_get_lane_rate() argument
825 const struct rk628_display_mode *mode = &dsi->rk628->dst_mode; in rk628_dsi_get_lane_rate()
830 bpp = dsi->bpp; in rk628_dsi_get_lane_rate()
831 lanes = dsi->slave ? dsi->lanes * 2 : dsi->lanes; in rk628_dsi_get_lane_rate()
842 const struct rk628_dsi *dsi) in testif_testclk_assert() argument
844 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testclk_assert()
851 const struct rk628_dsi *dsi) in testif_testclk_deassert() argument
853 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testclk_deassert()
860 const struct rk628_dsi *dsi) in testif_testclr_assert() argument
862 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testclr_assert()
869 const struct rk628_dsi *dsi) in testif_testclr_deassert() argument
871 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testclr_deassert()
878 const struct rk628_dsi *dsi, u8 data) in testif_set_data() argument
880 rk628_i2c_update_bits(rk628, dsi->id ? in testif_set_data()
887 const struct rk628_dsi *dsi) in testif_testen_assert() argument
889 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testen_assert()
896 const struct rk628_dsi *dsi) in testif_testen_deassert() argument
898 rk628_i2c_update_bits(rk628, dsi->id ? in testif_testen_deassert()
905 const struct rk628_dsi *dsi, u8 test_code) in testif_test_code_write() argument
907 testif_testclk_assert(rk628, dsi); in testif_test_code_write()
908 testif_set_data(rk628, dsi, test_code); in testif_test_code_write()
909 testif_testen_assert(rk628, dsi); in testif_test_code_write()
910 testif_testclk_deassert(rk628, dsi); in testif_test_code_write()
911 testif_testen_deassert(rk628, dsi); in testif_test_code_write()
915 const struct rk628_dsi *dsi, u8 test_data) in testif_test_data_write() argument
917 testif_testclk_deassert(rk628, dsi); in testif_test_data_write()
918 testif_set_data(rk628, dsi, test_data); in testif_test_data_write()
919 testif_testclk_assert(rk628, dsi); in testif_test_data_write()
922 static u8 testif_get_data(struct rk628 *rk628, const struct rk628_dsi *dsi) in testif_get_data() argument
926 rk628_i2c_read(rk628, dsi->id ? GRF_DPHY1_STATUS : GRF_DPHY0_STATUS, &data); in testif_get_data()
931 static void testif_write(struct rk628 *rk628, const struct rk628_dsi *dsi, in testif_write() argument
936 testif_test_code_write(rk628, dsi, reg); in testif_write()
937 testif_test_data_write(rk628, dsi, value); in testif_write()
938 monitor_data = testif_get_data(rk628, dsi); in testif_write()
942 static void mipi_dphy_init(struct rk628 *rk628, const struct rk628_dsi *dsi) in mipi_dphy_init() argument
970 testif_write(rk628, dsi, 0x44, HSFREQRANGE(hsfreqrange)); in mipi_dphy_init()
973 static void mipi_dphy_power_on(struct rk628 *rk628, const struct rk628_dsi *dsi) in mipi_dphy_power_on() argument
980 dev_id = dsi->id ? RK628_DEV_DSI1 : RK628_DEV_DSI0; in mipi_dphy_power_on()
981 dsi_base = dsi->id ? DSI1_BASE : DSI0_BASE; in mipi_dphy_power_on()
983 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, PHY_ENABLECLK, 0); in mipi_dphy_power_on()
984 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, PHY_SHUTDOWNZ, 0); in mipi_dphy_power_on()
985 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, PHY_RSTZ, 0); in mipi_dphy_power_on()
986 testif_testclr_assert(rk628, dsi); in mipi_dphy_power_on()
989 rk628_i2c_update_bits(rk628, dsi->id ? in mipi_dphy_power_on()
995 testif_testclr_deassert(rk628, dsi); in mipi_dphy_power_on()
997 mipi_dphy_init(rk628, dsi); in mipi_dphy_power_on()
999 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, in mipi_dphy_power_on()
1001 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, in mipi_dphy_power_on()
1003 dsi_update_bits(rk628, dsi, DSI_PHY_RSTZ, PHY_RSTZ, PHY_RSTZ); in mipi_dphy_power_on()
1048 const struct rk628_dsi *dsi) in rk628_dsi_bridge_pre_enable() argument
1052 dsi_write(rk628, dsi, DSI_PWR_UP, RESET); in rk628_dsi_bridge_pre_enable()
1053 dsi_write(rk628, dsi, DSI_MODE_CFG, CMD_VIDEO_MODE(COMMAND_MODE)); in rk628_dsi_bridge_pre_enable()
1056 dsi_write(rk628, dsi, DSI_CLKMGR_CFG, in rk628_dsi_bridge_pre_enable()
1060 if (dsi->mode_flags & MIPI_DSI_MODE_EOT_PACKET) in rk628_dsi_bridge_pre_enable()
1063 dsi_write(rk628, dsi, DSI_PCKHDL_CFG, val); in rk628_dsi_bridge_pre_enable()
1065 dsi_write(rk628, dsi, DSI_TO_CNT_CFG, in rk628_dsi_bridge_pre_enable()
1067 dsi_write(rk628, dsi, DSI_BTA_TO_CNT, 0xd00); in rk628_dsi_bridge_pre_enable()
1068 dsi_write(rk628, dsi, DSI_PHY_TMR_CFG, in rk628_dsi_bridge_pre_enable()
1071 dsi_write(rk628, dsi, DSI_PHY_TMR_LPCLK_CFG, in rk628_dsi_bridge_pre_enable()
1073 dsi_write(rk628, dsi, DSI_PHY_IF_CFG, in rk628_dsi_bridge_pre_enable()
1074 PHY_STOP_WAIT_TIME(0x20) | N_LANES(dsi->lanes - 1)); in rk628_dsi_bridge_pre_enable()
1076 mipi_dphy_power_on(rk628, dsi); in rk628_dsi_bridge_pre_enable()
1078 dsi_write(rk628, dsi, DSI_PWR_UP, POWER_UP); in rk628_dsi_bridge_pre_enable()
1082 const struct rk628_dsi *dsi, in rk628_dsi_set_vid_mode() argument
1095 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HFP) in rk628_dsi_set_vid_mode()
1098 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_HBP) in rk628_dsi_set_vid_mode()
1101 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) in rk628_dsi_set_vid_mode()
1103 else if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) in rk628_dsi_set_vid_mode()
1108 dsi_write(rk628, dsi, DSI_VID_MODE_CFG, val); in rk628_dsi_set_vid_mode()
1110 if (dsi->mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) in rk628_dsi_set_vid_mode()
1111 dsi_update_bits(rk628, dsi, DSI_LPCLK_CTRL, in rk628_dsi_set_vid_mode()
1114 if (dsi->slave || dsi->master) in rk628_dsi_set_vid_mode()
1119 dsi_write(rk628, dsi, DSI_VID_PKT_SIZE, pkt_size); in rk628_dsi_set_vid_mode()
1131 dsi_write(rk628, dsi, DSI_VID_HLINE_TIME, in rk628_dsi_set_vid_mode()
1135 dsi_write(rk628, dsi, DSI_VID_HSA_TIME, VID_HSA_TIME(hsa_time)); in rk628_dsi_set_vid_mode()
1138 dsi_write(rk628, dsi, DSI_VID_HBP_TIME, VID_HBP_TIME(hbp_time)); in rk628_dsi_set_vid_mode()
1140 dsi_write(rk628, dsi, DSI_VID_VACTIVE_LINES, vactive); in rk628_dsi_set_vid_mode()
1141 dsi_write(rk628, dsi, DSI_VID_VSA_LINES, vsa); in rk628_dsi_set_vid_mode()
1142 dsi_write(rk628, dsi, DSI_VID_VFP_LINES, vfp); in rk628_dsi_set_vid_mode()
1143 dsi_write(rk628, dsi, DSI_VID_VBP_LINES, vbp); in rk628_dsi_set_vid_mode()
1145 dsi_write(rk628, dsi, DSI_MODE_CFG, CMD_VIDEO_MODE(VIDEO_MODE)); in rk628_dsi_set_vid_mode()
1149 const struct rk628_dsi *dsi, in rk628_dsi_set_cmd_mode() argument
1152 dsi_update_bits(rk628, dsi, DSI_CMD_MODE_CFG, DCS_LW_TX, 0); in rk628_dsi_set_cmd_mode()
1153 dsi_write(rk628, dsi, DSI_EDPI_CMD_SIZE, in rk628_dsi_set_cmd_mode()
1155 dsi_write(rk628, dsi, DSI_MODE_CFG, CMD_VIDEO_MODE(COMMAND_MODE)); in rk628_dsi_set_cmd_mode()
1159 const struct rk628_dsi *dsi) in rk628_dsi_bridge_enable() argument
1164 dsi_write(rk628, dsi, DSI_PWR_UP, RESET); in rk628_dsi_bridge_enable()
1166 switch (dsi->bus_format) { in rk628_dsi_bridge_enable()
1183 dsi_write(rk628, dsi, DSI_DPI_COLOR_CODING, val); in rk628_dsi_bridge_enable()
1191 dsi_write(rk628, dsi, DSI_DPI_CFG_POL, val); in rk628_dsi_bridge_enable()
1193 dsi_write(rk628, dsi, DSI_DPI_VCID, DPI_VID(0)); in rk628_dsi_bridge_enable()
1194 dsi_write(rk628, dsi, DSI_DPI_LP_CMD_TIM, in rk628_dsi_bridge_enable()
1196 dsi_update_bits(rk628, dsi, DSI_LPCLK_CTRL, in rk628_dsi_bridge_enable()
1199 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) in rk628_dsi_bridge_enable()
1200 rk628_dsi_set_vid_mode(rk628, dsi, mode); in rk628_dsi_bridge_enable()
1202 rk628_dsi_set_cmd_mode(rk628, dsi, mode); in rk628_dsi_bridge_enable()
1204 dsi_write(rk628, dsi, DSI_PWR_UP, POWER_UP); in rk628_dsi_bridge_enable()
1209 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_mipi_dsi_pre_enable() local
1211 u32 rate = rk628_dsi_get_lane_rate(dsi); in rk628_mipi_dsi_pre_enable()
1217 dsi->slave ? SW_SPLIT_EN : 0); in rk628_mipi_dsi_pre_enable()
1220 if (dsi->slave) in rk628_mipi_dsi_pre_enable()
1222 else if (dsi->id) in rk628_mipi_dsi_pre_enable()
1231 if (dsi->slave) in rk628_mipi_dsi_pre_enable()
1240 rk628_dsi_bridge_pre_enable(rk628, dsi); in rk628_mipi_dsi_pre_enable()
1242 if (dsi->slave) { in rk628_mipi_dsi_pre_enable()
1261 dev_info(rk628->dev, "dsi: mode: 0x%x\n", mode); in rk628_mipi_dsi_pre_enable()
1264 dev_info(rk628->dev, "rk628_dsi final DSI-Link bandwidth: %d x %d\n", in rk628_mipi_dsi_pre_enable()
1265 lane_mbps, dsi->slave ? dsi->lanes * 2 : dsi->lanes); in rk628_mipi_dsi_pre_enable()
1270 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_mipi_dsi_enable() local
1273 rk628_dsi_bridge_enable(rk628, dsi); in rk628_mipi_dsi_enable()
1275 if (dsi->slave) in rk628_mipi_dsi_enable()
1283 const struct rk628_dsi *dsi = &rk628->dsi0; in rk628_dsi_disable() local
1288 dsi_write(rk628, dsi, DSI_PWR_UP, RESET); in rk628_dsi_disable()
1289 dsi_write(rk628, dsi, DSI_LPCLK_CTRL, 0); in rk628_dsi_disable()
1290 dsi_write(rk628, dsi, DSI_EDPI_CMD_SIZE, 0); in rk628_dsi_disable()
1291 dsi_write(rk628, dsi, DSI_MODE_CFG, CMD_VIDEO_MODE(COMMAND_MODE)); in rk628_dsi_disable()
1292 dsi_write(rk628, dsi, DSI_PWR_UP, POWER_UP); in rk628_dsi_disable()
1294 //dsi_write(rk628, dsi, DSI_PHY_RSTZ, 0); in rk628_dsi_disable()
1296 if (dsi->slave) { in rk628_dsi_disable()