データフローを駆動するLVDSディスプレイパネル:
ディスプレイ品質:
Androidの24ビットLVDSディスプレイパネルで最高の表示品質を得るには、 32ビットフレームバッファを使用し、IPUv3ディスプレイエンジンとLDBが24ビットピクセルを出力するようにする必要があります。
表示を有効にするための2つのステージ:
Ubootスプラッシュスクリーンとカーネルフレームバッファ
変更は、board/ freescale /mx6q_sabresd/mx6q_sabresd.c などのボード ファイルで行う必要があります 。
1. 新しい 24bit LVDS ディスプレイ パネルの仕様に従って 、struct fb_videomode でビデオ モードを設定します(このドキュメントの最後にある例を参照してください)。
2. lcd_enable() で pwm, iomux /display 関連のクロックツリー を設定します。 これらは、スムーズなUI移行をサポートするためにカーネル設定に合わせる必要があることに注意してください
Ubootのスプラッシュ画面からカーネルフレームバッファへ。
3. ipuv3_fb_init()を呼び出す際に 、IPUv3ディスプレイエンジンとLDBの出力ピクセルフォーマットをIPU_PIX_FMT_RGB24に設定します 。
4. ipuv3_fb_init() を呼び出すときは、新しい 24bit LVDS ディスプレイ パネルの仕様に従ってピクセル クロックを設定します 。
5.タフなディスプレイビデオモード(高解像度または高ピクセルクロック周波数)をサポートするためにデュアルLDBチャネルが必要な場合は 、2つのLDBの両方を有効にする必要があります
チャネルを作成し、LDB を分割モードで動作するように設定します。レジスタLDB_CTRL lcd_enable()でそれに応じて設定する必要があります。
カーネル ブートアップ コマンドラインに 'video=' と ' ldb =' オプション を追加できるので、カーネルコードは Uboot コード よりもさまざまな表示色深度を持つさまざまな LVDS ディスプレイパネルを柔軟に処理できます 。'video=' と ' ldb =' オプションの詳細については、MXC Linux BSP リリースノートと Android ユーザーガイドを参照してください。いくつかの既知のポイントは次のとおりです。
1. 新しい 24bit LVDS ディスプレイ パネルの仕様 に従って、 drivers/video/ mxc / ldb.c の struct fb_videomode に ビデオ モードを追加します (次の例を参照してください)。
このドキュメントの終わり)。
2.プラットフォームコードで pwm バックライト/ディスプレイ関連の iomux を設定します 。
3. カーネル ブートアップ コマンドライン で適切な「video=」オプションを設定します 。
video=mxcfb0:dev=ldb,LDB-NEW,if=RGB24,fbpix=RGB32
4. カーネルブートアップコマンドラインで、タフなディスプレイビデオモードをサポートするために デュアルLDBチャンネル が必要な場合、 適切な「 ldb =」オプション を設定します 。
ldb=spl0 (IPUv3 DI0を使用) または ldb=spl1 (IPUv3 DI1を使用)
5. カーネル ブートアップ コマンドライン で適切な「fbmem=」オプションを設定して、フレームバッファ用に十分な メモリ を確保します 。たとえば、1280x800 LVDS パネルを使用するとします
fb0 で fb0 が RGB32 ピクセル形式の場合、 式が次のとおりであるため、'fbmem=12M' を使用する必要があります。
fbmem= 幅*高さ*3(トリプル BUF)*Bytes_per_pixel= 1280*800*3*4B=12MB
実際の1280x800@60 24ビットLVDSパネル仕様から引用されたタイミングの説明を見てみましょう 。
また、標準の linux struct fb_videomode include/linux/fb.h で定義されています。
構造体 fb_videomode {
const char *名前; /*随意*/
U32リフレッシュ; /*随意*/
u32 xres;
u32 yres;
U32 pixclock;
u32 left_margin;
U32 right_margin;
u32 upper_margin;
U32 lower_margin;
u32 hsync_len;
u32 vsync_len;
U32同期;
u32 vmode;
u32 flag;
};
必要なことは、 LVDS ディスプレイ パネルの仕様のタイミング記述 に従って 、struct fb_videomode のすべてのフィールドを正しく設定 することです。
1.name: 'LDB-WXGA' に設定できます。
2.更新:オプションですが、一般的な値、つまり60(60Hzのリフレッシュレート)に設定できます。
3.xres: アクティブな幅、つまり 1280。
4.yres: アクティブな高さ、つまり 800。
5.pixclock:次の式で計算します– pixclock=(10 ^ 12)/clk_freq。 ここでは、通常、この例では 、pixclock=(10^12)/71100000=14065です。
6. left_margin/right_margin/hsync_len:
仕様ではHSバックポーチ(HBP)/ HSフロントポーチ(HFP)/ HS幅(HW)と同じです。仕様は私たちにそれを教えるだけなので、通常は
HBP+HFP+HW=160 です。left_margin=40、right_margin=40、hsync_len=80 と設定できます。
7. upper_margin/lower_margin/vsync_len:
水平タイミングと同様に、垂直タイミングは upper_margin=10、 lower_margin=3、 vsync_len=10 に設定できます。
8.sync:タイミングチャートはhsync / vsyncがアクティブローであることを示しているため、FB_SYNC_HOR_HIGH_ACTまたは
FB_SYNC_VERT_HIGH_ACT。また、 クロック 極性とデータ極性は無効であるため、ここでは同期をゼロに設定します。
9.vmode:これはプログレッシブビデオモードなので、vmodeをFB_VMODE_NONINTERLACEDに設定します。
10. フラグ:ビデオモードはドライバーによって提供されるため、フラグをFB_MODE_IS_DETAILEDに設定します。
私は問題を見つけました、それはpixclockが40MHzまでしか設定できないようです、40MHzより低く、それは常に40MHzを出力しています、そして私の液晶は27MHzから32Mhzでしか動作できません
チュートリアルをいただきありがとうございます。しかし、私が見るように、それは "ldb.c"ので、Android Lollipopリリースには適用されませんは異なります。
私の場合、 タイミングは問題ありません。EDIDをサポートしていないLVDSパネルがあります。デフォルトの解像度を1024x768から1024x600に変更したいだけです。lvdsパネルは正常に機能しますが、底部はパネルの外側にとどまります。Android Lollipopでこれを修正するにはどうすればよいですか?
こんにちは、
この詳細なガイドをありがとう、非常に役に立ちました!
しかし、私は私のピクセルクロックに任意の変更を見ることができないようです、あなたはあなたのu-bootステップ#4 "4について詳しく教えてください。ipuv3_fb_init()を呼び出すときは、新しい24bit LVDSディスプレイパネルの仕様に従ってピクセルクロックを設定します 。
これは実際にはどのように行われるのでしょうか?u-bootでどのファイルを変更する必要がありますか。何を変更しても、常に75MHzを出力しているように見えます。メインラインのu-boot 2014-10ソースを使用しています。
ありがとうございます
パトリック