Read the article: lupyuen.github.io/articles/dsi
This all-in-one display handler might be helpful for validating that our driver works correctly:
sun6i_dsi_encoder_enable: sun6i_mipi_dsi.c calls D-PHY:
- phy_init / sun6i_dphy_init: phy-sun6i-mipi-dphy.c
- phy_mipi_dphy_get_default_config: phy-core-mipi-dphy.c
- phy_set_mode
- phy_configure / sun6i_dphy_configure: phy-sun6i-mipi-dphy.c
- phy_power_on / sun6i_dphy_power_on: phy-sun6i-mipi-dphy.c
- Calls sun6i_dphy_tx_power_on: phy-sun6i-mipi-dphy.c
- Or sun6i_dphy_rx_power_on: phy-sun6i-mipi-dphy.c
xbd599_init_sequence: panel-sitronix-st7703.c
- Calls dsi_dcs_write_seq: panel-sitronix-st7703.c
- Calls mipi_dsi_dcs_write: drm_mipi_dsi.c
- Calls mipi_dsi_dcs_write_buffer (MIPI_DSI_DCS_LONG_WRITE): drm_mipi_dsi.c
- Calls mipi_dsi_device_transfer: drm_mipi_dsi.c
- Calls sun6i_dsi_transfer (MIPI_DSI_DCS_LONG_WRITE): sun6i_mipi_dsi.c
- Calls sun6i_dsi_dcs_write_long: sun6i_mipi_dsi.c
- Calls sun6i_dsi_dcs_build_pkt_hdr (4-byte Packet Header): sun6i_mipi_dsi.c
- And sun6i_dsi_crc_compute (1-byte Checksum): sun6i_mipi_dsi.c
- And sun6i_dsi_start (DSI_START_LPTX): sun6i_mipi_dsi.c
- Calls sun6i_dsi_inst_abort: sun6i_mipi_dsi.c
- And sun6i_dsi_inst_commit: sun6i_mipi_dsi.c
- And sun6i_dsi_inst_wait_for_completion: sun6i_mipi_dsi.c
Data Type = MIPI_DSI_DCS_LONG_WRITE: mipi_display.h
MIPI_DSI_DCS_LONG_WRITE = 0x39,
Video Mode: panel-sitronix-st7703.c
static const struct st7703_panel_desc xbd599_desc = {
.mode = &xbd599_mode,
.lanes = 4,
.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
.format = MIPI_DSI_FMT_RGB888,
.init_sequence = xbd599_init_sequence,
};
Video Mode: sun6i_mipi_dsi.c
regmap_write(dsi->regs, SUN6I_DSI_BASIC_CTL1_REG,
SUN6I_DSI_BASIC_CTL1_VIDEO_ST_DELAY(delay) |
SUN6I_DSI_BASIC_CTL1_VIDEO_FILL |
SUN6I_DSI_BASIC_CTL1_VIDEO_PRECISION |
SUN6I_DSI_BASIC_CTL1_VIDEO_MODE);
A64 MIPI DSI Driver: sun6i_mipi_dsi.c
sun6i_dsi_dcs_write_short: sun6i_mipi_dsi.c
- Calls sun6i_dsi_start(dsi, DSI_START_LPTX);
sun6i_dsi_dcs_write_long: sun6i_mipi_dsi.c
- Calls sun6i_dsi_start(dsi, DSI_START_LPTX);
- sun6i_dsi_inst_wait_for_completion
sun6i_dsi_dcs_read: sun6i_mipi_dsi.c
sun6i_dsi_transfer: sun6i_mipi_dsi.c
sun6i_dsi_start: sun6i_mipi_dsi.c
sun6i_dsi_encoder_enable: sun6i_mipi_dsi.c
A64 MIPI D-PHY Driver: phy-sun6i-mipi-dphy.c
sun6i_dphy_tx_power_on: phy-sun6i-mipi-dphy.c
sun6i_dphy_rx_power_on: phy-sun6i-mipi-dphy.c
sun6i_dphy_power_on: phy-sun6i-mipi-dphy.c
MODULE_DESCRIPTION("Allwinner A31 DSI Driver");
static const struct of_device_id sun6i_dsi_of_table[] = {
{ .compatible = "allwinner,sun6i-a31-mipi-dsi" },
{ .compatible = "allwinner,sun50i-a64-mipi-dsi" },
{ }
};