Dingoo A320 ⇒ OpenDingux

修正ILI9338青藍色問題


入手A320掌機後,司徒很期待GBA模擬器可以運行的跟GBA-SP掌機(AGS-101)一樣好,但是,司徒發現原生系統的GBA模擬器,FPS速度實在是太快了,而且顏色過淡,比起GBA-SP掌機,真是天差地遠,就算是使用Dingux系統,也是一樣存在這樣的問題。司徒後來發現原生系統的GBA模擬器,若開啟聲音,它的FPS就可以下降的跟GBA-SP很接近,加上原生系統的濾波效果比Dingux系統好很多,所以原生系統的GBA模擬器算是比較可以接受的,至於顏色鮮豔問題,這應該是跟顯示屏比較有關係,看來應該是極限了!雖然已經知道是顯示屏的問題,司徒還是上網搜尋ILI9338的顯示問題,發現有很多人在討論這個顯示屏的青藍色問題,發現目前只有OpenDingux有針對軟體做顏色補償,雖然解法僅是針對顏色調整,不過為了有比較好的遊戲視覺,司徒還是想嘗試一下,司徒只好重新安裝OpenDingux系統,並且把Dingux系統的GBA模擬器拿去OpenDingux系統玩,發現顏色真的比較好,因此使用者如果想讓顏色好看一點的話,建議換OpenDingux系統。

原始顏色


藍色亮度調整60%


藍色亮度調整75%


程式碼位置如下:

$ vim drivers/video/jz4740_slcd_panels.c +329
static void ili9338_set_color_table(struct jzfb *jzfb)
{
  unsigned int c;
  struct device *dev = &jzfb->pdev->dev;

  /* Set up a custom color lookup table.
   * This helps to fix the 'blueish' display on some devices. */
  send_panel_command(jzfb, 0x2d);

  for (c = 0; c < 3; c++) {
    unsigned int i, n, v, s;
    n = c == 1 ? 64 /* 6 bits G */ : 32 /* 5 bits R/B */;
    s = jzfb->rgb[c] * (((63 << 24) - 1) / (100 * (n - 1)));
    v = 0;
    for (i = 0; i < n; i++, v += s)
      send_panel_data(jzfb, (v >> 24) + ((v >> 23) & 1));
  }

  dev_info(dev, "ILI9338 color table initialized with R=%u G=%u B=%u\n",
        jzfb->rgb[0], jzfb->rgb[1], jzfb->rgb[2]);
}


返回上一頁