Compare commits

...

30 Commits
master ... 10.1

Author SHA1 Message Date
hyx
141822dc2c add system OTA process and change the version number to 1.0.0 2026-04-03 09:16:39 +08:00
hyx
1ec442c549 add lcd backlight in uboot 2026-04-02 10:53:45 +08:00
hyx
e29cdcb2e4 add script-ota.ini update logo.img 2026-04-02 09:50:46 +08:00
hyx
b095aa5b8b change recover path 2026-04-01 12:25:27 +08:00
hyx
a9475f6320 add e_player crash recovery 2026-04-01 10:36:19 +08:00
hyx
33832861f5 add ota doc 2026-04-01 09:54:53 +08:00
hyx
7cdd409e9d change wifi location from moto_ld to demo_ld 2026-04-01 09:49:50 +08:00
hyx
f36c126207 update downloadtool e_player;add bin dir in data and system/factory 2026-03-31 15:31:10 +08:00
hyx
3c67618479 kill bootanimation_server before e_player 2026-03-31 14:26:42 +08:00
hyx
8d3b4bff65 remove partion usrdata add systeminfo in etc 2026-03-29 20:53:22 +08:00
hyx
0c285dbf49 update downloadtool 2026-03-29 17:45:45 +08:00
hyx
b845238504 add system/factory and auto boot e_player 2026-03-27 19:33:19 +08:00
hyx
cb444dd24e add bt server fix reboot wlan0 not exist 2026-03-25 22:42:04 +08:00
hyx
cec15b4c56 add wifibt aic8800d 2026-03-24 14:49:04 +08:00
hyx
367c2d5d6e update build.sh 2026-03-04 14:02:55 +08:00
zzh
3ce9141e30 fix python f-string grammar issues 2026-03-03 10:24:40 +08:00
hyx
5a97b358be fix video rotate 180 can not display pic and gif 2026-03-03 10:21:37 +08:00
hyx
482a8e4d67 add empty dir 2026-03-02 13:49:23 +08:00
hyx
54fe65bed8 add envsetup script 2026-02-28 16:06:59 +08:00
hyx
1c549990e3 add envsetup doc for ubuntu24 2026-02-28 10:53:57 +08:00
hyx
3f8cccb92a fix video and picture can not play 2026-02-25 13:56:46 +08:00
hyx
57b75dd8ed modify partition add usrdata config 2026-02-10 20:45:10 +08:00
hyx
1515f983ee fix usb uart burn error 2026-02-06 15:43:38 +08:00
hyx
917130bc1a change fb memory size 2026-02-06 14:10:42 +08:00
hyx
28fb71704f add cp.sh remove some build targets 2026-02-06 10:45:55 +08:00
hyx
0589d9bde9 change partition-config 2026-02-05 17:38:51 +08:00
hyx
c570cb3124 add e_player libs 2026-02-05 13:42:05 +08:00
hyx
e7baf6e580 add lcd er88577b driver 2026-02-05 13:36:04 +08:00
hyx
dd7654c55d add wifi VS6621S40 2026-01-31 14:11:12 +08:00
hyx
26ea83f1f5 fix compile error 2026-01-31 11:58:34 +08:00
1795 changed files with 3136 additions and 47941 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -60,6 +60,7 @@ struct down_info{
uint total_len; uint total_len;
uint status; uint status;
int comp_status; int comp_status;
int media_type;
}; };

View File

@ -12,7 +12,7 @@
#define IMG_INVALID 0xFFFFFFFF #define IMG_INVALID 0xFFFFFFFF
#define SPL_DOWN_ADDR 0x40500000 #define SPL_DOWN_ADDR 0x40100000
#define SPL_LOAD_ADDR 0x27000000 #define SPL_LOAD_ADDR 0x27000000
#define SPL_NAND_LOCATION_OFFS (0 << 11) #define SPL_NAND_LOCATION_OFFS (0 << 11)
#define SPL_NOR_LOCATION_OFFS (0 << 10) #define SPL_NOR_LOCATION_OFFS (0 << 10)
@ -21,7 +21,7 @@
#define SPL_MAX_SIZE 0x80000 #define SPL_MAX_SIZE 0x80000
#define HEADER_LEN 0x400 #define HEADER_LEN 0x400
#define UBOOT_DOWN_ADDR 0x40500000 #define UBOOT_DOWN_ADDR 0x40100000
#define UBOOT_LOAD_ADDR 0x41600000 #define UBOOT_LOAD_ADDR 0x41600000
#define UBOOT_NAND_LOCATION_OFFS (128 << 11) #define UBOOT_NAND_LOCATION_OFFS (128 << 11)
#define UBOOT_NOR_LOCATION_OFFS (32 << 10) #define UBOOT_NOR_LOCATION_OFFS (32 << 10)
@ -29,9 +29,9 @@
#define UBOOT_SDIO1_LOCATION_OFFS (1024 << 10) #define UBOOT_SDIO1_LOCATION_OFFS (1024 << 10)
#define UBOOT_MAX_SIZE 0x100000 #define UBOOT_MAX_SIZE 0x100000
#define KERNEL_DOWN_ADDR 0x40500000 #define KERNEL_DOWN_ADDR 0x40100000
#define KERNEL_LOAD_ADDR 0x40008000 #define KERNEL_LOAD_ADDR 0x40008000
#define KERNEL_NAND_LOCATION_OFFS (8192 << 11) #define KERNEL_NAND_LOCATION_OFFS 0x1100000
#define KERNEL_NOR_LOCATION_OFFS (1024 << 10) #define KERNEL_NOR_LOCATION_OFFS (1024 << 10)
#define KERNEL_EMMC_LOCATION_OFFS (6144 << 10) #define KERNEL_EMMC_LOCATION_OFFS (6144 << 10)
#define KERNEL_SDIO1_LOCATION_OFFS (2048 << 10) #define KERNEL_SDIO1_LOCATION_OFFS (2048 << 10)
@ -91,25 +91,25 @@
#define VDSP_SDIO1_LOCATION_OFFS (2048 << 10) #define VDSP_SDIO1_LOCATION_OFFS (2048 << 10)
#define VDSP_MAX_SIZE 0x2000000 #define VDSP_MAX_SIZE 0x2000000
#define SYSTEM_DOWN_ADDR 0x46000000 #define SYSTEM_DOWN_ADDR 0x40100000
#define SYSTEM_LOAD_ADDR 0x30010000 #define SYSTEM_LOAD_ADDR 0x30010000
#define SYSTEM_NAND_LOCATION_OFFS (10752 << 11) // 1500000 #define SYSTEM_NAND_LOCATION_OFFS 0x1900000
#define SYSTEM_NOR_LOCATION_OFFS (64 << 10) #define SYSTEM_NOR_LOCATION_OFFS (64 << 10)
#define SYSTEM_EMMC_LOCATION_OFFS (64 << 10) #define SYSTEM_EMMC_LOCATION_OFFS (64 << 10)
#define SYSTEM_SDIO1_LOCATION_OFFS (64 << 10) #define SYSTEM_SDIO1_LOCATION_OFFS (64 << 10)
#define SYSTEM_MAX_SIZE 0x1800000 #define SYSTEM_MAX_SIZE 0x1800000
#define ROOTFS_DOWN_ADDR 0x46000000 #define ROOTFS_DOWN_ADDR 0x40100000
#define ROOTFS_LOAD_ADDR 0x30010000 #define ROOTFS_LOAD_ADDR 0x30010000
#define ROOTFS_NAND_LOCATION_OFFS (23040 << 11) // 2D00000 #define ROOTFS_NAND_LOCATION_OFFS 0x3300000
#define ROOTFS_NOR_LOCATION_OFFS (5120 << 10) #define ROOTFS_NOR_LOCATION_OFFS (5120 << 10)
#define ROOTFS_EMMC_LOCATION_OFFS (64 << 10) #define ROOTFS_EMMC_LOCATION_OFFS (64 << 10)
#define ROOTFS_SDIO1_LOCATION_OFFS (64 << 10) #define ROOTFS_SDIO1_LOCATION_OFFS (64 << 10)
#define ROOTFS_MAX_SIZE 0x600000 #define ROOTFS_MAX_SIZE 0x600000
#define DATA_DOWN_ADDR 0x46000000 #define DATA_DOWN_ADDR 0x40100000
#define DATA_LOAD_ADDR 0x30010000 #define DATA_LOAD_ADDR 0x30010000
#define DATA_NAND_LOCATION_OFFS (26112 << 11) // 3300000 #define DATA_NAND_LOCATION_OFFS 0x3d00000
#define DATA_NOR_LOCATION_OFFS (15360 << 10) #define DATA_NOR_LOCATION_OFFS (15360 << 10)
#define DATA_EMMC_LOCATION_OFFS (64 << 10) #define DATA_EMMC_LOCATION_OFFS (64 << 10)
#define DATA_SDIO1_LOCATION_OFFS (64 << 10) #define DATA_SDIO1_LOCATION_OFFS (64 << 10)

View File

@ -54,6 +54,7 @@ void usb_down_continue(struct down_info *);
void usb_down_finish(struct down_info *); void usb_down_finish(struct down_info *);
void usb_down_execute(struct down_info *); void usb_down_execute(struct down_info *);
void usb_xch_baudrate(struct down_info *); void usb_xch_baudrate(struct down_info *);
void usb_down_comp_info(struct down_info *info);
void usb_boot(void); void usb_boot(void);
void usb_send_ack(u16 ack); void usb_send_ack(u16 ack);

View File

@ -49,6 +49,7 @@ const usb_pfunc usb_pftbl[] =
usb_down_finish, usb_down_finish,
usb_down_execute, usb_down_execute,
usb_xch_baudrate, usb_xch_baudrate,
usb_down_comp_info,
}; };
const u16 usb_func_list[] = const u16 usb_func_list[] =
{ {
@ -58,6 +59,7 @@ const u16 usb_func_list[] =
USB_FUNC_FINISH, USB_FUNC_FINISH,
USB_FUNC_EXEC, USB_FUNC_EXEC,
USB_FUNC_XCH, USB_FUNC_XCH,
USB_FUNC_COMP_INFO,
}; };
void usb_down_connect(struct down_info *info) void usb_down_connect(struct down_info *info)
@ -71,16 +73,23 @@ void usb_down_connect(struct down_info *info)
void usb_down_start(struct down_info *info) void usb_down_start(struct down_info *info)
{ {
int id_media=0;
if(info->status != USB_STATUS_CONNECTED) if(info->status != USB_STATUS_CONNECTED)
return; return;
#ifdef CONFIG_SDL_BUILD #ifdef CONFIG_SDL_BUILD
info->imageid = swab32(*((uint *)&info->rcv[4])); id_media = swab32(*((uint *)&info->rcv[4]));
info->imageid = (id_media>>16) & 0xff;
printf("info->imageid = 0x%lx\r\n", info->imageid);
info->media_type = id_media & 0xff;
printf("info->media_type = 0x%x\r\n", info->media_type);
info->address = MapTbl[info->imageid].downaddr; info->address = MapTbl[info->imageid].downaddr;
printf("info->address = 0x%lx\r\n", info->address);
#else #else
info->address = swab32(*((uint *)&info->rcv[4])); info->address = swab32(*((uint *)&info->rcv[4]));
#endif #endif
info->total_len = swab32(*((u32 *)&info->rcv[8])); info->total_len = swab32(*((u32 *)&info->rcv[8]));
printf("info->total_len = 0x%x\r\n", info->total_len);
info->cur_len = 0; info->cur_len = 0;
if(info->total_len > DownLoad_Max_Size) if(info->total_len > DownLoad_Max_Size)
@ -96,11 +105,14 @@ void usb_down_continue(struct down_info *info)
{ {
u16 len; u16 len;
printf("usb_down_continue\r\n");
if(info->status != USB_STATUS_CONTINUE) if(info->status != USB_STATUS_CONTINUE)
return; return;
len = swab16(*((u16 *)&info->rcv[2])); len = swab16(*((u16 *)&info->rcv[2]));
printf("len = 0x%x\r\n", len);
info->cur_len += len; info->cur_len += len;
printf("info->cur_len = 0x%x\r\n", info->cur_len);
if(info->cur_len <= DownLoad_Max_Size) if(info->cur_len <= DownLoad_Max_Size)
{ {
memcpy((void *)info->address,&(info->rcv[4]),len); memcpy((void *)info->address,&(info->rcv[4]),len);
@ -114,6 +126,7 @@ void usb_down_continue(struct down_info *info)
void usb_down_finish(struct down_info *info) void usb_down_finish(struct down_info *info)
{ {
printf("usb_down_finish\r\n");
if(info->status != USB_STATUS_CONTINUE) if(info->status != USB_STATUS_CONTINUE)
return; return;
if(info->total_len == info->cur_len) if(info->total_len == info->cur_len)
@ -125,6 +138,14 @@ void usb_down_finish(struct down_info *info)
usb_send_ack(USB_PTC_NACK); usb_send_ack(USB_PTC_NACK);
} }
void usb_down_comp_info(struct down_info *info)
{
if(!info->comp_status)
usb_complete_info(INFO_OK);
else
usb_complete_info(INFO_OTHER);
}
void usb_down_execute(struct down_info *info) void usb_down_execute(struct down_info *info)
{ {
u32 addr = 0; u32 addr = 0;
@ -291,6 +312,7 @@ void usb_boot(void)
u32 func; u32 func;
u8 idx = 0; u8 idx = 0;
#ifdef CONFIG_SDL_BUILD #ifdef CONFIG_SDL_BUILD
printf("usb_boot,d_info.status = %d\r\n", d_info.status);
while(d_info.status != USB_STATUS_FINISH) while(d_info.status != USB_STATUS_FINISH)
#else #else
while(d_info.status != USB_STATUS_EXECUTE) while(d_info.status != USB_STATUS_EXECUTE)
@ -300,6 +322,7 @@ void usb_boot(void)
usb_rcv_data(d_info.rcv); usb_rcv_data(d_info.rcv);
ret = usb_crc_check(d_info.rcv); ret = usb_crc_check(d_info.rcv);
func = (d_info.rcv[0] << 8) + d_info.rcv[1]; func = (d_info.rcv[0] << 8) + d_info.rcv[1];
printf("func = 0x%x\r\n", func);
ret &= usb_lookfor_func(func, &idx); ret &= usb_lookfor_func(func, &idx);
if(ret == false) if(ret == false)
{ {

View File

@ -172,6 +172,7 @@ obj-y += mc/lcm_module/lcm_mipi_ek79007.o
obj-y += mc/lcm_module/lcm_mipi_st7701s.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_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_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-$(CONFIG_QUA_LOGO_RGB_EK79001H) += mc/lcm_module/lcm_rgb_qua_ek79001h_tg78550b3_24bits.o
obj-y += mc/lcm_module/mol_lcm_module.o obj-y += mc/lcm_module/mol_lcm_module.o

View File

@ -0,0 +1,426 @@
#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[] = {
{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^M
{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}}
};
#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__);
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
//#ifdef CONFIG_UBOOT_XKPHOTO
extern int qua_lcm_mipi_er88577b_bkl(void);
qua_lcm_mipi_er88577b_bkl();
//#endif
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 = 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 = 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,
};

View File

@ -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 s_lcm_mipi_st7701s_info;
extern lcm_cfg_t qua_lcm_mipi_jd9365d_jlm101b021_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_hx8729_qfh24004_info;
extern lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
/*rgb lcm*/ /*rgb lcm*/
extern lcm_cfg_t s_lcm_rgb_at070tn94_info; extern lcm_cfg_t s_lcm_rgb_at070tn94_info;
extern lcm_cfg_t s_lcm_rgb18_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, &qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
#endif #endif
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
#endif
#ifdef CONFIG_QUA_LOGO_MORE #ifdef CONFIG_QUA_LOGO_MORE
/*mipi lcm*/ /*mipi lcm*/
&s_lcm_mipi_ek79007_info, &s_lcm_mipi_ek79007_info,
@ -90,6 +94,10 @@ lcm_cfg_t *lcm_sub_tab[] = {
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info, &qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
#endif #endif
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
#endif
#ifdef CONFIG_QUA_LOGO_MORE #ifdef CONFIG_QUA_LOGO_MORE
/*mipi lcm*/ /*mipi lcm*/
&s_lcm_mipi_st7701s_info, &s_lcm_mipi_st7701s_info,

View File

@ -4,6 +4,20 @@ config QUA_LOGO
help help
This enables qua logo. 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 config QUA_LOGO_MIPI_JD9365D
bool "qua logo mipi jd9365d 800x1280" bool "qua logo mipi jd9365d 800x1280"
depends on QUA_LOGO depends on QUA_LOGO

View File

@ -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_MIPI_JD9365D) += qua_logo_mipi_jd9365d.o
obj-$(CONFIG_QUA_LOGO_RGB_EK79001H) += qua_logo_rgb_ek79001h.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_HX8729) += qua_logo_mipi_hx8729.o
obj-$(CONFIG_QUA_LOGO_MIPI_ER88577B) += qua_logo_mipi_er88577b.o

View File

@ -25,4 +25,9 @@ void qua_boot_logo(void) {
extern void qua_boot_logo_ek79001h(void); extern void qua_boot_logo_ek79001h(void);
qua_boot_logo_ek79001h(); qua_boot_logo_ek79001h();
#endif #endif
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B
extern void qua_boot_logo_er88577b(void);
qua_boot_logo_er88577b();
#endif
} }

View File

@ -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(3,7)
#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(3,7)
#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"
);

View File

@ -488,16 +488,27 @@ int bootup_commands(void)
char * skipupdate_env; char * skipupdate_env;
int skipupdate = 0; int skipupdate = 0;
#if defined(CONFIG_OTA_SCRIPT_CMD) && !defined(CONFIG_FLASH_FW_ON_KEY_PRESS) // 首先检查misc分区的OTA升级命令
printf("judeg misc command to flashing"); printf("Checking OTA commands from misc partition...\n");
return 0; ret = ota_commands();
#endif if (ret == 0) {
// ota_commands成功执行了升级不应该返回到这里
// 如果返回了说明没有OTA升级命令继续检查USB升级
printf("No OTA upgrade command found, checking USB upgrade...\n");
}
// OTA升级功能移除错误的早期返回逻辑
// #if defined(CONFIG_OTA_SCRIPT_CMD) && !defined(CONFIG_FLASH_FW_ON_KEY_PRESS)
// printf("judeg misc command to flashing");
// return 0;
// #endif
//printf("#####bootup_commands:\n"); //printf("#####bootup_commands:\n");
// OTA升级功能始终启用忽略skipupdate环境变量
skipupdate_env = env_get("skipupdate"); skipupdate_env = env_get("skipupdate");
if (skipupdate_env){ if (skipupdate_env){
skipupdate = simple_strtol(skipupdate_env, NULL, 0); skipupdate = simple_strtol(skipupdate_env, NULL, 0);
printf("skip update fw... %d \n", skipupdate); printf("skipupdate env = %d (ignored for OTA support)\n", skipupdate);
return 0; // return 0; // 注释掉,不再跳过升级检查
} }
@ -675,7 +686,7 @@ int write_misc(char boot_success,char tries_remaining,char *command)
memcpy(bcb.command,command,sizeof(bcb.command)); memcpy(bcb.command,command,sizeof(bcb.command));
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
sprintf(script_cmd,"sf erase 0x%lx 0x%x",(long)MISC_OFFSET,sizeof(bcb)); sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",(long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
if (ret){ if (ret){
@ -683,7 +694,7 @@ int write_misc(char boot_success,char tries_remaining,char *command)
} }
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
memcpy((char *)UBOOT_DOWN_ADDR,&bcb,sizeof(bcb)); memcpy((char *)UBOOT_DOWN_ADDR,&bcb,sizeof(bcb));
sprintf(script_cmd,"sf write 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb)); sprintf(script_cmd,WRITE_CMD " 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
if (ret){ if (ret){
@ -708,13 +719,13 @@ int ota_commands(void)
memset((char *)UBOOT_DOWN_ADDR,0,0x2000); memset((char *)UBOOT_DOWN_ADDR,0,0x2000);
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
sprintf(script_cmd,"sf read 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb)); sprintf(script_cmd,READ_CMD " 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
if (ret){ if (ret){
ret = -1; ret = -1;
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\ sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
(long)MISC_OFFSET,sizeof(bcb)); (long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
@ -743,7 +754,7 @@ int ota_commands(void)
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
//---- to clear misc---------------------- //---- to clear misc----------------------
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\ sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
(long)MISC_OFFSET,sizeof(bcb)); (long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
@ -758,7 +769,7 @@ int ota_commands(void)
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);
//---- to clear misc---------------------- //---- to clear misc----------------------
memset(script_cmd,0,sizeof(script_cmd)); memset(script_cmd,0,sizeof(script_cmd));
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\ sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
(long)MISC_OFFSET,sizeof(bcb)); (long)MISC_OFFSET,sizeof(bcb));
ret = run_command(script_cmd, 0); ret = run_command(script_cmd, 0);
printf("ret=%d run command:%s\n",ret,script_cmd); printf("ret=%d run command:%s\n",ret,script_cmd);

View File

@ -87,7 +87,7 @@ int spi_nand_program_image(u32 dest, u32 len, u8 *buf)
u32 length = (64<<11); u32 length = (64<<11);
u8 *buf_tmp; u8 *buf_tmp;
buf_tmp = buf + 0x500000; buf_tmp = buf + 0x1800000;
mtd = get_nand_dev_by_index(0); mtd = get_nand_dev_by_index(0);
chip = mtd_to_nand(mtd); chip = mtd_to_nand(mtd);
@ -211,17 +211,17 @@ void board_init_r(gd_t *gd, ulong dest_addr)
{ {
if(strap_sts & 0x1){ //uart download if(strap_sts & 0x1){ //uart download
uart_boot(uart_port); uart_boot(uart_port);
d_info = get_cur_downinfo();
} }
else{ else{
usb_boot(); usb_boot();
if(strap_sts & 0x2) //boot1 0: nor 1:nand d_info = get_cur_downinfo();
if(d_info->media_type == 0x2)
nvm_mod = BOOT_DEVICE_NAND ; nvm_mod = BOOT_DEVICE_NAND ;
else else
nvm_mod = BOOT_DEVICE_NOR; nvm_mod = BOOT_DEVICE_NOR;
} }
d_info = get_cur_downinfo();
switch(nvm_mod) switch(nvm_mod)
{ {
case BOOT_DEVICE_NAND: case BOOT_DEVICE_NAND:

View File

@ -122,7 +122,9 @@ CONFIG_CMD_BLINKLED=y
CONFIG_LED_INDICATOR_FOR_FLASH=y CONFIG_LED_INDICATOR_FOR_FLASH=y
CONFIG_LED_INDICATOR_GPIO=39 CONFIG_LED_INDICATOR_GPIO=39
CONFIG_QUA_LOGO=y CONFIG_QUA_LOGO=y
CONFIG_QUA_LOGO_MIPI_JD9365D=y #CONFIG_QUA_LOGO_MIPI_JD9365D=y
CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=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_QUA_LCM_FASTBOOT=y
CONFIG_UBOOT_MOTO_LD=y CONFIG_UBOOT_MOTO_LD=y

View File

@ -17,7 +17,7 @@ CONFIG_TPL_SYS_MALLOC_F_LEN=0x400
CONFIG_SPI_BOOT=y CONFIG_SPI_BOOT=y
CONFIG_BOOTDELAY=0 CONFIG_BOOTDELAY=0
CONFIG_USE_BOOTARGS=y CONFIG_USE_BOOTARGS=y
CONFIG_BOOTARGS="quiet mtdswap.partitions=10 ubi.mtd=9 ubi.mtd=11 ubi.mtd=12 root=ubi1:rootfs init=/init rootfstype=ubifs mem=38M earlycon console=ttyS0,115200 mtdparts=spi_nfc:128k@0(boot-spl),128k@128k(boot-env),768k@256k(boot-uboot),1m@1m(logo),1m@2m(padding),1m@3m(misc),3m@4m(recovery),10m@7m(recovery-rootfs),8m@17m(boot),20m@25m(system),6m@45m(swapfile),10m@51m(rootfs),6m@61m(data),-@67m(usrdata)" CONFIG_BOOTARGS="quiet mtdswap.partitions=10 ubi.mtd=9 ubi.mtd=11 ubi.mtd=12 root=ubi1:rootfs init=/init rootfstype=ubifs mem=38M earlycon console=ttyS0,115200 mtdparts=spi_nfc:128k@0(boot-spl),128k@128k(boot-env),768k@256k(boot-uboot),1m@1m(logo),1m@2m(padding),1m@3m(misc),3m@4m(recovery),10m@7m(recovery-rootfs),4m@17m(boot),13m@21m(system),6m@34m(swapfile),12m@40m(rootfs),-@52m(data)"
# CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_CPUINFO is not set
# CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_F=y
@ -80,7 +80,7 @@ CONFIG_MTD=y
CONFIG_MTD_DEVICE=y CONFIG_MTD_DEVICE=y
CONFIG_MTD_PARTITIONS=y CONFIG_MTD_PARTITIONS=y
CONFIG_CMD_MTDPARTS=y CONFIG_CMD_MTDPARTS=y
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi_nfc:128k@0(boot-spl),128k@128k(boot-env),768k@256k(boot-uboot),1m@1m(logo),1m@2m(padding),1m@3m(misc),3m@4m(recovery),10m@7m(recovery-rootfs),8m@17m(boot),20m@25m(system),6m@45m(swapfile),10m@51m(rootfs),6m@61m(data),-@67m(usrdata)" CONFIG_MTDPARTS_DEFAULT="mtdparts=spi_nfc:128k@0(boot-spl),128k@128k(boot-env),768k@256k(boot-uboot),1m@1m(logo),1m@2m(padding),1m@3m(misc),3m@4m(recovery),10m@7m(recovery-rootfs),4m@17m(boot),13m@21m(system),6m@34m(swapfile),12m@40m(rootfs),-@52m(data)"
CONFIG_MTDIDS_DEFAULT="nand0=spi_nfc" CONFIG_MTDIDS_DEFAULT="nand0=spi_nfc"
CONFIG_CMD_LZMADEC=y CONFIG_CMD_LZMADEC=y
# CONFIG_CMD_UNZIP=y # CONFIG_CMD_UNZIP=y
@ -122,7 +122,10 @@ CONFIG_CMD_BLINKLED=y
CONFIG_LED_INDICATOR_FOR_FLASH=y CONFIG_LED_INDICATOR_FOR_FLASH=y
CONFIG_LED_INDICATOR_GPIO=39 CONFIG_LED_INDICATOR_GPIO=39
CONFIG_QUA_LOGO=y CONFIG_QUA_LOGO=y
CONFIG_QUA_LOGO_MIPI_JD9365D=y #CONFIG_QUA_LOGO_MIPI_JD9365D=y
CONFIG_QUA_LOGO_MIPI_JD9365D_PWR_CTRL=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_LOGO_PART=y
CONFIG_QUA_LCM_FASTBOOT=y CONFIG_QUA_LCM_FASTBOOT=y
CONFIG_UBOOT_MOTO_LD=y CONFIG_UBOOT_MOTO_LD=y

View File

@ -24,8 +24,9 @@ lcm_module-objs += utils/qua_lcm_gpio.o \
lcm_mipi_qua_jd9365d_jlm101b021.o \ lcm_mipi_qua_jd9365d_jlm101b021.o \
lcm_rgb_qua_ek79001h_tg78550b3.o \ lcm_rgb_qua_ek79001h_tg78550b3.o \
lcm_rgb_qua_ek79001h_tg78550b3_24bits.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 \ lcm_module-objs += mol_lcm_module.o \

View File

@ -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,
};

View File

@ -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

View File

@ -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_1920_info;
extern lcm_cfg_t s_lcm_mipi_sample_1280_info; extern lcm_cfg_t s_lcm_mipi_sample_1280_info;
extern lcm_cfg_t s_lcm_mipi_qfh24004_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*/ /*rgb lcm*/
extern lcm_cfg_t s_lcm_rgb_at070tn94_info; 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_rgb18_at070tn94_info,
&s_lcm_rgb_at070tn94_info, &s_lcm_rgb_at070tn94_info,
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info, &qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
&s_lcm_mipi_er88577b_info,
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
/*end lcm*/ /*end lcm*/
0, 0,
}; };
@ -112,7 +115,8 @@ lcm_cfg_t *lcm_sub_tab[] = {
&s_lcm_rgb18_at070tn94_info, &s_lcm_rgb18_at070tn94_info,
&s_lcm_rgb_at070tn94_info, &s_lcm_rgb_at070tn94_info,
&qua_lcm_rgb_ek79001h_tg78550b3_24bits_info, &qua_lcm_rgb_ek79001h_tg78550b3_24bits_info,
&s_lcm_mipi_er88577b_info,
&qua_lcm_mipi_er88577b_6hc1017b7e_info,
/*end lcm*/ /*end lcm*/
0, 0,
}; };
@ -142,4 +146,3 @@ RTM_EXPORT(get_lcm_cfg_tab);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -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

View File

@ -1,56 +0,0 @@
#CROSS toolchain configs
export CROSS_TOOLCHAIN_VERSION?=v510
# kernel version
export KERNEL_VER=5.10.y
# uboot version
export UBOOT_VER=uboot
# busybox version
export BUSYBOX_VER=busybox-1.36.1
# busybox defconfig
export BUSYBOX_CFG=busybox_quaming_config# Uboot defconfig
export UBOOT_CONFIG=quaming_qm10xd_demo_ld_nand_defconfig
# Kernel defconfig
export KERNEL_CONFIG=quaming_qm10xd_demo_ld_nand_defconfig
# Kernel dts
export KERNEL_DTS=quaming-kernel-qm10xd-demo_ld-nand.dts
export TARGET_OUTPUT_DIR=qm10xd_demo_ld_nand
export TARGET_CONFIG_NIMI=qm10xd_demo_ld_nand
include /home/test02/workspace/workspace/genSDK_base/gensdk/X-AIOS-LT00/base/soc/qm10xd/linux/prebuilts/build/configs/toolchain/$(CROSS_TOOLCHAIN_VERSION).mk
export MEM_TOTAL_SIZE=64M
export MEM_OS_SIZE=36M
export MC_SHOWLOGO_YADDR0=43E00000
export MC_SHOWLOGO_CADDR0=43E98000
export MC_SHOWLOGO_YADDR1=00000000
export MC_SHOWLOGO_CADDR1=00000000
export MC_DHD0_OSD_SIZE=1200
export MC_DHD0_OSD_FBC_EB=1
export MC_DHD1_OSD_SIZE=0
export MC_DHD1_OSD_FBC_EB=0
export mem_mmz_start=0x42400000
export mem_mmz_size=0x01c00000

19
sdk/X-AIOS-LT00-V1.0.4/build.sh Executable file
View File

@ -0,0 +1,19 @@
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/
rm -fr base/soc/qm10xd/linux/bsp/uboot/uboot/configs/quaming_qm10xd_demo_ld_nand_defconfig.backup
rm -fr product/demo_ld/partition-info.txt.backup
rm -fr tools/partition/qm10xd/los_spi-nand/demo_ld_nand/programmer.ini.backup
rm -fr base/soc/qm10xd/linux/output/.config
rm -fr base/soc/qm10xd/linux/output/qm10xd_demo_ld_nand/bsp/boot/u-boot-dtb.bin
rm -fr base/soc/qm10xd/linux/output/qm10xd_demo_ld_nand/bsp/boot/u-boot-sdl.bin
rm -fr base/soc/qm10xd/linux/output/qm10xd_demo_ld_nand/bsp/boot/u-boot.bin
rm -fr base/soc/qm10xd/linux/output/qm10xd_demo_ld_nand/bsp/spl/u-boot-spl-header.img
rm -fr base/soc/qm10xd/linux/prebuilts/demo_ld/bsp/rootfs/initramfs-v510.cpio.xz
make project_demo_ld_defconfig
make xos -j$(nproc)
#make xos-uboot
#make xos-kernel

View File

@ -8,7 +8,7 @@ print("hello, this is run_cmd.py")
def main(argv): def main(argv):
print("Environment Variables:") print("Environment Variables:")
for key, value in os.environ.items(): for key, value in os.environ.items():
print(f"{key}: {value}") print("{}: {}".format(key, value))
if len(sys.argv) == 3: if len(sys.argv) == 3:
subprocess.call(['/bin/bash', sys.argv[1], sys.argv[2]]) subprocess.call(['/bin/bash', sys.argv[1], sys.argv[2]])
@ -18,8 +18,8 @@ def main(argv):
subprocess.call(['/bin/bash', sys.argv[1]]) subprocess.call(['/bin/bash', sys.argv[1]])
if __name__ == "__main__": if __name__ == "__main__":
print(f"Arguments count: {len(sys.argv)}") print("Arguments count: {}".format(len(sys.argv)))
for i, arg in enumerate(sys.argv): for i, arg in enumerate(sys.argv):
print(f"Argument: {i:>6}: {arg}") print("Argument: {:>6}: {}".format(i, arg))
main(sys.argv) main(sys.argv)

View File

@ -2,7 +2,6 @@
#sleep 2 #sleep 2
#echo "SDIO INIT SETTING" #echo "SDIO INIT SETTING"
#wifi driver capablit #wifi driver capablit
devmem 0x25b00018 32 0x00000000 devmem 0x25b00018 32 0x00000000
devmem 0x25b0001c 32 0x00000000 devmem 0x25b0001c 32 0x00000000
@ -12,10 +11,7 @@ devmem 0x25b00028 32 0x00000000
devmem 0x25b0002c 32 0x00000000 devmem 0x25b0002c 32 0x00000000
devmem 0x25b00030 32 0x00000000 devmem 0x25b00030 32 0x00000000
#bt uart #bt uart
sleep 0.1 sleep 0.1
devmem 0x102000ac 32 0x00000003 devmem 0x102000ac 32 0x00000003
devmem 0x102000b0 32 0x00000003 devmem 0x102000b0 32 0x00000003
@ -25,55 +21,57 @@ devmem 0x102000b8 32 0x00000003
#GPIO #GPIO
devmem 0x10200020 32 0x00000001 devmem 0x10200020 32 0x00000001
#devmem 0x1020009c 32 0x00000001 #devmem 0x1020009c 32 0x00000001
devmem 0x10200098 32 0x00000001
sleep 0.1 #sleep 0.1
#echo 41 > /sys/class/gpio/export #echo 41 > /sys/class/gpio/export
#echo out > /sys/class/gpio/gpio41/direction #echo out > /sys/class/gpio/gpio41/direction
#echo 0 > /sys/class/gpio/gpio41/value #echo 0 > /sys/class/gpio/gpio41/value
#echo 1 > /sys/class/gpio/gpio41/value #echo 1 > /sys/class/gpio/gpio41/value
#echo 0 > /sys/class/gpio/gpio41/value #echo 0 > /sys/class/gpio/gpio41/value
#sleep 0.5 sleep 0.5
echo 9 > /sys/class/gpio/export echo 9 > /sys/class/gpio/export
sleep 0.1 sleep 0.1
echo out > /sys/class/gpio/gpio9/direction echo out > /sys/class/gpio/gpio9/direction
sleep 0.1 sleep 0.1
echo 0 > /sys/class/gpio/gpio9/value echo 0 > /sys/class/gpio/gpio9/value
sleep 0.2 sleep 0.1
echo 1 > /sys/class/gpio/gpio9/value echo 1 > /sys/class/gpio/gpio9/value
sleep 1
#echo "SDIO INIT begin" sleep 0.5
echo 39 > /sys/class/gpio/export
sleep 0.1
echo out > /sys/class/gpio/gpio39/direction
sleep 0.1
echo 0 > /sys/class/gpio/gpio39/value
sleep 0.2
echo 1 > /sys/class/gpio/gpio39/value
sleep 0.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
#cd bin;./wifi_drv_ins.sh;cd ../
#cp /vendor/qua/wifi/bin/* /bin/; cp /vendor/qua/wifi/lib/* /lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/vendor/qua/wifi/lib:/system/qua/wifi/lib/
export PATH=$PATH:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
cd /vendor/qua/wifi/ko;insmod aic8800_bsp.ko aic_fw_path=/vendor/qua/wifi/aic8800D80 cd /vendor/qua/wifi/ko;insmod aic8800_bsp.ko aic_fw_path=/vendor/qua/wifi/aic8800D80
insmod aic8800_fdrv.ko;insmod aic8800_btlpm.ko;cd ../../BT; insmod aic8800_fdrv.ko;insmod aic8800_btlpm.ko;cd ../../BT;
if [ ! -f /data/wifi/wpa_supplicant.conf ];then #if [ ! -f /data/wifi/wpa_supplicant.conf ];then
mkdir -p /data/wifi/ #mkdir -p /data/wifi/
#cp /etc/wpa_supplicant.conf /data/wifi/wpa_supplicant.conf # wificfg.sh
wificfg.sh #fi
fi #if [ -f /data/wifi/wpa_supplicant.conf ];then
if [ -f /data/wifi/wpa_supplicant.conf ];then # wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B
ifconfig wlan0 down # sleep 1
sleep 0.1 # udhcpc -T 2 -q -iwlan0 &
wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B #fi
sleep 1
udhcpc -T 2 -q -iwlan0 &
fi
#bt is not #bt is not
sleep 30 killall bootanimation_server
sleep 2
lbh_server -p "ble_userconfig.json" -s ble uart 1500000 /dev/ttyS2 1>/dev/null 2>&1 & lbh_server -p "ble_userconfig.json" -s ble uart 1500000 /dev/ttyS2 1>/dev/null 2>&1 &
echo -100 > /proc/$(pidof lbh_server)/oom_score_adj sleep 2
cd /data/bin;./lbh_client 1>/dev/null 2>&1 &
sleep 5 sleep 5
lbh_client 1>/dev/null 2>&1 & echo -100 > /proc/$(pidof lbh_server)/oom_score_adj
echo -100 > /proc/$(pidof lbh_client)/oom_score_adj echo -100 > /proc/$(pidof lbh_client)/oom_score_adj
./e_player &

View File

@ -0,0 +1,11 @@
{
"manufacture_name": "AIC Semiconductor",
"model_name": "AIC-BLE-1.0",
"serial_num": "1.0.0.0-LE",
"hw_version": "1.0.0"
"fw_version": "6.1.2",
"sw_version": "6.3.0",
"sys_id": "\x12\x34\x56\xFF\xFE\x9A\xBC\xDE",
"ieee_char": "\xFF\xEE\xDD\xCC\xBB\xAA",
"pnp_id": "\x02\x5E\x04\x40\x00\x00\x03"
}

View File

@ -0,0 +1,126 @@
{
"service": {
"uuid": [
"0xfb",
"0x34",
"0x9b",
"0x5f",
"0x80",
"0x00",
"0x00",
"0x80",
"0x00",
"0x10",
"0x00",
"0x00",
"0xe7",
"0xfe",
"0x00",
"0x00"
],
"sec_en": 0
},
"characteristic": [
{
"uuid": [
"0xfb",
"0x34",
"0x9b",
"0x5f",
"0x80",
"0x00",
"0x00",
"0x80",
"0x00",
"0x10",
"0x00",
"0x00",
"0xc8",
"0xfe",
"0x00",
"0x00"
],
"properties": [
"notification",
"indication",
"read"
],
"max_len": 400
},
{
"uuid": [
"0xfb",
"0x34",
"0x9b",
"0x5f",
"0x80",
"0x00",
"0x00",
"0x80",
"0x00",
"0x10",
"0x00",
"0x00",
"0xc7",
"0xfe",
"0x00",
"0x00"
],
"properties": [
"write"
],
"max_len": 400
},
{
"uuid": [
"0xfb",
"0x34",
"0x9b",
"0x5f",
"0x80",
"0x00",
"0x00",
"0x80",
"0x00",
"0x10",
"0x00",
"0x00",
"0xc9",
"0xfe",
"0x00",
"0x00"
],
"properties": [
"notification",
"indication",
"read"
],
"max_len": 400
},
{
"uuid": [
"0xfb",
"0x34",
"0x9b",
"0x5f",
"0x80",
"0x00",
"0x00",
"0x80",
"0x00",
"0x10",
"0x00",
"0x00",
"0xca",
"0xfe",
"0x00",
"0x00"
],
"properties": [
"write",
"write_no_response"
],
"max_len": 400
}
]
}

View File

@ -2,8 +2,6 @@
#sleep 2 #sleep 2
#echo "SDIO INIT SETTING" #echo "SDIO INIT SETTING"
sleep 5
#wifi driver capablit #wifi driver capablit
devmem 0x25b00018 32 0x00000000 devmem 0x25b00018 32 0x00000000
devmem 0x25b0001c 32 0x00000000 devmem 0x25b0001c 32 0x00000000
@ -13,10 +11,7 @@ devmem 0x25b00028 32 0x00000000
devmem 0x25b0002c 32 0x00000000 devmem 0x25b0002c 32 0x00000000
devmem 0x25b00030 32 0x00000000 devmem 0x25b00030 32 0x00000000
#bt uart #bt uart
sleep 0.1 sleep 0.1
devmem 0x102000ac 32 0x00000003 devmem 0x102000ac 32 0x00000003
devmem 0x102000b0 32 0x00000003 devmem 0x102000b0 32 0x00000003
@ -26,17 +21,16 @@ devmem 0x102000b8 32 0x00000003
#GPIO #GPIO
devmem 0x10200020 32 0x00000001 devmem 0x10200020 32 0x00000001
#devmem 0x1020009c 32 0x00000001 #devmem 0x1020009c 32 0x00000001
devmem 0x10200098 32 0x00000001
sleep 0.1 #sleep 0.1
#echo 41 > /sys/class/gpio/export #echo 41 > /sys/class/gpio/export
#echo out > /sys/class/gpio/gpio41/direction #echo out > /sys/class/gpio/gpio41/direction
#echo 0 > /sys/class/gpio/gpio41/value #echo 0 > /sys/class/gpio/gpio41/value
#echo 1 > /sys/class/gpio/gpio41/value #echo 1 > /sys/class/gpio/gpio41/value
#echo 0 > /sys/class/gpio/gpio41/value #echo 0 > /sys/class/gpio/gpio41/value
#sleep 0.5 sleep 0.5
echo 9 > /sys/class/gpio/export echo 9 > /sys/class/gpio/export
sleep 0.1 sleep 0.1
echo out > /sys/class/gpio/gpio9/direction echo out > /sys/class/gpio/gpio9/direction
@ -44,36 +38,40 @@ sleep 0.1
echo 0 > /sys/class/gpio/gpio9/value echo 0 > /sys/class/gpio/gpio9/value
sleep 0.1 sleep 0.1
echo 1 > /sys/class/gpio/gpio9/value echo 1 > /sys/class/gpio/gpio9/value
sleep 1
#echo "SDIO INIT begin" sleep 0.5
echo 39 > /sys/class/gpio/export
sleep 0.1
echo out > /sys/class/gpio/gpio39/direction
sleep 0.1
echo 0 > /sys/class/gpio/gpio39/value
sleep 0.2
echo 1 > /sys/class/gpio/gpio39/value
sleep 0.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
#cd bin;./wifi_drv_ins.sh;cd ../
#cp /vendor/qua/wifi/bin/* /bin/; cp /vendor/qua/wifi/lib/* /lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/vendor/qua/wifi/lib:/system/qua/wifi/lib/
export PATH=$PATH:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
cd /vendor/qua/wifi/ko;insmod aic8800_bsp.ko aic_fw_path=/vendor/qua/wifi/aic8800D80 cd /vendor/qua/wifi/ko;insmod aic8800_bsp.ko aic_fw_path=/vendor/qua/wifi/aic8800D80
insmod aic8800_fdrv.ko;insmod aic8800_btlpm.ko;cd ../../BT; insmod aic8800_fdrv.ko;insmod aic8800_btlpm.ko;cd ../../BT;
if [ ! -f /data/wifi/wpa_supplicant.conf ];then #if [ ! -f /data/wifi/wpa_supplicant.conf ];then
mkdir -p /data/wifi/ #mkdir -p /data/wifi/
#cp /etc/wpa_supplicant.conf /data/wifi/wpa_supplicant.conf
# wificfg.sh # wificfg.sh
fi #fi
#if [ -f /data/wifi/wpa_supplicant.conf ];then #if [ -f /data/wifi/wpa_supplicant.conf ];then
# wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B # wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B
# sleep 1 # sleep 1
# udhcpc -T 2 -q -iwlan0 & # udhcpc -T 2 -q -iwlan0 &
#fi #fi
#bt is not #bt is not
#sleep 30 killall bootanimation_server
#lbh_server -p "ble_userconfig.json" -s ble uart 1500000 /dev/ttyS2 1>/dev/null 2>&1 &
#echo -100 > /proc/$(pidof lbh_server)/oom_score_adj
#sleep 5
#lbh_client 1>/dev/null 2>&1 &
#lbh_client &
#echo -100 > /proc/$(pidof lbh_client)/oom_score_adj
sleep 2
lbh_server -p "ble_userconfig.json" -s ble uart 1500000 /dev/ttyS2 1>/dev/null 2>&1 &
sleep 2
cd /data;./lbh_client 1>/dev/null 2>&1 &
sleep 5
echo -100 > /proc/$(pidof lbh_server)/oom_score_adj
echo -100 > /proc/$(pidof lbh_client)/oom_score_adj
./e_player &

View File

@ -104,18 +104,19 @@ sleep 1
udhcpc -T 2 -q -iwlan0 & udhcpc -T 2 -q -iwlan0 &
fi fi
adbd_enable -m tz tz123456
dmesg -n 1 dmesg -n 1
cd /vendor/qua/wifi/host; #cd /vendor/qua/wifi/host;
./hciconfig hci0 up #./hciconfig hci0 up
./btgatt-server & #./btgatt-server &
#./host_start.sh #./host_start.sh
#./btgatt-server #./btgatt-server
#sleep 2 #sleep 2
#pkill -9 btgatt-server #pkill -9 btgatt-server
#./btgatt-server #./btgatt-server
#cat /dev/ATC & #cat /dev/ATC &
echo -n "AT+WIFIMACPSCTRL=2,0,1" > /dev/ATC #echo -n "AT+WIFIMACPSCTRL=2,0,1" > /dev/ATC

16
sdk/X-AIOS-LT00-V1.0.4/cp.sh Executable file
View File

@ -0,0 +1,16 @@
DIR=/media/hyx/56BD-E4E7/
cd out/qm10xd_linux/qmimages
cp code-size.txt $DIR
cp data.ubi $DIR
cp logo.img $DIR
cp misc.img $DIR
cp recovery.img $DIR
cp recovery-rootfs.ubi $DIR
cp rootfs.ubi $DIR
cp script.ini $DIR
cp system.ubi $DIR
cp u-boot.bin $DIR
cp u-boot-spl-header.img $DIR
cp zImage-dtb $DIR
cd -
sudo eject $DIR

View File

@ -0,0 +1,151 @@
#!/bin/bash
set -euo pipefail
# 颜色定义(便于输出提示)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 支持的 Ubuntu 版本列表
SUPPORTED_VERSIONS=("20.04" "22.04" "24.04")
# 检查是否为 root/有 sudo 权限
check_sudo() {
if [ "$(id -u)" -ne 0 ]; then
echo -e "${YELLOW}提示:需要 sudo 权限,即将请求管理员密码...${NC}"
if ! sudo -v; then
echo -e "${RED}错误:无 sudo 权限,无法继续安装${NC}"
exit 1
fi
fi
}
# 检测 Ubuntu 版本并验证是否支持
detect_ubuntu_version() {
if [ -f /etc/os-release ]; then
. /etc/os-release
if [ "$ID" != "ubuntu" ]; then
echo -e "${RED}错误:仅支持 Ubuntu 系统,当前系统为 $ID${NC}"
exit 1
fi
UBUNTU_VERSION=$VERSION_ID
echo -e "${GREEN}检测到 Ubuntu 版本:$UBUNTU_VERSION${NC}"
# 验证版本是否支持
if ! [[ " ${SUPPORTED_VERSIONS[@]} " =~ " $UBUNTU_VERSION " ]]; then
echo -e "${RED}错误:仅支持 Ubuntu ${SUPPORTED_VERSIONS[*]},当前版本为 $UBUNTU_VERSION,不支持安装${NC}"
exit 1
fi
else
echo -e "${RED}错误:无法检测系统版本${NC}"
exit 1
fi
}
# 通用工具安装20.04/22.04/24.04 共用)
install_common_packages() {
echo -e "${GREEN}===== 安装通用编译工具 =====${NC}"
sudo apt update -y
sudo apt install -y \
cmake mtools scons curl flex bison gperf build-essential zip \
device-tree-compiler libsdl2-dev libpng-dev libcurl4-openssl-dev libssl-dev \
gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib \
g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip liblz4-tool gdb u-boot-tools git \
python3 python3-pip python-is-python3 lib32z-dev fakeroot mtd-utils \
android-sdk-libsparse-utils cpio
# 修复可能的依赖问题
sudo apt -f install -y
}
# Ubuntu 20.04 专属安装
install_ubuntu_2004() {
echo -e "${GREEN}===== 安装 Ubuntu 20.04 专属依赖 =====${NC}"
# 安装 ncurses 相关
sudo apt install -y libncurses5 lib32ncurses-dev
# 安装 xlrd 1.2.0(突破系统环境限制)
echo -e "${YELLOW}安装 xlrd 1.2.0...${NC}"
pip3 install xlrd==1.2.0 --break-system-packages
}
# Ubuntu 22.04 专属安装(适配逻辑同 20.04ncurses 兼容 + xlrd 1.2.0
install_ubuntu_2204() {
echo -e "${GREEN}===== 安装 Ubuntu 22.04 专属依赖 =====${NC}"
# 22.04 兼容 20.04 的 ncurses 依赖,同时支持 xlrd 1.2.0
sudo apt install -y libncurses5 lib32ncurses-dev
# 安装 xlrd 1.2.0(突破系统环境限制)
echo -e "${YELLOW}安装 xlrd 1.2.0...${NC}"
pip3 install xlrd==1.2.0
}
# Ubuntu 24.04 专属安装
install_ubuntu_2404() { echo -e "${GREEN}===== 安装 Ubuntu 24.04 专属依赖 =====${NC}"
# 添加 i386 架构
sudo dpkg --add-architecture i386
sudo apt update -y
# 安装 ncurses 相关
sudo apt install -y libncurses6 libncurses6:i386 libncurses-dev libncurses-dev:i386
# 安装 openpyxl
sudo apt install -y python3-openpyxl
}
# 验证安装结果
verify_installation() {
echo -e "${GREEN}===== 验证安装结果 =====${NC}"
# 检查核心工具
local tools=("cmake" "scons" "dtc" "python3" "pip3" "cpio" "fakeroot")
for tool in "${tools[@]}"; do
if command -v "$tool" &>/dev/null; then
echo -e "${GREEN}[✓] $tool 安装成功${NC}"
else
echo -e "${RED}[✗] $tool 安装失败${NC}"
fi
done
# 检查 Python 库
if [ "$UBUNTU_VERSION" = "20.04" ] || [ "$UBUNTU_VERSION" = "22.04" ]; then
if python3 -c "import xlrd; assert xlrd.__version__ == '1.2.0'" &>/dev/null; then
echo -e "${GREEN}[✓] xlrd 1.2.0 安装成功${NC}"
else
echo -e "${RED}[✗] xlrd 1.2.0 安装失败${NC}"
fi
elif [ "$UBUNTU_VERSION" = "24.04" ]; then
if python3 -c "import openpyxl" &>/dev/null; then
echo -e "${GREEN}[✓] openpyxl 安装成功${NC}"
else
echo -e "${RED}[✗] openpyxl 安装失败${NC}"
fi
fi
}
# 主流程
main() {
echo -e "${GREEN}===== 开始搭建 XOS 编译环境 =====${NC}"
check_sudo
detect_ubuntu_version
install_common_packages
case "$UBUNTU_VERSION" in
20.04)
install_ubuntu_2004
;;
22.04)
install_ubuntu_2204
;;
24.04)
install_ubuntu_2404
;;
*)
# 理论上不会走到这里(已在 detect_ubuntu_version 验证)
echo -e "${RED}错误:不支持的 Ubuntu 版本${NC}"
exit 1
;;
esac
verify_installation
echo -e "${GREEN}===== XOS 编译环境搭建完成 =====${NC}"
}
# 执行主流程
main

Binary file not shown.

Binary file not shown.

View File

@ -85,7 +85,7 @@
}, },
{ {
"name": "rootfs", "name": "rootfs",
"size": "6MB", "size": "12MB",
"offset": "0x2D00000", "offset": "0x2D00000",
"type": "rootfs", "type": "rootfs",
"filesystem_type": "ubi" "filesystem_type": "ubi"
@ -93,14 +93,14 @@
{ {
"name": "data", "name": "data",
"size": "6MB", "size": "6MB",
"offset": "0x3300000", "offset": "0x3900000",
"type": "userdata", "type": "userdata",
"filesystem_type": "ubi" "filesystem_type": "ubi"
}, },
{ {
"name": "usrdata", "name": "usrdata",
"size": "71MB", "size": "65MB",
"offset": "0x3900000", "offset": "0x3F00000",
"type": "userdata", "type": "userdata",
"filesystem_type": "ubi" "filesystem_type": "ubi"
} }

View File

@ -71,7 +71,7 @@
}, },
{ {
"name": "system", "name": "system",
"size": "18MB", "size": "13MB",
"offset": "0x1500000", "offset": "0x1500000",
"type": "system", "type": "system",
"filesystem_type": "ubi" "filesystem_type": "ubi"
@ -79,28 +79,21 @@
{ {
"name": "swapfile", "name": "swapfile",
"size": "6MB", "size": "6MB",
"offset": "0x2700000", "offset": "0x2200000",
"type": "swap", "type": "swap",
"filesystem_type": "raw" "filesystem_type": "raw"
}, },
{ {
"name": "rootfs", "name": "rootfs",
"size": "6MB", "size": "12MB",
"offset": "0x2D00000", "offset": "0x2800000",
"type": "rootfs", "type": "rootfs",
"filesystem_type": "ubi" "filesystem_type": "ubi"
}, },
{ {
"name": "data", "name": "data",
"size": "6MB", "size": "72MB",
"offset": "0x3300000", "offset": "0x3400000",
"type": "userdata",
"filesystem_type": "ubi"
},
{
"name": "usrdata",
"size": "71MB",
"offset": "0x3900000",
"type": "userdata", "type": "userdata",
"filesystem_type": "ubi" "filesystem_type": "ubi"
} }

View File

@ -3,8 +3,8 @@ recovery,raw,16
boot,raw,16 boot,raw,16
logo,raw,8 logo,raw,8
system,ubi,18874368 system,ubi,18874368
rootfs,ubi,10485760 rootfs,ubi,12582912
data,ubi,6291456 data,ubi,6291456
usrdata,ubi,63963136 usrdata,ubi,68157440
writeback,raw,12 writeback,raw,12
:: ::

View File

@ -2,9 +2,8 @@ uboot,raw,1
recovery,raw,16 recovery,raw,16
boot,raw,16 boot,raw,16
logo,raw,8 logo,raw,8
system,ubi,18874368 system,ubi,13631488
rootfs,ubi,10485760 rootfs,ubi,12582912
data,ubi,6291456 data,ubi,75497472
usrdata,ubi,63963136
writeback,raw,12 writeback,raw,12
:: ::

View File

@ -83,9 +83,9 @@ elif [[ "$CONFIG_STORAGE_TYPE_SPINAND" = true ]]; then
datahex_size=$(printf "%x" "$datafilesize") datahex_size=$(printf "%x" "$datafilesize")
echo "data file hex size:$datahex_size" echo "data file hex size:$datahex_size"
usrdatafilesize=$(stat -c%s $QM_ALL_IMAGES/usrdata.ubi) #usrdatafilesize=$(stat -c%s $QM_ALL_IMAGES/usrdata.ubi)
usrdatahex_size=$(printf "%x" "$usrdatafilesize") #usrdatahex_size=$(printf "%x" "$usrdatafilesize")
echo "data file hex size:$usrdatahex_size" #echo "data file hex size:$usrdatahex_size"
recoveryfilesize=$(stat -c%s $QM_ALL_IMAGES/recovery.img) recoveryfilesize=$(stat -c%s $QM_ALL_IMAGES/recovery.img)
recoveryhex_size=$(printf "%x" "$recoveryfilesize") recoveryhex_size=$(printf "%x" "$recoveryfilesize")
@ -95,7 +95,7 @@ elif [[ "$CONFIG_STORAGE_TYPE_SPINAND" = true ]]; then
recoveryfshex_size=$(printf "%x" "$recoveryfsfilesize") recoveryfshex_size=$(printf "%x" "$recoveryfsfilesize")
echo "recovery-rootfs file hex size:$recoveryfshex_size" echo "recovery-rootfs file hex size:$recoveryfshex_size"
sed -i "s/splfilesize/$splhex_size/g; s/ubootfilesize/$uboothex_size/g; s/logofilesize/$logohex_size/g; s/kernelfilesize/$kernelhex_size/g; s/systemfilesize/$systemhex_size/g; s/rootfsfilesize/$rootfshex_size/g; s/usrdatafilesize/$usrdatahex_size/g; s/datafilesize/$datahex_size/g; s/recoveryfilesize/$recoveryhex_size/g;s/recoveryfsfilesize/$recoveryfshex_size/g" $QM_ALL_IMAGES/script.ini sed -i "s/splfilesize/$splhex_size/g; s/ubootfilesize/$uboothex_size/g; s/logofilesize/$logohex_size/g; s/kernelfilesize/$kernelhex_size/g; s/systemfilesize/$systemhex_size/g; s/rootfsfilesize/$rootfshex_size/g; s/datafilesize/$datahex_size/g; s/recoveryfilesize/$recoveryhex_size/g;s/recoveryfsfilesize/$recoveryfshex_size/g" $QM_ALL_IMAGES/script.ini
sed -i "s/splfilesize/$splhex_size/g; s/ubootfilesize/$uboothex_size/g; s/logofilesize/$logohex_size/g; s/kernelfilesize/$kernelhex_size/g; s/systemfilesize/$systemhex_size/g; s/rootfsfilesize/$rootfshex_size/g; s/datafilesize/$datahex_size/g; s/recoveryfsfilesize/$recoveryfshex_size/g" $QM_ALL_IMAGES/script-ota.ini sed -i "s/splfilesize/$splhex_size/g; s/ubootfilesize/$uboothex_size/g; s/logofilesize/$logohex_size/g; s/kernelfilesize/$kernelhex_size/g; s/systemfilesize/$systemhex_size/g; s/rootfsfilesize/$rootfshex_size/g; s/datafilesize/$datahex_size/g; s/recoveryfsfilesize/$recoveryfshex_size/g" $QM_ALL_IMAGES/script-ota.ini
echo "start create programmer version" echo "start create programmer version"
mkdir -p $PROGRAMMER_DIR mkdir -p $PROGRAMMER_DIR

View File

@ -16,7 +16,7 @@ DES_OUT_LOGO_DIR=$DES_OUT_ROOT_DIR/logo
#DES_OUT_QUA_DIR=$DES_OUT_ROOT_DIR/system/qua #DES_OUT_QUA_DIR=$DES_OUT_ROOT_DIR/system/qua
#DES_OUT_APP_DIR=$DES_OUT_ROOT_DIR/system/app #DES_OUT_APP_DIR=$DES_OUT_ROOT_DIR/system/app
DES_OUT_ROOTFS_DIR=$DES_OUT_ROOT_DIR/rootfs DES_OUT_ROOTFS_DIR=$DES_OUT_ROOT_DIR/rootfs
DES_OUT_DATA_DIR=$DES_OUT_ROOT_DIR/data DES_OUT_DATA_DIR=$DES_OUT_ROOT_DIR/data/bin
DES_OUT_USRDATA_DIR=$DES_OUT_ROOT_DIR/usrdata DES_OUT_USRDATA_DIR=$DES_OUT_ROOT_DIR/usrdata
if [ "$CONFIG_STORAGE_TYPE_SPINAND" = true ]; then if [ "$CONFIG_STORAGE_TYPE_SPINAND" = true ]; then
@ -24,6 +24,7 @@ if [ "$CONFIG_STORAGE_TYPE_SPINAND" = true ]; then
DES_OUT_RES_DIR=$DES_OUT_ROOT_DIR/system/res DES_OUT_RES_DIR=$DES_OUT_ROOT_DIR/system/res
DES_OUT_QUA_DIR=$DES_OUT_ROOT_DIR/system/qua DES_OUT_QUA_DIR=$DES_OUT_ROOT_DIR/system/qua
DES_OUT_APP_DIR=$DES_OUT_ROOT_DIR/system/app DES_OUT_APP_DIR=$DES_OUT_ROOT_DIR/system/app
DES_OUT_FACTORY_DIR=$DES_OUT_ROOT_DIR/system/factory/bin
else else
echo "Using SPINOR storage type paths" echo "Using SPINOR storage type paths"
DES_OUT_RES_DIR=$DES_OUT_ROOTFS_DIR/system/res DES_OUT_RES_DIR=$DES_OUT_ROOTFS_DIR/system/res
@ -31,12 +32,14 @@ else
DES_OUT_APP_DIR=$DES_OUT_ROOTFS_DIR/system/app DES_OUT_APP_DIR=$DES_OUT_ROOTFS_DIR/system/app
fi fi
mkdir -p $DES_OUT_RES_DIR $DES_OUT_RES_DIR/launcher $DES_OUT_QUA_DIR $DES_OUT_APP_DIR $DES_OUT_DATA_DIR $DES_OUT_USRDATA_DIR #mkdir -p $DES_OUT_RES_DIR $DES_OUT_RES_DIR/launcher $DES_OUT_QUA_DIR $DES_OUT_APP_DIR $DES_OUT_FACTORY_DIR $DES_OUT_DATA_DIR $DES_OUT_USRDATA_DIR
mkdir -p $DES_OUT_RES_DIR $DES_OUT_RES_DIR/launcher $DES_OUT_QUA_DIR $DES_OUT_APP_DIR $DES_OUT_FACTORY_DIR $DES_OUT_DATA_DIR
OVERLAY_QUA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/qua_overlay OVERLAY_QUA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/qua_overlay
OVERLAY_RES_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/res_overlay OVERLAY_RES_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/res_overlay
OVERLAY_DATA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/data OVERLAY_DATA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/data/bin
OVERLAY_USRDATA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/usrdata OVERLAY_USRDATA_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/usrdata
OVERLAY_FACTORY_DIR=$PRJ_TOP_DIR/product/$CONFIG_XOS_PROJECT_TYPE/rootfs_overlay/system/factory/bin
_soc_pkg_path=base/soc/qm10xd/linux _soc_pkg_path=base/soc/qm10xd/linux
echo "_soc_pkg_path: $_soc_pkg_path" echo "_soc_pkg_path: $_soc_pkg_path"
@ -77,7 +80,7 @@ cp -arf $PRJ_TOP_DIR/core/package/hardware/deviceDrv/wifi/${CONFIG_XOS_WIFI_QUAD
fi fi
# copy ko and lib # copy ko and lib
mkdir -p $DES_OUT_ROOTFS_DIR/ko && cp -rfa $SRC_FILE_QUA_COM_KO/* $DES_OUT_ROOTFS_DIR/ko #mkdir -p $DES_OUT_ROOTFS_DIR/ko && cp -rfa $SRC_FILE_QUA_COM_KO/* $DES_OUT_ROOTFS_DIR/ko
mkdir -p $DES_OUT_QUA_DIR/lib && cp -rfa $SRC_FILE_QUA_COM_LIB/*.so $DES_OUT_QUA_DIR/lib mkdir -p $DES_OUT_QUA_DIR/lib && cp -rfa $SRC_FILE_QUA_COM_LIB/*.so $DES_OUT_QUA_DIR/lib
# #
@ -103,26 +106,27 @@ xz_decompress
echo "copy to rootfs dir end" echo "copy to rootfs dir end"
# #
####copy to partion: ####copy to partion:
echo "::copy files to $DES_OUT_APP_DIR" #echo "::copy files to $DES_OUT_APP_DIR"
if [ -d "$DES_OUT_ROOT_DIR/../xos/bin/" ];then #if [ -d "$DES_OUT_ROOT_DIR/../xos/bin/" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/bin/* $DES_OUT_APP_DIR #cp -arf $DES_OUT_ROOT_DIR/../xos/bin/* $DES_OUT_APP_DIR
fi #rm -rf $DES_OUT_APP_DIR/qxosui
#fi
if [ -d "$DES_OUT_ROOT_DIR/../xos/lib/" ];then if [ -d "$DES_OUT_ROOT_DIR/../xos/lib/" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/lib $DES_OUT_QUA_DIR cp -arf $DES_OUT_ROOT_DIR/../xos/lib $DES_OUT_QUA_DIR
rm -rf $DES_OUT_QUA_DIR/*.a rm -rf $DES_OUT_QUA_DIR/*.a
fi fi
if [ -d "$DES_OUT_ROOT_DIR/../xos/res/ttf" ];then #if [ -d "$DES_OUT_ROOT_DIR/../xos/res/ttf" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/res/ttf $DES_OUT_RES_DIR #cp -arf $DES_OUT_ROOT_DIR/../xos/res/ttf $DES_OUT_RES_DIR
fi #fi
if [ -d "$DES_OUT_ROOT_DIR/../xos/res/skin" ];then #if [ -d "$DES_OUT_ROOT_DIR/../xos/res/skin" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/res/skin $DES_OUT_RES_DIR #cp -arf $DES_OUT_ROOT_DIR/../xos/res/skin $DES_OUT_RES_DIR
fi #fi
if [ -d "$DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res" ];then #if [ -d "$DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res/* $DES_OUT_RES_DIR #cp -arf $DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res/* $DES_OUT_RES_DIR
fi #fi
if [ -d "$DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res_lazy" ];then #if [ -d "$DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res_lazy" ];then
cp -arf $DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res_lazy/* $DES_OUT_RES_DIR #cp -arf $DES_OUT_ROOT_DIR/../xos/res/${CONFIG_XOS_PROJECT_TYPE}/res_lazy/* $DES_OUT_RES_DIR
fi #fi
# #
# #
@ -139,13 +143,13 @@ fi
#overlay for res #overlay for res
if [ -d "${OVERLAY_RES_DIR}/launcher/" ];then if [ -d "${OVERLAY_RES_DIR}/launcher/" ];then
echo "::copy files to $OVERLAY_RES_DIR/launcher/" echo "::copy files to $OVERLAY_RES_DIR/launcher/"
cp -rfa $OVERLAY_RES_DIR/launcher/* $DES_OUT_RES_DIR/launcher #cp -rfa $OVERLAY_RES_DIR/launcher/* $DES_OUT_RES_DIR/launcher
fi fi
if [ -d "${OVERLAY_RES_DIR}/res/" ];then if [ -d "${OVERLAY_RES_DIR}/res/" ];then
OVERLAY_RES_RES=${OVERLAY_RES_DIR}/res/ OVERLAY_RES_RES=${OVERLAY_RES_DIR}/res/
echo "::copy res_overlay res files from $OVERLAY_RES_RES, $DES_OUT_RES_DIR/ " echo "::copy res_overlay res files from $OVERLAY_RES_RES, $DES_OUT_RES_DIR/ "
cp -arf $OVERLAY_RES_RES/* $DES_OUT_RES_DIR/ #cp -arf $OVERLAY_RES_RES/* $DES_OUT_RES_DIR/
fi fi
#data for data #data for data
@ -158,12 +162,16 @@ if [ -d "${OVERLAY_USRDATA_DIR}" ];then
echo "::copy files to $DES_OUT_USRDATA_DIR" echo "::copy files to $DES_OUT_USRDATA_DIR"
cp -rfa $OVERLAY_USRDATA_DIR/* $DES_OUT_USRDATA_DIR/ cp -rfa $OVERLAY_USRDATA_DIR/* $DES_OUT_USRDATA_DIR/
fi fi
if [ -d "${OVERLAY_FACTORY_DIR}" ];then
echo "::copy files to $DES_OUT_FACTORY_DIR"
cp -rfa $OVERLAY_FACTORY_DIR/* $DES_OUT_FACTORY_DIR/
fi
#cp settings.json #cp settings.json
SRC_FILE_RESOURCES=$PRJ_TOP_DIR/product/${CONFIG_XOS_PROJECT_TYPE}/ SRC_FILE_RESOURCES=$PRJ_TOP_DIR/product/${CONFIG_XOS_PROJECT_TYPE}/
if [ -d "$SRC_FILE_RESOURCES" ];then #if [ -d "$SRC_FILE_RESOURCES" ];then
cp -arf $SRC_FILE_RESOURCES/*settings.json $DES_OUT_RES_DIR #cp -arf $SRC_FILE_RESOURCES/*settings.json $DES_OUT_RES_DIR
fi #fi
#overlay for app #overlay for app

View File

@ -1,5 +1,5 @@
CONFIG_XOS_PROJECT_TYPE="demo_ld" CONFIG_XOS_PROJECT_TYPE="demo_ld"
CONFIG_PRODUCT_BOARD_TYPE="moto_ld" CONFIG_PRODUCT_BOARD_TYPE="demo_ld"
CONFIG_PRODUCT_DEMO_LD=y CONFIG_PRODUCT_DEMO_LD=y
CONFIG_QM_VERSION="1.0.0" CONFIG_QM_VERSION="1.0.0"
CONFIG_QM_HW_VERSION="20" CONFIG_QM_HW_VERSION="20"
@ -17,6 +17,7 @@ CONFIG_ROOTFS_BUSYBOX_CONFIG="busybox_quaming_config"
CONFIG_ROOTFS_BUSYBOX_VERSION="1.36.1" CONFIG_ROOTFS_BUSYBOX_VERSION="1.36.1"
#CONFIG_XOS_WIFI_QUADRV="ea6x21qx" #CONFIG_XOS_WIFI_QUADRV="ea6x21qx"
CONFIG_XOS_WIFI_QUADRV="aic8800d"
CONFIG_XOS_BUILD_SDK="qm10xd_linux" CONFIG_XOS_BUILD_SDK="qm10xd_linux"
CONFIG_XOS_BUILD_BOARD="qm10xd" CONFIG_XOS_BUILD_BOARD="qm10xd"
@ -28,7 +29,7 @@ CONFIG_STORAGE_TYPE_SPINAND=y
CONFIG_STORAGE_SIZE_128MB=y CONFIG_STORAGE_SIZE_128MB=y
CONFIG_STORAGE_TYPE="_nand" CONFIG_STORAGE_TYPE="_nand"
CONFIG_QM_SYS_PARTI_NAME_LIST="uboot recovery boot logo system rootfs data usrdata" CONFIG_QM_SYS_PARTI_NAME_LIST="uboot recovery boot logo system rootfs data"
CONFIG_QM_SYS_PARTI_INFOFILE="partition-info.txt" CONFIG_QM_SYS_PARTI_INFOFILE="partition-info.txt"
CONFIG_QM_SYS_PARTI_DEFAULT_FS_TYPE="ext4" CONFIG_QM_SYS_PARTI_DEFAULT_FS_TYPE="ext4"

View File

@ -28,7 +28,7 @@ CONFIG_STORAGE_TYPE_SPINAND=y
CONFIG_STORAGE_SIZE_128MB=y CONFIG_STORAGE_SIZE_128MB=y
CONFIG_STORAGE_TYPE="_nand" CONFIG_STORAGE_TYPE="_nand"
CONFIG_QM_SYS_PARTI_NAME_LIST="uboot recovery boot logo system rootfs data usrdata" CONFIG_QM_SYS_PARTI_NAME_LIST="uboot recovery boot logo system rootfs data"
CONFIG_QM_SYS_PARTI_INFOFILE="partition-info.txt" CONFIG_QM_SYS_PARTI_INFOFILE="partition-info.txt"
CONFIG_QM_SYS_PARTI_DEFAULT_FS_TYPE="ext4" CONFIG_QM_SYS_PARTI_DEFAULT_FS_TYPE="ext4"

View File

@ -1,123 +0,0 @@
#!/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 fhfb.ko video="vram0_size:2000,vram1_size:0,vram2_size:0,vram3_size:0,vram4_size:2000,vram5_size:0,vram6_size:0,vram7_size:0," fbc=1500 fbc1=1500 fhfb0_start=0 fhfb0_size=0 fhfb0_fbc=1 fhfb4_start=0 fhfb4_size=0 fhfb4_fbc=1
insmod lcm_module.ko
insmod lcm.ko lcm0_id_cfg=1 lcm1_id_cfg=1 lcm0_id=0 lcm1_id=0
insmod vou.ko keeplogo=1
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

View File

@ -0,0 +1,106 @@
#!/bin/sh
# e_player 崩溃监控和恢复脚本
CRASH_COUNT_FILE="/data/.e_player_crash_count"
STABLE_COUNT_FILE="/data/.e_player_stable_count"
MAX_CRASH=5
CHECK_INTERVAL=1
STABLE_CHECKS=120 # 连续检测120s 进程存在才认为稳定
if [ ! -f "$CRASH_COUNT_FILE" ]; then
echo 0 > "$CRASH_COUNT_FILE"
fi
if [ ! -f "$STABLE_COUNT_FILE" ]; then
echo 0 > "$STABLE_COUNT_FILE"
fi
echo "$(date): e_player_wrapper starting, waiting for e_player..." >> /data/crash.log
WAIT_COUNT=0
while [ $WAIT_COUNT -lt 20 ]; do
if ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
echo "$(date): e_player detected after ${WAIT_COUNT} checks, starting monitoring..." >> /data/crash.log
break
fi
sleep 3
WAIT_COUNT=$((WAIT_COUNT + 1))
done
if ! ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
echo "$(date): WARNING - e_player not found after 60s, will monitor anyway..." >> /data/crash.log
fi
echo "$(date): Starting main monitoring loop..." >> /data/crash.log
HEARTBEAT=0
while true; do
HEARTBEAT=$((HEARTBEAT + 1))
if [ $HEARTBEAT -ge 120 ]; then
echo "$(date): [Heartbeat] Monitoring active, stable_count=$(cat $STABLE_COUNT_FILE)" >> /data/crash.log
HEARTBEAT=0
fi
if ! ps | grep -v grep | grep -v e_player_wrapper | grep e_player > /dev/null; then
# 进程不存在,崩溃了
echo 0 > "$STABLE_COUNT_FILE" # 重置稳定计数
COUNT=$(cat "$CRASH_COUNT_FILE")
COUNT=$((COUNT + 1))
echo $COUNT > "$CRASH_COUNT_FILE"
echo "$(date): e_player crashed, count: $COUNT" >> /data/crash.log
if [ $COUNT -ge $MAX_CRASH ]; then
echo "$(date): Crash count exceeded $MAX_CRASH, restoring from factory..." >> /data/crash.log
# 从factory恢复bin文件
if [ -f /system/factory/bin/e_player ]; then
cp /system/factory/bin/e_player /data/bin/e_player
chmod +x /data/bin/e_player
echo "$(date): Restored e_player from factory" >> /data/crash.log
fi
if [ -f /system/factory/bin/lbh_client ]; then
cp /system/factory/bin/lbh_client /data/bin/lbh_client
chmod +x /data/bin/lbh_client
echo "$(date): Restored lbh_client from factory" >> /data/crash.log
fi
# 恢复配置文件
if [ -f /system/factory/system_properties.cfg ]; then
cp /system/factory/system_properties.cfg /data/system_properties.cfg
echo "$(date): Restored system_properties.cfg from factory" >> /data/crash.log
fi
# 重置崩溃计数,重新开始
echo 0 > "$CRASH_COUNT_FILE"
echo "$(date): Reset crash count, retrying..." >> /data/crash.log
fi
echo "$(date): Restarting e_player..." >> /data/crash.log
killall -9 e_player 2>/dev/null
sleep 1
export LD_LIBRARY_PATH=/data/bin/libs:/vendor/qua/lib:/lib:/usr/lib:$LD_LIBRARY_PATH
cd /data
/data/bin/e_player &
sleep 3
else
# 进程存在,累加稳定计数
STABLE=$(cat "$STABLE_COUNT_FILE")
STABLE=$((STABLE + 1))
echo $STABLE > "$STABLE_COUNT_FILE"
# 如果稳定运行120秒重置崩溃计数
if [ $STABLE -ge $STABLE_CHECKS ]; then
COUNT=$(cat "$CRASH_COUNT_FILE")
if [ $COUNT -gt 0 ]; then
echo "$(date): e_player stable, resetting crash count" >> /data/crash.log
echo 0 > "$CRASH_COUNT_FILE"
fi
echo 0 > "$STABLE_COUNT_FILE" # 重置稳定计数,下次再累计
fi
fi
sleep $CHECK_INTERVAL
done

View File

@ -1,54 +0,0 @@
#!/bin/sh
mkdir -p /tmp/run
LOCKFILE="/tmp/run/$(basename "$0").lock"
# Check if lock file exists
if [ -f "$LOCKFILE" ]; then
PID=$(cat "$LOCKFILE")
# Check if process exists using /proc directory
if [ -d "/proc/$PID" ]; then
# Verify it's a valid process by checking executable
if [ -f "/proc/$PID/exe" ]; then
echo "Script is already running, PID: $PID" >&2
exit 1
fi
fi
# Stale lock file - remove it
echo "Removing stale lock file..." >&2
rm -f "$LOCKFILE"
fi
# Create new lock file
echo $$ > "$LOCKFILE"
# Cleanup function
cleanup() {
rm -f "$LOCKFILE"
exit 0
}
# Trap termination signals
trap 'cleanup' SIGINT SIGTERM SIGHUP SIGQUIT
pkill wpa_supplicant;
pkill udhcpc;
sleep 1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/vendor/qua/wifi/lib;
wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B &
echo 0 > /proc/$(pidof wpa_supplicant)/oom_score_adj
sleep 1
counter=0
while true; do
interface_status=$(ip addr show wlan0 | grep LOWER_UP)
if [ -n "$interface_status" ] || [ $counter -gt 60 ]; then
echo "wlan0 is ap connected,time to start udhcpc"
udhcpc -q -iwlan0 &
break
fi
counter=$((counter + 1))
sleep 0.5
done
sleep 30
exit 0

View File

@ -1,68 +0,0 @@
#!/bin/sh
echo $#
cd /bin
cfg_path="/data/wifi/"
mkdir -p ${cfg_path}
if [ $# -ne 2 ]; then
echo "Usage: $0 arg1 arg2"
#exit 1
else
echo "input param!!"
# echo $2
if [ -f "${cfg_path}wpa_supplicant.conf" ];then
rm "${cfg_path}wpa_supplicant.conf"
echo "wpa_supplicant.conf delsted!!"
else
echo "wpa_supplicant.conf not exist"
fi
echo "ctrl_interface=/var/wpa_supplicant" >> ${cfg_path}wpa_supplicant.conf
echo " " >> ${cfg_path}wpa_supplicant.conf
echo "#wpa/wpa2/wpa3 auto" >> ${cfg_path}wpa_supplicant.conf
echo "network={" >> ${cfg_path}wpa_supplicant.conf
fi
if [ -n "$1" ]; then
echo " ssid=\"$1\"" >> ${cfg_path}wpa_supplicant.conf
else
echo "$1 is NULL"
fi
if [ -n "$2" ]; then
echo " psk=\"$2\"" >> ${cfg_path}wpa_supplicant.conf
else
echo "$2 is NULL"
fi
if [ $# -ne 2 ]; then
echo "Usage: $0 less than 2"
#exit 1
else
echo "}" >> ${cfg_path}wpa_supplicant.conf
echo " " >> ${cfg_path}wpa_supplicant.conf
fi
pkill wpa_supplicant;
pkill udhcpc;
sleep 1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/vendor/qua/wifi/lib;
wpa_supplicant -iwlan0 -D nl80211 -c ..${cfg_path}wpa_supplicant.conf -B &
sleep 1
counter=0
while true; do
interface_status=$(ip addr show wlan0 | grep LOWER_UP)
if [ -n "$interface_status" ] || [ $counter -gt 60 ]; then
udhcpc -q -iwlan0 &
break
fi
counter=$((counter + 1))
sleep 0.5
done
exit 0

View File

@ -1,7 +0,0 @@
#!/bin/sh
pkill -9 iw
pkill -9 wpa_supplicant;
pkill -9 udhcpc;
rm /data/wifi/wpa_supplicant.conf
sleep 1
exit 0

View File

@ -5,8 +5,8 @@ sdk_verion = 1.00.01
hw_verion = 1.0 hw_verion = 1.0
b_num = 12 b_num = 12
[wifi] [wifi]
SSID =ZNJQ SSID =tz
PASSWD =Znjq...123 PASSWD =tz123456
[audio] [audio]
audio_sample_rate = 8000 audio_sample_rate = 8000
[video] [video]

View File

@ -1,15 +1,13 @@
#!/bin/sh #!/bin/sh
#ifconfig lo up #ifconfig lo up
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
cd /qua/ko
./loadko.sh -i
mount --bind /system/qua /vendor/qua mount --bind /system/qua /vendor/qua
mount --bind /system/res /res mount --bind /system/res /res
mount --bind /system/app /app mount --bind /system/app /app
#cd /system/app/
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib #bootanimation_server -w 800 -h 1280 -s 38 -r 60 -v '2,32768;2,2457600' 2>&1 > /dev/kmsg &
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 &

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
#export the library path export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:$LD_LIBRARY_PATH export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin
check_cp_config() check_cp_config()
{ {
# if /data/config/param.ini not exist, cp from /config/param.ini # if /data/config/param.ini not exist, cp from /config/param.ini
@ -31,9 +31,9 @@ check_cp_config()
check_cp_config check_cp_config
#run qxosui #run qxosui
cd /app #cd /app
echo "start run /app/qxosui &" #echo "start run /app/qxosui &"
ubiattach /dev/ubi_ctrl -m 13 #ubiattach /dev/ubi_ctrl -m 13
mount -t ubifs ubi3:usrdata /usrdata & #mount -t ubifs ubi3:usrdata /usrdata &
./qxosui & #./qxosui &
#./qxosui 2>&1 1>/dev/kmsg & #./qxosui 2>&1 1>/dev/kmsg &

View File

@ -1,7 +1,9 @@
#!/bin/sh #!/bin/sh
# Source profile to get environment variables # Source profile to get environment variables
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usrdata/awtk/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
. /etc/profile . /etc/profile
FOLDER=/autorun FOLDER=/autorun

View File

@ -0,0 +1,75 @@
#!/bin/sh
#
# OTA升级结果检查脚本
# 在系统启动时检查OTA升级是否成功
#
TAG="S99ota_check:"
# 版本比较函数
version_compare() {
local ver1=$1
local ver2=$2
# 简单的版本号比较(假设格式为 x.y.z
if [ "$ver1" = "$ver2" ]; then
return 0 # 版本相同,升级成功
else
return 1 # 版本不同,升级失败
fi
}
ota_check() {
# 检查是否存在升级信息文件
if [ ! -f "/data/update/.update_info.txt" ]; then
return 0 # 没有升级信息,跳过检查
fi
echo "${TAG} 检查OTA升级结果..."
# 读取升级包版本号
if [ -f "/data/update/.update_info.txt" ]; then
version_update=$(grep "update_version" /data/update/.update_info.txt | cut -d'=' -f2)
else
echo "${TAG} 找不到升级包版本信息"
return 1
fi
# 读取系统当前版本号
if [ -f "/etc/tniuds/system_info" ]; then
version_sys=$(grep -E "^v|fw_version" /etc/tniuds/system_info | head -n1 | sed 's/fw_version=v//;s/^v//')
else
echo "${TAG} 找不到系统版本信息"
return 1
fi
echo "${TAG} 升级包版本: ${version_update}"
echo "${TAG} 系统版本: ${version_sys}"
# 比较版本号
if version_compare "${version_update}" "${version_sys}"; then
echo "${TAG} OTA升级成功版本匹配: ${version_sys}"
# 清理升级临时文件
rm -rf /data/update
rm -f /data/update.tar.gz
rm -f /data/script-ota.ini
echo "${TAG} 已清理升级临时文件"
else
echo "${TAG} OTA升级失败版本不匹配"
echo "${TAG} 期望版本: ${version_update}, 实际版本: ${version_sys}"
# 保留升级文件用于调试
echo "${TAG} 保留 /data/update 目录用于调试"
fi
}
case "$1" in
start|"")
ota_check
;;
*)
echo "Usage: $0 {start}"
exit 1
;;
esac
exit 0

View File

@ -1,4 +1,5 @@
::sysinit:/etc/init.d/rcS ::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh ::respawn:-/bin/sh
::restart:/sbin/init ::restart:/sbin/init
::respawn:/bin/e_player_wrapper
#::respawn:-/bin/daemon #::respawn:-/bin/daemon

View File

@ -2,12 +2,8 @@
echo echo
echo -n "Processing /etc/profile... " echo -n "Processing /etc/profile... "
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:/system/qua/lib:/system/qua/wifi/lib
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:$LD_LIBRARY_PATH export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin
export LD_LIBRARY_PATH=/usrdata/awtk/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usrdata/release/bin:$LD_LIBRARY_PATH
export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin
# Read timezone from param.ini # Read timezone from param.ini
if [ -f /data/config/param.ini ]; then if [ -f /data/config/param.ini ]; then

View File

@ -1,3 +0,0 @@
#!/bin/sh
touch /tmp/cast_test.flag
rm -rf /data/casting_video_*.h264

View File

@ -0,0 +1,4 @@
fw_version=v1.0.0
fw_time=20260402_000000
fw_variant=user
project_id=demo_ld

View File

@ -0,0 +1 @@
libcrypto.so.1.1

View File

@ -0,0 +1 @@
libcurl.so.4

View File

@ -0,0 +1 @@
libjpeg.so.62.4.0

View File

@ -0,0 +1 @@
libjpeg.so.62.4.0

View File

@ -0,0 +1 @@
libmosquitto.so.2.0.18

View File

@ -0,0 +1 @@
libmosquitto.so.2.0.18

View File

@ -0,0 +1 @@
libmosquittopp.so.2.0.18

View File

@ -0,0 +1 @@
libmosquittopp.so.2.0.18

View File

@ -0,0 +1 @@
libssl.so.1.1

View File

@ -0,0 +1 @@
libssp.so.0.0.0

View File

@ -0,0 +1,12 @@
prefix=/home/ss/work/openssl/arm-openssl
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
enginesdir=${libdir}/engines-1.1
Name: OpenSSL-libcrypto
Description: OpenSSL cryptography library
Version: 1.1.1k
Libs: -L${libdir} -lcrypto
Libs.private: -ldl -pthread
Cflags: -I${includedir}

View File

@ -0,0 +1,11 @@
prefix=/home/ss/work/openssl/arm-openssl
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: OpenSSL-libssl
Description: Secure Sockets Layer and cryptography libraries
Version: 1.1.1k
Requires.private: libcrypto
Libs: -L${libdir} -lssl
Cflags: -I${includedir}

View File

@ -0,0 +1,9 @@
prefix=/home/ss/work/openssl/arm-openssl
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 1.1.1k
Requires: libssl libcrypto

Some files were not shown because too many files have changed in this diff Show More