[Armadillo:09035] Re: Armadillo-460 でSPI使用設定について

Yasuhisa Nakamura email@hidden
2013年 7月 14日 (日) 13:21:54 JST


Yamamotoさん、
中村です。

別な理由なのですが、私も先週ほぼ同じことをA460でやっていました。
[Armadillo:05589]で始まるスレッドでの竹之下さんの解説の通りですので、
Yamamotoさんとやっていることはは同じだと思います。

私の場合、spidevの設定を入れてもYamamotoさんのようなエラーには
ならないのですが、気になったので、ソースをちょっと見てみました。

ブート時のメッセージで、

>> >>>> SCSI subsystem initialized
>> >>>> mxc_spi: probe of mxc_spi.0 failed with error -22        <== エラーになっている
>> >>>> CSPI: mxc_spi-2 probed

エラー番号(EINVAL)は表示されてますが、
その理由が何も表示されていません。

drivers/spiの下にあるmxc_spi.cのprobe関連を見てみると、
メッセージなしでエラーreturnする箇所は限られてます。

たとえば、
static int mxc_spi_probe(struct platform_device *pdev)
{
        ...
        mxc_platform_info = (struct mxc_spi_master *)pdev->dev.platform_data;
        if (!mxc_platform_info) {
                dev_err(&pdev->dev, "can't get the platform data for CSPI\n");
                return -EINVAL;
        }
        ...

この部分でEINVALになったのならば、
  "can't get the platform data for CSPI"
というメッセージが表示されるはずですね。

試に、この関数mxc_spi_probe()の入り口で強制的に
     return -EINVAL;
をやってみたところ、Yamamotoさんと同じエラー表示、
  mxc_spi: probe of mxc_spi.0 failed with error -22
になりましたので、この関数の下で問題が発生しているのでは
ないかと思います(絶対にこの下、とは言い切れませんが)。
#竹之下さんも同じことを言ってましたね。

ソースから、エラーメッセージがないままEINVALで戻っている場所を
探せればいいのですが、ソースを追っただけでは簡単には見つからない
と思います。

そこで力技になってしまいますが(エラーが再現できる環境でないと
これの方法は使えませんのでYamamotoさんにやってもらうしかない)、
printk()やdev_xxx()を使って、通過したところを追いかけてみては
どうでしょうか?

たとえば、
static int mxc_spi_probe(struct platform_device *pdev)
の入り口に、
  dev_info(&pdev->dev, "xxxxx hoge xxxx\n");
というコードを入れると、起動時に
  SCSI subsystem initialized
  mxc_spi mxc_spi.0: xxxxx hoge xxxx     <----- これ!
  CSPI: mxc_spi-0 probed
のように表示されます。

printk()を使うなら、こんな感じです。
  printk(KERN_INFO "xxxxx hoge xxxxx\n");

こういったものを
  spi.c
  mxc_spi.c
  spidev.c
などに適当にあたりを付けて、ちりばめてみます。

-- 
なかむら

[Armadillo:09034]で Yamamoto さんは書きました:
> Yamamotoです。
>
> 長い間確認が出来ませんでした。
>
> 一つ解ったのは、下記のパッチをあてなければ初期化は成功しました。
>> ----------------------------------------------------------------------------------------
>>   +++ b/arch/arm/mach-mx25/armadillo400.c
>>   @@ -553,6 +553,12 @@ static struct mxc_spi_master armadillo400_spi1_data = {
>>     };
>>     static struct spi_board_info armadillo400_spi1_board_info[] __initdata = {
>>   +       {
>>   +               .modalias = "spidev",
>>   +               .max_speed_hz = 1000000,
>>   +               .bus_num = 1,
>>   +               .chip_select = 0,
>>   +       },
>>     };
>>     #endif
>> ----------------------------------------------------------------------------------------

(途中省略 -- nakamura)

>> (2013/06/22 13:11), Yamamoto wrote:
>> > Yamamotoです。
>> >
>> > On Fri, 21 Jun 2013 22:13:24 +0900
>> > Koyo Takenoshita <email@hidden> wrote:
>> >
>> >> 竹之下です。
>> >>
>> >>> 結線図を見たのですが、CSPI1_RDYとCSPI1_SS1が繋がっていません。
>> >>> CSPI1_SS1は使用しない設定をmenuconfigで出来ますが、CSPI1_RDYが繋がっていないとど
>> >>> うなるのでしょうか?
>> >> RDY 信号はつながって無くても大丈夫です。
>> >>
>> >>>> mxc_spi: probe of mxc_spi.0 failed with error -22        <== エラーになっている
>> >>>> CSPI: mxc_spi-2 probed
>> >> 問題としては、ここですね。
>> >>
>> >> -22というのは、-EINVAL です。
>> >>
>> >> mxc_spi.0(CSPI1)は、エラーになっていて、
>> >> mxc-spi-2(CSPI3)はエラーになっていません。
>> >
>> >   mxc-spi-2(CSPI3)は、元の設定のままになっているので大丈夫と思いますし、現状は使用しないので良いので
>> > すが。
>> >
>> >>
>> >> probeに失敗していると言っているので、
>> >> linux-2.6.26-at/drivers/spi/mxc_spi.c::mxc_spi_probe()
>> >> のどこかで、-EINAVL となっているのだと思います。

(途中省略 -- nakamura)

>> >>>> SCSI subsystem initialized
>> >>>> mxc_spi: probe of mxc_spi.0 failed with error -22        <== エラーになっている
>> >>>> CSPI: mxc_spi-2 probed
>> >>>> usbcore: registered new interface driver usbfs
>> >>>> usbcore: registered new interface driver hub
>> >>>> usbcore: registered new device driver usb

(以下省略 -- nakamur)





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