linux内核自带s3c2440的ADC驱动,由于触摸屏驱动也依赖ADC驱动,所以要先把ADC驱动加到内核中。
我们先来移植HWMON驱动,HWMON是Hardware Monitoring缩写,是用于检测设备状态的一种设备,比如电脑上检测测风扇转速、CPU温度的设备,实际上就是一些传感器,ADC也属于这样的设备。
在XC2440上的HWMON设备就是8通道的ADC,由于4~7通道是供TouchPanel用的,只使用前4个,ADC0和ADC1外接电位器模拟电压输入,ADC2和ADC3以插针形式引出
S3C2440的HWMON驱动文件是drviers/hwmon/s3c-hwmon.c,我们也只需要在BSP中构建platform_device和platform_data
在mach-xc2440.c中添加HWMON设备:
加入必要的头文件:
在xc2440_devices[ ]结构中加入:
&s3c_device_adc,
&s3c_device_hwmon,
构建HWMON设备平台数据结构:
- /* ADC */
-
static struct s3c_hwmon_pdata xc2440_hwmon_info __initdata = {
-
.in[0] = &(struct s3c_hwmon_chcfg) {
-
.name = "adc-ch0",
-
.mult = 3300,
-
.div = 512,
-
},
-
.in[1] = &(struct s3c_hwmon_chcfg) {
-
.name = "adc-ch1",
-
.mult = 3300,
-
.div = 1024,
-
},
-
.in[2] = &(struct s3c_hwmon_chcfg) {
-
.name = "adc-ch2",
-
.mult = 3300,
-
.div = 512,
-
},
-
.in[3] = &(struct s3c_hwmon_chcfg) {
-
.name = "adc-ch3",
-
.mult = 3300,
-
.div = 1024,
-
},
-
};
在xc2440_machine_init函数中加入:
s3c_hwmon_set_platdata(&xc2440_hwmon_info);
函数s3c_hwmon_set_platdata实现文件为:/arch/arm/plat-samsung/dev-hwmon.c
修改该目录下的Kconfig文件:在S3C_DEV_HWMON选项下加入default y,
- config S3C_DEV_HWMON
- bool
- default y
- help
- Compile in platform device definitions for HWMON
配置内核,支持hwmon驱动:
- System Type --->
-
[*] ADC common driver support
-
Device Drivers --->
-
<*> Hardware Monitoring support --->
-
<*> Samsung built-in ADC
-
[*] Include raw channel attributes in sysfs
启动时打印:
s3c-adc s3c24xx-adc: attached adc driver
查看设备:
#cd /sys/class/hwmon/hwmon0/device
在这个目录下有8个名为adcx_raw的文件(x=0,1,2......),分别对应s3c2440的8路ADC
执行#cat adc0_raw 查看该通道的AD转换值
阅读(6095) | 评论(0) | 转发(4) |