add lcd er88577b driver
This commit is contained in:
parent
dd7654c55d
commit
e7baf6e580
@ -172,6 +172,7 @@ obj-y += mc/lcm_module/lcm_mipi_ek79007.o
|
||||
obj-y += mc/lcm_module/lcm_mipi_st7701s.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_HX8729) += mc/lcm_module/lcm_mipi_qua_hx8729_qfh24004.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_JD9365D) += mc/lcm_module/lcm_mipi_qua_jd9365d_jlm101b021.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_ER88577B) += mc/lcm_module/lcm_mipi_qua_er88577b_6hc1017b7e.o
|
||||
obj-$(CONFIG_QUA_LOGO_RGB_EK79001H) += mc/lcm_module/lcm_rgb_qua_ek79001h_tg78550b3_24bits.o
|
||||
obj-y += mc/lcm_module/mol_lcm_module.o
|
||||
|
||||
|
||||
@ -0,0 +1,744 @@
|
||||
#include "include/mol_lcm_local.h"
|
||||
#include "include/dsi_com_param.h"
|
||||
#include "include/mol_lcm.h"
|
||||
|
||||
#define LCM_WIDTH 800
|
||||
#define LCM_HEIGHT 1280
|
||||
#define LCM_DEBUG 1
|
||||
|
||||
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
|
||||
|
||||
|
||||
// static dsi_setting_tab_t __er88577b_6hc1017b7e_init_setting[] = {
|
||||
// {DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
|
||||
// {DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
|
||||
|
||||
// {DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
// };
|
||||
|
||||
static dsi_setting_tab_t qua_lcm_mipi_er88577b_6hc1017b7e_init_setting[] = {
|
||||
#if 0
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xB1,0x10,0x01,0x47,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xB2,0x0C,0x14,0x04,0x50,0x50,0x14}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB3,0x56,0x53,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB4,0x33,0x30,0x04}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00, 0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB8,0x05,0x12,0x29,0x49,0x48}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00, 0xB9,0x7C,0x65,0x55,0x49,0x46,0x36,0x3B,0x24,0x3D,0x3C,0x3D,0x5C,0x4C,0x55,0x47,0x46,0x39,0x26,0x06,0x7C,0x65,0x55,0x49,0x46,0x36,0x3B,0x24,0x3D,0x3C,0x3D,0x5C,0x4C,0x55,0x47,0x46,0x39,0x26,0x06}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00, 0xC0,0xFF,0x87,0x12,0x34,0x44,0x44,0x44,0x44,0x98,0x04,0x98,0x04,0x0F,0x00,0x00,0xC1}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xC1,0x54,0x94,0x02,0x85,0x9F,0x00,0x7F,0x00,0x54,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00, 0xC2,0x17,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xFF,0x18,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC3,0x86,0x46,0x05,0x05,0x1C,0x1C,0x1D,0x1D,0x02,0x1F,0x1F,0x1E,0x1E,0x0F,0x0F,0x0D,0x0D,0x13,0x13,0x11,0x11,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC4,0x07,0x07,0x04,0x04,0x1C,0x1C,0x1D,0x1D,0x02,0x1F,0x1F,0x1E,0x1E,0x0E,0x0E,0x0C,0x0C,0x12,0x12,0x10,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xC6,0x2A,0x2A}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xCA,0xCB,0x43}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xCD,0x0E,0x4B,0x4B,0x20,0x19,0x6B,0x06,0xB3}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xD2,0xE1,0x2B,0x38,0x08}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00, 0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xE6,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xF0,0x12,0x03,0x20,0x00,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 120, {0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 20, {0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
#endif
|
||||
|
||||
|
||||
#if 1
|
||||
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE0,0xAB,0xBA}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE1,0xBA,0xAB}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x10,0x01,0x47,0xFF}},
|
||||
//{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x11,0x01,0x47,0xFF}}, //BIST
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xB2,0x0C,0x14,0x04,0x50,0x50,0x14}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB3,0x56,0x53,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB4,0x33,0x30,0x04}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00,0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xB8,0x05,0x12,0x29,0x49,0x48}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00,0xB9,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00,0xC0,0xCC,0x76,0x12,0x34,0x44,0x44,0x44,0x44,0x98,0x04,0x98,0x04,0x0F,0x00,0x00,0xC1}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00,0xC1,0x54,0x94,0x02,0x85,0x9F,0x00,0x6F,0x00,0x54,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00,0xC2,0x17,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xFF,0x18,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC3,0x87,0x47,0x05,0x05,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x0D,0x0D,0x13,0x13,0x11,0x11,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC4,0x06,0x06,0x04,0x04,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0E,0x0E,0x0C,0x0C,0x12,0x12,0x10,0x10,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xC6,0x2A,0x2A}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xCA,0xCB,0x43}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xCD,0x0E,0x4B,0x4B,0x20,0x19,0x6B,0x06,0xB3}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xD2,0xE1,0x2B,0x38,0x08}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00,0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xE6,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xF0,0x12,0x03,0x20,0x00,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 120, },
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 20, },
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xE7,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xB1,0x10,0x01,0x7F,0x18}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB2,0x0C,0x10,0x04,0x50,0x50,0x14}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB3,0x56,0xD3,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB4,0x33,0x30,0x04}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00, 0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB8,0x05,0x12,0x29,0x49,0x48}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00, 0xB9,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00, 0xC0,0x32,0x45,0xB4,0x54,0x66,0x66,0x44,0x44,0x80,0x04,0x7C,0x04,0x3F,0x00,0x00,0xC1}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xC1,0x34,0x94,0x02,0x8F,0x80,0x00,0x7C,0x00,0x54,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00, 0xC2,0x33,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xBB,0x18,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC3,0xA4,0x64,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC4,0x24,0x24,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xC6,0x40,0x40}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xCA,0xCB,0x43}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xCD,0x0E,0x6E,0x6E,0x22,0x19,0x6B,0x06,0xB3}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xD2,0xE1,0x2B,0x38,0x08}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00, 0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xE6,0x80,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xF0,0x12,0x03,0x20,0x00,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 120, {0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 20, {0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x00}},
|
||||
{DSI_DI_DELAY, 30, {0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE1, 0x93}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE2, 0x65}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE3, 0xF8}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x01}}, //{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x01}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x01}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x48}}, // 0x3B,0X41~0X48
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0C, 0x74}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x17, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x18, 0xAF}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x19, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1A, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1B, 0xAF}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1C, 0x00}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x26}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x09}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x38, 0x04}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x39, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3A, 0x01}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3C, 0x78}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3D, 0xFF}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3E, 0xFF}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3F, 0x7F}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x40, 0x06}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x41, 0xA0}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x42, 0x81}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x43, 0x14}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x44, 0x23}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x45, 0x28}},
|
||||
|
||||
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2,{0x4A,0x35}}, //bist mode
|
||||
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2,{0x4B,0x04}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x55, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x57, 0x69}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x59, 0x0A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5A, 0x2A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5B, 0x17}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5D, 0x7F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5E, 0x69}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5F, 0x59}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x60, 0x4C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x61, 0x47}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x62, 0x39}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x63, 0x3B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x64, 0x24}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x65, 0x3D}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x66, 0x3C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x67, 0x3C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x68, 0x5A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x69, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6A, 0x4A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6B, 0x43}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6C, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6D, 0x20}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6E, 0x0F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6F, 0x00}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x70, 0x7F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x71, 0x69}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x72, 0x59}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x73, 0x4C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x74, 0x47}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x75, 0x39}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x76, 0x3B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x77, 0x24}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x78, 0x3D}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x79, 0x3C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7A, 0x3C}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7B, 0x5A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7C, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7D, 0x4A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7E, 0x43}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7F, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x20}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x81, 0x0F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x82, 0x00}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x42}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x42}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x02, 0x40}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x03, 0x40}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x04, 0x5E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x05, 0x5E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x06, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x07, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x08, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x09, 0x57}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0A, 0x57}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0B, 0x77}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0C, 0x77}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0D, 0x47}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0E, 0x47}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0F, 0x45}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x10, 0x45}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x11, 0x4B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x12, 0x4B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x13, 0x49}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x14, 0x49}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x15, 0x5F}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x16, 0x41}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x17, 0x41}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x18, 0x40}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x19, 0x40}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1A, 0x5E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1B, 0x5E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1C, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1D, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1E, 0x5F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1F, 0x57}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x20, 0x57}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x21, 0x77}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x22, 0x77}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x23, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x24, 0x46}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x25, 0x44}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x26, 0x44}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x27, 0x4A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x28, 0x4A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x29, 0x48}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2A, 0x48}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2B, 0x5F}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2C, 0x01}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2D, 0x01}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2E, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2F, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x30, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x31, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x32, 0x1E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x33, 0x1E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x34, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x17}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x17}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x37}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x38, 0x37}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x39, 0x08}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3A, 0x08}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3B, 0x0A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3C, 0x0A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3D, 0x04}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3E, 0x04}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3F, 0x06}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x40, 0x06}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x41, 0x1F}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x42, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x43, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x44, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x45, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x46, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x47, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x48, 0x1E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x49, 0x1E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4A, 0x1F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4B, 0x17}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4C, 0x17}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4D, 0x37}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4E, 0x37}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4F, 0x09}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x50, 0x09}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x51, 0x0B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x52, 0x0B}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x53, 0x05}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x54, 0x05}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x55, 0x07}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x56, 0x07}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x57, 0x1F}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x58, 0x40}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5B, 0x30}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5C, 0x16}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5D, 0x34}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5E, 0x05}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5F, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x63, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x64, 0x6A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x67, 0x73}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x68, 0x1D}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x69, 0x08}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6A, 0x6A}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6B, 0x08}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6C, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6D, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6E, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6F, 0x88}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x75, 0xFF}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x77, 0xDD}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x78, 0x3F}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x79, 0x15}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7A, 0x17}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7D, 0x14}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7E, 0x82}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x04}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x0E}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x02, 0xB3}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x09, 0x61}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0E, 0x48}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x49}}, //mark
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x58}}, //mark
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE6, 0x02}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE7, 0x0C}},
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_JD9365D_FLIP_H_V
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x03}},
|
||||
#endif
|
||||
{DSI_DI_GENERIC_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 240, {0x00}},
|
||||
|
||||
/* bist mode */
|
||||
//{DSI_DI_DELAY, 254, {0x00}},
|
||||
//{DSI_DI_DELAY, 254, {0x00}},
|
||||
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x01}},
|
||||
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4A, 0xB0}}, // bist
|
||||
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 5, {0x00}},
|
||||
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL
|
||||
static int32_t _pwron_1st_exited_flag = 0;
|
||||
static int32_t _pwron_2nd_exited_flag = 0;
|
||||
static int32_t qua_lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s e\n",__FUNCTION__);
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
|
||||
if((lcmHandle->lcm_probe.lcm_id == 0 && _pwron_1st_exited_flag == 0) ||
|
||||
(lcmHandle->lcm_probe.lcm_id == 1 && _pwron_2nd_exited_flag == 0)) {
|
||||
printf("%s:%d lcmHandle->lcm_id=%d\n",__func__,__LINE__, lcmHandle->lcm_id);
|
||||
extern int qua_lcm_mipi_er88577b_hrst(int lcm_id);
|
||||
qua_lcm_mipi_er88577b_hrst(lcmHandle->lcm_probe.lcm_id);
|
||||
}
|
||||
|
||||
if(lcmHandle->lcm_probe.lcm_id == 0) _pwron_1st_exited_flag = 1;
|
||||
if(lcmHandle->lcm_probe.lcm_id == 1) _pwron_2nd_exited_flag = 1;
|
||||
printf("%s:%d - 01\n",__func__,__LINE__);
|
||||
|
||||
extern int qua_lcm_mipi_er88577b_bkl(void);
|
||||
qua_lcm_mipi_er88577b_bkl();
|
||||
|
||||
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s x\n",__FUNCTION__);
|
||||
#endif
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _identify_1st_exited_flag = 0;
|
||||
static int32_t _identify_2nd_exited_flag = 0;
|
||||
static int32_t _identify_lcm_idenfy_flag = 0;
|
||||
static int32_t _identify_lcm_idenfy_virt = 0;
|
||||
extern int qua_lcm_mipi_er88577b_rst(int lcm_id);
|
||||
extern void qua_set_lcm_bootargs(int value);
|
||||
extern uint32_t dsi_mipi_get_err_code(void);
|
||||
|
||||
static int qua_lcm_mipi_er88577b_identify_entity(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
uint8_t read_buf[4] = {0};
|
||||
int count = 3;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
printf("%s e\n",__FUNCTION__);
|
||||
|
||||
|
||||
return 0;
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, __er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(__er88577b_6hc1017b7e_init_setting));
|
||||
// if(rtn) {
|
||||
// printf("%s push_table failed.\n", __func__);
|
||||
// }
|
||||
while(count){
|
||||
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_probe.lcm_id, DSI_DI_DCS_READ_0_PARAM, 0x04, 1, read_buf);
|
||||
printf("%s %d: 0x%x 0x%x 0x%x\n",__func__, lcmHandle->lcm_probe.lcm_id, read_buf[0], read_buf[1], read_buf[2]);
|
||||
if (rtn) {
|
||||
printf("%s dcs_read id failed.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
// if(read_buf[0] == 0x93 || (read_buf[0] == 0xE8 && read_buf[1] == 0x85 && read_buf[2] == 0x76)) {
|
||||
// printf("%s identify sucess.\n", __func__);
|
||||
// _identify_lcm_idenfy_flag |= (1 << lcmHandle->lcm_probe.lcm_id);
|
||||
// qua_set_lcm_bootargs(_identify_lcm_idenfy_flag);
|
||||
// return 0;
|
||||
// }
|
||||
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_probe.lcm_id, DSI_DI_DCS_READ_0_PARAM, 0xC6, 1, read_buf);
|
||||
printf("%s %d: 0x%x 0x%x 0x%x\n",__func__, lcmHandle->lcm_probe.lcm_id, read_buf[0], read_buf[1], read_buf[2]);
|
||||
if (rtn) {
|
||||
printf("%s dcs_read id failed.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ops->delayMs(2);
|
||||
|
||||
count--;
|
||||
if (count == 0) {
|
||||
printf("%s identify timeout failed.\n", __func__);
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
#endif
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
|
||||
if(lcmHandle->lcm_probe.lcm_id == 0 && _identify_1st_exited_flag) return 0;
|
||||
if(lcmHandle->lcm_probe.lcm_id == 1 && _identify_2nd_exited_flag) return 0;
|
||||
|
||||
if(lcmHandle->lcm_probe.lcm_id == 0) _identify_1st_exited_flag = 1;
|
||||
if(lcmHandle->lcm_probe.lcm_id == 1) _identify_2nd_exited_flag = 1;
|
||||
|
||||
/* first identify */
|
||||
rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
|
||||
_identify_lcm_idenfy_virt |= (1 << lcmHandle->lcm_probe.lcm_id);
|
||||
qua_set_lcm_bootargs(_identify_lcm_idenfy_virt);
|
||||
if(rtn) {
|
||||
printf("%s identify_entity failed.\n", __func__);
|
||||
goto __err_exit;
|
||||
}
|
||||
|
||||
printf("%s:%d\n", __func__, __LINE__);
|
||||
return 0;
|
||||
|
||||
// /* second identify */
|
||||
// __err_srst:
|
||||
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, lcm_mipi_jd9365d_swrst_setting, ARRAY_SIZE(lcm_mipi_jd9365d_swrst_setting));
|
||||
// if(rtn) {
|
||||
// printf("%s push_table failed.\n", __func__);
|
||||
// goto __err_hrst;
|
||||
// }
|
||||
|
||||
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
|
||||
// if(rtn) {
|
||||
// printf("%s identify_entity failed.\n", __func__);
|
||||
// goto __err_hrst;
|
||||
// }
|
||||
// return 0;
|
||||
|
||||
// /* third identify */
|
||||
// __err_hrst:
|
||||
// qua_lcm_mipi_er88577b_rst(lcmHandle->lcm_probe.lcm_id);
|
||||
// ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
// ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
|
||||
// if(rtn) {
|
||||
// printf("%s identify_entity failed.\n", __func__);
|
||||
// goto __err_frst;
|
||||
// }
|
||||
// return 0;
|
||||
|
||||
// /* fourth identify */
|
||||
// __err_frst:
|
||||
// qua_lcm_mipi_er88577b_rst(lcmHandle->lcm_probe.lcm_id);
|
||||
// ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
// ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, lcm_mipi_jd9365d_swrst_setting, ARRAY_SIZE(lcm_mipi_jd9365d_swrst_setting));
|
||||
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
|
||||
// if(rtn) {
|
||||
// printf("%s identify_entity failed.\n", __func__);
|
||||
// goto __err_exit;
|
||||
// }
|
||||
// return 0;
|
||||
|
||||
__err_exit:
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
//ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, qua_lcm_mipi_er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(qua_lcm_mipi_er88577b_6hc1017b7e_init_setting));
|
||||
return 0;
|
||||
}
|
||||
#else /*CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL*/
|
||||
static int32_t qua_lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s e\n",__func__);
|
||||
#endif
|
||||
|
||||
extern int qua_lcm_mipi_er88577b_bkl(void);
|
||||
qua_lcm_mipi_er88577b_bkl();
|
||||
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
#if LCM_DEBUG
|
||||
printf("%s x\n",__func__);
|
||||
#endif
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
|
||||
{
|
||||
#if LCM_DEBUG
|
||||
printf("%s e\n",__func__);
|
||||
#endif
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s x\n",__func__);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif /*CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL*/
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_PowerOff(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
#if LCM_DEBUG
|
||||
printf("%s\n",__func__);
|
||||
#endif
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_deinit(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
rtn = qua_lcm_mipi_er88577b_PowerOff(param, ops);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_init(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
printf("%s lcm_id:%d\n",__FUNCTION__,lcmHandle->lcm_id);
|
||||
#endif
|
||||
|
||||
rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, qua_lcm_mipi_er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(qua_lcm_mipi_er88577b_6hc1017b7e_init_setting));
|
||||
#if LCM_DEBUG
|
||||
printf("%s rtn %d\n",__func__,rtn);
|
||||
#endif
|
||||
return rtn;
|
||||
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL
|
||||
/* Check the 2nd lcm initial error code and identify flag
|
||||
** And just assume that the first screen must be existed.
|
||||
*/
|
||||
if ((lcmHandle->lcm_id == 1) && ((_identify_lcm_idenfy_flag & 2) == 0)) {
|
||||
int lcm = 3, err = 0;
|
||||
|
||||
err = dsi_mipi_get_err_code();
|
||||
if (err & 2) lcm = 1;
|
||||
printf("%s err=%d lcm=%d\n",__func__,err,lcm);
|
||||
qua_set_lcm_bootargs(lcm);
|
||||
}
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_suspend(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_resume(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
|
||||
//rtn = dsi_push_table(lcm_mipi_JD9365D_sleep_out_setting, ARRAY_SIZE(lcm_mipi_JD9365D_sleep_out_setting));
|
||||
return rtn;
|
||||
}
|
||||
|
||||
lcm_module_fun qua_lcm_mipi_er88577b_ctrl =
|
||||
{
|
||||
.poweron = qua_lcm_mipi_er88577b_PowerOn,
|
||||
.poweroff = qua_lcm_mipi_er88577b_PowerOff,
|
||||
.identify = qua_lcm_mipi_er88577b_identify,
|
||||
.init = qua_lcm_mipi_er88577b_init,
|
||||
.suspend = qua_lcm_mipi_er88577b_suspend,
|
||||
.resume = qua_lcm_mipi_er88577b_resume,
|
||||
.deinit = qua_lcm_mipi_er88577b_deinit,
|
||||
};
|
||||
|
||||
static lcm_display_sync_info_t qua_lcm_mipi_er88577b_dp_info =
|
||||
{
|
||||
.hor_sync_active = 20,
|
||||
.hor_back_porch = 80,
|
||||
.hor_active_pixel = LCM_WIDTH,
|
||||
.hor_front_porch = 80,
|
||||
|
||||
.ver_sync_active = 4,
|
||||
.ver_back_porch = 12,
|
||||
.ver_active_line = LCM_HEIGHT,
|
||||
.ver_front_porch = 20,
|
||||
};
|
||||
|
||||
static dsi_timing_t qua_lcm_mipi_er88577b_timing =
|
||||
{
|
||||
/*clk lane timing cfg*/
|
||||
.clane.mode = 1,
|
||||
.clane.lp11 = 0,
|
||||
.clane.lp01 = 16,
|
||||
.clane.zero = 0x22,
|
||||
.clane.prepare = 0x7,
|
||||
.clane.pre = 0x4,
|
||||
.clane.post = 0x10,
|
||||
.clane.trail = 0x9,
|
||||
.clane.inittime = 0x10,
|
||||
.clane.exit = 0x10,
|
||||
/*data lane timing cfg*/
|
||||
.dlane.mode = 1,
|
||||
.dlane.lp11 = 0,
|
||||
.dlane.lp01 = 0x10,
|
||||
.dlane.zero = 13,
|
||||
.dlane.prepare = 6,
|
||||
.dlane.trail = 10,
|
||||
.dlane.inittime = 16,
|
||||
.dlane.exit = 16,
|
||||
/*data lane0 read timing cfg*/
|
||||
.read.mode = 1,
|
||||
.read.tago = 67,
|
||||
.read.tasure = 25,
|
||||
.read.taget = 84,
|
||||
/*clk cfg*/
|
||||
.clk = {
|
||||
.vou.mode = 1,
|
||||
.vou.sel = 0x3,
|
||||
.vou.div = 0,
|
||||
|
||||
.mif.mode = 1,
|
||||
.mif.pll_doubler = 0,
|
||||
.mif.pll_div_s = 1,
|
||||
.mif.pll_n = 0,
|
||||
.mif.pll_kint = 3254779,
|
||||
.mif.pll_nint = 71,
|
||||
.mif.pixelclk_div = 12,
|
||||
.mif.pll_pdiv = 1,
|
||||
.mif.dhd_div = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static lcm_mipi_info qua_lcm_mipi_er88577b_mipi_info =
|
||||
{
|
||||
.work_mode = DSI_VIDEO_MODE,
|
||||
.lane_num = DSI_TWO_LANE,
|
||||
.format = DSI_RGB888,
|
||||
.packet_size = 256,
|
||||
.timing = (void *)&qua_lcm_mipi_er88577b_timing,
|
||||
};
|
||||
|
||||
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info =
|
||||
{
|
||||
.verder_name = VENDER_NAME,
|
||||
.name = "qua_dsi_800_1280_60_er88577b_6hc1017b7e",
|
||||
.width = LCM_WIDTH,
|
||||
.height = LCM_HEIGHT,
|
||||
.type = LCM_TYPE_MIPI, /*mcu, rgb, mipi*/
|
||||
.fps = 60,
|
||||
.direction = LCM_DIRECT_NORMAL,
|
||||
.dp_sync = &qua_lcm_mipi_er88577b_dp_info,
|
||||
.infor = {
|
||||
.mipi = &qua_lcm_mipi_er88577b_mipi_info,
|
||||
},
|
||||
.fun = &qua_lcm_mipi_er88577b_ctrl,
|
||||
};
|
||||
@ -25,7 +25,7 @@ extern lcm_cfg_t s_lcm_mipi_ek79007_info;
|
||||
extern lcm_cfg_t s_lcm_mipi_st7701s_info;
|
||||
extern lcm_cfg_t qua_lcm_mipi_jd9365d_jlm101b021_info;
|
||||
extern lcm_cfg_t qua_lcm_mipi_hx8729_qfh24004_info;
|
||||
|
||||
extern lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
|
||||
/*rgb lcm*/
|
||||
extern lcm_cfg_t s_lcm_rgb_at070tn94_info;
|
||||
extern lcm_cfg_t s_lcm_rgb18_at070tn94_info;
|
||||
@ -56,6 +56,10 @@ lcm_cfg_t *lcm_main_tab[] = {
|
||||
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
|
||||
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MORE
|
||||
/*mipi lcm*/
|
||||
&s_lcm_mipi_ek79007_info,
|
||||
@ -90,6 +94,10 @@ lcm_cfg_t *lcm_sub_tab[] = {
|
||||
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
|
||||
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MORE
|
||||
/*mipi lcm*/
|
||||
&s_lcm_mipi_st7701s_info,
|
||||
|
||||
@ -4,6 +4,20 @@ config QUA_LOGO
|
||||
help
|
||||
This enables qua logo.
|
||||
|
||||
config QUA_LOGO_MIPI_ER88577B
|
||||
bool "qua logo mipi er88577b 800x1280"
|
||||
depends on QUA_LOGO
|
||||
default n if QUA_LOGO
|
||||
help
|
||||
This enables qua logo mipi er88577b 800x1280.
|
||||
|
||||
config QUA_LOGO_MIPI_ER88577B_PWR_CTRL
|
||||
bool "qua logo mipi er88577b power on timing ctrl"
|
||||
depends on QUA_LOGO
|
||||
default n if QUA_LOGO
|
||||
help
|
||||
This enables qua logo mipi er88577b power on timing ctrl.
|
||||
|
||||
config QUA_LOGO_MIPI_JD9365D
|
||||
bool "qua logo mipi jd9365d 800x1280"
|
||||
depends on QUA_LOGO
|
||||
|
||||
@ -9,3 +9,4 @@ obj-$(CONFIG_QUA_LOGO_PART) += resource_img.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_JD9365D) += qua_logo_mipi_jd9365d.o
|
||||
obj-$(CONFIG_QUA_LOGO_RGB_EK79001H) += qua_logo_rgb_ek79001h.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_HX8729) += qua_logo_mipi_hx8729.o
|
||||
obj-$(CONFIG_QUA_LOGO_MIPI_ER88577B) += qua_logo_mipi_er88577b.o
|
||||
|
||||
@ -9,11 +9,6 @@
|
||||
#include <common.h>
|
||||
|
||||
void qua_boot_logo(void) {
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_HX8729
|
||||
extern void qua_boot_logo_hx8729(void);
|
||||
qua_boot_logo_hx8729();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_JD9365D
|
||||
extern void qua_boot_logo_jd9365d(void);
|
||||
qua_boot_logo_jd9365d();
|
||||
@ -25,4 +20,14 @@ void qua_boot_logo(void) {
|
||||
extern void qua_boot_logo_ek79001h(void);
|
||||
qua_boot_logo_ek79001h();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
|
||||
extern void qua_boot_logo_er88577b(void);
|
||||
qua_boot_logo_er88577b();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
|
||||
extern void qua_boot_logo_er88577b(void);
|
||||
qua_boot_logo_er88577b();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -0,0 +1,444 @@
|
||||
/*
|
||||
#
|
||||
# Copyright (c) Quaming Intelligent Technology Co., Ltd.
|
||||
# (C) Copyright 2002-2006 All Rights Reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/io.h>
|
||||
#include "resource_img.h"
|
||||
#include "udisk_flash.h"
|
||||
#include "mach/molchip_gpio.h"
|
||||
|
||||
#define ALIGN_UP(x, a) ((x+a-1)&(~(a-1)))
|
||||
|
||||
#define LCM_W 800
|
||||
#define LCM_H 1280
|
||||
#define LOGO_W 800 //dhd0 only support 1024x600
|
||||
#define LOGO_H 1280
|
||||
#define JPG_ADDR 0x43A00000
|
||||
#define Y_ADDR_1 0x43B00000
|
||||
#define UV_ADDR_1 0x43C00000
|
||||
#define Y_ADDR_2 0x43D00000 //(LOGO_YADDR0) //(0x43D00000) //MMZ END ADDR 0x44000000
|
||||
#define UV_ADDR_2 0x43E00000 //(LOGO_CADDR0) //(0x43D00000 + (ALIGN_UP(JPG_W, 16) * ALIGN_UP(JPG_H, 16))) //JPEG DEC MUST ALIGN 16
|
||||
#define LOGO_NAME_1 "logo_0.jpg"
|
||||
#define LOGO_NAME_2 "logo_1.jpg"
|
||||
#define LOGO_UPDATE "logo_update.jpg"
|
||||
#define LOGO_DEFAULT "default.jpg"
|
||||
#define LOGO_LANDS_1 "logo_lands_0.jpg"
|
||||
#define LOGO_LANDS_2 "logo_lands_1.jpg"
|
||||
|
||||
typedef enum {
|
||||
VOU_DEV_IDX_DHD = 0,
|
||||
VOU_DEV_IDX_DHD1,
|
||||
VOU_DEV_IDX_DSD,
|
||||
VOU_DEV_IDX_NUM,
|
||||
} vou_dev_idx_e;
|
||||
|
||||
extern unsigned int JPEG_WaitIRQ(void);
|
||||
extern unsigned int JPEG_WaitIRQ_Timeout(void);
|
||||
extern void fast_osd(int type, int x, int y, int w, int h, uint32_t y_addr, uint32_t uv_addr, int pw, int pp, int ph);
|
||||
extern void fast_osd_by_id(int id, int type, int x, int y, int w, int h, uint32_t y_addr, uint32_t uv_addr, int pw, int pp, int ph);
|
||||
extern void hw_jpeg_dec(unsigned int jpg_addr, unsigned int jpg_size, unsigned int luma_addr, unsigned int chroma_addr);
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_PART
|
||||
static int show_jpeg_from_part(int id, const char *name, unsigned int y_addr, unsigned int uv_addr)
|
||||
{
|
||||
int jpg_size = 0;
|
||||
unsigned int logo_width = LOGO_W;
|
||||
unsigned int logo_height = LOGO_H;
|
||||
|
||||
jpg_size = mc_read_resource_file((void*)JPG_ADDR, name, 0, 0);
|
||||
if (jpg_size > 0) {
|
||||
hw_jpeg_dec(JPG_ADDR, jpg_size, y_addr, uv_addr);
|
||||
if (!JPEG_WaitIRQ_Timeout()) {
|
||||
fast_osd_by_id(id, 1, (LCM_W - logo_width) / 2, (LCM_H - logo_height) / 2, logo_width, logo_height, y_addr, uv_addr, logo_width, logo_width, logo_height);
|
||||
printf("show %s done !\n", name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
printf("show %s failed !\n", name);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int show_jpeg_welcome(int id, unsigned int y_addr, unsigned int uv_addr)
|
||||
{
|
||||
extern const __attribute__((aligned(64))) unsigned int logo_jpg_welcome_w320h160_map[];
|
||||
int jpg_size = 11752; //_binary_logo_jpg_end - _binary_logo_jpg_start;
|
||||
uint32_t jpg_addr = (unsigned int)&logo_jpg_welcome_w320h160_map;
|
||||
unsigned int logo_width = 320;
|
||||
unsigned int logo_height = 160;
|
||||
|
||||
hw_jpeg_dec(jpg_addr, jpg_size, y_addr, uv_addr);
|
||||
if (!JPEG_WaitIRQ_Timeout()) {
|
||||
fast_osd_by_id(id, 1, (LCM_W - logo_width) / 2, (LCM_H - logo_height) / 2, logo_width, logo_height, y_addr, uv_addr, logo_width, logo_width, logo_height);
|
||||
printf("show welcome done !\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("show welcome failed !\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
void display_logo_id(int id, const char *logo_name) {
|
||||
char name[20] = {0};
|
||||
uint32_t y_addr = 0;
|
||||
uint32_t uv_addr = 0;
|
||||
|
||||
if (id == VOU_DEV_IDX_DHD) {
|
||||
y_addr = Y_ADDR_1;
|
||||
uv_addr = UV_ADDR_1;
|
||||
strcpy(name, LOGO_NAME_1);
|
||||
} else if (id == VOU_DEV_IDX_DHD1) {
|
||||
y_addr = Y_ADDR_2;
|
||||
uv_addr = UV_ADDR_2;
|
||||
strcpy(name, LOGO_NAME_2);
|
||||
}
|
||||
#ifdef CONFIG_UBOOT_XKPHOTO
|
||||
isFlashMode();
|
||||
|
||||
// landscape mode
|
||||
if (env_get_ulong("landscape", 10, 0) == 1) {
|
||||
strcpy(name, LOGO_LANDS_1);
|
||||
}
|
||||
#else
|
||||
if (!isFlashMode()) {
|
||||
strcpy(name, LOGO_UPDATE);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (logo_name) {
|
||||
strcpy(name, logo_name);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_QUA_LOGO_PART
|
||||
// display jpeg from logo partition
|
||||
if (show_jpeg_from_part(id, name, y_addr, uv_addr) == 0) {
|
||||
return;
|
||||
}
|
||||
// if logo_0.jpg or logo_1.jpg data is corrupted, display default.jpg
|
||||
if (show_jpeg_from_part(id, LOGO_DEFAULT, y_addr, uv_addr) == 0) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
show_jpeg_welcome(id, y_addr, uv_addr);
|
||||
}
|
||||
|
||||
void display_logo_id_addr(int id, const char * jpg_addr, const char * jpg_size) {
|
||||
uint32_t y_addr = 0;
|
||||
uint32_t uv_addr = 0;
|
||||
|
||||
if (id == VOU_DEV_IDX_DHD) {
|
||||
y_addr = Y_ADDR_1;
|
||||
uv_addr = UV_ADDR_1;
|
||||
} else if (id == VOU_DEV_IDX_DHD1) {
|
||||
y_addr = Y_ADDR_2;
|
||||
uv_addr = UV_ADDR_2;
|
||||
}
|
||||
|
||||
hw_jpeg_dec(simple_strtoul(jpg_addr, NULL, 16), simple_strtoul(jpg_size, NULL, 16), y_addr, uv_addr);
|
||||
if (!JPEG_WaitIRQ_Timeout()) {
|
||||
fast_osd_by_id(id, 1, (LCM_W - LOGO_W) / 2, (LCM_H - LOGO_H) / 2, LOGO_W, LOGO_H, y_addr, uv_addr, LOGO_W, LOGO_W, LOGO_H);
|
||||
printf("show jpg logo done !\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("show jpg logo failed !\n");
|
||||
}
|
||||
|
||||
void qua_boot_logo_er88577b(void) {
|
||||
display_logo_id(VOU_DEV_IDX_DHD, NULL);
|
||||
#if defined(CONFIG_QUA_LCM_2ND_SCR)
|
||||
display_logo_id(VOU_DEV_IDX_DHD1, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
int gpio_direction_output(unsigned char pin, gpio_output_mode mode);
|
||||
int gpio_direction_input(unsigned char pin);
|
||||
int gpio_get_value(unsigned char pin);
|
||||
int gpio_set_value(unsigned char pin, gpio_output_mode mode);
|
||||
int gpio_request(unsigned gpio, const char *label);
|
||||
|
||||
extern void qua_writel(uint32_t value, uint32_t addr);
|
||||
extern uint32_t qua_readl(uint32_t addr);
|
||||
|
||||
#ifdef CONFIG_UBOOT_XKPHOTO
|
||||
#define REG_PIN_MUX_BASE 0x10200000
|
||||
#define REG_LCD_DE_PIN 0x64
|
||||
#define REG_LCD_HS_PIN 0x68
|
||||
#define REG_LCD_VS_PIN 0x6C
|
||||
#define REG_LCD_D0_PIN 0x74
|
||||
#define REG_LCD_D1_PIN 0x78
|
||||
#define REG_LCD_BL_PIN 0xb0
|
||||
|
||||
#define REG_PIN_DRV_BASE 0x0B100000
|
||||
#define REG_LCD_DE_DRV 0x28
|
||||
#define REG_LCD_HS_DRV 0x2C
|
||||
#define REG_LCD_VS_DRV 0x30
|
||||
#define REG_LCD_D0_DRV 0x38
|
||||
#define REG_LCD_D1_DRV 0x3C
|
||||
|
||||
#define GPIO_NUM_INDEX(x,y) (8*x + y)
|
||||
#define GPIO_NUM_LCD_DE GPIO_NUM_INDEX(3,3)
|
||||
#define GPIO_NUM_LCD_HS GPIO_NUM_INDEX(3,4)
|
||||
#define GPIO_NUM_LCD_VS GPIO_NUM_INDEX(3,5)
|
||||
#define GPIO_NUM_LCD_D0 GPIO_NUM_INDEX(3,7)
|
||||
#define GPIO_NUM_LCD_D1 GPIO_NUM_INDEX(4,0)
|
||||
#define GPIO_NUM_LCD_BL GPIO_NUM_INDEX(5,6)
|
||||
#else
|
||||
#define REG_PIN_MUX_BASE 0x10200000
|
||||
#define REG_LCD_DE_PIN 0x64
|
||||
#define REG_LCD_HS_PIN 0x68
|
||||
#define REG_LCD_VS_PIN 0x6C
|
||||
#define REG_LCD_D0_PIN 0x74
|
||||
#define REG_LCD_D1_PIN 0x78
|
||||
#define REG_LCD_BL_PIN 0xec
|
||||
|
||||
#define REG_PIN_DRV_BASE 0x0B100000
|
||||
#define REG_LCD_DE_DRV 0x28
|
||||
#define REG_LCD_HS_DRV 0x2C
|
||||
#define REG_LCD_VS_DRV 0x30
|
||||
#define REG_LCD_D0_DRV 0x38
|
||||
#define REG_LCD_D1_DRV 0x3C
|
||||
|
||||
#define GPIO_NUM_INDEX(x,y) (8*x + y)
|
||||
#define GPIO_NUM_LCD_DE GPIO_NUM_INDEX(3,3)
|
||||
#define GPIO_NUM_LCD_HS GPIO_NUM_INDEX(3,4)
|
||||
#define GPIO_NUM_LCD_VS GPIO_NUM_INDEX(3,5)
|
||||
#define GPIO_NUM_LCD_D0 GPIO_NUM_INDEX(3,7)
|
||||
#define GPIO_NUM_LCD_D1 GPIO_NUM_INDEX(4,0)
|
||||
#define GPIO_NUM_LCD_BL GPIO_NUM_INDEX(0,5)
|
||||
#endif
|
||||
|
||||
#define PIN_MUX_GPIO_ENABLE (1)
|
||||
static void __qua_lcm_mipi_er88577b_hrst(unsigned int vci_pin_reg_oft, unsigned int rst_pin_reg_oft,
|
||||
unsigned int vci_pin_gpio_num, unsigned int rst_pin_gpio_num)
|
||||
{
|
||||
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
|
||||
printf("%s e\n", __func__);
|
||||
/* power on rst timing gpio */
|
||||
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + rst_pin_reg_oft);
|
||||
gpio_request(rst_pin_gpio_num, "rst_gpio");
|
||||
gpio_direction_output(rst_pin_gpio_num, 0);
|
||||
gpio_set_value(rst_pin_gpio_num, 0);
|
||||
|
||||
/* power on vci timing gpio, 0: on, 1: off */
|
||||
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + vci_pin_reg_oft);
|
||||
gpio_request(vci_pin_gpio_num, "vci_gpio");
|
||||
gpio_direction_output(vci_pin_gpio_num, 1);
|
||||
gpio_set_value(vci_pin_gpio_num, 1);
|
||||
mdelay(500);
|
||||
gpio_set_value(vci_pin_gpio_num, 0);
|
||||
mdelay(10);
|
||||
|
||||
#if 1
|
||||
/* power on rst timing */
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
gpio_set_value(rst_pin_gpio_num, 0);
|
||||
mdelay(10);
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(120);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* power on rst timing */
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
gpio_set_value(rst_pin_gpio_num, 0);
|
||||
mdelay(20);
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
#endif
|
||||
|
||||
/* power backlight gpio enable, 0x102000ec */
|
||||
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + REG_LCD_BL_PIN);
|
||||
gpio_request(GPIO_NUM_LCD_BL, "bkl_gpio");
|
||||
gpio_direction_output(GPIO_NUM_LCD_BL, 1);
|
||||
gpio_set_value(GPIO_NUM_LCD_BL, 1);
|
||||
|
||||
// gpio_free(rst_pin_gpio_num);
|
||||
// gpio_free(vci_pin_gpio_num);
|
||||
printf("%s x\n", __func__);
|
||||
}
|
||||
|
||||
int qua_lcm_mipi_er88577b_hrst(int lcm_id)
|
||||
{
|
||||
printf("%s e\n", __func__);
|
||||
printf("%s lcm_id=%d\n", __func__, lcm_id);
|
||||
if(lcm_id == 0)
|
||||
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D0_PIN, REG_LCD_DE_PIN, GPIO_NUM_LCD_D0, GPIO_NUM_LCD_DE);
|
||||
|
||||
if(lcm_id == 1)
|
||||
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D1_PIN, REG_LCD_HS_PIN, GPIO_NUM_LCD_D1, GPIO_NUM_LCD_HS);
|
||||
printf("%s x\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __qua_lcm_mipi_er88577b_rst(unsigned int rst_pin_reg_oft, unsigned int rst_pin_gpio_num)
|
||||
{
|
||||
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
|
||||
printf("%s e\n", __func__);
|
||||
/* power on rst timing gpio */
|
||||
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + rst_pin_reg_oft);
|
||||
gpio_request(rst_pin_gpio_num, "rst_gpio");
|
||||
gpio_direction_output(rst_pin_gpio_num, 1);
|
||||
gpio_set_value(rst_pin_gpio_num, 0);
|
||||
mdelay(10);
|
||||
/* power on rst timing */
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
gpio_set_value(rst_pin_gpio_num, 0);
|
||||
mdelay(20);
|
||||
gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
|
||||
// gpio_free(rst_pin_gpio_num);
|
||||
// gpio_free(vci_pin_gpio_num);
|
||||
printf("%s x\n", __func__);
|
||||
}
|
||||
|
||||
int qua_lcm_mipi_er88577b_rst(int lcm_id)
|
||||
{
|
||||
printf("%s e\n", __func__);
|
||||
printf("%s lcm_id=%d\n", __func__, lcm_id);
|
||||
if(lcm_id == 0)
|
||||
__qua_lcm_mipi_er88577b_rst(REG_LCD_DE_PIN, GPIO_NUM_LCD_DE);
|
||||
|
||||
if(lcm_id == 1)
|
||||
__qua_lcm_mipi_er88577b_rst(REG_LCD_HS_PIN, GPIO_NUM_LCD_HS);
|
||||
printf("%s x\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qua_lcm_mipi_er88577b_bkl(void)
|
||||
{
|
||||
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
|
||||
// printf("%s e\n", __func__);
|
||||
/* power backlight gpio enable, 0x102000b0 */
|
||||
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + REG_LCD_BL_PIN);
|
||||
gpio_request(GPIO_NUM_LCD_BL, "bkl_gpio");
|
||||
gpio_direction_output(GPIO_NUM_LCD_BL, 1);
|
||||
gpio_set_value(GPIO_NUM_LCD_BL, 1);
|
||||
|
||||
// printf("%s x\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
#if 0
|
||||
int qua_lcm_mipi_er88577b_hrst(int lcm_id)
|
||||
{
|
||||
// int rtn = 0, val = 0, tmp = 0, _v = 0, i = 0, count = 3;
|
||||
// volatile unsigned int *pdrv_reg = (volatile unsigned int *)_vpdrvbase;
|
||||
volatile unsigned int *pmux_reg = (volatile unsigned int *)REG_PIN_MUX_BASE;
|
||||
|
||||
if(lcm_id == 0)
|
||||
{
|
||||
/* power on vci timing gpio3_7 */
|
||||
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_D0_PIN);
|
||||
qua_gpio_request(GPIO_NUM_LCD_D0, 0);
|
||||
qua_gpio_direction_output(GPIO_NUM_LCD_D0, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_D0, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_D0, 0);
|
||||
mdelay(5);
|
||||
|
||||
/* power on rst timing gpio3_3 */
|
||||
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_DE_PIN);
|
||||
// tmp = qua_readl((unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
// printf("%s LCD_DE drv = 0x%x\n", __func__, tmp);
|
||||
// _v = ((tmp & 0xf0) | 0x04);
|
||||
// qua_writel(_v, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
|
||||
qua_gpio_request(GPIO_NUM_LCD_DE, 0);
|
||||
qua_gpio_direction_output(GPIO_NUM_LCD_DE, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_DE, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_DE, 0);
|
||||
mdelay(5);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_DE, 1);
|
||||
mdelay(5);
|
||||
printf("%s gpio3_3 \n", __func__);
|
||||
|
||||
// printf("%s gpio3_3 val = 0x%x\n", __func__, val);
|
||||
// qua_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
qua_gpio_free(GPIO_NUM_LCD_DE);
|
||||
qua_gpio_free(GPIO_NUM_LCD_D0);
|
||||
}
|
||||
|
||||
if(lcm_id == 1)
|
||||
{
|
||||
/* power on vci timing gpio4_0 */
|
||||
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_D1_PIN);
|
||||
qua_gpio_request(GPIO_NUM_LCD_D1, 0);
|
||||
qua_gpio_direction_output(GPIO_NUM_LCD_D1, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_D1, 1);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_D1, 0);
|
||||
mdelay(5);
|
||||
|
||||
/* power on rst timing gpio3_4 */
|
||||
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_HS_PIN);
|
||||
// tmp = qua_readl((unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
// printf("%s LCD_VS drv = 0x%x\n", __func__, tmp);
|
||||
// _v = ((tmp & 0xf0) | 0x04);
|
||||
// qua_writel(_v, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
|
||||
qua_gpio_request(GPIO_NUM_LCD_HS, 0);
|
||||
qua_gpio_direction_output(GPIO_NUM_LCD_HS, 1);
|
||||
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_HS, 1);
|
||||
// do{
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_HS, 0);
|
||||
mdelay(5);
|
||||
qua_gpio_set_value(GPIO_NUM_LCD_HS, 1);
|
||||
mdelay(5);
|
||||
printf("%s gpio3_4 \n", __func__);
|
||||
// while(1);
|
||||
|
||||
// }while(1);
|
||||
// printf("%s gpio3_4 val = 0x%x\n", __func__, val);
|
||||
|
||||
// qua_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
qua_gpio_free(GPIO_NUM_LCD_HS);
|
||||
qua_gpio_free(GPIO_NUM_LCD_D1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int show_qua_boot_logo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
if (argc != 2 && argc != 3)
|
||||
goto usage;
|
||||
|
||||
// 传入logo分区中logo图片的名称
|
||||
if (argc == 2) {
|
||||
display_logo_id(VOU_DEV_IDX_DHD, argv[1]);
|
||||
#if defined(CONFIG_QUA_LCM_2ND_SCR)
|
||||
display_logo_id(VOU_DEV_IDX_DHD1, argv[1]);
|
||||
#endif
|
||||
}
|
||||
|
||||
// logo图片已读取到ddr中,传入ddr的地址和logo图片大小
|
||||
if (argc == 3) {
|
||||
display_logo_id_addr(VOU_DEV_IDX_DHD, argv[1], argv[2]);
|
||||
#if defined(CONFIG_QUA_LCM_2ND_SCR)
|
||||
display_logo_id_addr(VOU_DEV_IDX_DHD1, argv[1], argv[2]);
|
||||
#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
printf("Usage: qua_logo %s\n", cmdtp->usage);
|
||||
return 1;
|
||||
}
|
||||
|
||||
U_BOOT_CMD(
|
||||
qua_logo, 3, 0, show_qua_boot_logo,
|
||||
"show qua boot logo",
|
||||
"show qua boot logo"
|
||||
);
|
||||
@ -122,7 +122,9 @@ CONFIG_CMD_BLINKLED=y
|
||||
CONFIG_LED_INDICATOR_FOR_FLASH=y
|
||||
CONFIG_LED_INDICATOR_GPIO=39
|
||||
CONFIG_QUA_LOGO=y
|
||||
CONFIG_QUA_LOGO_MIPI_JD9365D=y
|
||||
CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=y
|
||||
#CONFIG_QUA_LOGO_MIPI_JD9365D=y
|
||||
#CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=y
|
||||
CONFIG_QUA_LOGO_MIPI_ER88577B=y
|
||||
CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL=y
|
||||
CONFIG_QUA_LCM_FASTBOOT=y
|
||||
CONFIG_UBOOT_MOTO_LD=y
|
||||
|
||||
@ -122,7 +122,9 @@ CONFIG_CMD_BLINKLED=y
|
||||
CONFIG_LED_INDICATOR_FOR_FLASH=y
|
||||
CONFIG_LED_INDICATOR_GPIO=39
|
||||
CONFIG_QUA_LOGO=y
|
||||
CONFIG_QUA_LOGO_MIPI_JD9365D=y
|
||||
CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=y
|
||||
#CONFIG_QUA_LOGO_MIPI_JD9365D=y
|
||||
#CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=y
|
||||
CONFIG_QUA_LOGO_MIPI_ER88577B=y
|
||||
CONFIG_QUA_LOG0_MIPI_ER88577B_PWR_CTRL=y
|
||||
CONFIG_QUA_LCM_FASTBOOT=y
|
||||
CONFIG_UBOOT_MOTO_LD=y
|
||||
|
||||
@ -24,8 +24,9 @@ lcm_module-objs += utils/qua_lcm_gpio.o \
|
||||
lcm_mipi_qua_jd9365d_jlm101b021.o \
|
||||
lcm_rgb_qua_ek79001h_tg78550b3.o \
|
||||
lcm_rgb_qua_ek79001h_tg78550b3_24bits.o \
|
||||
lcm_rgb_qua_st7265_tcxd050iblma.o
|
||||
|
||||
lcm_rgb_qua_st7265_tcxd050iblma.o \
|
||||
lcm_mipi_er88577b.o\
|
||||
lcm_mipi_qua_er88577b_6hc1017b7e.o
|
||||
|
||||
lcm_module-objs += mol_lcm_module.o \
|
||||
|
||||
|
||||
@ -0,0 +1,332 @@
|
||||
|
||||
#include "mol_lcm_local.h"
|
||||
#include "dsi_com_param.h"
|
||||
#include "mol_lcm.h"
|
||||
|
||||
#define LCM_ER88577B_DEBUG 0
|
||||
|
||||
#define LCM_ER88577B_WIDTH 800
|
||||
#define LCM_ER88577B_HEIGHT 1280
|
||||
|
||||
const lcm_cfg_t s_lcm_mipi_er88577b_info;
|
||||
|
||||
static dsi_setting_tab_t s_lcm_mipi_er88577b_init_code[] = {
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE0,0xAB,0xBA}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE1,0xBA,0xAB}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x10,0x01,0x47,0xFF}},
|
||||
//{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x11,0x01,0x47,0xFF}}, //BIST
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xB2,0x0C,0x14,0x04,0x50,0x50,0x14}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB3,0x56,0x53,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB4,0x33,0x30,0x04}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00,0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xB8,0x05,0x12,0x29,0x49,0x48}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00,0xB9,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00,0xC0,0xCC,0x76,0x12,0x34,0x44,0x44,0x44,0x44,0x98,0x04,0x98,0x04,0x0F,0x00,0x00,0xC1}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00,0xC1,0x54,0x94,0x02,0x85,0x9F,0x00,0x6F,0x00,0x54,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00,0xC2,0x17,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xFF,0x18,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC3,0x87,0x47,0x05,0x05,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x0D,0x0D,0x13,0x13,0x11,0x11,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC4,0x06,0x06,0x04,0x04,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0E,0x0E,0x0C,0x0C,0x12,0x12,0x10,0x10,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xC6,0x2A,0x2A}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xCA,0xCB,0x43}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xCD,0x0E,0x4B,0x4B,0x20,0x19,0x6B,0x06,0xB3}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xD2,0xE3,0x2B,0x38,0x08}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00,0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xE6,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xF0,0x12,0x03,0x20,0x00,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0xF3,0x00}},
|
||||
|
||||
{DSI_DI_DELAY, 10, },
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0x11,0x00}},
|
||||
{DSI_DI_DELAY, 120, },
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0x29,0x00}},
|
||||
{DSI_DI_DELAY, 20, },
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
};
|
||||
#if 0
|
||||
static dsi_setting_tab_t s_lcm_mipi_er88577b_sleep_out_setting[] = {
|
||||
// sleep out
|
||||
// {DSI_DI_DELAY, 20, },
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0x11,0x00}},
|
||||
{DSI_DI_DELAY, 120, },
|
||||
// display on
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0x29,0x00}},
|
||||
{DSI_DI_DELAY, 20, },
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
};
|
||||
|
||||
static dsi_setting_tab_t s_lcm_mipi_er88577b_sleep_in_setting[] = {
|
||||
// sleep in
|
||||
{DSI_DI_DELAY, 20, },
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 0x01, {0x28}},
|
||||
{DSI_DI_DELAY, 20, },
|
||||
// Display off
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 0x01, {0x10}},
|
||||
{DSI_DI_DELAY, 120, },
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
};
|
||||
|
||||
static dsi_setting_tab_t s_lcm_mipi_er88577b_work_code[] = {
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 0x02, {0x36,0x00}}, /* 0x00: RGB 0x08: BGR */
|
||||
// display on
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 0x01, {0x29}},
|
||||
{DSI_DI_DELAY, 70, {0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
};
|
||||
|
||||
static dsi_setting_tab_t s_lcm_mipi_er88577b_reset_code[] = {
|
||||
// sw reset
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 0x01, {0x01}},
|
||||
{DSI_DI_DELAY, 5, {0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0}}
|
||||
};
|
||||
#endif
|
||||
static int32_t _lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
//lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
// system("devmem 0x1020007c 32 0x1");
|
||||
// system("echo 33 > /sys/class/gpio/export");
|
||||
// system("echo out > /sys/class/gpio/gpio33/direction");
|
||||
// system("echo 1 > /sys/class/gpio/gpio33/value");
|
||||
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&s_lcm_mipi_er88577b_info);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_PowerOff(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
ops->power.reset(lcmHandle->lcm_id, 0);
|
||||
ops->delayMs(10);
|
||||
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&s_lcm_mipi_er88577b_info);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
|
||||
{
|
||||
#define MIPI_ER88577B_480_ID0_ADDR (0xA1)
|
||||
#define MIPI_ER88577B_480_ID1_ADDR (0xA8)
|
||||
#define MIPI_ER88577B_480_ID0 (0x88)
|
||||
#define MIPI_ER88577B_480_ID1 (0x02)
|
||||
int32_t rtn = SUCCESS;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
uint8_t read_data[2] = {0};
|
||||
|
||||
return rtn;
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "start");
|
||||
#endif
|
||||
|
||||
CHECK_PTR(param, NULL, "inParam ptr is NULL ~_~!\n");
|
||||
CHECK_PTR(ops, NULL, "ops ptr is NULL ~_~!\n");
|
||||
|
||||
goto EXIT;
|
||||
|
||||
read_data[0] = 0xff;
|
||||
read_data[1] = 0xff;
|
||||
|
||||
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_id, DSI_DI_DCS_READ_0_PARAM, MIPI_ER88577B_480_ID0_ADDR, 1, &read_data[0]);
|
||||
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_id, DSI_DI_DCS_READ_0_PARAM, MIPI_ER88577B_480_ID1_ADDR, 1, &read_data[1]);
|
||||
|
||||
if ((MIPI_ER88577B_480_ID0 != read_data[0])
|
||||
|| (MIPI_ER88577B_480_ID1 != read_data[1])) {
|
||||
rtn = FAIL_ID_NO_MATCH;
|
||||
}
|
||||
|
||||
printf("er88577b_2lane id : 0x%x:0x%x, 0x%x:0x%x", MIPI_ER88577B_480_ID0, MIPI_ER88577B_480_ID1, read_data[0],read_data[1]);
|
||||
|
||||
EXIT:
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "end");
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_init(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, s_lcm_mipi_er88577b_init_code, ARRAY_SIZE(s_lcm_mipi_er88577b_init_code));
|
||||
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, s_lcm_mipi_er88577b_sleep_out_setting, ARRAY_SIZE(s_lcm_mipi_er88577b_sleep_out_setting));
|
||||
|
||||
//rtn = ops->power.back_light_gpio(lcmHandle->lcm_id, 1);
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "end");
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_suspend(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
rtn = ops->power.back_light_gpio(lcmHandle->lcm_id, 0);
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "end");
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_resume(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
rtn = ops->power.back_light_gpio(lcmHandle->lcm_id, 1);
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "end");
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t _lcm_mipi_er88577b_deinit(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
rtn = ops->power.back_light_gpio(lcmHandle->lcm_id, 0);
|
||||
rtn = _lcm_mipi_er88577b_PowerOff(param, ops);
|
||||
|
||||
#if LCM_ER88577B_DEBUG
|
||||
ops->debug_fun(1, __FUNCTION__, __LINE__, "end");
|
||||
#endif
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
lcm_module_fun s_lcm_mipi_er88577b_ctrl =
|
||||
{
|
||||
.poweron = _lcm_mipi_er88577b_PowerOn,
|
||||
.poweroff = _lcm_mipi_er88577b_PowerOff,
|
||||
.identify = _lcm_mipi_er88577b_identify,
|
||||
.init = _lcm_mipi_er88577b_init,
|
||||
.suspend = _lcm_mipi_er88577b_suspend,
|
||||
.resume = _lcm_mipi_er88577b_resume,
|
||||
.deinit = _lcm_mipi_er88577b_deinit,
|
||||
};
|
||||
|
||||
static lcm_display_sync_info_t s_lcm_mipi_er88577b_dp_info =
|
||||
{
|
||||
.hor_sync_active = 20,
|
||||
.hor_back_porch = 80,
|
||||
.hor_active_pixel = LCM_ER88577B_WIDTH,
|
||||
.hor_front_porch = 80,
|
||||
|
||||
.ver_sync_active = 4,
|
||||
.ver_back_porch = 12,
|
||||
.ver_active_line = LCM_ER88577B_HEIGHT,
|
||||
.ver_front_porch = 20,
|
||||
};
|
||||
|
||||
|
||||
static dsi_timing_t s_lcm_mipi_er88577b_timing =
|
||||
{
|
||||
/*clk lane timing cfg*/
|
||||
.clane.mode = 0,
|
||||
.clane.lp11 = 0,
|
||||
.clane.lp01 = 0,
|
||||
.clane.zero = 13,
|
||||
.clane.prepare = 2,
|
||||
.clane.pre = 3,
|
||||
.clane.post = 10,
|
||||
.clane.trail = 3,
|
||||
.clane.inittime = 6,
|
||||
.clane.exit = 6,
|
||||
/*data lane timing cfg*/
|
||||
.dlane.mode = 0,
|
||||
.dlane.lp11 = 0,
|
||||
.dlane.lp01 = 6, //dlane lpx
|
||||
.dlane.prepare = 3,
|
||||
.dlane.zero = 4,
|
||||
.dlane.trail = 4,
|
||||
.dlane.inittime = 6,
|
||||
.dlane.exit = 6,
|
||||
/*data lane0 read timing cfg*/
|
||||
.read.mode = 0,
|
||||
.read.tago = 27,
|
||||
.read.tasure = 10,
|
||||
.read.taget = 34,
|
||||
/*clk cfg*/
|
||||
.clk = {
|
||||
.vou.mode = 1,
|
||||
.vou.sel = 0x3,
|
||||
.vou.div = 0,
|
||||
|
||||
.mif.mode = 0,
|
||||
.mif.pll_doubler = 0,
|
||||
.mif.pll_div_s = 1,
|
||||
.mif.pll_n = 0,
|
||||
.mif.pll_kint = 0x46dc5d,
|
||||
.mif.pll_nint = 0x38,
|
||||
.mif.pixelclk_div = 0,
|
||||
.mif.pll_pdiv = 2,
|
||||
.mif.dhd_div = 2,
|
||||
}
|
||||
};
|
||||
|
||||
static lcm_mipi_info s_lcm_mipi_er88577b_mipi_info =
|
||||
{
|
||||
.work_mode = DSI_VIDEO_MODE,
|
||||
.lane_num = DSI_TWO_LANE,
|
||||
.format = DSI_RGB888,
|
||||
.packet_size = 256,
|
||||
.timing = (void *)&s_lcm_mipi_er88577b_timing,
|
||||
};
|
||||
|
||||
const lcm_cfg_t s_lcm_mipi_er88577b_info =
|
||||
{
|
||||
.verder_name = VENDER_NAME,
|
||||
.name = "er88577b_2lane_800_1280",
|
||||
.width = LCM_ER88577B_WIDTH,
|
||||
.height = LCM_ER88577B_HEIGHT,
|
||||
.type = LCM_TYPE_MIPI, /*mcu, rgb, mipi*/
|
||||
.fps = 60,
|
||||
.direction = LCM_DIRECT_NORMAL,
|
||||
.dp_sync = &s_lcm_mipi_er88577b_dp_info,
|
||||
.infor = {
|
||||
.mipi = &s_lcm_mipi_er88577b_mipi_info,
|
||||
},
|
||||
.fun = &s_lcm_mipi_er88577b_ctrl,
|
||||
};
|
||||
|
||||
@ -0,0 +1,548 @@
|
||||
|
||||
|
||||
#include "mol_lcm_local.h"
|
||||
#include "dsi_com_param.h"
|
||||
#include "mol_lcm.h"
|
||||
#include <linux/delay.h>
|
||||
|
||||
#define LCM_WIDTH 800
|
||||
#define LCM_HEIGHT 1280
|
||||
#define LCM_DEBUG 1
|
||||
|
||||
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
|
||||
|
||||
extern int qua_lcm_parse_lcm_args(void);
|
||||
extern int qua_lcm_mipi_er88577b_hrst(int lcm_id);
|
||||
|
||||
static dsi_setting_tab_t qua_lcm_mipi_er88577b_6hc1017b7e_init_setting[] = {
|
||||
#if 1
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xE7,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xB1,0x10,0x01,0x7F,0x18}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB2,0x0C,0x10,0x04,0x50,0x50,0x14}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB3,0x56,0xD3,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB4,0x33,0x30,0x04}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB8,0x05,0x12,0x29,0x49,0x48}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00, 0xB9,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x12, {0x10,0x00, 0xC0,0x32,0x45,0xB4,0x54,0x66,0x66,0x44,0x44,0x80,0x04,0x7C,0x04,0x3F,0x00,0x00,0xC1}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xC1,0x34,0x94,0x02,0x8F,0x80,0x00,0x7C,0x00,0x54,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00, 0xC2,0x33,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xBB,0x18,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC3,0xA4,0x64,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x24}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC4,0x24,0x24,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xC6,0x40,0x40}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xCA,0xCB,0x43}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xCD,0x0E,0x6E,0x6E,0x22,0x19,0x6B,0x06,0xB3}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xD2,0xE1,0x2B,0x38,0x08}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xE6,0x80,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xF0,0x12,0x03,0x20,0x00,0xFF}},
|
||||
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 120, {0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 20, {0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x01, 0x00}},
|
||||
{DSI_DI_DELAY, 30, {0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE1, 0x93}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE2, 0x65}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE3, 0xF8}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x80, 0x01}}, //{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x80, 0x03}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x01}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x00, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x01, 0x48}}, // 0x3B,0X41~0X48
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0C, 0x74}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x17, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x18, 0xAF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x19, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1A, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1B, 0xAF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1C, 0x00}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x35, 0x26}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x37, 0x09}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x38, 0x04}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x39, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3A, 0x01}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3C, 0x78}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3D, 0xFF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3E, 0xFF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3F, 0x7F}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x40, 0x06}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x41, 0xA0}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x42, 0x81}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x43, 0x14}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x44, 0x23}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x45, 0x28}},
|
||||
|
||||
//{DSI_DI_DCS_WRITE_1_PARAM, 2,{0x4A,0x35}}, //bist mode
|
||||
//{DSI_DI_DCS_WRITE_1_PARAM, 2,{0x4B,0x04}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x55, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x57, 0x69}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x59, 0x0A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5A, 0x2A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5B, 0x17}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5D, 0x7F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5E, 0x69}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5F, 0x59}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x60, 0x4C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x61, 0x47}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x62, 0x39}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x63, 0x3B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x64, 0x24}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x65, 0x3D}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x66, 0x3C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x67, 0x3C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x68, 0x5A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x69, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6A, 0x4A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6B, 0x43}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6C, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6D, 0x20}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6E, 0x0F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6F, 0x00}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x70, 0x7F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x71, 0x69}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x72, 0x59}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x73, 0x4C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x74, 0x47}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x75, 0x39}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x76, 0x3B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x77, 0x24}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x78, 0x3D}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x79, 0x3C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7A, 0x3C}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7B, 0x5A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7C, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7D, 0x4A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7E, 0x43}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7F, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x80, 0x20}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x81, 0x0F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x82, 0x00}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x00, 0x42}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x01, 0x42}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x02, 0x40}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x03, 0x40}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x04, 0x5E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x05, 0x5E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x06, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x07, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x08, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x09, 0x57}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0A, 0x57}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0B, 0x77}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0C, 0x77}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0D, 0x47}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0E, 0x47}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0F, 0x45}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x10, 0x45}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x11, 0x4B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x12, 0x4B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x13, 0x49}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x14, 0x49}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x15, 0x5F}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x16, 0x41}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x17, 0x41}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x18, 0x40}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x19, 0x40}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1A, 0x5E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1B, 0x5E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1C, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1D, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1E, 0x5F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x1F, 0x57}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x20, 0x57}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x21, 0x77}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x22, 0x77}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x23, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x24, 0x46}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x25, 0x44}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x26, 0x44}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x27, 0x4A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x28, 0x4A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x29, 0x48}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2A, 0x48}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2B, 0x5F}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2C, 0x01}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2D, 0x01}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2E, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x2F, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x30, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x31, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x32, 0x1E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x33, 0x1E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x34, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x35, 0x17}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x36, 0x17}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x37, 0x37}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x38, 0x37}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x39, 0x08}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3A, 0x08}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3B, 0x0A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3C, 0x0A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3D, 0x04}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3E, 0x04}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x3F, 0x06}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x40, 0x06}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x41, 0x1F}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x42, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x43, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x44, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x45, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x46, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x47, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x48, 0x1E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x49, 0x1E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4A, 0x1F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4B, 0x17}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4C, 0x17}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4D, 0x37}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4E, 0x37}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4F, 0x09}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x50, 0x09}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x51, 0x0B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x52, 0x0B}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x53, 0x05}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x54, 0x05}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x55, 0x07}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x56, 0x07}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x57, 0x1F}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x58, 0x40}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5B, 0x30}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5C, 0x16}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5D, 0x34}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5E, 0x05}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x5F, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x63, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x64, 0x6A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x67, 0x73}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x68, 0x1D}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x69, 0x08}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6A, 0x6A}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6B, 0x08}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6C, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6D, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6E, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x6F, 0x88}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x75, 0xFF}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x77, 0xDD}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x78, 0x3F}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x79, 0x15}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7A, 0x17}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7D, 0x14}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x7E, 0x82}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x04}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x00, 0x0E}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x02, 0xB3}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x09, 0x61}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x0E, 0x48}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x36, 0x49}}, //mark
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x37, 0x58}}, //mark
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE6, 0x02}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE7, 0x0C}},
|
||||
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
|
||||
{DSI_DI_DELAY, 240, {0x00}},
|
||||
|
||||
/* bist mode */
|
||||
//{DSI_DI_DELAY, 254, {0x00}},
|
||||
//{DSI_DI_DELAY, 254, {0x00}},
|
||||
//{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x01}},
|
||||
//{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x4A, 0xB0}}, // bist
|
||||
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0xE0, 0x00}},
|
||||
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
|
||||
{DSI_DI_DELAY, 5, {0x00}},
|
||||
{DSI_DI_DCS_WRITE_1_PARAM, 2, {0x35, 0x00}},
|
||||
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
|
||||
#endif
|
||||
};
|
||||
|
||||
//static int lcdpower = 0xff;
|
||||
static int32_t qua_lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
// lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
// qua_lcm_mipi_er88577b_hrst(lcmHandle->lcm_probe.lcm_id);
|
||||
|
||||
printk("%s\n",__func__);
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
|
||||
{
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
int lcm = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n", __func__, __LINE__);
|
||||
#endif
|
||||
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
lcm = qua_lcm_parse_lcm_args();
|
||||
if(-1 < lcm && lcm <= 3) {
|
||||
if((0 == lcmHandle->lcm_probe.lcm_id) && (lcm & 0x1)) return 0;
|
||||
if((1 == lcmHandle->lcm_probe.lcm_id) && (lcm & 0x2)) return 0;
|
||||
}
|
||||
|
||||
printk("%s %d lcm=%d error.\n", __func__, lcmHandle->lcm_id, lcm);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_PowerOff(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
// lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
// lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
printk("%s\n",__func__);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_deinit(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
printk("%s\n",__func__);
|
||||
rtn = qua_lcm_mipi_er88577b_PowerOff(param, ops);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_init(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
//if (0)
|
||||
rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, qua_lcm_mipi_er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(qua_lcm_mipi_er88577b_6hc1017b7e_init_setting));
|
||||
printk("%s rtn %d\n",__func__,rtn);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_suspend(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_resume(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
#endif
|
||||
|
||||
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
|
||||
|
||||
//rtn = dsi_push_table(lcm_mipi_JD9365D_sleep_out_setting, ARRAY_SIZE(lcm_mipi_JD9365D_sleep_out_setting));
|
||||
return rtn;
|
||||
}
|
||||
|
||||
lcm_module_fun qua_lcm_mipi_er88577b_ctrl =
|
||||
{
|
||||
.poweron = qua_lcm_mipi_er88577b_PowerOn,
|
||||
.poweroff = qua_lcm_mipi_er88577b_PowerOff,
|
||||
.identify = qua_lcm_mipi_er88577b_identify,
|
||||
.init = qua_lcm_mipi_er88577b_init,
|
||||
.suspend = qua_lcm_mipi_er88577b_suspend,
|
||||
.resume = qua_lcm_mipi_er88577b_resume,
|
||||
.deinit = qua_lcm_mipi_er88577b_deinit,
|
||||
};
|
||||
|
||||
static lcm_display_sync_info_t qua_lcm_mipi_er88577b_dp_info =
|
||||
{
|
||||
.hor_sync_active = 20,
|
||||
.hor_back_porch = 40,
|
||||
.hor_active_pixel = LCM_WIDTH,
|
||||
.hor_front_porch = 40,
|
||||
|
||||
.ver_sync_active = 4,
|
||||
.ver_back_porch = 18,
|
||||
.ver_active_line = LCM_HEIGHT,
|
||||
.ver_front_porch = 20,
|
||||
};
|
||||
|
||||
static dsi_timing_t qua_lcm_mipi_er88577b_timing =
|
||||
{
|
||||
/*clk lane timing cfg*/
|
||||
.clane.mode = 1,
|
||||
.clane.lp11 = 0,
|
||||
.clane.lp01 = 16,
|
||||
.clane.zero = 34,
|
||||
.clane.prepare = 7,
|
||||
.clane.pre = 4,
|
||||
.clane.post = 16,
|
||||
.clane.trail = 9,
|
||||
.clane.inittime = 16,
|
||||
.clane.exit = 16,
|
||||
/*data lane timing cfg*/
|
||||
.dlane.mode = 1,
|
||||
.dlane.lp11 = 0,
|
||||
.dlane.lp01 = 16,
|
||||
.dlane.zero = 13,
|
||||
.dlane.prepare = 6,
|
||||
.dlane.trail = 10,
|
||||
.dlane.inittime = 16,
|
||||
.dlane.exit = 16,
|
||||
/*data lane0 read timing cfg*/
|
||||
.read.mode = 1,
|
||||
.read.tago = 67,
|
||||
.read.tasure = 25,
|
||||
.read.taget = 84,
|
||||
/*clk cfg*/
|
||||
.clk = {
|
||||
.vou.mode = 1,
|
||||
.vou.sel = 0x3,
|
||||
.vou.div = 0,
|
||||
|
||||
.mif.mode = 0,
|
||||
.mif.pll_doubler = 0,
|
||||
.mif.pll_div_s = 1,
|
||||
.mif.pll_n = 0,
|
||||
.mif.pll_kint = 5637144,
|
||||
.mif.pll_nint = 42,
|
||||
.mif.pixelclk_div = 12,
|
||||
.mif.pll_pdiv = 2,
|
||||
.mif.dhd_div = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static lcm_mipi_info qua_lcm_mipi_er88577b_mipi_info =
|
||||
{
|
||||
.work_mode = DSI_VIDEO_MODE,
|
||||
.lane_num = DSI_TWO_LANE,
|
||||
.format = DSI_RGB888,
|
||||
.packet_size = 256,
|
||||
.timing = (void *)&qua_lcm_mipi_er88577b_timing,
|
||||
};
|
||||
|
||||
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info =
|
||||
{
|
||||
.verder_name = VENDER_NAME,
|
||||
.name = "qua_dsi_800_1280_60_er88577b_6hc1017b7e",
|
||||
.width = LCM_WIDTH,
|
||||
.height = LCM_HEIGHT,
|
||||
.type = LCM_TYPE_MIPI, /*mcu, rgb, mipi*/
|
||||
.fps = 60,
|
||||
.direction = LCM_DIRECT_NORMAL,
|
||||
.dp_sync = &qua_lcm_mipi_er88577b_dp_info,
|
||||
.infor = {
|
||||
.mipi = &qua_lcm_mipi_er88577b_mipi_info,
|
||||
},
|
||||
.fun = &qua_lcm_mipi_er88577b_ctrl,
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
||||
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
|
||||
{
|
||||
int32_t rtn = 0;
|
||||
uint8_t read_buf[4] = {0};
|
||||
// unsigned long timeout = jiffies + msecs_to_jiffies(1000);
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
uint8_t _param[4] = {0xE0, 0x00};
|
||||
int count = 5, lcm = 0;
|
||||
|
||||
#if LCM_DEBUG
|
||||
printk("%s:%d\n", __func__, __LINE__);
|
||||
#endif
|
||||
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
lcm = qua_lcm_parse_lcm_args();
|
||||
if(-1 < lcm && lcm <= 3) {
|
||||
if((0 == lcmHandle->lcm_probe.lcm_id) && (lcm & 0x1)) return 0;
|
||||
if((1 == lcmHandle->lcm_probe.lcm_id) && (lcm & 0x2)) return 0;
|
||||
}
|
||||
|
||||
rtn = ops->ctrl_fun.mipi.dcs_write(lcmHandle->lcm_probe.lcm_id, _param, 2);
|
||||
if (rtn) {
|
||||
printk("%s %d dcs_write failed.\n", __func__, lcmHandle->lcm_id);
|
||||
return -1;
|
||||
}
|
||||
ops->delayMs(10);
|
||||
|
||||
while (count) {
|
||||
printk("%s %d count=%d \n", __func__, lcmHandle->lcm_id, count);
|
||||
/* Read Display Power Mode (0Ah) */
|
||||
// rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_id, 0x06, 0x0a, 1, (uint8_t *)read_buf);
|
||||
// if(rtn == 0)
|
||||
// {
|
||||
// #if LCM_DEBUG
|
||||
// printk("%s %d: DST %x\n", __func__, lcmHandle->lcm_id, read_buf[0]);
|
||||
// #endif
|
||||
// return 0;
|
||||
// }
|
||||
/* Read Display Identification Information (04h) */
|
||||
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_id, 0x06, 0x04, 1, (uint8_t *)read_buf);
|
||||
if(read_buf[0] == 0x93 && rtn == 0)
|
||||
{
|
||||
#if LCM_DEBUG
|
||||
printk("%s %d: %x %x %x\n", __func__, lcmHandle->lcm_id, read_buf[0], read_buf[1], read_buf[2]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
ops->delayMs(2);
|
||||
count--;
|
||||
if (count == 0) {
|
||||
printk("%s %d identify timeout failed.\n", __func__, lcmHandle->lcm_id);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
#endif
|
||||
@ -31,6 +31,8 @@ extern lcm_cfg_t s_lcm_mipi_st7701s_info;
|
||||
extern lcm_cfg_t s_lcm_mipi_sample_1920_info;
|
||||
extern lcm_cfg_t s_lcm_mipi_sample_1280_info;
|
||||
extern lcm_cfg_t s_lcm_mipi_qfh24004_info;
|
||||
extern lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
|
||||
extern lcm_cfg_t s_lcm_mipi_er88577b_info;
|
||||
|
||||
/*rgb lcm*/
|
||||
extern lcm_cfg_t s_lcm_rgb_at070tn94_info;
|
||||
@ -82,7 +84,8 @@ lcm_cfg_t *lcm_main_tab[] = {
|
||||
&s_lcm_rgb18_at070tn94_info,
|
||||
&s_lcm_rgb_at070tn94_info,
|
||||
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
|
||||
|
||||
&s_lcm_mipi_er88577b_info,
|
||||
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
|
||||
/*end lcm*/
|
||||
0,
|
||||
};
|
||||
@ -112,7 +115,8 @@ lcm_cfg_t *lcm_sub_tab[] = {
|
||||
&s_lcm_rgb18_at070tn94_info,
|
||||
&s_lcm_rgb_at070tn94_info,
|
||||
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
|
||||
|
||||
&s_lcm_mipi_er88577b_info,
|
||||
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
|
||||
/*end lcm*/
|
||||
0,
|
||||
};
|
||||
@ -142,4 +146,3 @@ RTM_EXPORT(get_lcm_cfg_tab);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@ -0,0 +1,187 @@
|
||||
|
||||
|
||||
#include "mol_lcm_local.h"
|
||||
#include "dsi_com_param.h"
|
||||
#include "mol_lcm.h"
|
||||
#include <linux/delay.h>
|
||||
|
||||
|
||||
#define REG_PIN_MUX_BASE 0x10200000
|
||||
#define REG_LCD_DE_PIN 0x64
|
||||
#define REG_LCD_HS_PIN 0x68
|
||||
#define REG_LCD_VS_PIN 0x6C
|
||||
#define REG_LCD_D0_PIN 0x74
|
||||
#define REG_LCD_D1_PIN 0x78
|
||||
|
||||
#define REG_PIN_DRV_BASE1 0x0B100000
|
||||
#define REG_LCD_DE_DRV 0x28
|
||||
#define REG_LCD_HS_DRV 0x2C
|
||||
#define REG_LCD_VS_DRV 0x30
|
||||
#define REG_LCD_D0_DRV 0x38
|
||||
#define REG_LCD_D1_DRV 0x3C
|
||||
|
||||
#define GPIO_NUM_INDEX(x,y) (8*x + y)
|
||||
#define GPIO_NUM_LCD_DE GPIO_NUM_INDEX(3,3)
|
||||
#define GPIO_NUM_LCD_HS GPIO_NUM_INDEX(3,4)
|
||||
#define GPIO_NUM_LCD_VS GPIO_NUM_INDEX(3,5)
|
||||
#define GPIO_NUM_LCD_D0 GPIO_NUM_INDEX(3,7)
|
||||
#define GPIO_NUM_LCD_D1 GPIO_NUM_INDEX(4,0)
|
||||
|
||||
#define PIN_MUX_GPIO_ENABLE (1)
|
||||
|
||||
extern unsigned int qua_lcm_readl(unsigned addr);
|
||||
extern void qua_lcm_writel(unsigned int v, unsigned addr);
|
||||
|
||||
extern int qua_lcm_gpio_request(unsigned gpio, const char *label);
|
||||
extern void qua_lcm_gpio_free(unsigned gpio);
|
||||
extern int qua_lcm_gpio_get_value(unsigned gpio);
|
||||
extern int qua_lcm_gpio_direction_input(unsigned gpio);
|
||||
extern void qua_lcm_gpio_set_value(unsigned gpio, int value);
|
||||
extern int qua_lcm_gpio_direction_output(unsigned gpio, int value);
|
||||
|
||||
static void __qua_lcm_mipi_er88577b_hrst(unsigned int vci_pin_reg_oft, unsigned int rst_pin_reg_oft,
|
||||
unsigned int vci_pin_gpio_num, unsigned int rst_pin_gpio_num)
|
||||
{
|
||||
void *_vpmuxbase = fhosal_ioremap_nocache(REG_PIN_MUX_BASE, 0x100);
|
||||
// volatile unsigned int *_pmux_reg = (volatile unsigned int *)_vpmuxbase;
|
||||
unsigned int pmux_reg = (unsigned int)_vpmuxbase;
|
||||
printk("%s e\n", __func__);
|
||||
/* power on rst timing gpio */
|
||||
qua_lcm_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + rst_pin_reg_oft);
|
||||
qua_lcm_gpio_request(rst_pin_gpio_num, "rst_gpio");
|
||||
qua_lcm_gpio_direction_output(rst_pin_gpio_num, 1);
|
||||
qua_lcm_gpio_set_value(rst_pin_gpio_num, 0);
|
||||
|
||||
/* power on vci timing gpio, 0: on, 1: off */
|
||||
qua_lcm_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + vci_pin_reg_oft);
|
||||
qua_lcm_gpio_request(vci_pin_gpio_num, "vci_gpio");
|
||||
qua_lcm_gpio_direction_output(vci_pin_gpio_num, 1);
|
||||
qua_lcm_gpio_set_value(vci_pin_gpio_num, 1);
|
||||
mdelay(500);
|
||||
qua_lcm_gpio_set_value(vci_pin_gpio_num, 0);
|
||||
mdelay(10);
|
||||
|
||||
/* power on rst timing */
|
||||
// qua_lcm_gpio_set_value(rst_pin_gpio_num, 1);
|
||||
// udelay(5);
|
||||
// qua_lcm_gpio_set_value(rst_pin_gpio_num, 0);
|
||||
// udelay(10);
|
||||
qua_lcm_gpio_set_value(rst_pin_gpio_num, 1);
|
||||
mdelay(10);
|
||||
|
||||
// qua_lcm_gpio_free(rst_pin_gpio_num);
|
||||
// qua_lcm_gpio_free(vci_pin_gpio_num);
|
||||
fhosal_iounmap(_vpmuxbase);
|
||||
printk("%s x\n", __func__);
|
||||
}
|
||||
|
||||
int qua_lcm_mipi_er88577b_hrst(int lcm_id)
|
||||
{
|
||||
printk("%s e\n", __func__);
|
||||
printk("%s lcm_id=%d\n", __func__, lcm_id);
|
||||
if(lcm_id == 0)
|
||||
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D0_PIN, REG_LCD_DE_PIN, GPIO_NUM_LCD_D0, GPIO_NUM_LCD_DE);
|
||||
|
||||
if(lcm_id == 1)
|
||||
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D1_PIN, REG_LCD_HS_PIN, GPIO_NUM_LCD_D1, GPIO_NUM_LCD_HS);
|
||||
printk("%s x\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int32_t qua_lcm_mipi_er88577b_hrst(void * param)
|
||||
{
|
||||
// int32_t rtn = 0, val = 0, tmp = 0, _v = 0, i = 0, count = 3;
|
||||
unsigned long flags;
|
||||
void *_vpmuxbase = fhosal_ioremap_nocache(REG_PIN_MUX_BASE, 0x100);
|
||||
// void *_vpdrvbase = fhosal_ioremap_nocache(REG_PIN_DRV_BASE1,0x100);
|
||||
|
||||
// volatile unsigned int *pdrv_reg = (volatile unsigned int *)_vpdrvbase;
|
||||
volatile unsigned int *pmux_reg = (volatile unsigned int *)_vpmuxbase;
|
||||
|
||||
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
|
||||
|
||||
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
|
||||
/* XAIN0_SADC, XAIN1_SADC */
|
||||
// qua_lcm_writel(0, (unsigned int)pmux_reg + 0xec);
|
||||
// qua_lcm_writel(0, (unsigned int)pmux_reg + 0xf0);
|
||||
|
||||
if(lcmHandle->lcm_probe.lcm_id == 0)
|
||||
{
|
||||
qua_lcm_writel(1, (unsigned int)pmux_reg + REG_LCD_DE_PIN);
|
||||
// tmp = qua_lcm_readl((unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
// printk("%s LCD_DE drv = 0x%x\n", __func__, tmp);
|
||||
// _v = ((tmp & 0xf0) | 0x04);
|
||||
// qua_lcm_writel(_v, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
qua_lcm_gpio_request(GPIO_NUM_LCD_DE, 0);
|
||||
qua_lcm_gpio_direction_output(GPIO_NUM_LCD_DE, 1);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_DE, 0);
|
||||
|
||||
/* power on vci timing gpio, 0: on, 1: off */
|
||||
qua_lcm_writel(PIN_MUX_GPIO_ENABLE, (unsigned int)pmux_reg + REG_LCD_D0_PIN);
|
||||
qua_lcm_gpio_request(GPIO_NUM_LCD_D0, 0);
|
||||
qua_lcm_gpio_direction_output(GPIO_NUM_LCD_D0, 1);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_D0, 1);
|
||||
mdelay(10);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_D0, 0);
|
||||
mdelay(20);
|
||||
|
||||
/* power on rst timing */
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_DE, 1);
|
||||
udelay(10);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_DE, 0);
|
||||
udelay(10);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_DE, 1);
|
||||
mdelay(5);
|
||||
|
||||
// printk("%s gpio3_3 val = 0x%x\n", __func__, val);
|
||||
// qua_lcm_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
|
||||
// qua_lcm_gpio_free(GPIO_NUM_LCD_DE);
|
||||
// qua_lcm_writel(0, (unsigned int)pmux_reg + REG_LCD_DE_PIN);+
|
||||
} // else {
|
||||
if(lcmHandle->lcm_probe.lcm_id == 1)
|
||||
{
|
||||
qua_lcm_writel(PIN_MUX_GPIO_ENABLE, (unsigned int)pmux_reg + GPIO_NUM_LCD_D1);
|
||||
qua_lcm_gpio_request(GPIO_NUM_LCD_D1, 0);
|
||||
qua_lcm_gpio_direction_output(GPIO_NUM_LCD_D1, 1);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_D1, 1);
|
||||
mdelay(10);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_D1, 0);
|
||||
mdelay(20);
|
||||
|
||||
qua_lcm_writel(1, (unsigned int)pmux_reg + REG_LCD_HS_PIN);
|
||||
// tmp = qua_lcm_readl((unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
// printk("%s LCD_VS drv = 0x%x\n", __func__, tmp);
|
||||
// _v = ((tmp & 0xf0) | 0x04);
|
||||
// qua_lcm_writel(_v, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
|
||||
qua_lcm_gpio_request(GPIO_NUM_LCD_HS, 0);
|
||||
qua_lcm_gpio_direction_output(GPIO_NUM_LCD_HS, 1);
|
||||
|
||||
local_irq_save(flags);
|
||||
preempt_disable();
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_HS, 1);
|
||||
mdelay(10);
|
||||
// do{
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_HS, 0);
|
||||
fhosal_udelay(10);
|
||||
qua_lcm_gpio_set_value(GPIO_NUM_LCD_HS, 1);
|
||||
fhosal_udelay(10);
|
||||
printk("%s gpio3_4 \n", __func__);
|
||||
// }while(1);
|
||||
preempt_enable();
|
||||
local_irq_restore(flags);
|
||||
// }while(1);
|
||||
// printk("%s gpio3_5 val = 0x%x\n", __func__, val);
|
||||
|
||||
// qua_lcm_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
|
||||
// qua_lcm_gpio_free(GPIO_NUM_LCD_VS);
|
||||
// qua_lcm_writel(0, (unsigned int)pmux_reg + REG_LCD_VS_PIN);
|
||||
}
|
||||
|
||||
// fhosal_iounmap(_vpdrvbase);
|
||||
fhosal_iounmap(_vpmuxbase);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@ -1,4 +1,8 @@
|
||||
make distclean
|
||||
rm -rf out
|
||||
rm -fr build/script/kconfig/__pycache__/kconfigfunctions.cpython-312.pyc
|
||||
rm -fr build/script/kconfig/__pycache__/kconfiglib.cpython-312.pyc
|
||||
rm -fr base/soc/qm10xd/linux/bsp/uboot/uboot/.build/
|
||||
rm -fr base/soc/qm10xd/linux/bsp/ramboot/.build/
|
||||
make project_demo_ld_defconfig
|
||||
make xos -j$(nproc)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1,15 +1,11 @@
|
||||
#!/bin/sh
|
||||
#ifconfig lo up
|
||||
|
||||
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib
|
||||
cd /qua/ko
|
||||
./loadko.sh -i
|
||||
mount --bind /system/qua /vendor/qua
|
||||
mount --bind /system/res /res
|
||||
mount --bind /system/app /app
|
||||
|
||||
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib
|
||||
|
||||
cd /ko
|
||||
./loadko.sh -i
|
||||
|
||||
cd /system/app/
|
||||
bootanimation_server -w 800 -h 1280 -s 38 -r 60 -v '2,32768;2,2457600' 2>&1 > /dev/kmsg &
|
||||
|
||||
|
||||
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/acw.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/acw.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/extac.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/extac.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fhfb.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fhfb.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fybase.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fybase.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fyosal.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/fyosal.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/g2d.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/g2d.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/i2s.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/i2s.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/jpeg.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/jpeg.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/lcm.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/lcm.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/lcm_module.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/lcm_module.ko
Executable file
Binary file not shown.
125
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/loadko.sh
Executable file
125
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/loadko.sh
Executable file
@ -0,0 +1,125 @@
|
||||
#!/bin/sh
|
||||
# Useage: ./loadko [ -r|-i|-a ]
|
||||
# -r : rmmod all modules
|
||||
# -i : insmod all modules
|
||||
# default : rmmod all moules and then insmod them
|
||||
#
|
||||
|
||||
####################Variables Definition##########################
|
||||
source ./mmz_layout.cfg
|
||||
|
||||
mmz_start=$mem_mmz_start; # mmz start addr
|
||||
mmz_size=$mem_mmz_size; # mmz size
|
||||
|
||||
fb0_start=$fb0_start;
|
||||
fb0_size=$fb0_size;
|
||||
fb0_fbc_eb=$fb0_fbc_eb;
|
||||
|
||||
fb4_start=$fb4_start;
|
||||
fb4_size=$fb4_size;
|
||||
fb4_fbc_eb=$fb4_fbc_eb;
|
||||
|
||||
####################hex change to dec#############################
|
||||
mmz_size=`echo "$mmz_size" |
|
||||
awk 'BEGIN { temp = 0; }
|
||||
{
|
||||
temp = $1/1024/1024;
|
||||
}
|
||||
END { printf("%dM\n", temp); }'`
|
||||
|
||||
echo "mmz_size=$mmz_size;"
|
||||
|
||||
##################################################################
|
||||
|
||||
insert_ko()
|
||||
{
|
||||
#pinmux switch to i2s and i2c
|
||||
devmem 0x10200064 32 0x4
|
||||
devmem 0x10200068 32 0x4
|
||||
devmem 0x1020006c 32 0x4
|
||||
devmem 0x10200070 32 0x4
|
||||
devmem 0x10200074 32 0x4
|
||||
devmem 0x10200080 32 0x2
|
||||
devmem 0x10200088 32 0x2
|
||||
devmem 0x0b100044 32 0x22
|
||||
devmem 0x0b10004c 32 0x22
|
||||
|
||||
#driver load
|
||||
insmod fyosal.ko
|
||||
insmod mmz.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_error
|
||||
insmod fybase.ko logbuflen=16384
|
||||
insmod sys.ko
|
||||
insmod i2s.ko
|
||||
insmod extac.ko
|
||||
insmod fhfb.ko video="vram0_size:0,vram1_size:0,vram2_size:0,vram3_size:0,vram4_size:0,vram5_size:0,vram6_size:0,vram7_size:0," fbc=0 fbc1=0 fhfb0_start=$fb0_start fhfb0_size=$fb0_size fhfb0_fbc=$fb0_fbc_eb fhfb4_start=$fb4_start fhfb4_size=$fb4_size fhfb4_fbc=$fb4_fbc_eb
|
||||
insmod lcm_module.ko
|
||||
# insmod lcm.ko lcm0_id_cfg=1 lcm1_id_cfg=0 lcm0_id=9 lcm1_id=0
|
||||
insmod lcm.ko lcm0_id_cfg=1 lcm1_id_cfg=1 lcm0_id=5 lcm1_id=5
|
||||
insmod vou.ko
|
||||
insmod vdu.ko SupportBFrame=1
|
||||
insmod jpeg.ko
|
||||
insmod g2d.ko
|
||||
# insmod g2d.ko wkbuf=1024 vgsbuf=1024 rotbuf=1024
|
||||
insmod acw.ko
|
||||
}
|
||||
|
||||
|
||||
remove_ko()
|
||||
{
|
||||
rmmod acw
|
||||
rmmod g2d
|
||||
rmmod jpeg
|
||||
rmmod vdu
|
||||
rmmod vou
|
||||
rmmod lcm
|
||||
rmmod lcm_module
|
||||
rmmod sys
|
||||
rmmod fybase
|
||||
rmmod mmz
|
||||
rmmod fyosal
|
||||
}
|
||||
|
||||
load_usage()
|
||||
{
|
||||
echo "Usage: ./loadko.sh [-option]"
|
||||
echo "options:"
|
||||
echo " -i insert modules"
|
||||
echo " -r remove modules"
|
||||
echo " -a remove modules first, then insert modules"
|
||||
echo " -h help information"
|
||||
echo -e "for example: ./loadko.sh -i\n"
|
||||
}
|
||||
|
||||
######################parse arg###################################
|
||||
b_arg_insmod=0
|
||||
b_arg_remove=0
|
||||
|
||||
for arg in $@
|
||||
do
|
||||
case $arg in
|
||||
"-i")
|
||||
b_arg_insmod=1;
|
||||
;;
|
||||
|
||||
"-r")
|
||||
b_arg_remove=1;
|
||||
;;
|
||||
"-a")
|
||||
b_arg_insmod=1;
|
||||
b_arg_remove=1;
|
||||
;;
|
||||
|
||||
"-h")
|
||||
load_usage;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#######################parse arg end########################
|
||||
|
||||
#######################Action###############################
|
||||
if [ $b_arg_remove -eq 1 ]; then
|
||||
remove_ko;
|
||||
fi
|
||||
if [ $b_arg_insmod -eq 1 ]; then
|
||||
insert_ko;
|
||||
fi
|
||||
@ -0,0 +1,154 @@
|
||||
#!/bin/sh
|
||||
# Useage: ./loadko [ -r|-i|-a ]
|
||||
# -r : rmmod all modules
|
||||
# -i : insmod all modules
|
||||
# default : rmmod all moules and then insmod them
|
||||
#
|
||||
|
||||
####################Variables Definition##########################
|
||||
|
||||
mmz_start=0x42400000; # mmz start addr
|
||||
mmz_size=28M; # mmz size
|
||||
|
||||
##################################################################
|
||||
#ulimit -s 2048
|
||||
#report_error()
|
||||
#{
|
||||
# echo "******* Error: There's something wrong, please check! *****"
|
||||
# exit 1
|
||||
#}
|
||||
|
||||
#config_clock()
|
||||
#{
|
||||
# echo clock_vpu_enable > /proc/driver/sys_config
|
||||
# echo clock_vpu_400000000 > /proc/driver/sys_config
|
||||
#
|
||||
# echo clock_isp_enable > /proc/driver/sys_config
|
||||
# echo clock_isp_333600000 > /proc/driver/sys_config
|
||||
#
|
||||
# echo clock_sensor0_enable > /proc/driver/sys_config
|
||||
# echo clock_sensor0_24000000 > /proc/driver/sys_config
|
||||
#
|
||||
# echo clock_sensor1_enable > /proc/driver/sys_config
|
||||
# echo clock_sensor1_24000000 > /proc/driver/sys_config
|
||||
#
|
||||
# echo clock_sensor2_enable > /proc/driver/sys_config
|
||||
# echo clock_sensor2_24000000 > /proc/driver/sys_config
|
||||
#}
|
||||
|
||||
insert_ko()
|
||||
{
|
||||
#pinmux switch to i2s and i2c
|
||||
devmem 0x10200064 32 0x4
|
||||
devmem 0x10200068 32 0x4
|
||||
devmem 0x1020006c 32 0x4
|
||||
devmem 0x10200070 32 0x4
|
||||
devmem 0x10200074 32 0x4
|
||||
devmem 0x10200080 32 0x2
|
||||
devmem 0x10200088 32 0x2
|
||||
devmem 0x0b100044 32 0x22
|
||||
devmem 0x0b10004c 32 0x22
|
||||
|
||||
# driver load
|
||||
# config_clock
|
||||
insmod fyosal.ko
|
||||
insmod mmz.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_error
|
||||
insmod fybase.ko logbuflen=16384
|
||||
# insmod sys_config.ko
|
||||
insmod sys.ko
|
||||
# insmod i2s.ko
|
||||
# insmod extac.ko
|
||||
# insmod media_process.ko
|
||||
# insmod vicap_rpc.ko
|
||||
# insmod isp.ko
|
||||
# insmod vpu.ko
|
||||
insmod fhfb.ko video="vram0_size:1200,vram1_size:0,vram2_size:0,vram3_size:0,vram4_size:1200,vram5_size:0,vram6_size:0,vram7_size:0,"
|
||||
insmod lcm_module.ko
|
||||
insmod lcm.ko lcm0_id_cfg=1 lcm1_id_cfg=1 lcm0_id=7 lcm1_id=6 #1280x800 * 2
|
||||
insmod vou.ko
|
||||
insmod vdu.ko
|
||||
insmod jpeg.ko
|
||||
insmod g2d.ko
|
||||
# insmod g2d.ko wkbuf=1024 vgsbuf=1024 rotbuf=1024
|
||||
# insmod vppu.ko
|
||||
# insmod vgs.ko
|
||||
# insmod venc_rpc.ko
|
||||
# insmod pre_rolling.ko buf_base=0x5F500000 buf_size=0x400000
|
||||
# insmod isp460.ko
|
||||
# insmod camif.ko
|
||||
# insmod src.ko
|
||||
# insmod nnp.ko
|
||||
insmod acw.ko
|
||||
}
|
||||
|
||||
remove_ko()
|
||||
{
|
||||
rmmod nnp
|
||||
rmmod src
|
||||
rmmod camif
|
||||
rmmod isp460
|
||||
rmmod pre_rolling
|
||||
rmmod venc_rpc
|
||||
rmmod vgs
|
||||
rmmod vppu
|
||||
rmmod g2d
|
||||
rmmod jpeg
|
||||
rmmod vpu
|
||||
rmmod isp
|
||||
rmmod vicap_rpc
|
||||
rmmod media_process
|
||||
rmmod sys_config
|
||||
rmmod sys
|
||||
rmmod fybase
|
||||
rmmod mmz
|
||||
rmmod fyosal
|
||||
rmmod xbus_rpc
|
||||
}
|
||||
|
||||
|
||||
load_usage()
|
||||
{
|
||||
echo "Usage: ./loadko.sh [-option]"
|
||||
echo "options:"
|
||||
echo " -i insert modules"
|
||||
echo " -r remove modules"
|
||||
echo " -a remove modules first, then insert modules"
|
||||
echo " -h help information"
|
||||
echo -e "for example: ./loadko.sh -i\n"
|
||||
}
|
||||
|
||||
######################parse arg###################################
|
||||
b_arg_insmod=0
|
||||
b_arg_remove=0
|
||||
|
||||
|
||||
for arg in $@
|
||||
do
|
||||
case $arg in
|
||||
"-i")
|
||||
b_arg_insmod=1;
|
||||
;;
|
||||
|
||||
"-r")
|
||||
b_arg_remove=1;
|
||||
;;
|
||||
"-a")
|
||||
b_arg_insmod=1;
|
||||
b_arg_remove=1;
|
||||
;;
|
||||
|
||||
"-h")
|
||||
load_usage;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
#######################parse arg end########################
|
||||
|
||||
#######################Action###############################
|
||||
if [ $b_arg_remove -eq 1 ]; then
|
||||
remove_ko;
|
||||
fi
|
||||
if [ $b_arg_insmod -eq 1 ]; then
|
||||
insert_ko;
|
||||
fi
|
||||
|
||||
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/mmz.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/mmz.ko
Executable file
Binary file not shown.
@ -0,0 +1,9 @@
|
||||
mem_total=64
|
||||
mem_mmz_start=0x42600000
|
||||
mem_mmz_size=0x01A00000
|
||||
fb0_start=0x43E00000
|
||||
fb0_size=1200
|
||||
fb0_fbc_eb=1
|
||||
fb4_start=0x00000000
|
||||
fb4_size=0
|
||||
fb4_fbc_eb=0
|
||||
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/sys.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/sys.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/vdu.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/vdu.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/vou.ko
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/rootfs_overlay/qua/ko/vou.ko
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/800x1280.mp4
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/800x1280.mp4
Executable file
Binary file not shown.
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/lcm_test
Executable file
BIN
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/lcm_test
Executable file
Binary file not shown.
2556
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/rsc/1920x1080_420_Loong.raw
Executable file
2556
sdk/X-AIOS-LT00-V1.0.4/product/demo_ld/usrdata/pic/rsc/1920x1080_420_Loong.raw
Executable file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user