- 论坛徽章:
- 0
|
由于触摸屏和电池都要用到ADC,所以我打算把触摸屏驱动中所有的ADC操作都提取出来,做一个公用的函数(ADCConvert())来让这两个驱动使用,然后将函数中的ADC操作用mutex_lock实现互斥:(这个公用的函数放在ADC的驱动文件中)
extern int ADCConvert(int cmd){
mutex_lock(&adc_mutex);
switch(cmd) {
case 1:
.....ADC寄存器的操作,取样,转换,上报的过程
case 2:
writel(0xd3, ts_base+S3C_ADCTSC);
}
mutex_unlock(&adc_mutex);
}
但现在碰到一个问题,在触摸屏驱动的probe函数中有一个设置按下中断检测的操作:writel(0xd3, ts_base+S3C_ADCTSC);。我把这句代码移到ADCConvert(2)中,取而代之的是对这个函数的调用。但函数调用后S3C_ADCTSC的寄存器的内容并没有改变(没有变为0xd3);如果把锁去掉,S3C_ADCTSC寄存器 的值就能设置成0xd3,请各位帮忙分析一下。。。谢谢 |
|