要讓 s3c2440 LCD 正常顯示要修改 LCD 相關暫存器的設定,設定部份都是參考 Eboot 的設定。
至於為甚麼要這樣設定,我也不是很清楚。
修改 LCD driver info:
linux/arch/arm/mach-s3c2440/mach-smdk2440.c
至於為甚麼要這樣設定,我也不是很清楚。
修改 LCD driver info:
linux/arch/arm/mach-s3c2440/mach-smdk2440.c
/* LCD driver info */
static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP |
S3C2410_LCDCON5_INVVDEN |
S3C2410_LCDCON5_INVVCLK,
.type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
.pixclock = 166667, /* HCLK 60 MHz, divisor 10 */
.xres = 240,
.yres = 320,
.bpp = 16,
.left_margin = 8,
.right_margin = 4,
.hsync_len = 4,
.upper_margin = 6,
.lower_margin = 8,
.vsync_len = 2,
};
static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
.displays = &smdk2440_lcd_cfg,
.num_displays = 1,
.default_display = 0,
.gpccon = 0xaa8096a9,
.gpccon_mask = 0xffc0ffff,
.gpcup = (0x1f<<11) | (0xff<<0),
.gpcup_mask = 0x00000000,
.gpdcon = 0xaa80aaa0,
.gpdcon_mask = 0xffc0fff0,
.gpdup = (0x1f<<11) | (0x3f<<2),
.gpdup_mask = 0x00000000,
.lpcsel = 0xc0c,
}; 將 LCD 暫存去設定改成上面的值,畫面就可以正常顯示。
*ps: lpcsel 就是 TCONSEL
現在遇到的問題:
S3C2440 LCD 設定必須使用 SPI0 ,而 kernel 的 LCD Driver 並沒有實做出來。
也就是說現在透過 SPI0 設定 LCD 的部份,是由 vivi 完成的。
如果說 vivi 沒有初始化 LCD,則進入 kernel 後 LCD 也不會正常顯示。
所以必須在 kernel LCD driver 加入 spi0 的設定,讓 kernel 不用透過 vivi 也能讓 LCD 正常顯示。
S3c2440 SPI0 相關 GPIO 腳位:
- GPE11 ---> SPIMISO0
- GPE12 ---> SPIMOSI0
- GPE13 ---> SPICLK0
- GPC5 ----> OUTPUT ??
- GPC6 ----> OUTPUT ??
1 comment(s) to... “LCD Driver 筆記”
1 comments:
需要查閱 smdk2440 的 schematic。
openmoko GTA02 (based on smdk2440) 的定義是:
GPC5 / LPCOE / LCD_LPCOE
GPC6 / LPCREV / LCD_LPCREV
另外,我們有個簡易的工具可列印 GPIO 狀態:
http://svn.openmoko.org/trunk/src/target/gpio/
Ref: http://svnweb.openmoko.org/trunk/doc/hardware/SMDK2440/gpio.txt?rev=1921&view=markup
Post a Comment