移植OK6410 LCD驱动
2024-09-30 来源:cnblogs
1.本次移植过程选择 linux-2.6.28 lcd驱动为参考移植到 linux-2.6.34 ok6410 开发板上。
2.移植过程
主要以给内核增加驱动的思想,在/driver/video/ 下增加 samsung目录,提取 2.6.28 中驱动相关源代码,将源代码复制到samsung 下。
修改 /driver/video 下的Makefile 文件,增加进入samsung目录编译的编译条目
obj-$(CONFIG_FB_S3C) += samsung/
修改 /driver/video 下的Kconfig 文件,增加 /samsung/Kconfig 配置条目
comment 'Frame buffer hardware drivers'
depends on FB
config FB_S3C
tristate 'S3C Framebuffer Support'
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
depends on FB && (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX)
default n
---help---
TBA
choice
depends on FB_S3C
prompt 'Select LCD Type'
default FB_LIYUTAI_WXCAT35
config FB_WXCAT35
bool 'WXCAT35 320x240'
---help---
TBA
config FB_WXCAT43
bool 'WXCAT43 480x272'
---help---
TBA
config FB_AT056
bool 'AT056 640x480'
---help---
TBA
config FB_AT070
bool 'AT070 800x480'
---help---
TBA
config FB_AT080
bool 'AT080 800x600'
---help---
TBA
config FB_S3C_VGA800
bool 'VGA800 800x600'
---help---
TBA
config FB_S3C_XGA
bool 'XGA 1024x768'
---help---
TBA
endchoice
config FB_S3C_BPP
tristate 'Advanced options for S3C Framebuffer'
depends on FB_S3C
default n
---help---
TBA
choice
depends on FB_S3C_BPP
prompt 'Select BPP(Bits Per Pixel)'
default FB_S3C_BPP_16
config FB_S3C_BPP_8
bool '8 BPP'
---help---
TBA
config FB_S3C_BPP_16
bool '16 BPP'
---help---
TBA
config FB_S3C_BPP_24
bool '24 BPP(XRGB888)'
---help---
TBA
config FB_S3C_BPP_28
bool '28 BPP(ARGB4888)'
---help---
TBA
config FB_S3C_BPP_32
bool '32 BPP(ARGB8888)'
---help---
TBA
endchoice
config FB_S3C_NUM
int 'Number of Framebuffers'
depends on FB_S3C_BPP && (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX)
default '1'
---help---
TBA
config FB_S3C_VIRTUAL_SCREEN
bool 'Enable Virtual Screen'
depends on FB_S3C_BPP
default n
---help---
TBA
config FB_S3C_DOUBLE_BUFFERING
bool 'Enable Double Buffering'
depends on FB_S3C_BPP
default n
---help---
TBA
3. 增加 platform_device
找到移植系统时增加的板文件 mach-ok6410.c ,增加 lcd device
/* LCD Controller */
static struct resource s3c_lcd_resource[] = {
[0] = {
.start = S3C64XX_PA_LCD,
.end = S3C64XX_PA_LCD + SZ_1M - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_LCD_VSYNC,
.end = IRQ_LCD_SYSTEM,
.flags = IORESOURCE_IRQ,
}
};
static u64 s3c_device_lcd_dmamask = 0xffffffffUL;
struct platform_device s3c_device_lcd = {
.name = 's3c-lcd',
.id = -1,
.num_resources = ARRAY_SIZE(s3c_lcd_resource),
.resource = s3c_lcd_resource,
.dev = {
.dma_mask = &s3c_device_lcd_dmamask,
.coherent_dma_mask = 0xffffffffUL
}
};
再修改 struct platform_device *ok6410_devices[],增加
&s3c_device_lcd,
4.启动时出现小企鹅