用menuconfig进去Device Drivers -->Input device support --->Touchscreen --->目录一看傻眼了,核是
自己配的,TOUCHSCREEN驱动那么多选项也不知道哪个适合我的板子。搞不好一个都不适合。自己写
驱动?不太可能,作为这么新的手写如此精辟的驱动估计写一个月都够呛。好在友善官网提供的linux2.6.29
的核中含驱动源码。只需移植过来,再慢慢研究。
首先把友善2.6.29/drivers/input/touchscreen/s3c2410_ts.c拷到
linux2.6.32.2对应的目录下:/drivers/input/touchscreen/
并修改如下:
1、添加头文件 #include <linux/gpio.h> 否则会出现 error: implicit declaration of function 's3c2410_gpio_cfgpin'
2、修改
static inline void s3c2410_ts_connect(void)
{
s3c2410_gpio_cfgpin(S3C2410_GPG(12), S3C2410_GPG12_XMON);
s3c2410_gpio_cfgpin(S3C2410_GPG(13), S3C2410_GPG13_nXPON);
s3c2410_gpio_cfgpin(S3C2410_GPG(14), S3C2410_GPG14_YMON);
s3c2410_gpio_cfgpin(S3C2410_GPG(15), S3C2410_GPG15_nYPON);
}
下面如何在menuconfig菜单上显示有该项呢?
查看2.6.29/drivers/input/touchscreen/Kconfig文件,里面有这样一段文字:
config TOUCHSCREEN_S3C2410
tristate "Samsung S3C2410 touchscreen input driver"
depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN && MINI2440_ADC
help
Say Y here if you have the s3c2410 touchscreen.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called s3c2410_ts.
将其拷到2.6.32.2/drivers/input/touchscreen/Kconfig相应的地方。
并在2.6.32.2/drivers/input/touchscreen/Makefile添加:
obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
#make menuconfig
发现Device Drivers -->Input device support --->Touchscreen --->里面还是没有S3C2410 touchscreen
驱动的选项。何故?
打开Kconfig仔细一看,原来添加的那段文字有这么一句:
“depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN && MINI2440_ADC”
就是说该项依赖这几项:
ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN && MINI2440_ADC
也就是说这几项全部选上了才会出现S3C2410 touchscreen驱动项。
再仔细一看MINI2440_ADC应该是AD驱动,一想也是,要使用触摸屏肯定是要用到AD的。
接着又在2.6.29/drivers/char下找到mini2440_adc.c、s3c24xx-adc.h(开始没拷这个以致编译时发生错误)
两个文件。同样拷到2.6.32.2相应目录/drivers/char下。
并在mini2440_adc.c添加头文件#include <linux/sched.h>
为了让menuconfig出现MINI2440_ADC选项,将2.6.32.2/drivers/char/Kconfig的这段文字做出如下修改,拷到
2.6.29/drivers/char/Kconfig里:
config MINI2440_ADC
bool "ADC driver for FriendlyARM Mini2440/QQ2440 development boards"
(depends on MACH_FRIENDLY_ARM_MINI2440 ) //删去该行
(default y if MACH_FRIENDLY_ARM_MINI2440 ) //删去该行
help
this is ADC driver for FriendlyARM Mini2440/QQ2440 development boards
Notes: the touch-screen-driver required this option
并在2.6.29/drivers/char/Makefile添加:
obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o
下面修改2.6.32.2/drivers/input/touchscreen/Kconfig
将从2.6.29/drivers/input/touchscreen/Kconfig拷过来的那段文字改为:
config TOUCHSCREEN_S3C2410
tristate "Samsung S3C2410 touchscreen input driver"
depends on INPUT && MINI2440_ADC //修改了该行
help
Say Y here if you have the s3c2410 touchscreen.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called s3c2410_ts.
好了,接着退到2.6.32.2/的顶层
#make menuconfig
于是在Device Drivers -->
Character devices --->
出现了 []ADC driver for FriendlyARM Mini2440/QQ2440 development boards
在 Device Drivers -->
Input device support --->
Touchscreen --->
出现了 <>Samsung S3C2410 touchscreen input driver