[Armadillo:03913] Re: armadillo-500 sysfs経由でI2Cドライバ制御
g-kihara
email@hidden
2009年 1月 16日 (金) 15:50:50 JST
木原です。
早速、高木さんのドライバをベースに作成してビルドしたところ、
conflicting types for 'ignore'
などというエラーが出力されました。
I2C_CLIENT_INSMOD;の挿入場所に問題があるのでしょうか?
static int i2ctest_attach(struct i2c_adapter *adap);
static int i2ctest_detach(struct i2c_client *client);
static struct i2c_driver test_i2c_driver = {
.driver = {
.owner = THIS_MODULE,
.name = DRIVER_NAME,
},
.id = 102,
.attach_adapter = i2ctest_attach,
.detach_client = i2ctest_detach,
};
static struct i2c_client test_i2c_client =
{
.name = "TEST I2C dev",
.driver = &test_i2c_driver,
};
static unsigned short normal_i2c[] =
{
0x1c,
I2C_CLIENT_END
};
static unsigned short ignore[ ] = { I2C_CLIENT_END };
static struct i2c_client_address_data addr_data = {
.normal_i2c = normal_i2c,
.probe = ignore,
.ignore = ignore,
};
I2C_CLIENT_INSMOD;
以上
----- Original Message -----
From: "日本電子システムテクノロジー/高木" <email@hidden>
To: "Armadillo series general discussion list"
<email@hidden>
Sent: Friday, January 16, 2009 12:55 PM
Subject: [Armadillo:03909] Re: armadillo-500 sysfs経由でI2Cドライバ制御
> 高木です
>
> 以下は私が動作させた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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
armadillo メーリングリストの案内