ADV7535: ディスプレイに画像が出力されない こんにちは、チーム Verdin Yavia IMX8M Plus をベースにしたカスタムキャリアボードに、 DSI-HDMIコンバータ( ADV7535 )を搭載する作業を進めています。Toradexキャリアボードに付属する LT8912B MIPI DSI-HDMIブリッジを ADV7535に置き換えました 。ADV7535 DSI-HDMIブリッジ との通信には I2Cチャネル2 を使用していますが、Yaviaキャリアボードは別のI2Cチャネルを使用しています。この変更に伴い、デバイスツリーに以下の更新を加えました。 デバイスツリーの変更 1. verdin-imx8mp_dsi-to-hdmi_overlay.dts 既存の hdmi_lontium_lt8912 ノード。 新しい HDMI_adv7535 I2C2 ノードの下のノード。 2. imx8mp-verdin.dtsi 削除された hdmi_lontium_lt8912 ノード。 Lontiumピン接続の詳細を削除しました HDMIコネクタ ノード。 追加した HDMI_adv7535 I2C2 の子ノードとして。 変更後の観察結果 ADV7535 の内部レジスタの読み取り/書き込みに成功しました。 I2C データをダンプ可能: torizon@verdin-imx8mp-15404184:~$ i2cdump -y -f 1 0x39
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 14 00 00 00 00 00 00 00 00 00 41 0e bc 18 01 13 ?.........A?????
10: 25 37 00 00 00 00 38 00 46 62 04 a8 00 00 1c 84 %7....8.Fb??..??
20: 1c bf 04 a8 1e 70 02 1e 00 00 04 a8 08 12 1b ac ?????p??..??????
30: 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 b0 ...........?...?
40: 00 50 f0 76 10 68 68 68 68 00 80 00 00 00 00 00 .P?v?hhhh.?.....
50: 00 00 02 0d 6d 02 00 00 00 00 00 00 00 00 00 00 ..??m?..........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
70: 01 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ??..............
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90: 00 00 00 00 c0 00 40 00 03 02 e0 18 30 61 00 00 ....?.@.????0a..
a0: 00 00 a4 a4 08 04 00 00 00 00 00 40 00 00 40 14 ..????.....@..@?
b0: 00 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 ..........?.....
c0: 00 00 00 00 00 00 06 00 00 03 00 00 02 00 01 04 ......?..?..?.??
d0: 0c ff 80 80 80 00 00 00 00 00 00 00 00 00 88 01 ?.???.........??
e0: d0 70 01 00 00 00 fd 00 00 00 52 46 00 00 00 00 ?p?...?...RF....
f0: 95 04 ff 00 00 00 00 00 00 00 7d aa 1c 00 b0 00 ??........}??.?. HDMI ディスプレイが検出され、i.MX8MP で EDID データが取得されます。HDMI-A -1 は DSI から HDMI であり、HDMI-A-2 はネイティブ HDMI ポートです。 root@verdin-imx8mp-15288064:/home/torizon# cat /sys/class/drm/card0-HDMI-A-1/edid | edid-decode
edid-decode (hex):
00 ff ff ff ff ff ff 00 30 ae 86 10 01 01 01 01
22 15 01 03 80 29 1a 78 ee e5 b5 a3 55 49 99 27
13 50 54 af ef 00 61 40 81 c0 81 80 81 8a 81 90
95 00 95 0f 01 01 64 19 00 40 41 00 26 30 18 88
36 00 a0 1d 00 00 00 18 00 00 00 fc 00 4c 45 4e
20 4c 31 39 35 30 77 44 0a 20 00 00 00 fd 00 32
4c 1e 51 0e 00 0a 20 20 20 20 20 20 00 00 00 ff
00 42 33 34 33 32 38 34 35 0a 20 20 20 20 01 0b
02 03 21 71 4e 06 07 02 03 15 96 11 12 13 04 14
05 1f 90 23 09 07 07 83 01 00 00 65 03 0c 00 10
00 8c 0a d0 90 20 40 31 20 0c 40 55 00 b9 88 21
00 00 18 01 1d 80 18 71 1c 16 20 58 2c 25 00 b9
88 21 00 00 9e 01 1d 80 d0 72 1c 16 20 10 2c 25
80 b9 88 21 00 00 9e 01 1d 00 bc 52 d0 1e 20 b8
28 55 40 b9 88 21 00 00 1e 02 3a 80 d0 72 38 2d
40 10 2c 45 80 b9 88 21 00 00 1e 00 00 00 00 d0 遭遇した問題 画像出力なし コネクテッドHDMIディスプレイに表示されます。 dmesg ログエラー: imx_sec_dsim_drv 32e60000.mipi_dsi: failed to get pmsk for: fin = 12000, fout = 0
トラブルシューティングの試み デバイス ツリー内の MIPI DSI コントローラのクロック設定を次のように変更しようとしました。 mipi_dsi: mipi_dsi@32e60000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx8mp-mipi-dsim";
reg = <0x32e60000 0x10000>;
clocks = <&media_blk_ctrl IMX8MP_CLK_MEDIA_BLK_CTRL_MIPI_DSI_PCLK>,
<&media_blk_ctrl IMX8MP_CLK_MEDIA_BLK_CTRL_MIPI_DSI_CLKREF>;
clock-names = "cfg", "pll-ref";
assigned-clocks = <&clk IMX8MP_CLK_MEDIA_MIPI_PHY1_REF>;
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
assigned-clock-rates = <11000000>;
interrupts = 18 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&mipi_phy1_pd>;
status = "disabled";
port@0 {
dsim_from_lcdif: endpoint {
remote-endpoint = <&lcdif_to_dsim>;
};
};
}; ただし、デフォルトの頻度は次のように表示されます。 12MHz の中で dmesg ログ。 説明の要請 以下の点についてご指導いただければ幸いです。 どうすれば正しく更新CANでしょうか フィン そして ファウト 解決するための値 プムスク エラー? 何かありますか 追加のデバイスツリーの変更 ADV7535 経由で適切な画像出力を有効にするために何が必要ですか? 皆様のご意見やご提案をお待ちしております。 添付の dmesg ログ、このThreadへのデバイス ツリー オーバーレイを参照してください。 ありがとう、よろしく。 ルペシュ・カタール IMX8MPLUS #ADV7535 #DSI #HDMI #MIPI #I2C #I2S i.MX 8M | i.MX 8M ミニ | i.MX 8M ナノ Re: ADV7535: No image output on display 5.15 を使用する場合は、ブランチを 5.15 に変更するだけです。ソースコードは NXPについて なので、ドライバ がどのようなものかはわかりませんが、nxp adv7535 ドライバ を参照してください。
Linux-imx/ドライバ/GPU/drm/bridge/adv7511/adv7511_drv.c at lf-5.15.y · nxp-imx/Linux-imx · GitHub
すべての解像度をサポートできるわけではありません。有効なクロックは以下の通りです。新しいクロックが必要な場合は、そこに追加し、クロックドライバに新しいクロックを追加する必要があります。
静的定数int valid_clocks[] = {
148500,
135000、
132000、
108000,
78750,
74250,
65000、
49500,
40000、
31500,
}; Re: ADV7535: No image output on display こんにちは@joanxie 、 NXP カーネル ソースへの案内をありがとうございます。 デバイス ツリーを NXP カーネル 5.15y (共有された 6.12 ではありません) の imx8mp-evk.dts に合わせて作成し、ディスプレイは特定の解像度で動作していますが、ターゲットとする解像度 (1024x768) では動作しません。 adv7535 のデバイス ツリー以外、他の変更は行っていません。Toradex カーネル 5.15.2.x の場合。 以下に、機能しているものと機能していないものを示した表を示します。 分解能 アスペクト比 規格 一般的なリフレッシュレート Realtek ディスプレイ Dellモニター 640×480 4:3 両方 60 Hz 働く 働く 800×600 4:3 ヴェサ 60~75 Hz 働く 働く 1024×768 4:3 ヴェサ 60~75 Hz 無効時に空白/ちらつき 内部タイミングジェネレータ 出力なし 1280×768 5:3 ヴェサ 60 Hz 出力なし 出力なし 1280×720 16:9 両方 24/25/30/50/60 Hz 働く 働く 1366×768 16:9 ヴェサ 60 Hz 出力なし 出力なし 1920×1080p 16:9 両方 24/25/30/50/60 Hz 働く 働く 1024x768 のみが動作しない理由は何でしょうか?他の解像度は、HDMI を接続するだけで正常に動作します。 Re: ADV7535: No image output on display 私はすでにimx8mp dtsファイルを共有しましたが、まず、このブリッジをdtsで正しく設定する必要があります。その後、adv7535ドライバが
https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c Re: ADV7535: No image output on display こんにちは@joanxie 、 ちなみに、私たちはToradexのYaviaキャリアボードに似たカスタムキャリアボードを使用しています。唯一の変更点は、Lontium DSI から HDMI へのアダプタが ADV7535 に置き換えられたことです。NXP の一部製品でも使用されているため、ADV7535 を選択しました。 そのため、Toradex が提供するYavia-wifi dtsのデバイスツリーとその親デバイスツリーソースに基づいて、デバイスツリーの変更を行いました。 デバイスツリーノードは、 1. Mipi-dsi - ここでは何も変更していません(前回の投稿とは異なり、デフォルトに戻しました)。他の NXP デバイスでも同様に使用する必要があります。 2. ADV7535 固有のノードとオーバーレイ。これは前回の投稿で提供したものです。 ドライバはsec_mipi_dsim-imx.cです、 sec-dsim.c、 adv7511_drv.c、 adv7533.c。 次に、デバイス ツリー オーバーレイを微調整します。fin, fout エラーはもう発生しません。 上記ドライバの dev_dbg ログは次のとおりです。 torizon@verdin-imx8mp-15404184:~$ dmesg | grep drm
[ 0.000000] Kernel command line: root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_defau lt=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/7b778d635701b4e0bbc49652c 421a587ae63ff3c6cbfc07d964084a23df7631d/0
[ 2.771129] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[ 2.771181] imx-drm display-subsystem: bound imx-lcdifv3-crtc.1 (ops lcdifv3_crtc_ops)
[ 2.772099] imx-drm display-subsystem: bound 32e60000.mipi_dsi (ops imx_sec_dsim_ops [sec_mipi_dsim_imx])
[ 2.772141] imx-drm display-subsystem: bound 32fd8000.hdmi (ops dw_hdmi_imx_ops)
[ 2.772468] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 0
[ 2.869610] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device
[ 5.099098] systemd[1]: Starting Load Kernel Module drm...
[ 5.188031] systemd[1]:
[email protected]: Deactivated successfully.
[ 5.188992] systemd[1]: Finished Load Kernel Module drm.
[ 5.262319] [drm] Initialized vivante 1.0.0 20170808 for 40000000.mix_gpu_ml on minor 1
torizon@verdin-imx8mp-15404184:~$ dmesg | grep dsim
[ 0.000000] Kernel command line: root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_defau lt=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/7b778d635701b4e0bbc49652c 421a587ae63ff3c6cbfc07d964084a23df7631d/0 dy
[ 2.759952] Kernel module loaded from ramdisk: sec_dsim - result: 0
[ 2.771246] imx_sec_dsim_drv 32e60000.mipi_dsi: sec-dsim bridge bind begin
[ 2.771290] imx_sec_dsim_drv 32e60000.mipi_dsi: version number is 0x1060200
[ 2.772085] imx_sec_dsim_drv 32e60000.mipi_dsi: sec-dsim bridge bind end
[ 2.772099] imx-drm display-subsystem: bound 32e60000.mipi_dsi (ops imx_sec_dsim_ops [sec_mipi_dsim_imx])
[ 2.916294] Kernel module loaded from ramdisk: sec_mipi_dsim_imx - result: 0
[ 3.259164] imx_sec_dsim_drv 32e60000.mipi_dsi: p: min = 1, max = 6, m: min = 88, max = 1023, s: min = 0, ma x = 5
[ 3.259252] imx_sec_dsim_drv 32e60000.mipi_dsi: fout = 390000, fin = 12000, m = 130, p = 1, s = 2, best_delt a = 0
[ 3.259262] imx_sec_dsim_drv 32e60000.mipi_dsi: no pre-exist hpar can be used
[ 18.521539] imx_sec_dsim_drv 32e60000.mipi_dsi: p: min = 1, max = 6, m: min = 88, max = 1023, s: min = 0, ma x = 5
[ 18.521629] imx_sec_dsim_drv 32e60000.mipi_dsi: fout = 390000, fin = 12000, m = 130, p = 1, s = 2, best_delt a = 0
[ 18.521640] imx_sec_dsim_drv 32e60000.mipi_dsi: no pre-exist hpar can be used
torizon@verdin-imx8mp-15404184:~$ dmesg | grep adv
[ 0.000000] Kernel command line: root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/7b778d635701b4e0bbc49652c421a587ae63ff3c6cbfc07d964084a23df7631d/0
[ 1.052362] adv7511 1-0039: Rev. 20
[ 4.325789] systemd[1]: System time before build time, advancing clock.
torizon@verdin-imx8mp-15404184:~$ これにより、i2cset を使用して ADV7535 のレジスタを直接設定することでテスト カラーバー パターンを生成することもできます。これは、ADV7535 から HDMI シンク ディスプレイへの接続が正しく動作していることを意味します。問題は、iMX8MP が ADV7535 と通信する方法にあります。 まだディスプレイに何も出力されません。 NXP が自社製品に ADV7535 を実装した方法と、当社がソフトウェアとハードウェアのアプローチの観点から ADV7535 を実装する方法に違いがあるかどうかを理解したいと思います。 Re: ADV7535: No image output on display このエラーメッセージは、あなたのドライバからのようです。NXPドライバのソースコードからは見つけられませんでした。この設定は正しくありません。希望するクロックを得ることができません。クロックの親は24MHzで、11MHzに設定すると、24/2=12MHzしか得られません。
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
assigned-clock-rates = <11000000>;
参考までにNXPのソースコードを参照し、LCDIF、MIPI DS1、ADV7535の設定が正しいかどうかを確認してください。
linux-imx/arch/arm64/boot/dts/freescale/imx8mp-evk.dts at lf-6.12.y · nxp-imx/linux-imx · GitHub
linux-imx/arch/arm64/boot/dts/freescale/imx8mp.dtsi at lf-6.12.y · nxp-imx/linux-imx · GitHub
ログを参照してください。PLL設定が正しくないようです。PLLドライバが
Linux-imx/ドライバ/GPU/drm/imx/sec_mipi_pll_1432x.h at lf-6.12.y · nxp-imx/Linux-imx · GitHub
もう一度確認することできます