MC3302_SDK_V1.1.9_202507281.../bsp/ramboot/common/cmd_logo.c

2004 lines
64 KiB
C
Raw Normal View History

2025-11-11 04:08:31 +00:00
#include <common.h>
#include <command.h>
#include <spi.h>
#include <spi_flash.h>
/* vo */
#define LOGO_VO_NONE (1)
#define LOGO_VO_1024x768 (2)
#define LOGO_VO_1920x1080 (3)
#define LOGO_VO_PAL (4)
#define LOGO_VO_NTSC (5)
#define LOGO_VO_ILI9881 (6)
#define LOGO_VO_EK79007 (7)
#define LOGO_VO_HDMI (LOGO_VO_1920x1080)
#define LOGO_VO_CVBS (LOGO_VO_NONE)
#define LOGO_VO_MIPI (LOGO_VO_NONE)
/* format */
#define LOGO_YUV (1)
#define LOGO_RGB_1555 (2)
#define LOGO_RGB_8888 (3)
#define LOGO_FORMAT (LOGO_YUV)
typedef struct {
uint32_t Clock;
uint32_t Hactvie;
uint32_t Vactive;
uint32_t FrameMode;
uint32_t FrameRate;
uint32_t PixelRate;
uint32_t Htotal;
uint32_t Vtotal;
uint32_t Hblank;
uint32_t Vblank;
uint32_t Hfront;
uint32_t Hsync;
uint32_t Hback;
uint32_t Hpol;
uint32_t Vfront;
uint32_t Vsync;
uint32_t Vback;
uint32_t Vpol;
uint32_t Alen;
uint32_t Aline;
uint32_t Hlen;
uint32_t StartBlen;
uint32_t EndBlen;
uint32_t TVLine;
uint32_t TBLineOfs;
uint32_t TEndBLine;
uint32_t BVLine;
uint32_t BBLineOfs;
uint32_t BEndBLine;
uint32_t HSyncLength;
uint32_t VSyncLength0;
} vou_output_t;
/*
vou sync info configration
*/
static vou_output_t vou_out = {
#if (LOGO_VO_HDMI == LOGO_VO_1024x768)
.Clock = 0x2384,// 65MHz
.Hactvie = 1024,
.Vactive = 768,
.FrameRate = 60,
.Hfront = 24,
.Hback = 160,
.Hsync = 136,
.Hpol = 0,
.Vfront = 3,
.Vback = 29,
.Vsync = 6,
.Vpol = 0,
#elif (LOGO_VO_HDMI == LOGO_VO_1920x1080)
.Clock = 0x03A9,// 148.5MHz
.Hactvie = 1920,
.Vactive = 1080,
.FrameRate = 60,
.Hfront = 88,
.Hback = 44,
.Hsync = 148,
.Hpol = 1,
.Vfront = 4,
.Vback = 36,
.Vsync = 5,
.Vpol = 1,
#elif (LOGO_VO_MIPI == LOGO_VO_ILI9881)
.Clock = 0,
.Hactvie = 800,
.Vactive = 1280,
.FrameRate = 60,
.Hfront = 60,
.Hback = 30,
.Hsync = 30,
.Hpol = 1,
.Vfront = 16,
.Vback = 14,
.Vsync = 2,
.Vpol = 1,
#elif (LOGO_VO_MIPI == LOGO_VO_EK79007)
.Clock = 0,
.Hactvie = 1024,
.Vactive = 600,
.FrameRate = 60,
.Hfront = 160,
.Hback = 120,
.Hsync = 40,
.Hpol = 1,
.Vfront = 12,
.Vback = 18,
.Vsync = 5,
.Vpol = 1,
#endif
};
static unsigned char * logo_i_addr = NULL;
static unsigned char * logo_o_addr = NULL;
static int logo_w = 0;
static int logo_h = 0;
static uint32_t readl(uint32_t addr)
{
uint32_t value = *(volatile uint32_t*)addr;
return value;
}
static void writel(uint32_t value, uint32_t addr)
{
*(volatile uint32_t*)addr = value;
}
static void writels(uint32_t value, uint32_t addr)
{
uint32_t tmp = readl(addr);
tmp |= value;
writel(tmp, addr);
}
static void writelc(uint32_t value, uint32_t addr)
{
uint32_t tmp = readl(addr);
tmp &= (~value);
writel(tmp, addr);
}
static void writelr(uint32_t value, uint32_t addr, uint32_t start, uint32_t bit)
{
uint32_t region = (0xFFFFFFFFU << ( start + bit )) | (0xFFFFFFFFULL >> ( 32 - start ));
uint32_t tmp = readl(addr);
tmp &= region;
tmp |= (~region) & (value << start);
writel(tmp, addr);
}
#if (LOGO_VO_MIPI == LOGO_VO_NONE)
static uint8_t readb(uint32_t addr)
{
uint8_t value = *(volatile uint8_t*)addr;
return value;
}
static void writeb(uint8_t value, uint32_t addr)
{
*(volatile uint8_t*)addr = value;
}
static void writebs(uint8_t value, uint32_t addr)
{
uint8_t tmp = readb(addr);
tmp |= value;
writeb(tmp, addr);
}
static void writebc(uint8_t value, uint32_t addr)
{
uint8_t tmp = readb(addr);
tmp &= (~value);
writeb(tmp, addr);
}
#else
void writelr_delay(uint32_t value, uint32_t addr, uint32_t start, uint32_t bit)
{
uint32_t region = (0xFFFFFFFFU << ( start + bit )) | (0xFFFFFFFFULL >> ( 32 - start ));
uint32_t tmp = readl(addr);
tmp &= region;
tmp |= (~region) & (value << start);
writel(tmp, addr);
mdelay(1);
}
#endif
void fast_osd_init(void)
{
int Hactvie = vou_out.Hactvie;
int Vactive = vou_out.Vactive;
int FrameRate = vou_out.FrameRate;
int Hfront = vou_out.Hfront;
int Hsync = vou_out.Hsync;
int Hback = vou_out.Hback;
int Vfront = vou_out.Vfront;
int Vsync = vou_out.Vsync;
int Vback = vou_out.Vback;
vou_out.Hblank = Hfront + Hsync + Hback;
vou_out.Vblank = Vfront + Vsync + Vback;
vou_out.Htotal = Hactvie + vou_out.Hblank;
vou_out.Vtotal = Vactive + vou_out.Vblank;
vou_out.PixelRate = FrameRate * vou_out.Htotal * vou_out.Vtotal;
vou_out.Alen = Hactvie;
vou_out.Aline = Vactive;
vou_out.Hlen = vou_out.Htotal - 1;
vou_out.StartBlen = Hsync + Hback - 1;
vou_out.EndBlen = Hfront;
vou_out.TVLine = vou_out.Vtotal - 1;
vou_out.TBLineOfs = Vsync + Vback - 1;
vou_out.TEndBLine = Vfront;
vou_out.BVLine = 0;
vou_out.BBLineOfs = 0;
vou_out.BEndBLine = 0;
vou_out.HSyncLength = Hsync -1;
vou_out.VSyncLength0 = Vsync - 1;
#if (LOGO_VO_HDMI != LOGO_VO_NONE)
writels(0x00003f1f, 0x34000000);
writelc(0x00000400, 0x34000078);
writels(0x00000003, 0x28100230);
writel(0x00000300, 0x34100010);
writels(0x0000007f, 0x34000014);
writelc(0x0000007f, 0x34000014);
writel(0x00cc0000, 0x34100010);
writel(0x0000000f, 0x34100004);
writelc(0x00004000, 0x3400007c);
writel(0x00000000, 0x28000068);
writel(0x00000000, 0x34100040);
writel(0x00000008, 0x34100020);
writel(0x0000000a, 0x34100024);
writel(0x00000300, 0x34100028);
writel(0x00000600, 0x3410002c);
writel(0x00000007, 0x34100030);
writel(0x0000000a, 0x34100034);
writel(0x00000080, 0x34100038);
writel(0x00000100, 0x3410003c);
#endif
}
#if (LOGO_VO_MIPI != LOGO_VO_NONE)
static uint32_t mipi_dphy_hal_get_pixel_clk_div(void)
{
/*
pll---->div--->vou
\___1/8--_>mipi_ctrl
*/
uint32_t val = 0;
uint32_t i = 0;
uint32_t clkDiv = 0;
uint32_t clk_div_tab[16][2] =
{ /*val , div*/
{0, 2},
{1, 3},
{2, 4},
{3, 5},
{4, 6},
{5, 7},
{6, 8},
{7, 9},
{8, 10},
{9, 11},
{10, 12},
{11, 13},
{12, 14},
{13, 15},
{14, 16},
{15, 1}
};
val = readl(0x3450005c);
val &= 0x0f;
for (i = 0; i < 16; i++)
{
if (val == clk_div_tab[i][0]) {
clkDiv = clk_div_tab[i][1];
break;
}
}
return clkDiv;
}
#endif
/*
* int x : logo display position x
* int y : logo display position x
* int w : logo display width
* int h : logo display height
* uint32_t addr : logo source address
* int pw : logo source picture width
* int pp : logo source picture pitch
* int ph : logo source picture height
*
* for example:
* 1. full screen osd:
* fast_osd(0, 0, 1024, 600, 0x40000000, 1024, 1024, 600);
* 2. full screen osd with smaller picture(yuv only):
* fast_osd(0, 0, 256, 150, 0x40000000, 1024, 1024, 600);
* 3. topleft 1/16 display area osd with same-sized picture
* fast_osd(0, 0, 256, 150, 0x40000000, 256, 150, 256);
*/
void fast_osd_hdmi(int type, int x, int y, int w, int h, uint32_t addr, int pw, int pp, int ph)
{
#if (LOGO_VO_HDMI == LOGO_VO_1024x768 || LOGO_VO_HDMI == LOGO_VO_1920x1080)
writebs(0x0b, 0x34204002);
writebc(0x0000000b, 0x34204002);
writelr(0x00040000|vou_out.Clock, 0x2800006c, 0, 20);//writelr(0x00042384, 0x2800006c, 0, 20);
writelr(vou_out.Clock, 0x2800006c, 0, 20);//writelr(0x00002384, 0x2800006c, 0, 20);
writeb(0x10, 0x34201000);
writeb(0x00, 0x34201001);
writeb(0x04, 0x34201002);
writeb(0x40, 0x34201003);
writeb(0x01, 0x34201004);
writeb(0x00, 0x34201005);
writeb(0x03, 0x34201006);
writeb(0x26, 0x34201007);
writeb(0x18, 0x34201008);
writeb(0x00, 0x34201009);
writeb(0x88, 0x3420100a);
writeb(0x00, 0x3420100b);
writeb(0x03, 0x3420100c);
writeb(0x06, 0x3420100d);
writeb(0x0c, 0x34201011);
writeb(0x20, 0x34201012);
writeb(0x21, 0x34201013);
writeb(0xff, 0x34201014);
writeb(0x15, 0x34201015);
writeb(0x00, 0x34201016);
writeb(0x01, 0x34204005);
writeb(0x00, 0x34204005);
writel(0x000c000c, 0x28500078);
writel(0x000c000c, 0x2850007c);
writel(0x03d403d4, 0x2850004c);
writel(0xa39003d4, 0x28500050);
writel(0x00000000, 0x34101600);
writel(0x0001fe00, 0x34101604);
writel(0x00000001, 0x34101608);
writel(0x00000000, 0x3410160c);
writel(0x000007ff, 0x34101610);
writel(0x0001fff4, 0x34101614);
writel(0x0003f80e, 0x34101618);
writel(0x00000001, 0x3410161c);
writel(0x00000fff, 0x34101620);
writel(0x0001f3e9, 0x34101624);
writel(0x0003ee1f, 0x34101628);
writel(0x00000002, 0x3410162c);
writel(0x000013fe, 0x34101630);
writel(0x0001e3e1, 0x34101634);
writel(0x0003e233, 0x34101638);
writel(0x0003fe04, 0x3410163c);
writel(0x000017fe, 0x34101640);
writel(0x0001c9dc, 0x34101644);
writel(0x0003d847, 0x34101648);
writel(0x0003fe05, 0x3410164c);
writel(0x000019fe, 0x34101650);
writel(0x0001add8, 0x34101654);
writel(0x0003cc5c, 0x34101658);
writel(0x0003fe07, 0x3410165c);
writel(0x000019fd, 0x34101660);
writel(0x00018dd7, 0x34101664);
writel(0x0003c272, 0x34101668);
writel(0x0003fc09, 0x3410166c);
writel(0x000019fe, 0x34101670);
writel(0x000165d7, 0x34101674);
writel(0x0003ba88, 0x34101678);
writel(0x0003fc0a, 0x3410167c);
writel(0x000017fe, 0x34101680);
writel(0x00013dd9, 0x34101684);
writel(0x0003b29e, 0x34101688);
writel(0x0003fc0b, 0x3410168c);
writel(0x000015fe, 0x34101690);
writel(0x000111dd, 0x34101694);
writel(0x0003aeb2, 0x34101698);
writel(0x0003fc0c, 0x3410169c);
writel(0x000013fe, 0x341016a0);
writel(0x0000e7e1, 0x341016a4);
writel(0x0003aec5, 0x341016a8);
writel(0x0003fa0c, 0x341016ac);
writel(0x00000fff, 0x341016b0);
writel(0x0000b9e6, 0x341016b4);
writel(0x0003b0d6, 0x341016b8);
writel(0x0003fc0c, 0x341016bc);
writel(0x00000bff, 0x341016c0);
writel(0x00008dec, 0x341016c4);
writel(0x0003b8e5, 0x341016c8);
writel(0x0003fc0b, 0x341016cc);
writel(0x000009ff, 0x341016d0);
writel(0x000067f1, 0x341016d4);
writel(0x0003c2f1, 0x341016d8);
writel(0x0003fc09, 0x341016dc);
writel(0x00000400, 0x341016e0);
writel(0x00003ff7, 0x341016e4);
writel(0x0003d2f9, 0x341016e8);
writel(0x0003fe07, 0x341016ec);
writel(0x00000200, 0x341016f0);
writel(0x00001ffc, 0x341016f4);
writel(0x0003e8fe, 0x341016f8);
writel(0x0003fe03, 0x341016fc);
writel(0x0001fe00, 0x34101700);
writel(0x00000001, 0x34101704);
writel(0x0001fdf9, 0x34101708);
writel(0x00000009, 0x3410170c);
writel(0x0001eff4, 0x34101710);
writel(0x0003fe16, 0x34101714);
writel(0x0001d9f1, 0x34101718);
writel(0x0003fc25, 0x3410171c);
writel(0x0001bbf0, 0x34101720);
writel(0x0003fa36, 0x34101724);
writel(0x000197f0, 0x34101728);
writel(0x0003f64a, 0x3410172c);
writel(0x00016ff1, 0x34101730);
writel(0x0003f25f, 0x34101734);
writel(0x000143f3, 0x34101738);
writel(0x0003ee75, 0x3410173c);
writel(0x000117f5, 0x34101740);
writel(0x0003ea8b, 0x34101744);
writel(0x0000ebf7, 0x34101748);
writel(0x0003e6a1, 0x3410174c);
writel(0x0000bff9, 0x34101750);
writel(0x0003e2b7, 0x34101754);
writel(0x000095fb, 0x34101758);
writel(0x0003e0cb, 0x3410175c);
writel(0x00006dfd, 0x34101760);
writel(0x0003e0dd, 0x34101764);
writel(0x00004bfe, 0x34101768);
writel(0x0003e2ec, 0x3410176c);
writel(0x00002dff, 0x34101770);
writel(0x0003e8f7, 0x34101774);
writel(0x00001200, 0x34101778);
writel(0x0003f2fe, 0x3410177c);
writel(0x0001fe00, 0x34101800);
writel(0x00000001, 0x34101804);
writel(0x0001fdf9, 0x34101808);
writel(0x00000009, 0x3410180c);
writel(0x0001eff4, 0x34101810);
writel(0x0003fe16, 0x34101814);
writel(0x0001d9f1, 0x34101818);
writel(0x0003fc25, 0x3410181c);
writel(0x0001bbf0, 0x34101820);
writel(0x0003fa36, 0x34101824);
writel(0x000197f0, 0x34101828);
writel(0x0003f64a, 0x3410182c);
writel(0x00016ff1, 0x34101830);
writel(0x0003f25f, 0x34101834);
writel(0x000143f3, 0x34101838);
writel(0x0003ee75, 0x3410183c);
writel(0x000117f5, 0x34101840);
writel(0x0003ea8b, 0x34101844);
writel(0x0000ebf7, 0x34101848);
writel(0x0003e6a1, 0x3410184c);
writel(0x0000bff9, 0x34101850);
writel(0x0003e2b7, 0x34101854);
writel(0x000095fb, 0x34101858);
writel(0x0003e0cb, 0x3410185c);
writel(0x00006dfd, 0x34101860);
writel(0x0003e0dd, 0x34101864);
writel(0x00004bfe, 0x34101868);
writel(0x0003e2ec, 0x3410186c);
writel(0x00002dff, 0x34101870);
writel(0x0003e8f7, 0x34101874);
writel(0x00001200, 0x34101878);
writel(0x0003f2fe, 0x3410187c);
writel(0x00003404, 0x34101a00);
writel(0x00009a3b, 0x34101a04);
writel(0x0000343c, 0x34101a08);
writel(0x00000004, 0x34101a0c);
writel(0x00003004, 0x34101a10);
writel(0x00009a39, 0x34101a14);
writel(0x0000383d, 0x34101a18);
writel(0x00000005, 0x34101a1c);
writel(0x00002c03, 0x34101a20);
writel(0x00009838, 0x34101a24);
writel(0x00003c3f, 0x34101a28);
writel(0x00000006, 0x34101a2c);
writel(0x00002803, 0x34101a30);
writel(0x00009a35, 0x34101a34);
writel(0x00003e41, 0x34101a38);
writel(0x00000007, 0x34101a3c);
writel(0x00002402, 0x34101a40);
writel(0x00009634, 0x34101a44);
writel(0x00004642, 0x34101a48);
writel(0x00000008, 0x34101a4c);
writel(0x00002202, 0x34101a50);
writel(0x00009431, 0x34101a54);
writel(0x00004a44, 0x34101a58);
writel(0x00000009, 0x34101a5c);
writel(0x00001e01, 0x34101a60);
writel(0x0000962f, 0x34101a64);
writel(0x00004e45, 0x34101a68);
writel(0x0000000a, 0x34101a6c);
writel(0x00001c01, 0x34101a70);
writel(0x0000922d, 0x34101a74);
writel(0x00005247, 0x34101a78);
writel(0x0000000b, 0x34101a7c);
writel(0x00001801, 0x34101a80);
writel(0x0000902b, 0x34101a84);
writel(0x00005648, 0x34101a88);
writel(0x0000020c, 0x34101a8c);
writel(0x00001600, 0x34101a90);
writel(0x00008e29, 0x34101a94);
writel(0x00005a49, 0x34101a98);
writel(0x0000020e, 0x34101a9c);
writel(0x00001400, 0x34101aa0);
writel(0x00008c27, 0x34101aa4);
writel(0x00005e4a, 0x34101aa8);
writel(0x0000020f, 0x34101aac);
writel(0x00001200, 0x34101ab0);
writel(0x00008825, 0x34101ab4);
writel(0x0000624a, 0x34101ab8);
writel(0x00000411, 0x34101abc);
writel(0x00001000, 0x34101ac0);
writel(0x00008423, 0x34101ac4);
writel(0x0000684b, 0x34101ac8);
writel(0x00000412, 0x34101acc);
writel(0x00000e00, 0x34101ad0);
writel(0x0000841f, 0x34101ad4);
writel(0x00006a4c, 0x34101ad8);
writel(0x00000614, 0x34101adc);
writel(0x00000c00, 0x34101ae0);
writel(0x00007e1e, 0x34101ae4);
writel(0x0000704c, 0x34101ae8);
writel(0x00000616, 0x34101aec);
writel(0x00000a00, 0x34101af0);
writel(0x00007c1c, 0x34101af4);
writel(0x0000724c, 0x34101af8);
writel(0x00000818, 0x34101afc);
writel(0x0000fe3d, 0x34101b00);
writel(0x00000c3e, 0x34101b04);
writel(0x0000fe37, 0x34101b08);
writel(0x00000c44, 0x34101b0c);
writel(0x0000fc31, 0x34101b10);
writel(0x00000e4a, 0x34101b14);
writel(0x0000f82c, 0x34101b18);
writel(0x00001050, 0x34101b1c);
writel(0x0000f426, 0x34101b20);
writel(0x00001456, 0x34101b24);
writel(0x0000ee22, 0x34101b28);
writel(0x0000185b, 0x34101b2c);
writel(0x0000e81d, 0x34101b30);
writel(0x00001c61, 0x34101b34);
writel(0x0000e019, 0x34101b38);
writel(0x00002266, 0x34101b3c);
writel(0x0000d615, 0x34101b40);
writel(0x00002a6b, 0x34101b44);
writel(0x0000cc11, 0x34101b48);
writel(0x00003270, 0x34101b4c);
writel(0x0000c20e, 0x34101b50);
writel(0x00003a74, 0x34101b54);
writel(0x0000b80c, 0x34101b58);
writel(0x00004476, 0x34101b5c);
writel(0x0000ac0a, 0x34101b60);
writel(0x00004c7a, 0x34101b64);
writel(0x0000a008, 0x34101b68);
writel(0x0000587c, 0x34101b6c);
writel(0x00009407, 0x34101b70);
writel(0x0000627e, 0x34101b74);
writel(0x00008806, 0x34101b78);
writel(0x00006e7f, 0x34101b7c);
writel(0x0000fe3d, 0x34101c00);
writel(0x00000c3e, 0x34101c04);
writel(0x0000fe37, 0x34101c08);
writel(0x00000c44, 0x34101c0c);
writel(0x0000fc31, 0x34101c10);
writel(0x00000e4a, 0x34101c14);
writel(0x0000f82c, 0x34101c18);
writel(0x00001050, 0x34101c1c);
writel(0x0000f426, 0x34101c20);
writel(0x00001456, 0x34101c24);
writel(0x0000ee22, 0x34101c28);
writel(0x0000185b, 0x34101c2c);
writel(0x0000e81d, 0x34101c30);
writel(0x00001c61, 0x34101c34);
writel(0x0000e019, 0x34101c38);
writel(0x00002266, 0x34101c3c);
writel(0x0000d615, 0x34101c40);
writel(0x00002a6b, 0x34101c44);
writel(0x0000cc11, 0x34101c48);
writel(0x00003270, 0x34101c4c);
writel(0x0000c20e, 0x34101c50);
writel(0x00003a74, 0x34101c54);
writel(0x0000b80c, 0x34101c58);
writel(0x00004476, 0x34101c5c);
writel(0x0000ac0a, 0x34101c60);
writel(0x00004c7a, 0x34101c64);
writel(0x0000a008, 0x34101c68);
writel(0x0000587c, 0x34101c6c);
writel(0x00009407, 0x34101c70);
writel(0x0000627e, 0x34101c74);
writel(0x00008806, 0x34101c78);
writel(0x00006e7f, 0x34101c7c);
writel(0x00000087, 0x34101f14);
writel(0x00000005, 0x34101f18);
writel(0x00000000, 0x34101f1c);
writel(0x00089000, 0x34101f00);
writel(0x200c48ee, 0x34101f04);
writel(0x00000000, 0x34101f08);
writel(0x02000080, 0x34101f0c);
writel(0x00000001, 0x34101f4c);
writel((vou_out.Vactive << 16) + vou_out.Hactvie, 0x34101024);//writel(0x03000400, 0x34101024);
writel((vou_out.StartBlen << 16) + vou_out.Hlen, 0x34101028);//writel(0x0127053f, 0x34101028);
writel((vou_out.TBLineOfs << 16) + vou_out.TVLine, 0x3410102C);//writel(0x00220325, 0x3410102C);
writel((vou_out.BBLineOfs << 16) + vou_out.BVLine, 0x34101030);//writel(0x00000000, 0x34101030);
writel(0xff00ff00, 0x34101034);
writel(0x356ebd01, 0x34101060);
writel(0x00069901, 0x34101064);
writel(0x14e00101, 0x34101068);
writel(0x33fc4861, 0x3410106c);
if (LOGO_YUV == type) {
writel(0x00000040, 0x34101200);
writel((ph<<16) + pw, 0x34101208);
writel(pp, 0x3410120c);
writel(addr, 0x34101210);
writel(addr + pp*ph, 0x34101214);
writel((y<<16) + x, 0x34101218);
writel(0x00000000, 0x34101230);
writel(0x00000000, 0x34101234);
writel((h<<16) + w, 0x3410121c);
writel(0x80800001, 0x34101004);
writel(0x00000009, 0x34101000);
} else {
// w & h are not used
if (LOGO_RGB_8888 == type) {
writel(0x00000002, 0x34101120); // mc abgr8888
//writel(0x0000001A, 0x34101120); //hik argb8888
} else if (LOGO_RGB_1555 == type) {
writel(0x00000010, 0x34101120); //mc argb1555
}
writel(0x00008000, 0x34101124);
writel(0x00000000, 0x34101128);
writel((ph<<16) + pw, 0x3410112c);
writel(pp, 0x34101130);
writel(addr, 0x34101134);
writel((y<<16) + x, 0x34101138);
writel(0x00000011, 0x34101000);
}
writel(0x00000006, 0x341010b0);
writel(0x00000000, 0x34101014);
writel(0x008080ff, 0x34101020);
writel(0x00ffffff, 0x3410103c);
writel(0x00000300, 0x3410100c);
writel(0x00000001, 0x3410100c);
writel(0xFFFFFFFF, 0x34101008);
#endif
}
void fast_osd_ili9881(int type, int x, int y, int w, int h, uint32_t addr, int pw, int pp, int ph)
{
#if (LOGO_VO_MIPI == LOGO_VO_ILI9881)
uint32_t clkdiv = 0;
/*pinmux*/
writel(0x00000002, 0x2820009c);
writel(0x00000002, 0x282000a0);
writel(0x00000002, 0x282000a4);
writel(0x00000002, 0x282000a8);
writel(0x00000002, 0x282000ac);
writel(0x00000002, 0x282000b0);
writel(0x00000002, 0x282000b4);
writel(0x00000002, 0x282000b8);
writel(0x00000002, 0x282000bc);
writel(0x00000002, 0x282000c0);
/*vou clock apb*/
writels(0x00003f1f, 0x34000000);
writelc(0x00000400, 0x34000078);
writels(0x00000003, 0x28100030);
writels(0x0000007f, 0x34000014);
writelc(0x0000007f, 0x34000014);
writel(0x0000000f, 0x34100004);
writels(0x00000300, 0x34000078);
writelr(0x00000000, 0x343000a0, 2, 1);
writelr(0x00000001, 0x343000b4, 0, 1);
writelr(0x00000001, 0x343000a0, 3, 1);
writelc(0x00002000, 0x34500064);
writelr(0x00000001, 0x343000b4, 1, 1);
writelr(0x00000000, 0x343000b8, 16, 1);
writelr(0x00000001, 0x343000a0, 0, 1);
writelr(0x00000001, 0x343000a0, 1, 1);
writelr(0x00000000, 0x343000b4, 0, 1);
writels(0x00002000, 0x34500064);
writelr(0x00000000, 0x34500064, 1, 7);
writelr(0x00000007, 0x34500064, 9, 4);
writelr(0x00000001, 0x34500064, 13, 1);
writelr(0x00080000, 0x34500060, 0, 32);
writelr(0x00000002, 0x34500068, 0, 4);
writelr(0x00000002, 0x34500068, 4, 4);
writelr(0x00000007, 0x34500068, 8, 3);
writelr(0x00000000, 0x34500068, 11, 3);
writelr(0x00000001, 0x3450007c, 0, 8);
writelr(0x00000007, 0x3450007c, 8, 8);
writelr(0x0000001f, 0x34500074, 0, 5);
writelr(0x00000003, 0x34500074, 5, 2);
writelr(0x00000000, 0x34500074, 7, 3);
writelr(0x0a0296b5, 0x3450005c, 0, 32);
writelr(0x000000b6, 0x34500058, 0, 32);
writelr(0x000001f4, 0x34500000, 0, 15);
writelr(0x00002710, 0x34500004, 0, 31);
writelr(0x00030e02, 0x34500008, 0, 32);//08
writelr(0x00120409, 0x3450000c, 0, 32);
writelr(0x00000100, 0x34500078, 0, 32);
writelr(0x000001f4, 0x34500010, 0, 32);
writelr(0x00002710, 0x34500014, 0, 32);
writelr(0x030e0609, 0x34500018, 0, 32);//18
writelr(0x00000100, 0x3450001c, 0, 32);
writelr(0x001c0a23, 0x34500020, 0, 32);//20
writelr(0x000001f4, 0x34500024, 0, 32);
writelr(0x00002710, 0x34500028, 0, 32);
writelr(0x030e0609, 0x3450002c, 0, 32);//2c
writelr(0x00000100, 0x34500030, 0, 32);
writelr(0x000001f4, 0x34500034, 0, 32);
writelr(0x00002710, 0x34500038, 0, 32);
writelr(0x030e0609, 0x3450003c, 0, 32);//3c
writelr(0x00000100, 0x34500040, 0, 32);
writelr(0x000001f4, 0x34500044, 0, 32);
writelr(0x00002710, 0x34500048, 0, 32);
writelr(0x030e0609, 0x3450004c, 0, 32);//4c
writelr(0x00000100, 0x34500050, 0, 32);
writelr(0x00000005, 0x34500054, 0, 8);
writelr(0x0000007f, 0x34500074, 0, 7);
writelr(0x00000000, 0x34500074, 7, 3);
writelr(0x00000001, 0x3450007c, 0, 8);
writelr(0x0000000a, 0x3450007c, 8, 8);
writelr(0x00000000, 0x3450006c, 0, 3);
writelr(0x00000001, 0x3450006c, 3, 1);
writelr(0x00000000, 0x3450006c, 4, 2);
writelr(0x00000000, 0x3450006c, 6, 1);
udelay(1000);
writelr(0x00000000, 0x34500064, 1, 7);
writelr(0x00000007, 0x34500064, 9, 4);//
writelr(0x00000001, 0x34500064, 13, 1);
writelr(0x00000000, 0x3430000c, 0, 2);
writelr(0x00000005, 0x34300010, 0, 4);
writelr(0x00000001, 0x34300014, 2, 1);
writelr(0x00000001, 0x34300014, 1, 1);
writelr(0x0000000c, 0x34300008, 0, 8);
writelr(0x00000001, 0x34300008, 8, 8);
writel(0xffffff01, 0x34300068);
writelr(0x00000001, 0x3430001c, 0, 2);
writelr(0x00000004, 0x34300020, 0, 4);
writelr(0x00000001, 0x34300020, 16, 2);
writelr(0x00000001, 0x34300024, 0, 1);
writelr(0x00000064, 0x34300028, 16, 16);
writelr(0x00000008, 0x34300028, 0, 16);
writelr(0x00000001, 0x3430002c, 2, 1);
writelr(0x00000001, 0x3430002c, 3, 1);
writelr(0x00000001, 0x3430002c, 4, 1);
writelr(0x00000000, 0x34300030, 0, 2);
writelr(0x00000001, 0x34300034, 0, 1);
writelr(0x00000002, 0x34300038, 0, 2);
writelr(0x00000000, 0x34300038, 8, 1);
writelr(0x00000001, 0x34300038, 9, 1);
writelr(0x00000000, 0x34300038, 10, 1);
writelr(0x00000000, 0x34300038, 11, 1);
writelr(0x00000000, 0x34300038, 12, 1);
writelr(0x00000000, 0x34300038, 13, 1);
writelr(vou_out.Hactvie , 0x3430003c, 0, 14);//writelr(0x00000320, 0x3430003c, 0, 14);
writelr(0x00000001, 0x34300040, 0, 13);
writelr(0x0000000a, 0x34300044, 0, 13);
clkdiv = mipi_dphy_hal_get_pixel_clk_div();
writelr((vou_out.Hsync * clkdiv / 8), 0x34300048, 0, 12);//writelr(0x00000009, 0x34300048, 0, 12);
writelr((vou_out.Hback * clkdiv / 8), 0x3430004c, 0, 12);//writelr(0x00000014, 0x3430004c, 0, 12);
writelr(((vou_out.Hsync + vou_out.Hback + vou_out.Hfront + vou_out.Hactvie) * clkdiv / 8), 0x34300050, 0, 15);//writelr(0x000003a5, 0x34300050, 0, 15);
writelr(vou_out.Vsync, 0x34300054, 0, 10);//writelr(0x00000004, 0x34300054, 0, 10);
writelr(vou_out.Vback, 0x34300058, 0, 10);//writelr(0x00000018, 0x34300058, 0, 10);
writelr(vou_out.Vfront, 0x3430005c, 0, 10);//writelr(0x00000014, 0x3430005c, 0, 10);
writelr(vou_out.Vactive, 0x34300060, 0, 14);//writelr(0x00000500, 0x34300060, 0, 14);
writelr(0x00000000, 0x34300018, 16, 8);
writelr(0x00000000, 0x34300018, 0, 8);
writelr(0x0000006e, 0x3430009c, 0, 15);
writelr(0x00000025, 0x3430009c, 16, 8);
writelr(0x00000000, 0x34300064, 0, 16);
writelr(0x00000001, 0x34300094, 0, 1);
writelr(0x00000000, 0x34300078, 0, 16);
writelr(0x00000000, 0x34300078, 16, 16);
writelr(0x00000000, 0x3430007c, 0, 16);
writelr(0x00000000, 0x34300080, 0, 16);
writelr(0x00000000, 0x34300084, 0, 16);
writelr(0x00000000, 0x34300088, 0, 16);
writelr(0x00000000, 0x3430008c, 0, 16);
writelr(0x00000087, 0x34300098, 0, 10);
writelr(0x00000025, 0x34300098, 16, 10);
writelr(0x00000000, 0x343000f4, 0, 15);
writelr(0x00000028, 0x343000a4, 8, 8);
writelr(0x00000003, 0x343000a4, 0, 2);
writelr(0x00000000, 0x343000a8, 0, 4);
writelr(0x00000000, 0x343000ac, 0, 4);
writelr(0x00000000, 0x34300100, 0, 1);
writelr(0x00000000, 0x34300100, 8, 1);
writelr(0x00000000, 0x34300100, 16, 1);
writel(0xffffffff, 0x343000c4);
writel(0xffffffff, 0x343000c8);
writelr(0x00000000, 0x34300004, 0, 1);
writelr(0x00000001, 0x34300004, 0, 1);
writels(0x00004000, 0x3400007c); //vou->mipi dsi
writel(0x000002ac, 0x340000a4);
//----------------select size 1280/800/1/60------------------------
writel(0x00000008, 0x34100020);
writel(0x0000000a, 0x34100024);
writel(0x00000300, 0x34100028);
writel(0x00000600, 0x3410002c);
writel(0x00000007, 0x34100030);
writel(0x0000000a, 0x34100034);
writel(0x00000080, 0x34100038);
writel(0x00000100, 0x3410003c);
writel(0x00000001, 0x34100040);
//vou:[0]kick off start device
writel(0x00000007, 0x34101f14);
writel(0x00000003, 0x34101f18);
writel(0x00000000, 0x34101f1c);
printf("start reset GPIO7-1\n");
writelr(0x00000001, 0x1b070008, 1, 1); // DIR: set GPIO7-1 output
writelr(0x00000001, 0x1b070004, 1, 1); // DMSK: enable GPIO7-1
writelr(0x00000001, 0x1b070000, 1, 1); // DATA: GPIO7-1 output 1;
mdelay(20);
writelr(0x00000001, 0x1b070000, 1, 0); // DATA: GPIO7-1 output 0;
mdelay(60);
writelr(0x00000001, 0x1b070000, 1, 1); // DATA: GPIO7-1 output 1;
mdelay(120);
/*---1280*800 register config-------------------------start*/
printf("start write panel register\n");
writel(0x038198ff, 0x34300070); //long
mdelay(1);
// writelr_delay(0x00000439, 0x3430006c, 0, 24); //bist
writelr_delay(0x00000429, 0x3430006c, 0, 24); //normal
writelr_delay(0x00000115, 0x3430006c, 0, 24);
writelr_delay(0x00000215, 0x3430006c, 0, 24);
writelr_delay(0x00530315, 0x3430006c, 0, 24);
writelr_delay(0x00000415, 0x3430006c, 0, 24);
writelr_delay(0x00000515, 0x3430006c, 0, 24);
writelr_delay(0x00080615, 0x3430006c, 0, 24);
writelr_delay(0x00000715, 0x3430006c, 0, 24);
writelr_delay(0x00000815, 0x3430006c, 0, 24);
writelr_delay(0x00000915, 0x3430006c, 0, 24);
writelr_delay(0x00000a15, 0x3430006c, 0, 24);
writelr_delay(0x00000b15, 0x3430006c, 0, 24);
writelr_delay(0x00000c15, 0x3430006c, 0, 24);
writelr_delay(0x00000d15, 0x3430006c, 0, 24);
writelr_delay(0x00000e15, 0x3430006c, 0, 24);
writelr_delay(0x00260f15, 0x3430006c, 0, 24);
writelr_delay(0x00261015, 0x3430006c, 0, 24);
writelr_delay(0x00001115, 0x3430006c, 0, 24);
writelr_delay(0x00001215, 0x3430006c, 0, 24);
writelr_delay(0x00001315, 0x3430006c, 0, 24);
writelr_delay(0x00001415, 0x3430006c, 0, 24);
writelr_delay(0x00001515, 0x3430006c, 0, 24);
writelr_delay(0x00001615, 0x3430006c, 0, 24);
writelr_delay(0x00001715, 0x3430006c, 0, 24);
writelr_delay(0x00001815, 0x3430006c, 0, 24);
writelr_delay(0x00001915, 0x3430006c, 0, 24);
writelr_delay(0x00001a15, 0x3430006c, 0, 24);
writelr_delay(0x00001b15, 0x3430006c, 0, 24);
writelr_delay(0x00001c15, 0x3430006c, 0, 24);
writelr_delay(0x00001d15, 0x3430006c, 0, 24);
writelr_delay(0x00401e15, 0x3430006c, 0, 24);
writelr_delay(0x00c01f15, 0x3430006c, 0, 24);
writelr_delay(0x00062015, 0x3430006c, 0, 24);
writelr_delay(0x00012115, 0x3430006c, 0, 24);
writelr_delay(0x00072215, 0x3430006c, 0, 24);
writelr_delay(0x00002315, 0x3430006c, 0, 24);
writelr_delay(0x008a2415, 0x3430006c, 0, 24);
writelr_delay(0x008a2515, 0x3430006c, 0, 24);
writelr_delay(0x00002615, 0x3430006c, 0, 24);
writelr_delay(0x00002715, 0x3430006c, 0, 24);
writelr_delay(0x00332815, 0x3430006c, 0, 24);
writelr_delay(0x00332915, 0x3430006c, 0, 24);
writelr_delay(0x00002a15, 0x3430006c, 0, 24);
writelr_delay(0x00002b15, 0x3430006c, 0, 24);
writelr_delay(0x00082c15, 0x3430006c, 0, 24);
writelr_delay(0x00082d15, 0x3430006c, 0, 24);
writelr_delay(0x000b2e15, 0x3430006c, 0, 24);
writelr_delay(0x000b2f15, 0x3430006c, 0, 24);
writelr_delay(0x00003015, 0x3430006c, 0, 24);
writelr_delay(0x00003115, 0x3430006c, 0, 24);
writelr_delay(0x00423215, 0x3430006c, 0, 24);
writelr_delay(0x00003315, 0x3430006c, 0, 24);
writelr_delay(0x00003415, 0x3430006c, 0, 24);
writelr_delay(0x000a3515, 0x3430006c, 0, 24);
writelr_delay(0x00003615, 0x3430006c, 0, 24);
writelr_delay(0x00083715, 0x3430006c, 0, 24);
writelr_delay(0x003c3815, 0x3430006c, 0, 24);
writelr_delay(0x00003915, 0x3430006c, 0, 24);
writelr_delay(0x00003a15, 0x3430006c, 0, 24);
writelr_delay(0x00003b15, 0x3430006c, 0, 24);
writelr_delay(0x00003c15, 0x3430006c, 0, 24);
writelr_delay(0x00003d15, 0x3430006c, 0, 24);
writelr_delay(0x00003e15, 0x3430006c, 0, 24);
writelr_delay(0x00003f15, 0x3430006c, 0, 24);
writelr_delay(0x00004015, 0x3430006c, 0, 24);
writelr_delay(0x00004115, 0x3430006c, 0, 24);
writelr_delay(0x00004215, 0x3430006c, 0, 24);
writelr_delay(0x00084315, 0x3430006c, 0, 24);
writelr_delay(0x00004415, 0x3430006c, 0, 24);
writelr_delay(0x00015015, 0x3430006c, 0, 24);
writelr_delay(0x00235115, 0x3430006c, 0, 24);
writelr_delay(0x00455215, 0x3430006c, 0, 24);
writelr_delay(0x00675315, 0x3430006c, 0, 24);
writelr_delay(0x00895415, 0x3430006c, 0, 24);
writelr_delay(0x00ab5515, 0x3430006c, 0, 24);
writelr_delay(0x00015615, 0x3430006c, 0, 24);
writelr_delay(0x00235715, 0x3430006c, 0, 24);
writelr_delay(0x00455815, 0x3430006c, 0, 24);
writelr_delay(0x00675915, 0x3430006c, 0, 24);
writelr_delay(0x00895a15, 0x3430006c, 0, 24);
writelr_delay(0x00ab5b15, 0x3430006c, 0, 24);
writelr_delay(0x00cd5c15, 0x3430006c, 0, 24);
writelr_delay(0x00ef5d15, 0x3430006c, 0, 24);
writelr_delay(0x00005e15, 0x3430006c, 0, 24);
writelr_delay(0x00015f15, 0x3430006c, 0, 24);
writelr_delay(0x00016015, 0x3430006c, 0, 24);
writelr_delay(0x00066115, 0x3430006c, 0, 24);
writelr_delay(0x00066215, 0x3430006c, 0, 24);
writelr_delay(0x00066315, 0x3430006c, 0, 24);
writelr_delay(0x00066415, 0x3430006c, 0, 24);
writelr_delay(0x00006515, 0x3430006c, 0, 24);
writelr_delay(0x00006615, 0x3430006c, 0, 24);
writelr_delay(0x00176715, 0x3430006c, 0, 24);
writelr_delay(0x00026815, 0x3430006c, 0, 24);
writelr_delay(0x00166915, 0x3430006c, 0, 24);
writelr_delay(0x00166a15, 0x3430006c, 0, 24);
writelr_delay(0x00026b15, 0x3430006c, 0, 24);
writelr_delay(0x000d6c15, 0x3430006c, 0, 24);
writelr_delay(0x000d6d15, 0x3430006c, 0, 24);
writelr_delay(0x000c6e15, 0x3430006c, 0, 24);
writelr_delay(0x000c6f15, 0x3430006c, 0, 24);
writelr_delay(0x000f7015, 0x3430006c, 0, 24);
writelr_delay(0x000f7115, 0x3430006c, 0, 24);
writelr_delay(0x000e7215, 0x3430006c, 0, 24);
writelr_delay(0x000e7315, 0x3430006c, 0, 24);
writelr_delay(0x00027415, 0x3430006c, 0, 24);
writelr_delay(0x00017515, 0x3430006c, 0, 24);
writelr_delay(0x00017615, 0x3430006c, 0, 24);
writelr_delay(0x00067715, 0x3430006c, 0, 24);
writelr_delay(0x00067815, 0x3430006c, 0, 24);
writelr_delay(0x00067915, 0x3430006c, 0, 24);
writelr_delay(0x00067a15, 0x3430006c, 0, 24);
writelr_delay(0x00007b15, 0x3430006c, 0, 24);
writelr_delay(0x00007c15, 0x3430006c, 0, 24);
writelr_delay(0x00177d15, 0x3430006c, 0, 24);
writelr_delay(0x00027e15, 0x3430006c, 0, 24);
writelr_delay(0x00167f15, 0x3430006c, 0, 24);
writelr_delay(0x00168015, 0x3430006c, 0, 24);
writelr_delay(0x00028115, 0x3430006c, 0, 24);
writelr_delay(0x000d8215, 0x3430006c, 0, 24);
writelr_delay(0x000d8315, 0x3430006c, 0, 24);
writelr_delay(0x000c8415, 0x3430006c, 0, 24);
writelr_delay(0x000c8515, 0x3430006c, 0, 24);
writelr_delay(0x000f8615, 0x3430006c, 0, 24);
writelr_delay(0x000f8715, 0x3430006c, 0, 24);
writelr_delay(0x000e8815, 0x3430006c, 0, 24);
writelr_delay(0x000e8915, 0x3430006c, 0, 24);
writelr_delay(0x00028a15, 0x3430006c, 0, 24);
writel(0x048198ff, 0x34300070); //long
mdelay(1);
writelr_delay(0x00000429, 0x3430006c, 0, 24);
writelr_delay(0x002b6e15, 0x3430006c, 0, 24);
writelr_delay(0x00356f15, 0x3430006c, 0, 24);
writelr_delay(0x00a43a15, 0x3430006c, 0, 24);
writelr_delay(0x00173515, 0x3430006c, 0, 24);
writelr_delay(0x001a8d15, 0x3430006c, 0, 24);
writelr_delay(0x00ba8715, 0x3430006c, 0, 24);
writelr_delay(0x00d1b215, 0x3430006c, 0, 24);
writelr_delay(0x000b8815, 0x3430006c, 0, 24);
writelr_delay(0x00013815, 0x3430006c, 0, 24);
writelr_delay(0x00003915, 0x3430006c, 0, 24);
writelr_delay(0x0007b515, 0x3430006c, 0, 24);
writelr_delay(0x00753115, 0x3430006c, 0, 24);
//writelr_delay(0x00012f15, 0x3430006c, 0, 24);//bist mode
writel(0x018198ff, 0x34300070); //long
mdelay(1);
writelr_delay(0x00000429, 0x3430006c, 0, 24);
writelr_delay(0x000a2215, 0x3430006c, 0, 24);
writelr_delay(0x00003115, 0x3430006c, 0, 24);
writelr_delay(0x00405315, 0x3430006c, 0, 24);
writelr_delay(0x00405515, 0x3430006c, 0, 24);
writelr_delay(0x00955015, 0x3430006c, 0, 24);
writelr_delay(0x00905115, 0x3430006c, 0, 24);
writelr_delay(0x00226015, 0x3430006c, 0, 24);
writelr_delay(0x00206215, 0x3430006c, 0, 24);
writelr_delay(0x0000a015, 0x3430006c, 0, 24);
writelr_delay(0x0022a115, 0x3430006c, 0, 24);
writelr_delay(0x0032a215, 0x3430006c, 0, 24);
writelr_delay(0x0015a315, 0x3430006c, 0, 24);
writelr_delay(0x001aa415, 0x3430006c, 0, 24);
writelr_delay(0x002ca515, 0x3430006c, 0, 24);
writelr_delay(0x0020a615, 0x3430006c, 0, 24);
writelr_delay(0x0021a715, 0x3430006c, 0, 24);
writelr_delay(0x009aa815, 0x3430006c, 0, 24);
writelr_delay(0x001ea915, 0x3430006c, 0, 24);
writelr_delay(0x002aaa15, 0x3430006c, 0, 24);
writelr_delay(0x0080ab15, 0x3430006c, 0, 24);
writelr_delay(0x001aac15, 0x3430006c, 0, 24);
writelr_delay(0x0018ad15, 0x3430006c, 0, 24);
writelr_delay(0x004cae15, 0x3430006c, 0, 24);
writelr_delay(0x0021af15, 0x3430006c, 0, 24);
writelr_delay(0x0029b015, 0x3430006c, 0, 24);
writelr_delay(0x004db115, 0x3430006c, 0, 24);
writelr_delay(0x005ab215, 0x3430006c, 0, 24);
writelr_delay(0x0023b315, 0x3430006c, 0, 24);
writelr_delay(0x0000c015, 0x3430006c, 0, 24);
writelr_delay(0x0022c115, 0x3430006c, 0, 24);
writelr_delay(0x0032c215, 0x3430006c, 0, 24);
writelr_delay(0x0016c315, 0x3430006c, 0, 24);
writelr_delay(0x0019c415, 0x3430006c, 0, 24);
writelr_delay(0x002cc515, 0x3430006c, 0, 24);
writelr_delay(0x0020c615, 0x3430006c, 0, 24);
writelr_delay(0x0021c715, 0x3430006c, 0, 24);
writelr_delay(0x009ac815, 0x3430006c, 0, 24);
writelr_delay(0x001dc915, 0x3430006c, 0, 24);
writelr_delay(0x002aca15, 0x3430006c, 0, 24);
writelr_delay(0x0081cb15, 0x3430006c, 0, 24);
writelr_delay(0x001acc15, 0x3430006c, 0, 24);
writelr_delay(0x0018cd15, 0x3430006c, 0, 24);
writelr_delay(0x004cce15, 0x3430006c, 0, 24);
writelr_delay(0x0022cf15, 0x3430006c, 0, 24);
writelr_delay(0x0028d015, 0x3430006c, 0, 24);
writelr_delay(0x004dd115, 0x3430006c, 0, 24);
writelr_delay(0x005ad215, 0x3430006c, 0, 24);
writelr_delay(0x0023d315, 0x3430006c, 0, 24);
writel(0x008198ff, 0x34300070); //long
mdelay(1);
writelr_delay(0x00000429, 0x3430006c, 0, 24);
writelr_delay(0x00003515, 0x3430006c, 0, 24);
mdelay(20);
writelr(0x00001115, 0x3430006c, 0, 24);
mdelay(600);
writelr(0x00002915, 0x3430006c, 0, 24);
mdelay(40);
/*------1280*800 register config-------------------end*/
writel(0x00000000, 0x34300068);
writel(0x00000014, 0x3430002c);
writel(0x00000000, 0x34300034);
/*-------vou cfg dsi high speed end------------------*/
writel(0x00000000, 0x34101600);
writel(0x0001fe00, 0x34101604);
writel(0x00000001, 0x34101608);
writel(0x00000000, 0x3410160c);
writel(0x000007ff, 0x34101610);
writel(0x0001fff4, 0x34101614);
writel(0x0003f80e, 0x34101618);
writel(0x00000001, 0x3410161c);
writel(0x00000fff, 0x34101620);
writel(0x0001f3e9, 0x34101624);
writel(0x0003ee1f, 0x34101628);
writel(0x00000002, 0x3410162c);
writel(0x000013fe, 0x34101630);
writel(0x0001e3e1, 0x34101634);
writel(0x0003e233, 0x34101638);
writel(0x0003fe04, 0x3410163c);
writel(0x000017fe, 0x34101640);
writel(0x0001c9dc, 0x34101644);
writel(0x0003d847, 0x34101648);
writel(0x0003fe05, 0x3410164c);
writel(0x000019fe, 0x34101650);
writel(0x0001add8, 0x34101654);
writel(0x0003cc5c, 0x34101658);
writel(0x0003fe07, 0x3410165c);
writel(0x000019fd, 0x34101660);
writel(0x00018dd7, 0x34101664);
writel(0x0003c272, 0x34101668);
writel(0x0003fc09, 0x3410166c);
writel(0x000019fe, 0x34101670);
writel(0x000165d7, 0x34101674);
writel(0x0003ba88, 0x34101678);
writel(0x0003fc0a, 0x3410167c);
writel(0x000017fe, 0x34101680);
writel(0x00013dd9, 0x34101684);
writel(0x0003b29e, 0x34101688);
writel(0x0003fc0b, 0x3410168c);
writel(0x000015fe, 0x34101690);
writel(0x000111dd, 0x34101694);
writel(0x0003aeb2, 0x34101698);
writel(0x0003fc0c, 0x3410169c);
writel(0x000013fe, 0x341016a0);
writel(0x0000e7e1, 0x341016a4);
writel(0x0003aec5, 0x341016a8);
writel(0x0003fa0c, 0x341016ac);
writel(0x00000fff, 0x341016b0);
writel(0x0000b9e6, 0x341016b4);
writel(0x0003b0d6, 0x341016b8);
writel(0x0003fc0c, 0x341016bc);
writel(0x00000bff, 0x341016c0);
writel(0x00008dec, 0x341016c4);
writel(0x0003b8e5, 0x341016c8);
writel(0x0003fc0b, 0x341016cc);
writel(0x000009ff, 0x341016d0);
writel(0x000067f1, 0x341016d4);
writel(0x0003c2f1, 0x341016d8);
writel(0x0003fc09, 0x341016dc);
writel(0x00000400, 0x341016e0);
writel(0x00003ff7, 0x341016e4);
writel(0x0003d2f9, 0x341016e8);
writel(0x0003fe07, 0x341016ec);
writel(0x00000200, 0x341016f0);
writel(0x00001ffc, 0x341016f4);
writel(0x0003e8fe, 0x341016f8);
writel(0x0003fe03, 0x341016fc);
writel(0x0001fe00, 0x34101700);
writel(0x00000001, 0x34101704);
writel(0x0001fdf9, 0x34101708);
writel(0x00000009, 0x3410170c);
writel(0x0001eff4, 0x34101710);
writel(0x0003fe16, 0x34101714);
writel(0x0001d9f1, 0x34101718);
writel(0x0003fc25, 0x3410171c);
writel(0x0001bbf0, 0x34101720);
writel(0x0003fa36, 0x34101724);
writel(0x000197f0, 0x34101728);
writel(0x0003f64a, 0x3410172c);
writel(0x00016ff1, 0x34101730);
writel(0x0003f25f, 0x34101734);
writel(0x000143f3, 0x34101738);
writel(0x0003ee75, 0x3410173c);
writel(0x000117f5, 0x34101740);
writel(0x0003ea8b, 0x34101744);
writel(0x0000ebf7, 0x34101748);
writel(0x0003e6a1, 0x3410174c);
writel(0x0000bff9, 0x34101750);
writel(0x0003e2b7, 0x34101754);
writel(0x000095fb, 0x34101758);
writel(0x0003e0cb, 0x3410175c);
writel(0x00006dfd, 0x34101760);
writel(0x0003e0dd, 0x34101764);
writel(0x00004bfe, 0x34101768);
writel(0x0003e2ec, 0x3410176c);
writel(0x00002dff, 0x34101770);
writel(0x0003e8f7, 0x34101774);
writel(0x00001200, 0x34101778);
writel(0x0003f2fe, 0x3410177c);
writel(0x0001fe00, 0x34101800);
writel(0x00000001, 0x34101804);
writel(0x0001fdf9, 0x34101808);
writel(0x00000009, 0x3410180c);
writel(0x0001eff4, 0x34101810);
writel(0x0003fe16, 0x34101814);
writel(0x0001d9f1, 0x34101818);
writel(0x0003fc25, 0x3410181c);
writel(0x0001bbf0, 0x34101820);
writel(0x0003fa36, 0x34101824);
writel(0x000197f0, 0x34101828);
writel(0x0003f64a, 0x3410182c);
writel(0x00016ff1, 0x34101830);
writel(0x0003f25f, 0x34101834);
writel(0x000143f3, 0x34101838);
writel(0x0003ee75, 0x3410183c);
writel(0x000117f5, 0x34101840);
writel(0x0003ea8b, 0x34101844);
writel(0x0000ebf7, 0x34101848);
writel(0x0003e6a1, 0x3410184c);
writel(0x0000bff9, 0x34101850);
writel(0x0003e2b7, 0x34101854);
writel(0x000095fb, 0x34101858);
writel(0x0003e0cb, 0x3410185c);
writel(0x00006dfd, 0x34101860);
writel(0x0003e0dd, 0x34101864);
writel(0x00004bfe, 0x34101868);
writel(0x0003e2ec, 0x3410186c);
writel(0x00002dff, 0x34101870);
writel(0x0003e8f7, 0x34101874);
writel(0x00001200, 0x34101878);
writel(0x0003f2fe, 0x3410187c);
writel(0x00003404, 0x34101a00);
writel(0x00009a3b, 0x34101a04);
writel(0x0000343c, 0x34101a08);
writel(0x00000004, 0x34101a0c);
writel(0x00003004, 0x34101a10);
writel(0x00009a39, 0x34101a14);
writel(0x0000383d, 0x34101a18);
writel(0x00000005, 0x34101a1c);
writel(0x00002c03, 0x34101a20);
writel(0x00009838, 0x34101a24);
writel(0x00003c3f, 0x34101a28);
writel(0x00000006, 0x34101a2c);
writel(0x00002803, 0x34101a30);
writel(0x00009a35, 0x34101a34);
writel(0x00003e41, 0x34101a38);
writel(0x00000007, 0x34101a3c);
writel(0x00002402, 0x34101a40);
writel(0x00009634, 0x34101a44);
writel(0x00004642, 0x34101a48);
writel(0x00000008, 0x34101a4c);
writel(0x00002202, 0x34101a50);
writel(0x00009431, 0x34101a54);
writel(0x00004a44, 0x34101a58);
writel(0x00000009, 0x34101a5c);
writel(0x00001e01, 0x34101a60);
writel(0x0000962f, 0x34101a64);
writel(0x00004e45, 0x34101a68);
writel(0x0000000a, 0x34101a6c);
writel(0x00001c01, 0x34101a70);
writel(0x0000922d, 0x34101a74);
writel(0x00005247, 0x34101a78);
writel(0x0000000b, 0x34101a7c);
writel(0x00001801, 0x34101a80);
writel(0x0000902b, 0x34101a84);
writel(0x00005648, 0x34101a88);
writel(0x0000020c, 0x34101a8c);
writel(0x00001600, 0x34101a90);
writel(0x00008e29, 0x34101a94);
writel(0x00005a49, 0x34101a98);
writel(0x0000020e, 0x34101a9c);
writel(0x00001400, 0x34101aa0);
writel(0x00008c27, 0x34101aa4);
writel(0x00005e4a, 0x34101aa8);
writel(0x0000020f, 0x34101aac);
writel(0x00001200, 0x34101ab0);
writel(0x00008825, 0x34101ab4);
writel(0x0000624a, 0x34101ab8);
writel(0x00000411, 0x34101abc);
writel(0x00001000, 0x34101ac0);
writel(0x00008423, 0x34101ac4);
writel(0x0000684b, 0x34101ac8);
writel(0x00000412, 0x34101acc);
writel(0x00000e00, 0x34101ad0);
writel(0x0000841f, 0x34101ad4);
writel(0x00006a4c, 0x34101ad8);
writel(0x00000614, 0x34101adc);
writel(0x00000c00, 0x34101ae0);
writel(0x00007e1e, 0x34101ae4);
writel(0x0000704c, 0x34101ae8);
writel(0x00000616, 0x34101aec);
writel(0x00000a00, 0x34101af0);
writel(0x00007c1c, 0x34101af4);
writel(0x0000724c, 0x34101af8);
writel(0x00000818, 0x34101afc);
writel(0x0000fe3d, 0x34101b00);
writel(0x00000c3e, 0x34101b04);
writel(0x0000fe37, 0x34101b08);
writel(0x00000c44, 0x34101b0c);
writel(0x0000fc31, 0x34101b10);
writel(0x00000e4a, 0x34101b14);
writel(0x0000f82c, 0x34101b18);
writel(0x00001050, 0x34101b1c);
writel(0x0000f426, 0x34101b20);
writel(0x00001456, 0x34101b24);
writel(0x0000ee22, 0x34101b28);
writel(0x0000185b, 0x34101b2c);
writel(0x0000e81d, 0x34101b30);
writel(0x00001c61, 0x34101b34);
writel(0x0000e019, 0x34101b38);
writel(0x00002266, 0x34101b3c);
writel(0x0000d615, 0x34101b40);
writel(0x00002a6b, 0x34101b44);
writel(0x0000cc11, 0x34101b48);
writel(0x00003270, 0x34101b4c);
writel(0x0000c20e, 0x34101b50);
writel(0x00003a74, 0x34101b54);
writel(0x0000b80c, 0x34101b58);
writel(0x00004476, 0x34101b5c);
writel(0x0000ac0a, 0x34101b60);
writel(0x00004c7a, 0x34101b64);
writel(0x0000a008, 0x34101b68);
writel(0x0000587c, 0x34101b6c);
writel(0x00009407, 0x34101b70);
writel(0x0000627e, 0x34101b74);
writel(0x00008806, 0x34101b78);
writel(0x00006e7f, 0x34101b7c);
writel(0x0000fe3d, 0x34101c00);
writel(0x00000c3e, 0x34101c04);
writel(0x0000fe37, 0x34101c08);
writel(0x00000c44, 0x34101c0c);
writel(0x0000fc31, 0x34101c10);
writel(0x00000e4a, 0x34101c14);
writel(0x0000f82c, 0x34101c18);
writel(0x00001050, 0x34101c1c);
writel(0x0000f426, 0x34101c20);
writel(0x00001456, 0x34101c24);
writel(0x0000ee22, 0x34101c28);
writel(0x0000185b, 0x34101c2c);
writel(0x0000e81d, 0x34101c30);
writel(0x00001c61, 0x34101c34);
writel(0x0000e019, 0x34101c38);
writel(0x00002266, 0x34101c3c);
writel(0x0000d615, 0x34101c40);
writel(0x00002a6b, 0x34101c44);
writel(0x0000cc11, 0x34101c48);
writel(0x00003270, 0x34101c4c);
writel(0x0000c20e, 0x34101c50);
writel(0x00003a74, 0x34101c54);
writel(0x0000b80c, 0x34101c58);
writel(0x00004476, 0x34101c5c);
writel(0x0000ac0a, 0x34101c60);
writel(0x00004c7a, 0x34101c64);
writel(0x0000a008, 0x34101c68);
writel(0x0000587c, 0x34101c6c);
writel(0x00009407, 0x34101c70);
writel(0x0000627e, 0x34101c74);
writel(0x00008806, 0x34101c78);
writel(0x00006e7f, 0x34101c7c);
writel((vou_out.Vactive << 16) + vou_out.Hactvie, 0x34101024);//writel(0x05000320, 0x34101024);
writel((vou_out.StartBlen << 16) + vou_out.Hlen, 0x34101028);//writel(0x0019033d, 0x34101028);
writel((vou_out.TBLineOfs << 16) + vou_out.TVLine, 0x3410102C);//writel(0x001b052f, 0x3410102C);
writel((vou_out.BBLineOfs << 16) + vou_out.BVLine, 0x34101030);//writel(0x00000000, 0x34101030);
writel(0xff00ff00, 0x34101034);
writel(0x349ea100, 0x34101060);
writel(0x00071900, 0x34101064);
writel(0x16700100, 0x34101068);
writel(0x34dc7487, 0x3410106c);
writel(0x00000001, 0x34101000);
//writel(0x00000003, 0x34101000); //vou test mode
writel(0x00000000, 0x34101014);
if(type == LOGO_YUV) {
//printf("LOGO_YUV !!!\n");
writel(0x00000040, 0x34101200);
writel((ph<<16) + pw, 0x34101208);
writel(pp, 0x3410120c);
writel(addr, 0x34101210);
writel(addr + pp*ph, 0x34101214);
writel((y<<16) + x, 0x34101218);
writel(0x00000000, 0x34101230);
writel(0x00000000, 0x34101234);
writel((h<<16) + w, 0x3410121c);
writel(0x80800001, 0x34101004);
writel(0x00000009, 0x34101000);
} else {
// w & h are not used
if (type == LOGO_RGB_8888) {
//printf("LOGO_RGB_8888 !!!\n");
//writel(0x00000002, 0x34101120); // mc abgr8888
//writel(0x0000001A, 0x34101120); //hik argb8888
writel(0x0000001A, 0x34101120);
} else if (type == LOGO_RGB_1555) {
//printf("LOGO_RGB_1555 !!!\n");
writel(0x00000010, 0x34101120); //mc argb1555
}
writel(0x00008000, 0x34101124);
writel(0x00000000, 0x34101128);
writel((ph<<16) + pw, 0x3410112c);
writel(pp, 0x34101130);
writel(addr, 0x34101134);
writel((y<<16) + x, 0x34101138);
writel(0x00000011, 0x34101000);
}
//set_work_ctrl()
writel(0x00000b00, 0x3410100c);
//set_work_ctrl()
writel(0x00000801, 0x3410100c);
#endif
}
void fast_osd_1024x600(int type, int x, int y, int w, int h, uint32_t addr, int pw, int pp, int ph)
{
#if (LOGO_VO_MIPI == LOGO_VO_EK79007)
uint32_t clkdiv = 0;
//
writelr(0x00000001, 0x1B000008, 3, 1); // DIR: set GPIO0-3 output
writelr(0x00000001, 0x1B000004, 3, 1); // DMSK: enable GPIO0-3
writelr(0x00000001, 0x1B000000, 3, 1); // DATA: GPIO0-3 output 1;
writel(0x00000002, 0x2820009c);
writel(0x00000002, 0x282000a0);
writel(0x00000002, 0x282000a4);
writel(0x00000002, 0x282000a8);
writel(0x00000002, 0x282000ac);
writel(0x00000002, 0x282000b0);
writel(0x00000002, 0x282000b4);
writel(0x00000002, 0x282000b8);
writel(0x00000002, 0x282000bc);
writel(0x00000002, 0x282000c0);
writels(0x00003f1f, 0x34000000);
writelc(0x00000400, 0x34000078);
writels(0x00000003, 0x28100030);
writels(0x0000007f, 0x34000014);
writelc(0x0000007f, 0x34000014);
writel(0x0000000f, 0x34100004);
writels(0x00000300, 0x34000078);
writelr(0x00000000, 0x343000a0, 2, 1);
writelr(0x00000001, 0x343000b4, 0, 1);
writelr(0x00000001, 0x343000a0, 3, 1);
writelc(0x00002000, 0x34500064);
writelr(0x00000001, 0x343000b4, 1, 1);
writelr(0x00000000, 0x343000b8, 16, 1);
writelr(0x00000001, 0x343000a0, 0, 1);
writelr(0x00000001, 0x343000a0, 1, 1);
writelr(0x00000000, 0x343000b4, 0, 1);
writels(0x00002000, 0x34500064);
writelr(0x00000000, 0x34500064, 1, 7);
writelr(0x00000007, 0x34500064, 9, 4);
writelr(0x00000001, 0x34500064, 13, 1);
writelr(0x00080000, 0x34500060, 0, 32);
writelr(0x00000002, 0x34500068, 0, 4);
writelr(0x00000002, 0x34500068, 4, 4);
writelr(0x00000007, 0x34500068, 8, 3);
writelr(0x00000007, 0x34500068, 11, 3);
writelr(0x00000001, 0x3450007c, 0, 8);
writelr(0x00000007, 0x3450007c, 8, 8);
writelr(0x0000001f, 0x34500074, 0, 5);
writelr(0x00000002, 0x34500074, 5, 2);
writelr(0x00000000, 0x34500074, 7, 3);
writelr(0x0a02687a, 0x3450005c, 0, 32);
writelr(0x000000b6, 0x34500058, 0, 32);
writelr(0x000001f4, 0x34500000, 0, 15);
writelr(0x00002710, 0x34500004, 0, 31);
writelr(0x00041902, 0x34500008, 0, 32);
writelr(0x00120609, 0x3450000c, 0, 32);
writelr(0x00000100, 0x34500078, 0, 32);
writelr(0x000001f4, 0x34500010, 0, 32);
writelr(0x00002710, 0x34500014, 0, 32);
writelr(0x041e0809, 0x34500018, 0, 32);
writelr(0x00000100, 0x3450001c, 0, 32);
writelr(0x0030183c, 0x34500020, 0, 32);
writelr(0x000001f4, 0x34500024, 0, 32);
writelr(0x00002710, 0x34500028, 0, 32);
writelr(0x041e0809, 0x3450002c, 0, 32);
writelr(0x00000100, 0x34500030, 0, 32);
writelr(0x000001f4, 0x34500034, 0, 32);
writelr(0x00002710, 0x34500038, 0, 32);
writelr(0x041e0809, 0x3450003c, 0, 32);
writelr(0x00000100, 0x34500040, 0, 32);
writelr(0x000001f4, 0x34500044, 0, 32);
writelr(0x00002710, 0x34500048, 0, 32);
writelr(0x041e0809, 0x3450004c, 0, 32);
writelr(0x00000100, 0x34500050, 0, 32);
writelr(0x0000000c, 0x34500054, 0, 8);
writelr(0x0000001f, 0x34500074, 0, 5);
writelr(0x00000000, 0x34500074, 5, 2);
writelr(0x00000000, 0x34500074, 7, 3);
writelr(0x00000001, 0x3450007c, 0, 8);
writelr(0x0000000a, 0x3450007c, 8, 8);
writelr(0x00000000, 0x3450006c, 0, 3);
writelr(0x00000001, 0x3450006c, 3, 1);
writelr(0x00000000, 0x3450006c, 4, 2);
writelr(0x00000000, 0x3450006c, 6, 1);
udelay(1000);
writelr(0x00000000, 0x34500064, 1, 7);
writelr(0x00000007, 0x34500064, 9, 4);
writelr(0x00000001, 0x34500064, 13, 1);
writelr(0x00000000, 0x3430000c, 0, 2);
writelr(0x00000005, 0x34300010, 0, 4);
writelr(0x00000001, 0x34300014, 2, 1);
writelr(0x00000001, 0x34300014, 1, 1);
writelr(0x0000000c, 0x34300008, 0, 8);
writelr(0x00000001, 0x34300008, 8, 8);
writel(0xffffff01, 0x34300068);
writelr(0x00000001, 0x3430001c, 0, 2);
writelr(0x00000004, 0x34300020, 0, 4);
writelr(0x00000001, 0x34300020, 16, 2);
writelr(0x00000001, 0x34300024, 0, 1);
writelr(0x00000064, 0x34300028, 16, 16);
writelr(0x00000008, 0x34300028, 0, 16);
writelr(0x00000001, 0x3430002c, 2, 1);
writelr(0x00000001, 0x3430002c, 3, 1);
writelr(0x00000001, 0x3430002c, 4, 1);
writelr(0x00000000, 0x34300030, 0, 2);
writelr(0x00000001, 0x34300034, 0, 1);
writelr(0x00000002, 0x34300038, 0, 2);
writelr(0x00000000, 0x34300038, 8, 1);
writelr(0x00000001, 0x34300038, 9, 1);
writelr(0x00000000, 0x34300038, 10, 1);
writelr(0x00000000, 0x34300038, 11, 1);
writelr(0x00000000, 0x34300038, 12, 1);
writelr(0x00000000, 0x34300038, 13, 1);
writelr(vou_out.Hactvie , 0x3430003c, 0, 14);//writelr(0x00000400, 0x3430003c, 0, 14);
writelr(0x00000001, 0x34300040, 0, 13);
writelr(0x0000000a, 0x34300044, 0, 13);
clkdiv = mipi_dphy_hal_get_pixel_clk_div();
writelr((vou_out.Hsync * clkdiv / 8), 0x34300048, 0, 12);//writelr(0x0000002d, 0x34300048, 0, 12);
writelr((vou_out.Hback * clkdiv / 8), 0x3430004c, 0, 12);//writelr(0x0000009d, 0x3430004c, 0, 12);
writelr(((vou_out.Hsync + vou_out.Hback + vou_out.Hfront + vou_out.Hactvie) * clkdiv / 8), 0x34300050, 0, 15);//writelr(0x000005e8, 0x34300050, 0, 15);
writelr(vou_out.Vsync, 0x34300054, 0, 10);//writelr(0x00000002, 0x34300054, 0, 10);
writelr(vou_out.Vback, 0x34300058, 0, 10);//writelr(0x00000017, 0x34300058, 0, 10);
writelr(vou_out.Vfront, 0x3430005c, 0, 10);//writelr(0x0000000c, 0x3430005c, 0, 10);
writelr(vou_out.Vactive, 0x34300060, 0, 14);//writelr(0x00000258, 0x34300060, 0, 14);
writelr(0x00000000, 0x34300018, 16, 8);
writelr(0x00000000, 0x34300018, 0, 8);
writelr(0x0000006e, 0x3430009c, 0, 15);
writelr(0x00000025, 0x3430009c, 16, 8);
writelr(0x00000000, 0x34300064, 0, 16);
writelr(0x00000001, 0x34300094, 0, 1);
writelr(0x00000000, 0x34300078, 0, 16);
writelr(0x00000000, 0x34300078, 16, 16);
writelr(0x00000000, 0x3430007c, 0, 16);
writelr(0x00000000, 0x34300080, 0, 16);
writelr(0x00000000, 0x34300084, 0, 16);
writelr(0x00000000, 0x34300088, 0, 16);
writelr(0x00000000, 0x3430008c, 0, 16);
writelr(0x00000087, 0x34300098, 0, 10);
writelr(0x00000025, 0x34300098, 16, 10);
writelr(0x00000000, 0x343000f4, 0, 15);
writelr(0x00000028, 0x343000a4, 8, 8);
writelr(0x00000003, 0x343000a4, 0, 2);
writelr(0x00000000, 0x343000a8, 0, 4);
writelr(0x00000000, 0x343000ac, 0, 4);
writelr(0x00000000, 0x34300100, 0, 1);
writelr(0x00000000, 0x34300100, 8, 1);
writelr(0x00000000, 0x34300100, 16, 1);
writel(0xffffffff, 0x343000c4);
writel(0xffffffff, 0x343000c8);
writelr(0x00000000, 0x34300004, 0, 1);
writelr(0x00000001, 0x34300004, 0, 1);
writels(0x00004000, 0x3400007c);
//----------------select size 1024/600/1/60------------------------
writel(0x00000008, 0x34100020);
writel(0x0000000a, 0x34100024);
writel(0x00000300, 0x34100028);
writel(0x00000600, 0x3410002c);
writel(0x00000007, 0x34100030);
writel(0x0000000a, 0x34100034);
writel(0x00000080, 0x34100038);
writel(0x00000100, 0x3410003c);
writel(0x00000001, 0x34100040);
writel(0x00000028, 0x34101f14);
writel(0x00000002, 0x34101f18);
writel(0x00000000, 0x34101f1c);
writelr(0x00478015, 0x3430006c, 0, 24);
writelr(0x00408115, 0x3430006c, 0, 24);
writelr(0x00048215, 0x3430006c, 0, 24);
writelr(0x00778315, 0x3430006c, 0, 24);
writelr(0x000f8415, 0x3430006c, 0, 24);
writelr(0x00708515, 0x3430006c, 0, 24);
writelr(0x00708615, 0x3430006c, 0, 24);
writelr(0x00001115, 0x3430006c, 0, 24);
writelr(0x00002915, 0x3430006c, 0, 24);
writel(0x00000000, 0x34300068);
writel(0x00000014, 0x3430002c);
writel(0x00000000, 0x34300034);
writel(0x00000000, 0x34101600);
writel(0x0001fe00, 0x34101604);
writel(0x00000001, 0x34101608);
writel(0x00000000, 0x3410160c);
writel(0x000007ff, 0x34101610);
writel(0x0001fff4, 0x34101614);
writel(0x0003f80e, 0x34101618);
writel(0x00000001, 0x3410161c);
writel(0x00000fff, 0x34101620);
writel(0x0001f3e9, 0x34101624);
writel(0x0003ee1f, 0x34101628);
writel(0x00000002, 0x3410162c);
writel(0x000013fe, 0x34101630);
writel(0x0001e3e1, 0x34101634);
writel(0x0003e233, 0x34101638);
writel(0x0003fe04, 0x3410163c);
writel(0x000017fe, 0x34101640);
writel(0x0001c9dc, 0x34101644);
writel(0x0003d847, 0x34101648);
writel(0x0003fe05, 0x3410164c);
writel(0x000019fe, 0x34101650);
writel(0x0001add8, 0x34101654);
writel(0x0003cc5c, 0x34101658);
writel(0x0003fe07, 0x3410165c);
writel(0x000019fd, 0x34101660);
writel(0x00018dd7, 0x34101664);
writel(0x0003c272, 0x34101668);
writel(0x0003fc09, 0x3410166c);
writel(0x000019fe, 0x34101670);
writel(0x000165d7, 0x34101674);
writel(0x0003ba88, 0x34101678);
writel(0x0003fc0a, 0x3410167c);
writel(0x000017fe, 0x34101680);
writel(0x00013dd9, 0x34101684);
writel(0x0003b29e, 0x34101688);
writel(0x0003fc0b, 0x3410168c);
writel(0x000015fe, 0x34101690);
writel(0x000111dd, 0x34101694);
writel(0x0003aeb2, 0x34101698);
writel(0x0003fc0c, 0x3410169c);
writel(0x000013fe, 0x341016a0);
writel(0x0000e7e1, 0x341016a4);
writel(0x0003aec5, 0x341016a8);
writel(0x0003fa0c, 0x341016ac);
writel(0x00000fff, 0x341016b0);
writel(0x0000b9e6, 0x341016b4);
writel(0x0003b0d6, 0x341016b8);
writel(0x0003fc0c, 0x341016bc);
writel(0x00000bff, 0x341016c0);
writel(0x00008dec, 0x341016c4);
writel(0x0003b8e5, 0x341016c8);
writel(0x0003fc0b, 0x341016cc);
writel(0x000009ff, 0x341016d0);
writel(0x000067f1, 0x341016d4);
writel(0x0003c2f1, 0x341016d8);
writel(0x0003fc09, 0x341016dc);
writel(0x00000400, 0x341016e0);
writel(0x00003ff7, 0x341016e4);
writel(0x0003d2f9, 0x341016e8);
writel(0x0003fe07, 0x341016ec);
writel(0x00000200, 0x341016f0);
writel(0x00001ffc, 0x341016f4);
writel(0x0003e8fe, 0x341016f8);
writel(0x0003fe03, 0x341016fc);
writel(0x0001fe00, 0x34101700);
writel(0x00000001, 0x34101704);
writel(0x0001fdf9, 0x34101708);
writel(0x00000009, 0x3410170c);
writel(0x0001eff4, 0x34101710);
writel(0x0003fe16, 0x34101714);
writel(0x0001d9f1, 0x34101718);
writel(0x0003fc25, 0x3410171c);
writel(0x0001bbf0, 0x34101720);
writel(0x0003fa36, 0x34101724);
writel(0x000197f0, 0x34101728);
writel(0x0003f64a, 0x3410172c);
writel(0x00016ff1, 0x34101730);
writel(0x0003f25f, 0x34101734);
writel(0x000143f3, 0x34101738);
writel(0x0003ee75, 0x3410173c);
writel(0x000117f5, 0x34101740);
writel(0x0003ea8b, 0x34101744);
writel(0x0000ebf7, 0x34101748);
writel(0x0003e6a1, 0x3410174c);
writel(0x0000bff9, 0x34101750);
writel(0x0003e2b7, 0x34101754);
writel(0x000095fb, 0x34101758);
writel(0x0003e0cb, 0x3410175c);
writel(0x00006dfd, 0x34101760);
writel(0x0003e0dd, 0x34101764);
writel(0x00004bfe, 0x34101768);
writel(0x0003e2ec, 0x3410176c);
writel(0x00002dff, 0x34101770);
writel(0x0003e8f7, 0x34101774);
writel(0x00001200, 0x34101778);
writel(0x0003f2fe, 0x3410177c);
writel(0x0001fe00, 0x34101800);
writel(0x00000001, 0x34101804);
writel(0x0001fdf9, 0x34101808);
writel(0x00000009, 0x3410180c);
writel(0x0001eff4, 0x34101810);
writel(0x0003fe16, 0x34101814);
writel(0x0001d9f1, 0x34101818);
writel(0x0003fc25, 0x3410181c);
writel(0x0001bbf0, 0x34101820);
writel(0x0003fa36, 0x34101824);
writel(0x000197f0, 0x34101828);
writel(0x0003f64a, 0x3410182c);
writel(0x00016ff1, 0x34101830);
writel(0x0003f25f, 0x34101834);
writel(0x000143f3, 0x34101838);
writel(0x0003ee75, 0x3410183c);
writel(0x000117f5, 0x34101840);
writel(0x0003ea8b, 0x34101844);
writel(0x0000ebf7, 0x34101848);
writel(0x0003e6a1, 0x3410184c);
writel(0x0000bff9, 0x34101850);
writel(0x0003e2b7, 0x34101854);
writel(0x000095fb, 0x34101858);
writel(0x0003e0cb, 0x3410185c);
writel(0x00006dfd, 0x34101860);
writel(0x0003e0dd, 0x34101864);
writel(0x00004bfe, 0x34101868);
writel(0x0003e2ec, 0x3410186c);
writel(0x00002dff, 0x34101870);
writel(0x0003e8f7, 0x34101874);
writel(0x00001200, 0x34101878);
writel(0x0003f2fe, 0x3410187c);
writel(0x00003404, 0x34101a00);
writel(0x00009a3b, 0x34101a04);
writel(0x0000343c, 0x34101a08);
writel(0x00000004, 0x34101a0c);
writel(0x00003004, 0x34101a10);
writel(0x00009a39, 0x34101a14);
writel(0x0000383d, 0x34101a18);
writel(0x00000005, 0x34101a1c);
writel(0x00002c03, 0x34101a20);
writel(0x00009838, 0x34101a24);
writel(0x00003c3f, 0x34101a28);
writel(0x00000006, 0x34101a2c);
writel(0x00002803, 0x34101a30);
writel(0x00009a35, 0x34101a34);
writel(0x00003e41, 0x34101a38);
writel(0x00000007, 0x34101a3c);
writel(0x00002402, 0x34101a40);
writel(0x00009634, 0x34101a44);
writel(0x00004642, 0x34101a48);
writel(0x00000008, 0x34101a4c);
writel(0x00002202, 0x34101a50);
writel(0x00009431, 0x34101a54);
writel(0x00004a44, 0x34101a58);
writel(0x00000009, 0x34101a5c);
writel(0x00001e01, 0x34101a60);
writel(0x0000962f, 0x34101a64);
writel(0x00004e45, 0x34101a68);
writel(0x0000000a, 0x34101a6c);
writel(0x00001c01, 0x34101a70);
writel(0x0000922d, 0x34101a74);
writel(0x00005247, 0x34101a78);
writel(0x0000000b, 0x34101a7c);
writel(0x00001801, 0x34101a80);
writel(0x0000902b, 0x34101a84);
writel(0x00005648, 0x34101a88);
writel(0x0000020c, 0x34101a8c);
writel(0x00001600, 0x34101a90);
writel(0x00008e29, 0x34101a94);
writel(0x00005a49, 0x34101a98);
writel(0x0000020e, 0x34101a9c);
writel(0x00001400, 0x34101aa0);
writel(0x00008c27, 0x34101aa4);
writel(0x00005e4a, 0x34101aa8);
writel(0x0000020f, 0x34101aac);
writel(0x00001200, 0x34101ab0);
writel(0x00008825, 0x34101ab4);
writel(0x0000624a, 0x34101ab8);
writel(0x00000411, 0x34101abc);
writel(0x00001000, 0x34101ac0);
writel(0x00008423, 0x34101ac4);
writel(0x0000684b, 0x34101ac8);
writel(0x00000412, 0x34101acc);
writel(0x00000e00, 0x34101ad0);
writel(0x0000841f, 0x34101ad4);
writel(0x00006a4c, 0x34101ad8);
writel(0x00000614, 0x34101adc);
writel(0x00000c00, 0x34101ae0);
writel(0x00007e1e, 0x34101ae4);
writel(0x0000704c, 0x34101ae8);
writel(0x00000616, 0x34101aec);
writel(0x00000a00, 0x34101af0);
writel(0x00007c1c, 0x34101af4);
writel(0x0000724c, 0x34101af8);
writel(0x00000818, 0x34101afc);
writel(0x0000fe3d, 0x34101b00);
writel(0x00000c3e, 0x34101b04);
writel(0x0000fe37, 0x34101b08);
writel(0x00000c44, 0x34101b0c);
writel(0x0000fc31, 0x34101b10);
writel(0x00000e4a, 0x34101b14);
writel(0x0000f82c, 0x34101b18);
writel(0x00001050, 0x34101b1c);
writel(0x0000f426, 0x34101b20);
writel(0x00001456, 0x34101b24);
writel(0x0000ee22, 0x34101b28);
writel(0x0000185b, 0x34101b2c);
writel(0x0000e81d, 0x34101b30);
writel(0x00001c61, 0x34101b34);
writel(0x0000e019, 0x34101b38);
writel(0x00002266, 0x34101b3c);
writel(0x0000d615, 0x34101b40);
writel(0x00002a6b, 0x34101b44);
writel(0x0000cc11, 0x34101b48);
writel(0x00003270, 0x34101b4c);
writel(0x0000c20e, 0x34101b50);
writel(0x00003a74, 0x34101b54);
writel(0x0000b80c, 0x34101b58);
writel(0x00004476, 0x34101b5c);
writel(0x0000ac0a, 0x34101b60);
writel(0x00004c7a, 0x34101b64);
writel(0x0000a008, 0x34101b68);
writel(0x0000587c, 0x34101b6c);
writel(0x00009407, 0x34101b70);
writel(0x0000627e, 0x34101b74);
writel(0x00008806, 0x34101b78);
writel(0x00006e7f, 0x34101b7c);
writel(0x0000fe3d, 0x34101c00);
writel(0x00000c3e, 0x34101c04);
writel(0x0000fe37, 0x34101c08);
writel(0x00000c44, 0x34101c0c);
writel(0x0000fc31, 0x34101c10);
writel(0x00000e4a, 0x34101c14);
writel(0x0000f82c, 0x34101c18);
writel(0x00001050, 0x34101c1c);
writel(0x0000f426, 0x34101c20);
writel(0x00001456, 0x34101c24);
writel(0x0000ee22, 0x34101c28);
writel(0x0000185b, 0x34101c2c);
writel(0x0000e81d, 0x34101c30);
writel(0x00001c61, 0x34101c34);
writel(0x0000e019, 0x34101c38);
writel(0x00002266, 0x34101c3c);
writel(0x0000d615, 0x34101c40);
writel(0x00002a6b, 0x34101c44);
writel(0x0000cc11, 0x34101c48);
writel(0x00003270, 0x34101c4c);
writel(0x0000c20e, 0x34101c50);
writel(0x00003a74, 0x34101c54);
writel(0x0000b80c, 0x34101c58);
writel(0x00004476, 0x34101c5c);
writel(0x0000ac0a, 0x34101c60);
writel(0x00004c7a, 0x34101c64);
writel(0x0000a008, 0x34101c68);
writel(0x0000587c, 0x34101c6c);
writel(0x00009407, 0x34101c70);
writel(0x0000627e, 0x34101c74);
writel(0x00008806, 0x34101c78);
writel(0x00006e7f, 0x34101c7c);
writel((vou_out.Vactive << 16) + vou_out.Hactvie, 0x34101024);//writel(0x02580400, 0x34101024);
writel((vou_out.StartBlen << 16) + vou_out.Hlen, 0x34101028);//writel(0x009F053F, 0x34101028);
writel((vou_out.TBLineOfs << 16) + vou_out.TVLine, 0x3410102C);//writel(0x0016027A, 0x3410102C);
writel((vou_out.BBLineOfs << 16) + vou_out.BVLine, 0x34101030);//writel(0x00000000, 0x34101030);
writel(0xff00ff00, 0x34101034);
writel(0x356ebd01, 0x34101060);
writel(0x00069901, 0x34101064);
writel(0x14e00101, 0x34101068);
writel(0x33fc4861, 0x3410106c);
writel(0x00000001, 0x34101000);
writel(0x00000000, 0x34101014);
if (LOGO_YUV == type) {
writel(0x00000040, 0x34101200);
writel((ph<<16) + pw, 0x34101208);
writel(pp, 0x3410120c);
writel(addr, 0x34101210);
writel(addr + pp*ph, 0x34101214);
writel((y<<16) + x, 0x34101218);
writel(0x00000000, 0x34101230);
writel(0x00000000, 0x34101234);
writel((h<<16) + w, 0x3410121c);
writel(0x80800001, 0x34101004);
writel(0x00000009, 0x34101000);
} else {
// w & h are not used
writel(0x0000000a, 0x34101120);
writel(0x00008000, 0x34101124);
writel(0x00000000, 0x34101128);
writel((ph<<16) + pw, 0x3410112c);
writel(pp, 0x34101130);
writel(addr, 0x34101134);
writel((y<<16) + x, 0x34101138);
writel(0x00000011, 0x34101000);
}
//set_work_ctrl()
writel(0x00000b00, 0x3410100c);
//set_work_ctrl()
writel(0x00000801, 0x3410100c);
#endif
}
// width / height / address must be 16 aligned
void fast_jpeg(uint32_t jpg, uint32_t jpg_len, uint32_t y, uint32_t uv)
{
int cnt = 100;
int status = 0;
printf("begin to soft reset jpeg\r\n");
// jpgd soft reset
writels(0x00000040, 0x24000030);
mdelay(100);
writelc(0x00000040, 0x24000030);
writels(0x00000006, 0x24000028);
// jpgd enable clk
writels(0x00000009, 0x2400002c);
writel(0x00000001, 0x26100004);
writel(jpg_len, 0x26100050);
writel(0x00000001, 0x26100008);
writel(jpg, 0x2610003C); /* JPG */
writel(y, 0x26100034); /* Y */
writel(uv , 0x26100040); /* UV */
writel(0x00000000, 0x26100058);
writels(0x0000000A, 0x26100014);
writel(0x80000001, 0x26100010);
// wait decode done
while (cnt-- > 0) {
udelay(1000);
status = readl(0x26100004);
if ((status & 0x01) != 0) {
printf("JPEG: decode done.\n");
writels(0x00000001, 0x26100004);
break;
}
}
if (cnt <= 0) {
printf("JPEG: decode timeout.\n");
}
}
void logo_display(void)
{
fast_osd_init();
#if (LOGO_VO_HDMI == LOGO_VO_1024x768)
fast_osd_hdmi(LOGO_YUV, (1024 - logo_w)/2, (768 - logo_h)/2, logo_w, logo_h, (uint32_t)logo_o_addr, logo_w, logo_w, logo_h);
#elif (LOGO_VO_HDMI == LOGO_VO_1920x1080)
fast_osd_hdmi(LOGO_YUV, (1920 - logo_w)/2, (1080 - logo_h)/2, logo_w, logo_h, (uint32_t)logo_o_addr, logo_w, logo_w, logo_h);
#elif (LOGO_VO_MIPI == LOGO_VO_ILI9881)
fast_osd_ili9881(LOGO_YUV, 0, 0, 800, 1280, (uint32_t)logo_o_addr, logo_w, logo_w, logo_h);
#elif (LOGO_VO_MIPI == LOGO_VO_EK79007)
fast_osd_1024x600(LOGO_YUV, 0, 0, 1024, 600, (uint32_t)logo_o_addr, logo_w, logo_w, logo_h);
#endif
}
static int do_yuv(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
if (argc >= 3) {
logo_o_addr = (unsigned char *)simple_strtoul(argv[1], NULL, 16);
logo_w = simple_strtoul(argv[2], NULL, 10);
logo_h = simple_strtoul(argv[3], NULL, 10);
if (0 == logo_o_addr \
|| 0 == logo_w \
|| 0 == logo_h) {
printf("YUV: no valid input!\n");
return 0;
}
logo_display();
}
return 0;
}
static int do_jpeg(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
uint32_t jpg_len = 0x100000; /* max jpeg file size 1MB */
if (argc >= 3) {
logo_i_addr = (unsigned char *)simple_strtoul(argv[1], NULL, 16);
logo_o_addr = (unsigned char *)simple_strtoul(argv[2], NULL, 16);
logo_w = simple_strtoul(argv[3], NULL, 10);
logo_h = simple_strtoul(argv[4], NULL, 10);
if (0 == logo_i_addr \
|| 0 == logo_o_addr \
|| 0 == logo_w \
|| 0 == logo_h) {
printf("JPEG: no valid input!\n");
return 0;
}
fast_jpeg((uint32_t)logo_i_addr, jpg_len, (uint32_t)logo_o_addr, (uint32_t)(logo_o_addr + logo_w*logo_h));
}
return 0;
}
U_BOOT_CMD(
yuv, 4, 4, do_yuv,
"show yuv logo.\n",
"\t- yuv addr w h show yuv logo\n"
);
U_BOOT_CMD(
jpeg, 5, 5, do_jpeg,
"decode jpeg.\n",
"\t- jpeg jpg_addr yuv_addr w h jpeg decoder\n"
);