====== 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 [[http://people.freebsd.org/~gonzo/arm/iMX6-IPU.pdf|IPU doc]], shows the channel path:{{ :ipu-specifics:ipu.png?nolink&700 |}}
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
}