/************************************************************************/
/* LCDパネル初期化ルーチン(SH7262用)                                    */
/************************************************************************/

/* CPU固有機能定義ヘッダ */
#include "cpu.h"

/* LCDパネル初期化ルーチンヘッダ */
#include "LCDpanel.h"
#include "graphics.h"


/* LCDパネル初期化 */
void LCDpanel_Initialize(void)
{
	/* LCDバックライトイネーブル(PB21(LCD_BLE)信号,正論理) */
	*PBCR5 = *PBCR5 & 0xFFCF;
	*PBIOR1= *PBIOR1 | 0x0020;
	*PBDR1 = *PBDR1 | 0x0020;

	/* VDC3 初期化 */
	*PGCR7 = 0x5A01;	/* LCD_DATA0 */
	*PGCR4 = 0x1111;	/* LCD_CLK, LCD_DE, LCD_HSYNC, LCD_VSYNC */
	*PGCR3 = 0x1111;	/* LCD_DATA15-12 */
	*PGCR2 = 0x1111;	/* LCD_DATA11-8 */
	*PGCR1 = 0x1111;	/* LCD_DATA7-4 */
	*PGCR0 = 0x1110;	/* LCD_DATA3-1 */

	*STBCR7 = *STBCR7 & ~(1 << 4);	/* VDC3へのクロック供給 */

	/* 表示制御部 初期化 */
	*SGMODE           = 0x00000001;
	*SYNCNT           = 0x010F000C;
	*PANEL_CLKSEL     = *PANEL_CLKSEL & ~(1 << 12);
	*PANEL_CLKSEL     = 0x00002008;		/* 6MHz(48MHz / 8) ≒ 6.4MHz(typ) */
	*PANEL_CLKSEL     = *PANEL_CLKSEL | (1 << 12);
	*SYN_SIZE         = (LCD_VERTICAL_PERIOD << 16) | (LCD_HORIZONTAL_PERIOD);
	*PANEL_VSYNC_TIM  = (0 << 16) | (LCD_VERTICAL_PULSE_WIDTH);
	*PANEL_HSYNC_TIM  = (0 << 16) | (LCD_HORIZONTAL_PULSE_WIDTH);
	*DE_SIZE          = (LCD_VERTICAL_DISPLAY_PERIOD << 16) | (LCD_HORIZONTAL_DISPLAY_PERIOD);
	*DE_START         = (LCD_VERTICAL_BACK_PORCH << 16) | (LCD_HORIZONTAL_BACK_PORCH);
	*GRA_VSYNC_TIM    = 0;

	/* グラフィックス部1 初期化 */
	*GRCMEN1      = C_LAYER;		/* カレントレイヤ許可、下位レイヤー不許可 */
	*GRCBUSCNT1   = BUSCNT_RGB565;	/* RGB:565 */
	*GROPSADR1    = (0x3C100000 - 320 * 240 * 2 * 2);
	*GROPSWH1     = (GRA1_VERTICAL_SIZE << 16) | (GRA1_HORIZONTAL_SIZE);
	*GROPSOFST1   = GRA1_HORIZONTAL_SIZE * 2;
	*GROPDPHV1    = ((LCD_VERTICAL_BACK_PORCH - 1 + GRA1_VERTICAL_POS) << 16)
	                    | (LCD_HORIZONTAL_BACK_PORCH - 16 + GRA1_HORIZONTAL_POS);
	*GROPBASERGB1 = 0x0000FFFF;	/* グラフィックス画像外色(White) */
	*GRCMEN1      = *GRCMEN1 | (1 << 31);	/* レジスタ値転送許可 */

	*GROPEWH1 = (LCD_HEIGHT << 16) | LCD_WIDTH;
	*GROPEDPHV1 = ((LCD_VERTICAL_BACK_PORCH - 1 + GRA1_VERTICAL_POS) << 16)
	               | (LCD_HORIZONTAL_BACK_PORCH - 16 + GRA1_HORIZONTAL_POS);

	/* グラフィックス部2 初期化 */
	*GRCMEN2      = L_LAYER/* | L_LAYER*/;	/* カレントレイヤ不許可、下位レイヤー許可 */
	*GRCBUSCNT2   = BUSCNT_aRGB4444;	/* aRGB:4444 */
	*GROPSADR2    = (0x3C100000 - 320 * 240 * 2 * 2);
	*GROPSWH2     = (GRA2_VERTICAL_SIZE << 16) | (GRA2_HORIZONTAL_SIZE);
	*GROPSOFST2   = GRA2_HORIZONTAL_SIZE * 2;
	*GROPDPHV2    = ((LCD_VERTICAL_BACK_PORCH - 1 + GRA2_VERTICAL_POS) << 16)
	                    | (LCD_HORIZONTAL_BACK_PORCH - 16 + GRA2_HORIZONTAL_POS);
	*GROPBASERGB2 = 0x00000000;	/* グラフィックス画像外色(下位レイヤー許可で無効) */
	*GRCMEN2      = *GRCMEN2 | (1 << 31);	/* レジスタ値転送許可 */

	*GROPEWH2 = (LCD_HEIGHT << 16) | LCD_WIDTH;
	*GROPEDPHV2 = ((LCD_VERTICAL_BACK_PORCH - 1 + GRA2_VERTICAL_POS) << 16)
	               | (LCD_HORIZONTAL_BACK_PORCH - 16 + GRA2_HORIZONTAL_POS);
}
