日期:2014-05-16 浏览次数:20699 次
硬件平台:mini2440 + TD035STED4 软件平台:linux-2.6.32.2 日期:04/07/2012
首先看驱动模块的初始化函数:
/* drivers/video/s3c2410fb.c */
1119 int __init s3c2410fb_init(void)
1120 {
1121 int ret = platform_driver_register(&s3c2410fb_driver);
1122
1123 if (ret == 0)
1124 ret = platform_driver_register(&s3c2412fb_driver);
1125
1126 return ret;
1127 }
1128
1129 static void __exit s3c2410fb_cleanup(void)
1130 {
1131 platform_driver_unregister(&s3c2410fb_driver);
1132 platform_driver_unregister(&s3c2412fb_driver);
1133 }
初始化函数里面就注册了一个平台设备驱动。
再来看驱动模块卸载函数:
1129 static void __exit s3c2410fb_cleanup(void)
1130 {
1131 platform_driver_unregister(&s3c2410fb_driver);
1132 platform_driver_unregister(&s3c2412fb_driver);
1133 }
卸载函数里面注销平台设备驱动。
s3c2440自然采用的是s3c2410fb_driver,我们来看这个结构的定义:
1097 static struct platform_driver s3c2410fb_driver = {
1098 .probe = s3c2410fb_probe,
1099 .remove = s3c2410fb_remove,
1100 .suspend = s3c2410fb_suspend,
1101 .resume = s3c2410fb_resume,
1102 .driver = {
1103 .name = "s3c2410-lcd",
1104 .owner = THIS_MODULE,
1105 },
1106 };
我们看driver中的name字段为s3c2410-lcd,那自然去找与之对应的平台设备。
我们在devs.c中找到了这个平台设备的定义:
/* arch/arm/plat-s3c24xx/devs.c */
141 /* LCD Controller */
142
143 static struct resource s3c_lcd_resource[] = {
144 [0] = {
145 .start = S3C24XX_PA_LCD,
146 .end = S3C24XX_PA_LCD + S3C24XX_SZ_LCD - 1,
147 .flags = IORESOURCE_MEM,
148 },
149 [1] = {
150 .start = IRQ_LCD,
151 .end = IRQ_LCD,
152 .flags = IORESOURCE_IRQ,
15