[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 メーリングリストの案内