[Armadillo:03991] Re: armadillo-500 sysfs経由でI2Cドライバ制御

g-kihara email@hidden
2009年 1月 29日 (木) 19:14:01 JST


木原です。
お世話になっています。

カーネルの更新を行い、焼きなおしたところ、
I2C1アダプターがみえるようになり、I2C通信が可能になりました。
ご多忙の中、丁寧に対応していただきありがとうございました。

ところで、気になることがあるのですが、
i2c_driver構造体のなかで設定しているXXX_attach()
が2回呼ばれているのですが、これはこういうものなのでしょうか?

http://m.linuxjournal.com/article/7252

にある、

「After the I2C chip driver is registered, the attach_adapter function 
callback is called when an I2C bus driver is loaded. This function checks to 
see if any I2C devices are on this I2C bus to which the client driver wants 
to attach.」

の説明文を見ると、the attach_adapter機能は、クライアントドラバがアタッチしようとする
I2Cバス上にI2Cデバイスが存在しているかどうかをみるためにチェックするとあるので、 

Adapterの数だけXXX_attach() が呼ばれているのでしょうか?

I2C通信を行うチャネルはI2C1だけなので、それ以外についてチェックする
のは無駄処理のような気がしますが・・・


-----------------------------------------------------------
【現在のarmadillo-500ボードの状況】

[email@hidden (ttymxc0) /home/ftp/pub]# uname -r
2.6.18-at10
[email@hidden (ttymxc0) /home/ftp/pub]#

[email@hidden (ttymxc0) /home/ftp/pub]# dmesg | grep I2C
i2c_armadillo5x0: registerd new I2C adapter 'Armadillo-5x0 I2C1 Adapter'
i2c_armadillo5x0: registerd new I2C adapter 'Armadillo-5x0 I2C2 Adapter'
[email@hidden (ttymxc0) /home/ftp/pub]#

[email@hidden (ttymxc0) /home/ftp/pub]# cat /proc/iomem
43f80000-43f83fff : i2c_armadillo5x0.0 <---------
・・・・・
43f98000-43f9bfff : i2c_armadillo5x0.1<---------
・・・
80026000-8032785b : Kernel text
80328000-803dc043 : Kernel data
a0000000-a3ffffff : armadillo5x0-nor.0
・・・・
[email@hidden (ttymxc0) /home/ftp/pub]#
-----------------------------------------------------------
static int
i2ctest_attach(struct i2c_adapter *adap)
{
        int ret;
        char tx[4];
        char rx[3];

        rx[0]=0;
        rx[1]=0;
        rx[2]=0;

        printk("i2ctest_attach is called\n");

        ret = i2c_probe(adap, &addr_data, &i2ctest_detect_client);

        // test
        tx[0] = 0xE1;
        tx[1] = 0x22;
        tx[2] = 0x33;
        tx[3] = 0x44;
        i2ctest_TxData(tx, 4);

        rx[0] = 0xE1;
        i2ctest_RxData(rx, 3);
        printk("rx=%x\n", rx[0]);
        printk("rx=%x\n", rx[1]);
        printk("rx=%x\n", rx[2]);

        return ret;
}

-----------------------------------------------------------

以上



----- Original Message ----- 
From: "日本電子システムテクノロジー/高木" <email@hidden>
To: "Armadillo series general discussion list" 
<email@hidden>
Sent: Tuesday, January 27, 2009 3:34 PM
Subject: [Armadillo:03980] Re: armadillo-500 sysfs経由でI2Cドライバ制御


> 高木です
> お世話になっています。
>
> linux-2.6.18-at2の環境でI2C1を使用する場合は独自に
> 初期化等をする必要があるかと思います。
> そのままではSW_MUX、PAD_CTRLの設定だけでなくI2C1を
> 有効にする処理もされていないようです。
>
> また、linux-2.6.18-at3でI2C通信制御不具合の修正をしているようですので
> カーネルを更新されるのが良いかと思います。
>
> ちなみに、私はlinux-2.6.18-at8の環境を使用しています。
>
> 以上
>
>
>> 木原です。
>> お世話になっています。
>>
>> ご指摘のように、linux-2.6.18-at2です。
>>
>> email@hidden:~$ ls *tar*
>> atmark-dist-20071018.tar.gz  linux-2.6.18-at2.tar.gz
>> email@hidden:~$ uname -r
>> 2.6.18-5-686
>> email@hidden:~$
>>
>>
>> http://armadillo.atmark-techno.com/files/downloads/armadillo-500/source/kernel/linux-2.6.18-at10.tar.gz
>>
>>
>> http://armadillo.atmark-techno.com/files/downloads/armadillo-500/image/linux-a500-1.05.bin.gz
>>
>>
>> を落としてきてバージョンアップを行うことにします。
>>
>> ご教示頂きありがとうございました。
>>
>>
>>> また、この版でI2Cの送受信動作の修正がされています。
>>
>> 以前、Linux標準関数を使わずに、ioremap(),write() read()をつかって
>> 自作のI2Cデバイスドライバを作成したときには、linux-2.6.18-at2環境下
>> で、I2C1をつかって正常に通信制御できましたが、今回のように
>> i2c_armadillo5x0を使用する場合には、linux-2.6.18-at2環境下では
>> だめということでしょうか?
>>
>>
>> 以上
>>
>>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo 




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