こんにちは、
私は、640x480 60HzのLCDにLVDSを使用するVariscite SOM VAR-SOM-MX8M-PLUS(このSOMモデルをGoogleで検索すると、彼らのウェブサイトが見つかります)を使用しています。仕様書に記載されている表示タイミングパラメータを使用しても、LCDに安定した画像を表示させることができません。
私のデバイスツリーの変更点:
#include "imx8mp-var-som-symphony.dts" / { panel { compatible = "panel-lvds"; backlight = <&backlight>; width-mm = <211>; height-mm = <158>; label = "640x480"; data-mapping = "jeida-24"; status = "okay"; panel-timing { clock-frequency = <25175000>; hactive = <640>; vactive = <480>; hback-porch = <40>; hfront-porch = <8>; vback-porch = <25>; vfront-porch = <2>; hsync-len = <96>; vsync-len = <2>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; }; port { panel_in: endpoint { remote-endpoint = <&lvds_out>; }; }; }; }; &clk { assigned-clock-rates = <0>, <0>, <1000000000>, <800000000>, <500000000>, <400000000>, <800000000>, <393216000>, <361267200>, <352450000>; }; &media_blk_ctrl { assigned-clock-rates = <500000000>, <200000000>, <0>, <0>, <352450000>; }; &ldb { status = "okay"; lvds-channel@0 { fsl,data-mapping = "jeida"; fsl,data-width = <24>; status = "okay"; port@1 { reg = <1>; lvds_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; };
PLLクロックを更新して、25.175 MHzのピクセルクロック(25.175 * 14 = 352.450MHz )を反映させました。また、異なる乗数(14以外)がある場合に備えて、他のクロックも追加しました。
static const struct imx_pll14xx_rate_table imx_pll1443x_tbl[] = { PLL_1443X_RATE(1039500000U, 173, 2, 1, 16384), /* 74.25 MHz */ PLL_1443X_RATE(910000000U, 455, 3, 2, 0), /* 65 MHz */ PLL_1443X_RATE(1040000000U, 208, 3, 1, 0), /* 65 MHz */ PLL_1443X_RATE(455000000U, 379, 5, 2, 10923), /* 65 MHz */ PLL_1443X_RATE(650000000U, 325, 3, 2, 0), PLL_1443X_RATE(594000000U, 198, 2, 2, 0), PLL_1443X_RATE(519750000U, 173, 2, 2, 16384), /* 37.125 MHz */ /*PLL_1443X_RATE(420000000U, 175, 5, 1, 0),*/ /* 30 MHz */ PLL_1443X_RATE(393216000U, 262, 2, 3, 9437), /*PLL_1443X_RATE(378000000U, 126, 4, 1, 0),*/ /* 27 MHz */ PLL_1443X_RATE(361267200U, 361, 3, 3, 17511), PLL_1443X_RATE(352450000U, 220, 15, 0, 18432), /* 25.175 MHz */ PLL_1443X_RATE(400000000U, 200, 3, 2, 0), /* 25 MHz */ PLL_1443X_RATE(700000000U, 175, 3, 1, 0), /* 25 MHz */ PLL_1443X_RATE(350000000U, 175, 6, 1, 0), /* 25 MHz */ PLL_1443X_RATE(245760000U, 328, 4, 3, 0xae15), PLL_1443X_RATE(225792000U, 226, 3, 3, 0xcac1), PLL_1443X_RATE(122880000U, 328, 4, 4, 0xae15), PLL_1443X_RATE(112896000U, 226, 3, 4, 0xcac1), PLL_1443X_RATE(61440000U, 328, 4, 5, 0xae15), PLL_1443X_RATE(56448000U, 226, 3, 5, 0xcac1), PLL_1443X_RATE(49152000U, 393, 3, 6, 0x374c), PLL_1443X_RATE(45158400U, 241, 2, 6, 0xd845), PLL_1443X_RATE(40960000U, 109, 1, 6, 0x3a07), };
imx8mp-ldb.c 内のハードコードされたクロックをコメントアウトしました。
/* * Due to limited video PLL frequency points on i.MX8mp, * we do mode fixup here in case any mode is unsupported. */ /*if (ldb->dual) mode->clock = mode->clock > 100000 ? 148500 : 74250; else mode->clock = 74250;*/ return 0;
搭載PLLクロックを検証済み:
root@imx8mp-var-dart:~# cat /sys/kernel/debug/clk/video_pll1/clk_rate
352450000
写真はこんな感じです
次に何を試すべきか、アドバイスをお願いします。
ありがとう、
ジョン
パネルの仕様を確認してください。タイミングが正しく設定されていないようです。h_totalが800、v_totalが525になっています。もう一度確認してください。
サポート担当者の@joanxieに見てもらえるように再投稿します
こんにちは、 @synthesys
現在のタイミング設定を教えていただけますか?
よろしくお願いします、
志明
タイミングを更新して、htotal 800、vtotal 525 になるようにしました。写真は同じように写ります。
オシロスコープでクロックを測定したところ、ピクセルクロックは25MHzで問題ありませんが、垂直同期と水平同期が不安定です。
IMX8MPは640x480の解像度に対応していますか?水平・垂直同期のタイミングが不安定にならない理由は何だろうか?
私たちはimx6solox用の同じLCDを持っていますが、問題はありませんでした(カーネル4.9)。デバイスツリーのsimple-panelの設定は簡単で、すぐに動作しました。
こんにちは、現在の時刻表はこちらです。
panel {
compatible = "panel-lvds";
backlight = <&backlight>;
width-mm = <211>;
height-mm = <158>;
label = "640x480";
data-mapping = "jeida-24";
status = "okay";
panel-timing {
clock-frequency = <25175000>;
hactive = <640>;
vactive = <480>;
hback-porch = <46>;
hfront-porch = <8>;
vback-porch = <38>;
vfront-porch = <4>;
hsync-len = <106>;
vsync-len = <3>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
};
port {
panel_in: endpoint {
remote-endpoint = <&lvds_out>;
};
};
};LCDのデータシートと、タイミングに関する該当ページを添付しました。当社には、LVDS信号をパラレルRGB信号に変換するLCD基板があります。先ほども述べたように、この同じLCDはIMX6SoloXでも問題なく動作します。
どういうわけか、12.5MHzだと画像は素晴らしいのですが、リフレッシュレートは30Hzしかありません。25MHz、リフレッシュレート60Hzの仕様を使用したい。
志明、
新しいタイミングを試してみましたが、画像は依然として悪く、最初の投稿で掲載した画像と似ています。パネルのタイミングを変更することが解決策ではないかもしれないと考えています。
これを有効にするために、デバイスツリーやカーネルに他に何か必要なものがあるのでしょうか?
PLL(ピクセルクロック×7またはピクセルクロック×14)を変更してみましたが、依然として同じ問題が発生します。
他に何か提案はありますか?
この問題に関して、引き続きサポートいただきありがとうございます。
ジョン
こんにちは、 @synthesys
データシートとあなたのdtsに記載されているタイミングパラメータを確認しました。
データシート:
Linuxでは、 htotal = hactive + hfront_porch + hsync_len + hback_porch となります。
hsync-active=0 を使用しているため、データシートからhsync_len + hback_porch = THS = 144、 hsync_len = TWH = 30 となります。
hback_porch = 144 - 30 = 114
垂直方向も同様なので、以下のパラメータを試してみることをお勧めします。
panel-timing {
clock-frequency = <25175000>;
hactive = <640>;
vactive = <480>;
hfront-porch = <16>;
hsync-len = <30>;
hback-porch = <114>;
vfront-porch = <10>;
vsync-len = <3>;
vback-porch = <32>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
};
よろしくお願いします、
志明
こんにちは、 @synthesys
アノテーションを使用する代わりに、imx8mp-ldb.c の次のセクションを希望の `mclock` 値に変更してみてください。
そして、この`mclock`への変更は実際に私の場合うまくいきました。
こんにちは、 @Zhiming_Liu さん。他に何かご提案はありますか?PLLまたはドライバコードを変更しますか?
@Zhiming_Liu @JESON @joanxie
皆さんこんにちは。どうやら問題はハードウェアにあるようです。複数のLVDSラインに抵抗器を追加する必要がありました。このチケットはクローズできます。皆様のご意見に感謝いたします。