display_tz_enable

This function is responsible for effectively setting up the IPU. This is done by configuring the display channel path in ipu_setup and then enabling the display in ipu_panel_enable.

void display_tz_enable(void) {    
  dispDev.type = ipu_display_panel;
  dispDev.width = XGA_FW;
  dispDev.height = XGA_FH;
  
  ipu_setup();
  ipu_panel_enable(dispDev.type);
}

ipu_setup

This function sets the ipu display channel path, including IDMAC→DMFC→DP→DC→DI→LCD.

The following image available at the official IPU doc, shows the channel path:

In our code, for VGA, only the idmac, dc and di need to be configured:

void ipu_setup(void) {
  ipu_sw_reset(1000); // reset ipu by SRC(system reset controller)
  
  idmac_config(); // Image DMA Controler
  dc_config();    // Display Controller
  di_config();    // Display Interface
  ipu_enable_display(); // enable both di0 and di1
}

ipu_panel_enable

This function enables the display panel by resetting it and providing the backlight.

void ipu_panel_enable(int panel_type_sel) {
  if (dispDev.init_status & (1 << panel_type_sel)) {
      cprintf("the panel has been initialized!!\n");
      return;
  } else {
      dispDev.init_status |= (1 << panel_type_sel);
  }
  
  vga_tve_iomux_config(); // VGA iomux 
  vga_tve_clk_setting();  // VGA clock setting
  vga_tve_config();       // VGA config
}