所以底層 adc reading 的 code 在:
drivers/mxc/pmic/mc13892/pmic_adc.c
function : PMIC_STATUS mc13892_adc_convert(t_adc_param *adc_param)
這個 mc13892_adc_convert( )是所有adc 共用。
其中 touch driver 使用的地方在
PMIC_STATUS mc13892_adc_read_ts(t_touch_screen *ts_value, int wait_tsi)
再上層是:PMIC_STATUS pmic_adc_get_touch_sample(t_touch_screen *touch_sample, int wait)
{
if (mc13892_adc_read_ts(touch_sample, wait) != 0)
return PMIC_ERROR;
if (0 == pmic_adc_filter(touch_sample))
return PMIC_SUCCESS;
else
return PMIC_ERROR;
}
pmic_adc_fileter 是算出touch 的壓力大小,決定是不是一個 valid touch。其中有小小的作一次 2 samples avering.
linux touch driver 的 model driver 在 input/touchscreen/mxc_ts.c
其中的 ts_thread 會呼叫 pmic_adc_get_touch_sample( ).
這邊的 code 好像是用 polling 的方式(msleep(20)).只是 pmic_adc_get_touch_sample( ) 是 interrput driven,所以當沒有 touch adc interrput 時,會 return false。
這個 driver follow linux input driver model,和 keyboard 類似,在 / 下 create 一個 node作為與上層 ap 的 interface。
上層 :
沒有留言:
張貼留言