yamakawa
2019年10月8日 8時52分
山川と申します。
Armadillo-X1にて、デュアルシリアルUART「MAX3109」を組み込もうとしております。
kernelコンフィグにて、
Device Drivers
-> Character devices
-> Serial drivers
-> MAX310X support
は有効とし、
Devoce Treeも添付のように記述しましたが、
以下のエラーが出てしまいます。
(添付では、.dtsiのアップロードができませんでしたので、.dtsとしています。)
> > max310x spi1.0: No platform data supplied
> > max310x: probe of spi1.0 failed with error -22
Device Treeの記述方法に、何か問題があるのでしょうか?
または、このDevice Treeでの記述は、
Linux-3.14.79ではサポートしていないのでしょうか?
(/Documentation/devicetree/bindings/serialに、「maxim,max310x.txt」がありませんでした。)
ファイル | ファイルの説明 |
---|---|
armadillo_x1-ecspi2.dts |
コメント
yamakawa
at_makoto.sato
佐藤です。
> Device Tree以外でのデバイスの指定方法はあるのでしょうか?
platform data を C で記述する必要があります。
> また、Linux-4.9.133で同様にしてみたところ、
> spi_imx 30830000.ecspi: dma setup error -19, use pio
> max310x spi1.0: MAX3109 ID 0x00 does not match
> spi_imx 30830000.ecspi: probed
> のエラーメッセージがありました。
MAX3109 のレジスタの値が取れていないようです。
MAX3109 の電源は入っていますでしょうか、または結線等は正常でしょうか。
yamakawa
山川です。
度々、ありがとうございます。
> MAX3109 の電源は入っていますでしょうか、または結線等は正常でしょうか。
電源が外れておりました。
接続し直したところ、
spi_imx 30830000.ecspi: dma setup error -19, use pio
max310x spi1.0: MAX3109 ID 0xda does not match
spi_imx 30830000.ecspi: probed
のメッセージで、IDが変化しましたが、未だエラーの様子です。
お判りになることがあれば、ご教示頂けると幸甚です。
at_makoto.sato
yamakawa
at_makoto.sato
yamakawa
山川です。
返信頂き、ありがとうございます。
> MAX3109 の 9番ピン(SPI/I2C)は high になってますでしょうか。
確認致しましたが、highになっています。
また、
max310x spi1.0: MAX3109 ID 0xda does not match
のメッセージですが、
max310x spi1.0: MAX3109 ID 0xe0 does not match
と、IDが変化していました。
結線や、Device Treeは変更しておりません。
このIDは、どのレジスタの値なのか、お判りになりますか?
ご教示頂けると助かります。
at_makoto.sato
佐藤です。
> また、
> max310x spi1.0: MAX3109 ID 0xda does not match
> のメッセージですが、
> max310x spi1.0: MAX3109 ID 0xe0 does not match
> と、IDが変化していました。
> 結線や、Device Treeは変更しておりません。
MAX3109 が正しく reset されていないのかもしれません。
arch/arm/boot/dts/imx7d-sdb-mipi-dsi.dts を参考に reset の定義を入れると良いかもしれません。
(上記に加えて reset-on-init を加えると、reset driver の probe 時に reset されます。)
> このIDは、どのレジスタの値なのか、お判りになりますか?
> ご教示頂けると助かります。
アドレスは 0x05 です。
yamakawa
山川です。
回答、ありがとうございます。
> > このIDは、どのレジスタの値なのか、お判りになりますか?
> アドレスは 0x05 です。
SPI使用時には、Extended addressingのため、アドレス0x05を参照しているのですね。
データシートに依ると、起動時には"0xC0"となるようで、
"0xda"や"0xe0"など正しく読めていないようです。
> arch/arm/boot/dts/imx7d-sdb-mipi-dsi.dts を参考に reset の定義を入れると良いかもしれません。
> (上記に加えて reset-on-init を加えると、reset driver の probe 時に reset されます。)
上記参照してみましたが、reset-on-initの使い方が判りません。
サンプルなどありませんでしょうか?
at_makoto.sato
yamakawa
> 佐藤です。
>
> > 上記参照してみましたが、reset-on-initの使い方が判りません。
> > サンプルなどありませんでしょうか?
> reset-on-init; と追加するだけです。
>
> compatible = "gpio-reset"; > reset-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; > reset-delay-us = <1000>; > reset-on-init; > #reset-cells = <0>; >
山川です。
ご教示、ありがとうございます。
> reset-on-init; と追加するだけです。
>
> compatible = "gpio-reset"; > reset-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; > reset-delay-us = <1000>; > reset-on-init; > #reset-cells = <0>; >
上記を参考に組み込んでみて、reset信号が動作していることを確認致しました。
が、結果は変わらず、IDが正しく読めていない様子です。
at_makoto.sato
yamakawa
山川です。
返信、遅くなりすみません。
> spi-max-frequency = <26000000>;
> ここの値を下げてみてもダメでしょうか。
spi-max-frequency = <1000000>; /* 1MHz */
としたところ、
spi1.0: ttyMAX0 at I/O 0x0 (irq = 262, base_baud = 230400) is a MAX3109
spi1.0: ttyMAX1 at I/O 0x20 (irq = 262, base_baud = 230400) is a MAX3109
spi_imx 30830000.ecspi: probed
となり、正常に認識するようになりました。
ご尽力、ありがとうございました。
ちなみに、
spi-max-frequency = <10000000>; /* 10MHz */
spi-max-frequency = <26000000>; /* 26MHz */
は指定できないのでしょうか?
at_makoto.sato
yamakawa
at_makoto.sato
2019年10月8日 11時13分
佐藤です。
> または、このDevice Treeでの記述は、
> Linux-3.14.79ではサポートしていないのでしょうか?
v3.14 ではサポートされておらず、v3.16 以降でサポートされているようです。
可能であれば、v4.9 を使用されることをお勧めします。
https://users.atmark-techno.com/armadillo-x1/software