При компиляции с настройками по умолчанию идет неправильное отображение цветов, так как тип дисплея не очень совпадает с нашим. Попробуем описать, что нужно изменить в MiniOS для нашего дисплея. Путем дизассемблирования оригинальной прошивки были получены параметры нашего дисплея. В файле /mtv_50/jz4750l_taurus.mak выделим наш дисплей в новый тип, изменив значение LCDTYPE на 7.
Далее в файле /soc_src/jz4725/drv/lcd/lcdarg.c предлагается создать следующую секцию для нашего типа дисплея:
#if (LCDTYPE == 7)
.lcd_mode =
{
.vendor = "ZD-3501BL",
.type = "tft", 480, 272, 60, 40, 8, 4, 0, 2, 0,
.mode_bitmask = (unsigned int *)0,
.cfg = MODE_TFT_GEN | LCDCFG_NEWDES | HSYNC_N | VSYNC_N | LCDCFG_RECOVER,
.ctrl = LCD_CTRL_BST_16,
},
.osd_mode =
{
.osd_cfg = LCD_OSDC_OSDEN | // Use OSD mode
LCD_OSDC_ALPHAEN | // enable alpha
LCD_OSDC_ALPHAMD | // alpha mode: 0, alpha register; 1, each pixel
LCD_OSDC_F0EN | // enable Foreground0
LCD_OSDC_F1EN, // enable Foreground1
.osd_ctrl = 0, // disable ipu,
.rgb_ctrl = 0,
.bgcolor = 0x000000, // set background color Black
.colorkey0 = 0, // disable colorkey
.colorkey1 = 0, // disable colorkey
.alpha = 0xa0, // alpha value
.ipu_restart = 0x8000085d, // ipu restart
.fg_change = FG_CHANGE_ALL, // change all initially
.foreground0 = {32, 0, 0, 0, 0}, // bpp, x, y, w, h
#if (LCD32BPP)
.foreground1 = {32, 0, 0, 480, 272}, // bpp, x, y, w, h
#else
.foreground1 = {16, 0, 0, 480, 272}, // bpp, x, y, w, h
#endif
}
#endif
Здесь же, в файле /soc_src/jz4725/drv/lcd/auo_a043fl01_v1.c заменить в начале условие #if (LCDTYPE==4) на #if (LCDTYPE==7)
А так же в функции __gpio_as_lcd_bit() перевести на использование 16-ти бит: void __gpio_as_lcd_bit()
{
__gpio_as_lcd_16bit();
}
Этого достаточно, чтобы дисплей начал корректно отображать цвета.
Подсветка
Для корректной работы управлением яркости подсветки необходимо в том же файле /soc_src/jz4725/drv/lcd/auo_a043fl01_v1.c заменить значение PWM_FREQ на 250
Затем в функции lcd_board_init() заремарить или удалить блоки LCD_POWER_PIN и LCD_STANDBY_PIN. Чтобы получилась такая функция: void lcd_board_init(unsigned int bReInit)
{
__gpio_as_lcd_bit();
#ifdef LCD_RESET_PIN
// Hardware Reset
gpio_set_dir(LCD_RESET_PIN, 1, LCD_RESET_LEVEL);
mdelay(20); // The Delay should be > 10ms.
gpio_set_dir(LCD_RESET_PIN, 1, !LCD_RESET_LEVEL);
mdelay(5); // The Delay should be > 1ms.
#endif
if (!bReInit)
{
pwm_init(LCD_BACKLIGHT_PWM_CHN, PWM_FREQ, 2);
}
}
В файле /soc_src/jz4725/include/PlatformCfg/4750L_taurus_cfg.h заменить значение LCD_RESET_PIN на GPIO_GROUP_D + 24
#define LCD_RESET_PIN (GPIO_GROUP_D + 24) //edit for Vogue
|