1 /* 2 * Allwinner SoCs display driver. 3 * 4 * Copyright (C) 2016 Allwinner. 5 * 6 * This file is licensed under the terms of the GNU General Public 7 * License version 2. This program is licensed "as is" without any 8 * warranty of any kind, whether express or implied. 9 */ 10 11 #ifndef __DE_DSI_TYPE_H__ 12 #define __DE_DSI_TYPE_H__ 13 14 #include "de_lcd.h" 15 16 union DSI_CTL0_t { 17 u32 dwval; 18 struct { 19 u32 module_en:1; 20 u32 res0:15; 21 u32 version:16; 22 } bits; 23 }; 24 25 union DSI_CTL1_t { 26 u32 dwval; 27 struct { 28 u32 phy_en:1; 29 u32 phy_rst:1; 30 u32 res0:2; 31 u32 phy_lane_num:2; 32 u32 res1:2; 33 u32 phy_clk_gating:1; 34 u32 phy_clk_lane_enable:1; 35 u32 res2:22; 36 } bits; 37 }; 38 39 union DSI_CTL2_t { 40 u32 dwval; 41 struct { 42 u32 lp_clk_div:8; 43 u32 res0:24; 44 } bits; 45 }; 46 47 union DSI_VID_CTL0_t { 48 u32 dwval; 49 struct { 50 u32 video_mode_en:1; 51 u32 res0:3; 52 u32 video_mode_cfg:2; 53 u32 res1:2; 54 u32 vsa_lp_en:1; 55 u32 vbp_lp_en:1; 56 u32 vact_lp_en:1; 57 u32 vfp_lp_en:1; 58 u32 hbp_lp_en:1; 59 u32 hfp_lp_en:1; 60 u32 res2:18; 61 } bits; 62 }; 63 64 union DSI_VID_CTL1_t { 65 u32 dwval; 66 struct { 67 u32 bta_per_frame:1; 68 u32 lp_cmd_en:1; 69 u32 res0:2; 70 u32 pkt_multi_en:1; 71 u32 pkt_null_in_hact:1; 72 u32 res1:2; 73 u32 pkt_num_per_line:10; 74 u32 res2:2; 75 u32 pkt_null_size:10; 76 u32 res3:2; 77 } bits; 78 }; 79 80 union DSI_VID_TIM0_t { 81 u32 dwval; 82 struct { 83 u32 vsa:4; 84 u32 res0:12; 85 u32 vbp:6; 86 u32 res1:10; 87 } bits; 88 }; 89 90 union DSI_VID_TIM1_t { 91 u32 dwval; 92 struct { 93 u32 vact:11; 94 u32 res0:5; 95 u32 vfp:6; 96 u32 res1:10; 97 } bits; 98 }; 99 100 union DSI_VID_TIM2_t { 101 u32 dwval; 102 struct { 103 u32 pixels_per_pkg:11; 104 u32 res0:5; 105 u32 ht:14; 106 u32 res1:2; 107 } bits; 108 }; 109 110 union DSI_VID_TIM3_t { 111 u32 dwval; 112 struct { 113 u32 hsa:9; 114 u32 res0:7; 115 u32 hbp:9; 116 u32 res1:7; 117 } bits; 118 }; 119 120 union DSI_DPI_CFG0_t { 121 u32 dwval; 122 struct { 123 u32 res0:8; 124 u32 dpi_format:3; 125 u32 res1:1; 126 u32 video_mode_format_18bit:1; 127 u32 res2:15; 128 u32 dpi_vid:2; 129 u32 res3:2; 130 } bits; 131 }; 132 133 union DSI_DPI_CFG1_t { 134 u32 dwval; 135 struct { 136 u32 vsync_ploarity:1; 137 u32 hsync_ploarity:1; 138 u32 res0:1; 139 u32 de_ploarity:1; 140 u32 shutd_polarity:1; 141 u32 colorm_polarity:1; 142 u32 res1:26; 143 } bits; 144 }; 145 146 union DSI_PKG_CTL0_t { 147 u32 dwval; 148 struct { 149 u32 dt:6; 150 u32 vc:2; 151 u32 wc:16; 152 u32 res0:8; 153 } bits; 154 }; 155 156 union DSI_PKG_CTL1_t { 157 u32 dwval; 158 struct { 159 u32 pld_byte1:8; 160 u32 pld_byte2:8; 161 u32 pld_byte3:8; 162 u32 pld_byte4:8; 163 } bits; 164 }; 165 166 union DSI_PKG_STATUS_t { 167 u32 dwval; 168 struct { 169 u32 fifo_cmd_empty:1; 170 u32 fifo_pld_w_empty:1; 171 u32 fifo_pld_r_empty:1; 172 u32 res0:1; 173 u32 fifo_cmd_full:1; 174 u32 fifo_pld_w_full:1; 175 u32 fifo_pld_r_full:1; 176 u32 res1:1; 177 u32 rd_cmd_busy:1; 178 u32 res2:23; 179 } bits; 180 }; 181 182 union DSI_PKG_CTL2_t { 183 u32 dwval; 184 struct { 185 u32 bta_en:1; 186 u32 res0:3; 187 u32 eotp_tx_en:1; 188 u32 res1:3; 189 u32 eotp_rx_en:1; 190 u32 ecc_rx_en:1; 191 u32 crc_rx_en:1; 192 u32 res2:17; 193 u32 vid_rx:2; 194 u32 res3:2; 195 } bits; 196 }; 197 198 union DSI_CMD_CTL_t { 199 u32 dwval; 200 struct { 201 u32 cmd_mode_en:1; 202 u32 res0:3; 203 u32 gen_sw_0p_tx_lp:1; 204 u32 gen_sw_1p_tx_lp:1; 205 u32 gen_sw_2p_tx_lp:1; 206 u32 gen_lw_tx_lp:1; 207 u32 gen_sr_0p_tx_lp:1; 208 u32 gen_sr_1p_tx_lp:1; 209 u32 gen_sr_2p_tx_lp:1; 210 u32 res1:1; 211 u32 dcs_sw_0p_tx_lp:1; 212 u32 dcs_sw_1p_tx_lp:1; 213 u32 dcs_lw_tx_lp:1; 214 u32 res2:1; 215 u32 dcs_sr_0p_tx_lp:1; 216 u32 res3:3; 217 u32 max_rd_pkg_size_lp:1; 218 u32 res4:3; 219 u32 pkg_ack_req:1; 220 u32 res5:3; 221 u32 te_ack_en:1; 222 u32 res6:3; 223 } bits; 224 }; 225 226 union DSI_DBI_CTL0_t { 227 u32 dwval; 228 struct { 229 u32 res0:4; 230 u32 dbi_in_format:4; 231 u32 dbi_out_format:4; 232 u32 lut_size_cfg:2; 233 u32 res1:2; 234 u32 partion_mode:1; 235 u32 res2:11; 236 u32 dbi_vid:2; 237 u32 res3:2; 238 } bits; 239 }; 240 241 union DSI_DBI_CTL1_t { 242 u32 dwval; 243 struct { 244 u32 wr_cmd_size:16; 245 u32 allowed_cmd_size:16; 246 } bits; 247 }; 248 249 union DSI_DBI_CTL2_t { 250 u32 dwval; 251 struct { 252 u32 dbi_fifo_cmd_empty:1; 253 u32 dbi_fifo_pld_w_empty:1; 254 u32 dbi_fifo_pld_r_empty:1; 255 u32 res0:1; 256 u32 dbi_fifo_cmd_full:1; 257 u32 dbi_fifo_pld_w_full:1; 258 u32 dbi_fifo_pld_r_full:1; 259 u32 res1:1; 260 u32 dbi_rd_cmd_busy:1; 261 u32 res2:23; 262 } bits; 263 }; 264 265 union DSI_TO_CTL0_t { 266 u32 dwval; 267 struct { 268 u32 to_clk_div:8; 269 u32 res0:24; 270 } bits; 271 }; 272 273 union DSI_TO_CTL1_t { 274 u32 dwval; 275 struct { 276 u32 to_hstx_set:16; 277 u32 to_lprx_set:16; 278 } bits; 279 }; 280 281 union DSI_VID_CTL2_t { 282 u32 dwval; 283 struct { 284 u32 lpcmd_time_invact:8; 285 u32 res0:8; 286 u32 lpcmd_time_outvact:8; 287 u32 res1:8; 288 } bits; 289 }; 290 291 union DSI_PHY_CTL0_t { 292 u32 dwval; 293 struct { 294 u32 phy_lp2hs_set:8; 295 u32 res0:8; 296 u32 phy_hs2lp_set:8; 297 u32 res1:8; 298 } bits; 299 }; 300 301 union DSI_PHY_CTL1_t { 302 u32 dwval; 303 struct { 304 u32 phy_stop_set:8; 305 u32 res0:8; 306 u32 max_rd_set:15; 307 u32 res1:1; 308 } bits; 309 }; 310 311 union DSI_PHY_CTL2_t { 312 u32 dwval; 313 struct { 314 u32 res0:4; 315 u32 phy_ck_tx_ulps_req:1; 316 u32 phy_ck_tx_ulps_exit:1; 317 u32 res1:2; 318 u32 phy_data_tx_ulps_req:1; 319 u32 phy_data_tx_upls_exit:1; 320 u32 res2:6; 321 u32 phy_tx_triger:4; 322 u32 res3:12; 323 } bits; 324 }; 325 326 union DSI_PHY_STATUS_t { 327 u32 dwval; 328 struct { 329 u32 phy_lock:1; 330 u32 res0:3; 331 u32 phy_dir:1; 332 u32 res1:3; 333 u32 phy_d0_stop:1; 334 u32 phy_d1_stop:1; 335 u32 phy_d2_stop:1; 336 u32 phy_d3_stop:1; 337 u32 phy_ck_stop:1; 338 u32 res2:3; 339 u32 phy_d0_no_ulps:1; 340 u32 phy_d1_no_ulps:1; 341 u32 phy_d2_no_ulps:1; 342 u32 phy_d3_no_ulps:1; 343 u32 phy_ck_no_ulps:1; 344 u32 res3:3; 345 u32 phy_d0rx_no_ulps:1; 346 u32 res4:7; 347 } bits; 348 }; 349 350 union DSI_PHY_CTL3_t { 351 u32 dwval; 352 struct { 353 u32 phy_cfg_clr:1; 354 u32 phy_cfg_clk:1; 355 u32 res0:2; 356 u32 phy_cfg_en:1; 357 u32 res1:11; 358 u32 phy_cfg_din:8; 359 u32 phy_cfg_dout:8; 360 } bits; 361 }; 362 363 union DSI_IRQ_EN0_t { 364 u32 dwval; 365 struct { 366 u32 ack_with_err_0:1; 367 u32 ack_with_err_1:1; 368 u32 ack_with_err_2:1; 369 u32 ack_with_err_3:1; 370 u32 ack_with_err_4:1; 371 u32 ack_with_err_5:1; 372 u32 ack_with_err_6:1; 373 u32 ack_with_err_7:1; 374 u32 ack_with_err_8:1; 375 u32 ack_with_err_9:1; 376 u32 ack_with_err_10:1; 377 u32 ack_with_err_11:1; 378 u32 ack_with_err_12:1; 379 u32 ack_with_err_13:1; 380 u32 ack_with_err_14:1; 381 u32 ack_with_err_15:1; 382 u32 dphy_errors_0:1; 383 u32 dphy_errors_1:1; 384 u32 dphy_errors_2:1; 385 u32 dphy_errors_3:1; 386 u32 dphy_errors_4:1; 387 u32 res0:11; 388 } bits; 389 }; 390 391 union DSI_IRQ_EN1_t { 392 u32 dwval; 393 struct { 394 u32 ecc_single_err:1; 395 u32 ecc_multi_err:1; 396 u32 crc_err:1; 397 u32 eopt_err:1; 398 u32 pkt_size_err:1; 399 u32 res0:3; 400 u32 dpi_pld_wr_err:1; 401 u32 res1:3; 402 u32 gen_cmd_wr_err:1; 403 u32 gen_pld_wr_err:1; 404 u32 gen_pld_send_err:1; 405 u32 gen_pld_rd_err:1; 406 u32 gen_pld_recv_err:1; 407 u32 res2:3; 408 u32 dbi_cmd_wr_err:1; 409 u32 dbi_pld_wr_err:1; 410 u32 dbi_pld_rd_err:1; 411 u32 dbi_pld_recv_err:1; 412 u32 dbi_illegal_comm_err:1; 413 u32 res3:3; 414 u32 to_hs_tx:1; 415 u32 to_lp_rx:1; 416 u32 res4:2; 417 } bits; 418 }; 419 420 union DSI_IRQ_STATUS0_t { 421 u32 dwval; 422 struct { 423 u32 ack_with_err_0:1; 424 u32 ack_with_err_1:1; 425 u32 ack_with_err_2:1; 426 u32 ack_with_err_3:1; 427 u32 ack_with_err_4:1; 428 u32 ack_with_err_5:1; 429 u32 ack_with_err_6:1; 430 u32 ack_with_err_7:1; 431 u32 ack_with_err_8:1; 432 u32 ack_with_err_9:1; 433 u32 ack_with_err_10:1; 434 u32 ack_with_err_11:1; 435 u32 ack_with_err_12:1; 436 u32 ack_with_err_13:1; 437 u32 ack_with_err_14:1; 438 u32 ack_with_err_15:1; 439 u32 dphy_errors_0:1; 440 u32 dphy_errors_1:1; 441 u32 dphy_errors_2:1; 442 u32 dphy_errors_3:1; 443 u32 dphy_errors_4:1; 444 u32 res0:11; 445 } bits; 446 }; 447 448 union DSI_IRQ_STATUS1_t { 449 u32 dwval; 450 struct { 451 u32 ecc_single_err:1; 452 u32 ecc_multi_err:1; 453 u32 crc_err:1; 454 u32 eopt_err:1; 455 u32 pkt_size_err:1; 456 u32 res0:3; 457 u32 dpi_pld_wr_err:1; 458 u32 res1:3; 459 u32 gen_cmd_wr_err:1; 460 u32 gen_pld_wr_err:1; 461 u32 gen_pld_send_err:1; 462 u32 gen_pld_rd_err:1; 463 u32 gen_pld_recv_err:1; 464 u32 res2:3; 465 u32 dbi_cmd_wr_err:1; 466 u32 dbi_pld_wr_err:1; 467 u32 dbi_pld_rd_err:1; 468 u32 dbi_pld_recv_err:1; 469 u32 dbi_illegal_comm_err:1; 470 u32 res3:3; 471 u32 to_hs_tx:1; 472 u32 to_lp_rx:1; 473 u32 res4:2; 474 } bits; 475 }; 476 477 union DSI_CFG0_t { 478 u32 dwval; 479 struct { 480 u32 base_dir:4; 481 u32 res0:11; 482 u32 bist_on:1; 483 u32 turn_dis_0:1; 484 u32 force_rx_0:1; 485 u32 force_tx_stop_0:1; 486 u32 res1:1; 487 u32 turn_dis_1:1; 488 u32 force_rx_1:1; 489 u32 force_tx_stop_1:1; 490 u32 res2:1; 491 u32 turn_dis_2:1; 492 u32 force_rx_2:1; 493 u32 force_tx_stop_2:1; 494 u32 res3:1; 495 u32 turn_dis_3:1; 496 u32 force_rx_3:1; 497 u32 force_tx_stop_3:1; 498 u32 res4:1; 499 } bits; 500 }; 501 502 union DSI_CFG1_t { 503 u32 dwval; 504 struct { 505 u32 dpi_color_mode:1; 506 u32 dpi_shut_down:1; 507 u32 dpi_src_format:2; 508 u32 res0:27; 509 u32 dpi_src:1; 510 } bits; 511 }; 512 513 union DSI_CFG2_t { 514 u32 dwval; 515 struct { 516 u32 dbi_rst:1; 517 u32 lcd_te_en:1; 518 u32 res0:29; 519 u32 dbi_src:1; 520 } bits; 521 }; 522 523 union DSI_CFG3_t { 524 u32 dwval; 525 struct { 526 u32 bist_en:1; 527 u32 res0:3; 528 u32 sram0_bist_en:1; 529 u32 sram1_bist_en:1; 530 u32 sram2_bist_en:1; 531 u32 sram3_bist_en:1; 532 u32 res1:12; 533 u32 reg_snk:3; 534 u32 res2:5; 535 u32 reg_rint:2; 536 u32 reg_rext:1; 537 u32 enrext:1; 538 } bits; 539 }; 540 541 union DSI_STATUS_t { 542 u32 dwval; 543 struct { 544 u32 bist_status:1; 545 u32 res0:31; 546 } bits; 547 }; 548 549 union DSI_RESERVD_REG_t { 550 __u32 dwval; 551 struct { 552 __u32 res0; 553 } bits; 554 }; 555 556 struct __de_dsi_dev_t { 557 union DSI_CTL0_t dsi_ctl0; 558 union DSI_CTL1_t dsi_ctl1; 559 union DSI_CTL2_t dsi_ctl2; 560 union DSI_RESERVD_REG_t dsi_reg00C; 561 union DSI_VID_CTL0_t dsi_vid_ctl0; 562 union DSI_RESERVD_REG_t dsi_reg014[2]; 563 union DSI_VID_CTL1_t dsi_vid_ctl1; 564 union DSI_VID_TIM0_t dsi_vid_tim0; 565 union DSI_VID_TIM1_t dsi_vid_tim1; 566 union DSI_VID_TIM2_t dsi_vid_tim2; 567 union DSI_VID_TIM3_t dsi_vid_tim3; 568 union DSI_DPI_CFG0_t dsi_dpi_cfg0; 569 union DSI_RESERVD_REG_t dsi_reg034[2]; 570 union DSI_DPI_CFG1_t dsi_dpi_cfg1; 571 union DSI_PKG_CTL0_t dsi_pkg_ctl0; 572 union DSI_PKG_CTL1_t dsi_pkg_ctl1; 573 union DSI_PKG_STATUS_t dsi_pkg_status; 574 union DSI_RESERVD_REG_t dsi_reg04C; 575 union DSI_PKG_CTL2_t dsi_pkg_ctl2; 576 union DSI_CMD_CTL_t dsi_cmd_ctl; 577 union DSI_RESERVD_REG_t dsi_reg058[10]; 578 union DSI_DBI_CTL0_t dsi_dbi_ctl0; 579 union DSI_DBI_CTL1_t dsi_dbi_ctl1; 580 union DSI_DBI_CTL2_t dsi_dbi_ctl2; 581 union DSI_RESERVD_REG_t dsi_reg08C[5]; 582 union DSI_TO_CTL0_t dsi_to_ctl0; 583 union DSI_TO_CTL1_t dsi_to_ctl1; 584 union DSI_VID_CTL2_t dsi_vid_ctl2; 585 union DSI_RESERVD_REG_t dsi_reg0AC; 586 union DSI_PHY_CTL0_t dsi_phy_ctl0; 587 union DSI_PHY_CTL1_t dsi_phy_ctl1; 588 union DSI_RESERVD_REG_t dsi_reg0B8[2]; 589 union DSI_PHY_CTL2_t dsi_phy_ctl2; 590 union DSI_PHY_STATUS_t dsi_phy_status; 591 union DSI_RESERVD_REG_t dsi_reg0C8[10]; 592 union DSI_PHY_CTL3_t dsi_phy_ctl3; 593 union DSI_RESERVD_REG_t dsi_reg0F4[59]; 594 union DSI_IRQ_EN0_t dsi_irq_en0; 595 union DSI_IRQ_EN1_t dsi_irq_en1; 596 union DSI_RESERVD_REG_t dsi_reg1E8[2]; 597 union DSI_IRQ_STATUS0_t dsi_irq_status0; 598 union DSI_IRQ_STATUS1_t dsi_irq_status1; 599 union DSI_RESERVD_REG_t dsi_reg1F8[130]; 600 union DSI_CFG0_t dsi_cfg0; 601 union DSI_CFG1_t dsi_cfg1; 602 union DSI_CFG2_t dsi_cfg2; 603 union DSI_CFG3_t dsi_cfg3; 604 union DSI_STATUS_t dsi_statu_s; 605 }; 606 607 __u8 dsi_ecc_pro(__u32 dsi_ph); 608 __u16 dsi_crc_pro(__u8 *pd_p, __u32 pd_bytes); 609 __u16 dsi_crc_pro_pd_repeat(__u8 pd, __u32 pd_bytes); 610 611 /* lvds */ 612 union lvds_if_reg_t { 613 u32 dwval; 614 struct { 615 u32 lvds_data_revert:4; 616 u32 lvds_clk_revert:1; 617 u32 res0:15; 618 u32 lvds_clk_sel:1; 619 u32 res1:2; 620 u32 lvds_correct_mode:1; 621 u32 lvds_debug_mode:1; 622 u32 lvds_debug_en:1; 623 u32 lvds_bitwidth:1; 624 u32 lvds_mode:1; 625 u32 lvds_dir:1; 626 u32 lvds_even_odd_dir:1; 627 u32 lvds_link:1; 628 u32 lvds_en:1; 629 } bits; 630 }; 631 632 #endif 633