- 论坛徽章:
- 0
|
//只是根据touchscreen和led驱动改的而已,呵呵。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME "adc"
#define ADC_MAJOR 238
struct s3c2410_ts_mach_info {
int delay;
int presc;
int oversampling_shift;
}adc_info = {0xff,19};
static void __iomem *base_addr;
static inline void init_adc_gpio(void)
{
/*
for (i = 0; i 7) { //只能选择0~7八个通道之一
return -EINVAL;
}
val = readl(base_addr+S3C2410_ADCCON);
val &= ~S3C2410_ADCCON_MUXMASK;
val |= S3C2410_ADCCON_SELMUX(arg);
writel(val,base_addr+S3C2410_ADCCON);
// printk(DEVICE_NAME "ADCCON:%x\n",val);
return 0;
default:
return -EINVAL;
}
}
static struct file_operations my_adc_fops = {
.owner = THIS_MODULE,
.ioctl = my_adc_ioctl,
};
static struct clk *adc_clock;
static int __init my_adc_init(void)
{
int ret;
int val;
struct s3c2410_ts_mach_info *info = &adc_info;
ret = register_chrdev(ADC_MAJOR, DEVICE_NAME, &my_adc_fops);
if (ret presc&0xff) > 0)
writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
base_addr+S3C2410_ADCCON);
else
writel(0,base_addr+S3C2410_ADCCON);
//选择normal模式,而不是stadby模式
val = readl(base_addr+S3C2410_ADCCON);
val &= ~S3C2410_ADCCON_STDBM;
writel(val,base_addr+S3C2410_ADCCON);
//不使用touchscreen
val = readl(base_addr+S3C2410_ADCTSC);
val &= (1
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93291/showart_2072080.html |
|