接下来,我修改了一些配置,主要是参考老到内核中到配置,将其添加到新到内核中。
比如加入了LED的配置和支持,同步也修改了板子到资源初始化文件等,启动内核看到了:
Registered led device:lcd1
Registered led device:lcd2
Registered led device:lcdB
Registered led device:lcd3
看到板子上对应到几个红灯灭了,没有然后,因为挂在rootfs没有全部起来。
然后我添加了LCD驱动,添加方法是直接修改beagle对应的LCD驱动,其它到都不改,当然内核中要添加相关选项,我把lcd,touchscreen等相关选项加入。然后,修改:lcd_omap3beagle.c,在linux-03.00.01.06_baegle/drivers/video/omap下。
将老驱动中到一些宏定义,GPIO等,copy过来:
#define DVI // wpl add
#define LCD_PANEL_ENABLE_GPIO 170
#define twl4030_i2c_write_u8 twl_i2c_write_u8
#ifdef DVI
#define LCD_XRES 1280
#define LCD_YRES 720
#define LCD_PIXCLOCK 74250 /* in kHz */
#else
#define LCD_XRES 480
#define LCD_YRES 272
#define LCD_PIXCLOCK 10000 /* in kHz */
#endif
然后,顺着驱动初始化,来到omap3beagle_panel_probe这个主要到修改点,其中调用, omapfb_register_panel(&omap3beagle_panel);
到,omap3beagle_panel这个结构:
.name = "omap3beagle",
#ifndef DVI
.config = OMAP_LCDC_PANEL_TFT | OMAP_LCDC_INV_VSYNC | OMAP_LCDC_INV_HSYNC,
#else
.config = OMAP_LCDC_PANEL_TFT, /*| OMAP_LCDC_HSVS_OPPOSITE*/
//| OMAP_LCDC_HSVS_RISING_EDGE | OMAP_LCDC_HSVS_OPPOSITE,
#endif
#ifndef DVI
.bpp = 16,
.data_lines = 24,
.x_res = LCD_XRES,
.y_res = LCD_YRES,
.hsw = 41, /* hsync_len (4) - 1 */
.hfp = 2, /* right_margin (4) - 1 */
.hbp = 2, /* left_margin (40) - 1 */
.vsw = 10, /* vsync_len (2) - 1 */
.vfp = 2, /* lower_margin */
.vbp = 2, /* upper_margin (8) - 1 */
#else
/*********** devkit9000 config *******************/
.bpp = 16,
.data_lines = 24,
.x_res = LCD_XRES,
.y_res = LCD_YRES,
.hsw = 40, /* hsync_len (4) - 1 */
.hfp = 110, /* right_margin (4) - 1 */
.hbp = 220, /* left_margin (40) - 1 */
.vsw = 5, /* vsync_len (2) - 1 */
.vfp = 20, /* lower_margin */
.vbp = 5, /* upper_margin (8) - 1 */
#endif
.pixel_clock = LCD_PIXCLOCK,
.init = omap3devkit9100_panel_init,
.cleanup = omap3devkit9100_panel_cleanup,
.enable = omap3devkit9100_panel_enable,
.disable = omap3devkit9100_panel_disable,
.get_caps = omap3devkit9100_panel_get_caps,
这些,是一些LCD属性,比如宽高像素到初始化,以及初始化,清屏等操作函数指针到初始化。
接下来,当然是把这些init,cleanup对应到函数都拷贝过来。
编译中,出现twl4030_i2c_write_u8 未定义到错误,查查内核代码,发现已经变了, twl_i2c_write_u8,所以在文件头加上:
#define twl4030_i2c_write_u8 twl_i2c_write_u8
编译,出来以后启动,发现小企鹅变得很长,屏幕乱闪,怀疑刷新频率等不对。
再看驱动代码:
#ifdef DVI
#define LCD_XRES 1280
#define LCD_YRES 720
#define LCD_PIXCLOCK 74250 /* in kHz */
#else
#define LCD_XRES 480
#define LCD_YRES 272
#define LCD_PIXCLOCK 10000 /* in kHz */
#endif
而其中竟然是: #define DVI
屏蔽掉,编译,启动,OK。