[Armadillo:05205] 500FXでのI2Cデバイスドライバ

naosan email@hidden
2010年 5月 21日 (金) 11:43:13 JST


直江です。いつもお世話になっております。
毎度質問ばかりで恐縮です。

500FXにAndroid1.6の環境をいれ、さらにカーネルに独自のデバイスドライバを
組み込み、それにてAndroidが起動することまではできました。
しかし、この独自デバイスドライバがどうもまともに動いていません。

このデバイスはI2C制御によるもので、実は他の環境(機器)ではまともに(と思っていま
したが)動作していたものです。(デバイスとしては正規の動作をしていましたので)
他の環境とは、linux-2.6.29ベースで、それのdrivers/i2c/chipsにあったtsc2003.cと
いうタッチスクリーンICのソースを参考とし、改造して使っていました。

今回、このドライバをあらためて500FXに組み込み(menuconfigにて)、ビルドして
みましたが、ビルドに際し、以前と異なり、以下のエラーがでました。
‘struct input_dev’ has no member named ‘private’
これに関しては、
http://www.linuxquestions.org/questions/programming-9/%91struct-input_dev%92-has-no-member-named-%91private%92-error-message-when-making-file-723437/
を参考に対策し、ビルド自体は成功してます。

で、実際に動作させてみると、なぜか、どうも2回ずつ呼び出されているようなのです。
以下、そのログです。(XXXはデバイス名です)
XXX_i2c_detect
XXX_i2c_detect: probing address 0x##
XXX:ProductID = ** <--- これはデバッグ用に出力させたもので正規の値が読み出せてます。
XXX initialize
input: XXX as /devices/virtual/input/input2
XXX_i2c_detect: device address 0x## attached.
XXX_i2c_detect
XXX_i2c_detect: probing address 0x##
XXX:ProductID = 0  <---- 正規の値ではないです。どこからひろってきたのか???
XXX initialize
input: XXX as /devices/virtual/input/input3
XXX_i2c_detect: device address 0x## attached.

XXX device open
XXX device open
mxc_i2c_writebytes: fail.
mxc_i2c_writebytes: fail.
mxc_i2c_readbytes: fail.
mxc_i2c_writebytes: fail.
mxc_i2c_writebytes: fail.
mxc_i2c_writebytes: fail.

原因はわかっていないのですが、気になる点としては、参考としたtsc2003.cというソースが
I2Cデバイス制御規約としては古いタイプの形式で、Documentation/i2c/writing-clientsで
定義されている形式以前の形式となっています。
しかし、他の環境(linux-2.6.29)ではビルドも、また動作もできていたので問題ないと認識
していたのですが。

そもそも根本がわかっていないですが、
・新規の形式ならまだしも、古い形式での記述において、カーネルバージョンの新しい
 (2.6.29)でOKで古いバージョン(2.6.26)でNGとなるようなことはあり得るのでしょか?
・古い形式のせいかどうかは定かでないですが、2回読み込んでしまう原因をご存知ないでしょうか?

まだまだ勉強不足でなかなか自力解決できずに恐縮ですが、なにとぞお力添えをいただきたく
よろしくお願いいたします。

過去ログで参考としてtlv320aic.cを雛形にするのがよいと見かけました。
最悪作り替えかなとも考えていますが、今の資産を使えたら使いたいなとの思いでいます。
というよりは、ターゲット(機器)が変わるごとにドライバを作り替えなければならないもの
なのか、半信半疑でいます。



armadillo メーリングリストの案内