Дисплей

При компиляции с настройками по умолчанию идет неправильное отображение цветов, так как тип дисплея не очень совпадает с нашим. Попробуем описать, что нужно изменить в MiniOS для нашего дисплея.

Путем дизассемблирования оригинальной прошивки были получены параметры нашего дисплея. В файле /mtv_50/jz4750l_taurus.mak выделим наш дисплей в новый тип, изменив значение LCDTYPE на 7.

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)

#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

#define 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






Comments