ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年5月17日 星期二

touch driver tracing

這個 platform 的 touch 是由 PMIC 的 ADC 負責的。
所以底層 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。

上層 :

沒有留言:

標籤

網誌存檔