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

日本電子システムテクノロジー/高木 email@hidden
2009年 1月 16日 (金) 12:55:06 JST


高木です

以下は私が動作させたI2Cドライバの一部です。
参考になればと思います。

XXX_I2C_ADDRESS
 通信相手のデバイスがもつ8bitのアドレスです。
 1bit右シフトしているのは、最下位bitがRead/Writeのフラグであり
 通信時に自動的に処理されるためです。

I2C_CLIENT_INSMOD;
 必ず記述してください。
 各種変数を自動的に初期化してくれるおまじないです。


▼▼ ここから ▼▼

static int XXX_attach(struct i2c_adapter *adapter);
static int XXX_detach(struct i2c_client  *client);


static struct i2c_driver XXX_i2c_driver =
{
    .driver =
    {
        .owner = THIS_MODULE,
        .name = "XXX I2C Client",
    },
    .id             = I2C_DRIVERID_XXXX,
    .attach_adapter = XXX_attach,
    .detach_client  = XXX_detach,
};

static struct i2c_client XXX_i2c_client =
{
    .name   = "XXX I2C dev",
    .driver = &XXX_i2c_driver,
};

static unsigned short normal_i2c[] =
{
    (XXX_I2C_ADDRESS >> 1),
    I2C_CLIENT_END
};

I2C_CLIENT_INSMOD;




static int XXX_detect_client(struct i2c_adapter *adapter,
                             int address,
                             int kind)
{
    int ret_val;

    XXX_i2c_client.adapter = adapter;
    XXX_i2c_client.addr    = address;

    if (i2c_attach_client(&XXX_i2c_client))
    {
        XXX_i2c_client.adapter = NULL;
        printk(KERN_ERR "XXX_attach: i2c_attach_client failed\n");
        return -1;
    }

    return 0;
}


static int XXX_attach(struct i2c_adapter *adap)
{

    err = i2c_probe(adap, &addr_data, &XXX_detect_client);

    return err;
}


static __init int XXX_init(void)
{
    u8 err;

    gpio_sensor_active();

    err = i2c_add_driver(&XXX_i2c_driver);

    return err;
}

module_init(XXX_init);

▲▲ ここまで ▲▲

以上


> 高木です
> はじめまして
> 
> armadillo-500のカーネルではデフォルトでI2Cドライバは
> カーネル組込みの設定になっています。
> 
> I2Cのドライバをモジュール設定でコンパイルしなければ
> i2c-core.koやi2c-dev.koは作成されません。
> 
> ただしカーネル組込みの設定であっても
> i2c-coreやi2c-devの各関数はカーネルに組込まれおり
> 使用することはできるのでi2c_probe()が成功しない理由は
> 他にあるかと思います。
> 
> 私も暫くまえにI2Cのドライバを作成して組込みましたがi2c_probeは成功しています。
> 
> ちなみにi2ctest_driverはi2c_add_driver()にて登録していますでしょうか?
> 
> 以上
> 
> 
>> 木原です。
>> いつもお世話になっています。
>>
>> i2c_probe()が成功しない原因を調査中ですが、
>> armadillo-500ボードにて、lsmodすると、
>> i2c-coreやi2c-devモジュールがロードされていない
>> ことがわかりました。modprobeしてもエラーとなりました。
>> また、findしたところ、i2c-core.koやi2c-dev.koが存在しないことが
>> わかりました。これらが原因のように思われます。
>> make menuconfigでみたところ、I2Cのサポートはされているようです。
>> どのようにすればこれらのモジュールをロードできるのでしょうか?
>>
>>
>> 以上
>>
>>
>> ----- Original Message ----- From: "g-kihara" 
>> <email@hidden>
>> To: "Armadillo series general discussion list" 
>> <email@hidden>
>> Sent: Wednesday, January 14, 2009 5:46 PM
>> Subject: [Armadillo:03900]armadillo-500 sysfs経由でI2Cドライバ制御
>>
>>
>>> 木原です。
>>> いつもお世話になっています。
>>>
>>> 【目的】
>>>
>>> armadillo-500ボードのI2C1モジュールに接続したセンサとI2C通信
>>> を行うソフトを作成しようとしています。
>>> その際、sysfs経由でI2Cドライバ制御を行いたいとおもっています。
>>> 以前ご紹介いただいた、drivers/i2c/chips/tlv320aic.cを
>>> 参考に作成しようと思っています。
>>>
>>> 【質問】
>>>
>>> 下記のように書き換え,まずi2c_probe()が正しく行われるか
>>> 確認しました。
>>> デバイスドライバをinsmodし、動作テストしたところ、
>>> i2ctest_attach( )は呼ばれるものの、
>>> i2c_probe( )の返り値が0以外の値となっており、
>>> i2c_probe()に失敗していることがわかりました。
>>> 構造体変数i2ctest_driverのメンバidには、
>>> i2c-id.hで定義されているI2C_DRIVERID以外の
>>> 値を与えたのですが、 これだけではスキャンしてくれない
>>> ようです。他になにか必要な設定があるのでしょうか?
>>> ご教示宜しくお願い申し上げます。
>>>
>>>
>>>
>>>
>>> #define ID_I2CTEST 102
>>>
>>> ・・・・・
>>>
>>> static int
>>> i2ctest_attach(struct i2c_adapter *adap)
>>> {
>>> int ret;
>>>
>>> DEBUG_FUNC();
>>>
>>> printk("i2ctest_attach is called\n");
>>>
>>> ret = i2c_probe(adap, &addr_data, i2ctest_probe);
>>>
>>> printk("i2c_probe=%d\n");
>>>
>>> }
>>>
>>> ・・・・・
>>>
>>> static struct i2c_driver i2ctest_driver = {
>>> .driver = {
>>>    .name = DRIVER_NAME,
>>> },
>>> .id  = ID_I2CTEST,
>>> .attach_adapter = i2ctest_attach,
>>> .detach_client = i2ctest_detach,
>>> //.command = i2ctest_command,
>>> };
>>>
>>> ・・・・・
>>>
>>>
>>> 以上
>>>
>>>
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo 
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>>
> 
> 


-- 
△▼△▼△▼△▼△▼△▼△▼△▼△▼△
日本電子システムテクノロジー株式会社
第1技術部  高木 健太郎
Tel    042-542-2197
Fax    042-546-3779
Email  email@hidden



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