Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41853
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-30 10:34
文章分类
文章存档

2014年(42)

我的朋友

分类: LINUX

2014-11-19 19:07:16

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设备:
加入必要的头文件:
#include

在xc2440_devices[ ]结构中加入:
&s3c_device_adc,
&s3c_device_hwmon,

构建HWMON设备平台数据结构:
  1. /* ADC */
  2. static struct s3c_hwmon_pdata xc2440_hwmon_info __initdata = {
  3.     .in[0] = &(struct s3c_hwmon_chcfg) {
  4.         .name        = "adc-ch0",
  5.         .mult        = 3300,
  6.         .div        = 512,
  7.     },
  8.     .in[1] = &(struct s3c_hwmon_chcfg) {
  9.         .name        = "adc-ch1",
  10.         .mult        = 3300,
  11.         .div        = 1024,
  12.     },
  13.     .in[2] = &(struct s3c_hwmon_chcfg) {
  14.         .name        = "adc-ch2",
  15.         .mult        = 3300,
  16.         .div        = 512,
  17.     },
  18.     .in[3] = &(struct s3c_hwmon_chcfg) {
  19.         .name        = "adc-ch3",
  20.         .mult        = 3300,
  21.         .div        = 1024,
  22.     },
  23. };

在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,
  1. config S3C_DEV_HWMON
  2.     bool
  3.     default y
  4.     help
  5. Compile in platform device definitions for HWMON

配置内核,支持hwmon驱动:
  1. System Type --->
  2. [*] ADC common driver support
  3. Device Drivers --->
  4. <*> Hardware Monitoring support --->
  5. <*> Samsung built-in ADC
  6. [*] 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转换值
阅读(565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~