G4200 ディスプレイ 初期化(ブートローダ解析)
コード上のPin名からHW_PINCTRL_MUXSEL"X"に代入するための計算式
X=(Pin >> 5) * 2 + ((Pin >> 4) & 0x1)
PINMUX ビット=設定値<<((Pin & 0xf)+1)
コード上のPin名からBankに変換するための計算式
Bank=Pin >> 5
CLK_DIS_LCDIF Clock Control RegisterのCLKGATEを下げ DIV_FRAC_EN=0 DIV=1
BUSYが降りてから HW_CLKCTRL_XTALのPWM_CLK24M_GATEビットをクリア
/*
bank0 26に1を出力
15000usec待機
Bank0 27に1を出力
15000usec待機
GPIOピン0x20~0x2F, 0x38~0x3B, 0x7EのMUXSELが0に設定
*/現行の実装と変わらない
Bank1 16~23Pinが出力1(不要?)
HW_LCDIF_CTRLのCLKGATEを下げてSFTRSTを立ててCLKGATEを下げてSFTRSTを下げてCLKGATEを下げてCLKGATEを下げる
HW_LCDIF_CTRL1のRESETを上げて下げて上げる(適宜ウェイトを挟む)
ここでブートログにはConfigurePanelと出る
ここからLCDドライバの設定
linux-brain/drivers/gpu/drm/tiny/brain.cのlcd_regsの形式で
{0x3a,0,0}, {0x55,1,0},
{0xb2,0,0}, {0x45,1,0}, {0x00,1,0}, {0xd9,1,0}, {0x00,1,0}, {0x00,1,0},
{0xb3,0,0}, {0x81,1,0}, {0x00,1,0}, {0x01,1,0},
{0xb4,0,0}, {0x00,1,0},
{0xb5,0,0}, {0x02,1,0}, {0x11,1,0}, {0x50,1,0}, {0x00,1,0}, {0x80,1,0}, {0x45,1,0}, {0x45,1,0}, {0x00,1,0},
{0xb6,0,0}, {0x1e,1,0}, {0x01,1,0}, {0x90,1,0}, {0x0a,1,0}, {0x02,1,0}, {0x58,1,0},
{0xb7,0,0}, {0x2a,1,0}, {0x91,1,0}, {0x5c, 1,0}, {0x06,1,0}, {0x08,1,0}, {0x0c, 1,0}, {0x00,1,0}, {0x1c, 1,0}, {0x06,1,0}, {0x02,1,0}, {0x09,1,0},
{0xb9,0,0}, {0x00,1,0}, {0x32,1,0}, {0x01,1,0}, {0x40,1,0}, {0x00,1,0},
{0xc0, 0,0}, {0xb7,1,0}, {0x03,1,0},
{0xc1, 0,0}, {0x72,1,0}, {0x01,1,0},
{0xc2, 0,0}, {0x37,1,0}, {0x2f,1,0}, {0x0c,1,0},
{0xc3, 0,0}, {0x37,1,0}, {0x03,1,0},
{0xc7, 0,0}, {0x01,1,0}, {0x33,1,0}, {0x03,1,0},
{0xca, 0,0}, {0xbd,1,0}, {0x17,1,0}, {0x5b,1,0}, {0x5b,1,0}, {0x64,1,0}, {0x11,1,0}, {0x66,1,0},
{0xde,0,0}, {0x11,1,0}, {0x00,1,0},
{0xe0,0,0}, {0x24,1,0}, {0x3f,1,0}, {0x0e,1,0}, {0x0e,1,0}, {0x67,1,0}, {0xee,1,0}, {0xee,1,0}, {0xa3,1,0}, {0x04,1,0},
{0xe1,0,0}, {0x24,1,0}, {0x3f,1,0}, {0x0f,1,0}, {0x0e,1,0}, {0x78,1,0}, {0xee,1,0}, {0xed,1,0}, {0x93,1,0}, {0x04,1,0},
{0xe2,0,0}, {0x24,1,0}, {0x29,1,0}, {0x14,1,0}, {0x1c,1,0}, {0x67,1,0}, {0xdd,1,0}, {0xdd,1,0}, {0x97,1,0}, {0x0b,1,0},
{0xe3,0,0}, {0x24,1,0}, {0x29,1,0}, {0x14,1,0}, {0x1c, 1,0}, {0x67,1,0}, {0xdd,1,0}, {0xdd,1,0}, {0x97,1,0}, {0x0a,1,0},
{0xe4,0,0}, {0x24,1,0}, {0x2a,1,0}, {0x15,1,0}, {0x1a,1,0}, {0x99,1,0}, {0xdd,1,0}, {0xed,1,0}, {0xa6,1,0}, {0x09,1,0},
{0xe5,0,0}, {0x24,1,0}, {0x2a,1,0}, {0x15,1,0}, {0x1a,1,0}, {0x88,1,0}, {0xdd,1,0}, {0xdd,1,0}, {0x97,1,0}, {0x0c,1,0},
{0x36,0,0}, {0x28,1,0},
{0x2c,0,0}, {0x00,1,0},
フレームバッファのアドレス指定
HW_LCDIF_TRANSFER_COUNTのV_COUNTが320 H_COUNTが480
HW_LCDIF_CTRLのLCDIF_MASTERとDATA_SELECTとRUNを上げる
{0x11,0,0}を書き込み 待つ
{0xde,0,0}, {0x11,1,0}, {0x04,1,0},
{0x29,0,0},
を書き込んでLCDドライバ初期化終わり
バックライト初期化