Compare commits

..

21 Commits
master ... 10.1

Author SHA1 Message Date
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
1800 changed files with 6005 additions and 47733 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,345 @@
{
"Version": 4,
"UartProjects": [
{
"Name": "LT00",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "Y:\\linuxOS_MC3302\\downloadtool\\MolDownloadV4.0.0.5\\Image\\u-boot-pdl-header.img",
"StartAddress": "0x27000000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "Y:\\linuxOS_MC3302\\downloadtool\\MolDownloadV4.0.0.5\\Image\\u-boot-sdl.bin",
"MediumType": "NAND",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "Y:\\linuxOS_MC3302\\downloadtool\\MolDownloadV4.0.0.5\\Image\\u-boot-spl-header.img",
"StartAddress": "0x41000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 2,
"FileName": "Y:\\linuxOS_MC3302\\downloadtool\\MolDownloadV4.0.0.5\\Image\\u-boot.bin",
"StartAddress": "0x43000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 3,
"FileName": "Y:\\linuxOS_MC3302\\downloadtool\\MolDownloadV4.0.0.5\\Image\\zImage-dtb",
"StartAddress": "0x43000000",
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY10d\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x34100000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY10d\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY10d\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
},
{
"Name": "FY00",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY00\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x34100000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY00\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY00\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY02\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x38a00000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY02\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY02\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
}
],
"TftpNorProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage-dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0x80000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0xa80000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10d\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY10d\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY00",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY00\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY00\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xaA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
}
],
"TftpNandProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage",
"StartAddress": "0x81000000",
"FlashAddress": "0x80000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0xa80000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10D\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10D\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
}
],
"TftpEmmcProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage",
"StartAddress": "0x81000000",
"EmmcAddress": "0x80000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"EmmcAddress": "0xa80000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY10D\\kernel\\zImage",
"StartAddress": "0x41000000",
"EmmcAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10D\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"EmmcAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"EmmcAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"EmmcAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
}
]
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MolDownload.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MolDownload.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="./Log/" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd&quot;.log&quot;" />
<staticLogFileName value="false" />
<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>-->
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%-5level] [%thread] - %message%newline" />
</layout>
<Encoding value="utf-8" />
</appender>
</log4net>
<applicationSettings>
<MolDownload.Properties.Settings>
<setting name="LogKeepDays" serializeAs="String">
<value>7</value>
</setting>
<setting name="BaudRate" serializeAs="String">
<value>115200</value>
</setting>
<setting name="ModifyBaudRate" serializeAs="String">
<value>1500000</value>
</setting>
<setting name="DataBits" serializeAs="String">
<value>8</value>
</setting>
<setting name="Parity" serializeAs="String">
<value>无</value>
</setting>
<setting name="StopBits" serializeAs="String">
<value>1</value>
</setting>
<setting name="Handshake" serializeAs="String">
<value>无</value>
</setting>
<setting name="SerialPortResponseTimeout" serializeAs="String">
<value>6000</value>
</setting>
<setting name="SerialPortMaxBufferLength" serializeAs="String">
<value>1024</value>
</setting>
<setting name="SerialPortWriteOneMillionBytesToFlashTime" serializeAs="String">
<value>1</value>
</setting>
<setting name="SerialPortHandshakeInterval" serializeAs="String">
<value>10</value>
</setting>
<setting name="LastDownloadType" serializeAs="String">
<value>0</value>
</setting>
<setting name="LastSerialPortNames" serializeAs="String">
<value />
</setting>
<setting name="LastSerialPortProjectName" serializeAs="String">
<value>LT00</value>
</setting>
<setting name="ReadWriteTimeout" serializeAs="String">
<value>500</value>
</setting>
<setting name="ReadWriteInterval" serializeAs="String">
<value>10</value>
</setting>
<setting name="ResponseTryCount" serializeAs="String">
<value>-1</value>
</setting>
<setting name="ResponseTryInterval" serializeAs="String">
<value>100</value>
</setting>
<setting name="HandshakeTryCount" serializeAs="String">
<value>3</value>
</setting>
<setting name="BoardIPAddress" serializeAs="String">
<value>10.0.1.234</value>
</setting>
<setting name="BoardSubnetMask" serializeAs="String">
<value>255.255.255.0</value>
</setting>
<setting name="BoardGateway" serializeAs="String">
<value>10.0.3.254</value>
</setting>
<setting name="BoardMacAddress" serializeAs="String">
<value>02:a1:a2:a3:a4:a5</value>
</setting>
<setting name="BoardResponseTimeout" serializeAs="String">
<value>60000</value>
</setting>
<setting name="BoardRequestCheckUboot" serializeAs="String">
<value>Hit any key to stop autoboot</value>
</setting>
<setting name="BoardWriteFlashProgressCount" serializeAs="String">
<value>9</value>
</setting>
<setting name="LastTftpMediumType" serializeAs="String">
<value>NOR</value>
</setting>
<setting name="LastTftpNorProjectName" serializeAs="String">
<value />
</setting>
<setting name="LastTftpNandProjectName" serializeAs="String">
<value />
</setting>
<setting name="LastTftpNandPageSizeEccType" serializeAs="String">
<value />
</setting>
<setting name="LastTftpNandOobSize" serializeAs="String">
<value>128</value>
</setting>
<setting name="LastTftpNandBlockSize" serializeAs="String">
<value />
</setting>
<setting name="LastTftpNandSplImageFlag" serializeAs="String">
<value>False</value>
</setting>
<setting name="LastTftpNandSplWithUboot" serializeAs="String">
<value>False</value>
</setting>
<setting name="LastTftpNandSplCopys" serializeAs="String">
<value>0</value>
</setting>
<setting name="LastTftpEmmcProjectName" serializeAs="String">
<value />
</setting>
</MolDownload.Properties.Settings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<userSettings>
<MolDownload.Properties.Settings>
<setting name="LastTftpNandTargetPath" serializeAs="String">
<value />
</setting>
</MolDownload.Properties.Settings>
</userSettings>
<system.web>
<trust level="Full" />
<webControls clientScriptsLocation="/aspnet_client/{0}/{1}/" />
</system.web>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,390 @@
【MolDownload.exe.config 界面未提供的配置信息】
01. 串口模式响应超时时间:单位毫秒
<setting name="SerialPortResponseTimeout" serializeAs="String">
<value>1500</value>
</setting>
02. 串口模式握手命令重发间隔:单位毫秒
<setting name="SerialPortHandshakeInterval" serializeAs="String">
<value>10</value>
</setting>
03. TFTP 模式检查 Uboot 状态的请求命令:填写表示检查,不填写则表示不检查
<setting name="BoardRequestCheckUboot" serializeAs="String">
<value>Hit any key to stop autoboot</value>
</setting>
04. TFTP 模式响应超时时间:单位毫秒
<setting name="BoardResponseTimeout" serializeAs="String">
<value>60000</value>
</setting>
[注]
1. 以上配置一般为研发人员修改,普通用户无需修改。
2. 其余未说明的配置要么在界面上提供并配说明,要么不可以修改。
--------------------------------------------------------------------------------
【DownloadConfig.json】
默认配置文件,在 Config 目录下JSON 格式,举例说明如下:
Version版本号不可编辑
UartProjects串口项目列表不可编辑
TftpNorProjectsTFTP NOR 项目列表,不可编辑
TftpNandProjectsTFTP NAND 项目列表,不可编辑
TftpNandProjectsTFTP EMMC 项目列表,不可编辑
Name项目名可编辑
StartAddressLength起始地址长度十进制可编辑单位字节默认为 4
Files文件列表不可编辑
FileType文件类型PDL、SDL、自定义之一可编辑仅串口模式用
FileId文件 ID可编辑仅串口模式用
FileName文件名不含路径可编辑
MediumType介质类型NOR、NAND、EMMC、SDIO 之一,可编辑
StartAddress起始地址十六进制可编辑
FlashAddressFlash 地址,十六进制,可编辑,仅 TFTP 模式用
EmmcAddressEMMC 地址,十六进制,可编辑,仅 TFTP 模式用
FillMemoryValue填充内存值可编辑仅 TFTP 模式用
SpiInfoSPI 信息,可编辑,仅 TFTP NOR 模式用
Selectedtrue=下载false=不需要下载,可编辑;串口模式下 FileType 为 PDL、SDL 时 Selected 必须为 trueTFTP 模式下 PDL、SDL 不做必选要求
文件可以使用相对路径(相对应配置文件的路径)或绝对路径。
{
"Version": 4,
"UartProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY10\\boot1\\u-boot-pdl-header.img",
"StartAddress": "0x38b00000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY10\\boot1\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x80000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY10\\boot1\\u-boot-with-spl.img",
"StartAddress": "0x81000000",
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY10d\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x34100000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY10d\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY10d\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
},
{
"Name": "FY00",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY00\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x34100000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY00\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY00\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"Files": [
{
"FileType": "PDL",
"FileId": 0,
"FileName": "FY02\\boot\\u-boot-pdl-header.img",
"StartAddress": "0x38a00000",
"Selected": true
},
{
"FileType": "SDL",
"FileId": 0,
"FileName": "FY02\\boot\\u-boot-sdl.bin",
"MediumType": "NOR",
"StartAddress": "0x40000000",
"Selected": true
},
{
"FileType": "IMG",
"FileId": 1,
"FileName": "FY02\\boot\\u-boot-with-spl.img",
"StartAddress": "0x41000000",
"Selected": true
}
]
}
],
"TftpNorProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage-dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0x80000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0xa80000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY10d\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY10d\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY00",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY00\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY00\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xaA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"SpiInfo": 0,
"Selected": true
}
]
}
],
"TftpNandProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage",
"StartAddress": "0x81000000",
"FlashAddress": "0x80000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"FlashAddress": "0xa80000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY10D\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10D\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"FlashAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"FlashAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"FlashAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
}
],
"TftpEmmcProjects": [
{
"Name": "FY10",
"StartAddressLength": 4,
"EmmcAddressLength": 4,
"Files": [
{
"FileName": "FY10\\kernel\\zImage",
"StartAddress": "0x81000000",
"EmmcAddress": "0x80000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10\\kernel\\molchip.dtb",
"StartAddress": "0x81000000",
"EmmcAddress": "0xa80000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY10D",
"StartAddressLength": 4,
"EmmcAddressLength": 4,
"Files": [
{
"FileName": "FY10D\\kernel\\zImage",
"StartAddress": "0x41000000",
"EmmcAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY10D\\kernel\\molchip-kernel.dtb",
"StartAddress": "0x41000000",
"EmmcAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
},
{
"Name": "FY02",
"StartAddressLength": 4,
"EmmcAddressLength": 4,
"Files": [
{
"FileName": "FY02\\kernel\\zImage",
"StartAddress": "0x41000000",
"EmmcAddress": "0xA0000",
"FillMemoryValue": 255,
"Selected": true
},
{
"FileName": "FY02\\kernel\\molchip-v2p-chip-fy02.dtb",
"StartAddress": "0x41000000",
"EmmcAddress": "0xAA0000",
"FillMemoryValue": 255,
"Selected": true
}
]
}
]
}

View File

@ -0,0 +1,231 @@
[MolDownload.exe V4.0.0.5]
01. 串口超时时间改成默认 6000ms。
02. 只有 USB 下载时才增加介质类型。
03. 修正介质类型和 image id 比特位反了的 BUG。
[MolDownload.exe V4.0.0.4]
01. SDL 增加的介质改到工具栏上。
[MolDownload.exe V4.0.0.3]
01. USB 模式增加 Complete info command。
02. SDL 增加介质配置。
03. DownloadConfig.json 中增加 MediumType 字段配置。
[MolDownload.exe V4.0.0.2]
01. 增加握手信号无法发送后跳过当前下载的功能。
[MolDownload.exe V4.0.0.1]
01. 修改握手超时的 BUG。
[MolDownload.exe V4.0.0.0]
01. 增加 USB 串口 下载功能。
[MolDownload.exe V3.0.0.32]
01. 修正 BUGTFTP NAND、TFTP EMMC 下载过程收不到数据导致程序崩溃,偶现。
[MolDownload.exe V3.0.0.31]
01. 修正下载 TFTP NOR 没有发 sf probe、sf erase、sf write 命令的 BUG。
02. 修正下载 TFTP NAND 没有发 nand device、nand erase、nand write 命令的 BUG。
03. 修正下载 TFTP EMMC 没有发 mmc info、mmc write 命令的 BUG。
[MolDownload.exe V3.0.0.30]
01. 修正 TFTP 中切换 NOR、NAND、EMMC 导致崩溃的 BUG。
[MolDownload.exe V3.0.0.29]
01. 配置文件 DownloadConfig.json 中每个项目下增加 StartAddressLength 字段,
用于配置地址所占字节数,详细配置参考 《Readme.txt》。
[MolDownload.exe V3.0.0.28]
01. 增加 EMMC 下载。
[MolDownload.exe V3.0.0.27]
01. 主界面的日志列表中增加通道栏。
02. 增加多串口下载。
[MolDownload.exe V3.0.0.26]
01.合并 SPL Image Flag、SPL With Uboot 和制作镜像流程。
[MolDownload.exe V3.0.0.25]
01. 配置文件中的 FileName 改成相对路径。
02. 将“制作 Nand 烧片器镜像”移到主菜单上并修正BUG。
[MolDownload.exe V3.0.0.24]
01. 解决不能正确读取“写数据完成”命令的 BUG。
[MolDownload.exe V3.0.0.23]
01. 调整 IP 地址、子网掩码、网关、MAC 地址编辑框,使得文字垂直居中。
02. 实现 "制作 Nand 烧片器镜像"。
[MolDownload.exe V3.0.0.22]
01. 修正 IP 地址、子网掩码、网关、MAC 地址在部分机器上输入慢的 BUG。
[MolDownload.exe V3.0.0.21]
01. 修正握手一直超时的 BUG。
[MolDownload.exe V3.0.0.20]
01. 重新构建配置文件,将原先 Uart、Tftp 两个配置文件合并到一个文件中,并分成 UartProjects、TftpNorProjects、TftpNandProjects 三个项目组,格式参考 Readme.txt。
02. 增加打开配置文件和另存为配置按钮。
[MolDownload.exe V3.0.0.19]
01. “13 SPI flash detect 命令”增加错误提示:不支持的 flash device 类型。
02. TFTP 下载时,增加 NOR/NAND 选择。
03. TFTP 下载时,增加“制作 Nand 烧片器镜像”界面。
[MolDownload.exe V3.0.0.18]
01. 升级 Newtonsoft.Json.dll 到 V12.0.3.23909。
02. UART 数据发送完成后,增加等待写 flash 完成命令。
[MolDownload.exe V3.0.0.17]
01. 修正打开工具时,选择的是 TFTP 选项,显示不正确的 BUG。
02. 修正未连接 TFTP 服务,点击下载后再取消,取消过程较长的 BUG。
[MolDownload.exe V3.0.0.16]
01. 下载过程中标题栏增加“正在下载”。
02. 合并波特率设置。
03. 增加项目配置。
[MolDownload.exe V3.0.0.15]
01. 升级 SystemCore.dll 到 V2.0.0.15。
02. 升级 SystemWin.dll 到 V2.0.0.15。
03. 增加自动刷新串口功能。
[MolDownload.exe V3.0.0.14]
01. 升级 SystemCore.dll 到 V2.0.0.13。
02. 升级 SystemWin.dll 到 V2.0.0.13。
03. 下载过程中标题栏增加“正在下载”。
04. 选择串口或 TFTP 时,默认加载 Uart 或 Tftp 目录。
[MolDownload.exe V3.0.0.13]
01. 升级 SystemCore.dll 到 V2.0.0.11。
02. 升级 SystemWin.dll 到 V2.0.0.11。
03. 点击下载前,刷新下载列表,确保下载的是最新的文件。
04. TFTP 下载时,发送 TFTP 命令传输要发送的文件后,如果一直未收到下载请求,发送回车空格命令。
[MolDownload.exe V3.0.0.12]
01. 升级 SystemCore.dll 到 V2.0.0.7。
02. 升级 SystemWin.dll 到 V2.0.0.7。
03. 修正修改波特率失败导致的崩溃,界面 LOG 增加修改失败提示。
[MolDownload.exe V3.0.0.11]
01. 升级 SystemCore.dll 到 V2.0.0.4。
02. 升级 SystemWin.dll 到 V2.0.0.4。
03. 鼠标经过文件名单元格时,增加提示对应文件的修改时间功能。
04. 增加保存 IP 信息到配置文件的功能。
[MolDownload.exe V3.0.0.10]
01. 升级 SystemCore.dll 到 V2.0.0.1。
02. 升级 SystemWin.dll 到 V2.0.0.1。
03. 引入 AddressBox.dll V1.0.0.0。
04. Board 信息框移到工具栏下面。
05. Board 信息框在下载中改成不可编辑。
06. 修改 Board 信息输入框在 Delete 按键时的 BUG。
07. MolDownload.exe.config 中 BoardResponseProgressCount 改成 BoardWriteFlashProgressCount。
08. 重新构建进度条。
[MolDownload.exe V3.0.0.9]
01. 升级 SystemCore.dll 到 V2.0.0.0。
02. 升级 SystemWin.dll 到 V2.0.0.0。
03. MolDownload.exe.config 中串口模式握手命令重发间隔SerialPortHandshakeInterval 修改成 10 毫秒。
04. MolDownload.exe.config 中读取每个文件的进度条次数BoardResponseProgressCount 修改成 9。
05. 修改在下载过程中菜单图标为灰度显示。
06. 修正工具启动时为最大化。
07. Board 信息从属性设置界面移到主界面。
[MolDownload.exe V3.0.0.8]
01. 串口 模式下不显示FLASH 地址、内存填充值、SPI 信息。
02. TFTP 模式下不显示:文件类型、文件 ID。
03. 下载列表中增加增加、删除按钮,表格中的数据改成可编辑。
04. 删除工具栏中的增加、删除按钮。
05. 下载列表中的选择文件改成图标。
06. TFTP 模式下增加读取进度条命令。
07. MolDownload.exe.config 中增加 BoardResponseProgressCount用于配置读取每个文件的进度条次数。
[MolDownload.exe V3.0.0.7]
01. 修正 TFTP 模式响应超时时间不起作用的 BUG。
[MolDownload.exe V3.0.0.6]
01. 修正 MolDownload.exe.config 中 ResponseTimeout 配置被工具修改成默认值的 BUG。
02. 下载失败时增加弹框提示。
03. 修正取消卡死的 BUG。
04. 超时时间分串口模式响应超时时间默认1500毫秒和 TFTP 模式响应超时时间默认60000毫秒分别在属性设置界面的串口设置和 TFTP Board 中。
05. 现在所有的配置都通过属性设置界面来设置,不需要手工改配置文件。
[MolDownload.exe V3.0.0.5]
01. 修改串口只在下载过程中打开,下载完后关闭串口。
[MolDownload.exe V3.0.0.4]
01. TFTP 下载增加 CRC 校验。
02. 增加“结束下载”的提示。
03. 优化进度条显示。
[MolDownload.exe V3.0.0.3]
01. MolDownload.exe.config 增加 BoardRequestCheckUboot 配置:如果填写了,则检查 Uboot如果没有填写则不检查。
[MolDownload.exe V3.0.0.2]
01. TFTP Board 配置增加默认值。
02. 在 TFTP Board 配置界面增加 CRC 等待时间。
03. MAC 地址分隔符由 - 改成 :。
[MolDownload.exe V3.0.0.1]
01. 引入 SystemCrc.dll V2.0.0.0。
02. 完善 TFTP 下载。
[MolDownload.exe V3.0.0.0]
01. 根据新的 TFTP 协议重新构建 TFTP 下载。
[MolDownload.exe V2.0.0.3]
01. 增加文件中的“...”改成“打开”。
[MolDownload.exe V2.0.0.2]
01. 改进进度条显示。
02. 界面增加文件增加、删除功能。
03. 主菜单图标更换。
[MolDownload.exe V2.0.0.1]
01. 修正 TFTP 下载失败却提示成功的 BUG。
02. 去掉 TFTP 下载时需要配置 PDL、SDL 的限制。
03. 去掉串口下载时需要配置 Board 的限制。
[MolDownload.exe V2.0.0.0]
01. 升级 SystemCore.dll 到 V2.0.0.0。
02. 升级 SystemWin.dll 到 V2.0.0.0。
03. 引入 Tftp.Net.dll V1.1.0.0。
04. 增加 TFTP 下载功能。其中 PC 端作为客户端主动上传数据到 Board。
[MolDownload.exe V1.0.0.9]
01. DownloadConfig.json 增加文件ID字段FileId整数类型。
02. 属性设置 -> 端口设置 中增加“写1M字节到Flash时间(纳秒)”,作为等待 Flash 写完用。
03. 非 PDL、SDL 去掉 Execute 命令。
[MolDownload.exe V1.0.0.8]
01. 界面上“打开文件”改成“选择文件”。
02. 修正 PDL、SDL 下载完后又下载 PDL 的 BUG。
[MolDownload.exe V1.0.0.7]
01. 界面增加单独选择文件功能。
[MolDownload.exe V1.0.0.6]
01. 去掉 ROM。
02. 增加高级设置:变更波特率。
[MolDownload.exe V1.0.0.5]
01. 增加三级ROM、PDL、SDL下载功能。
02. 增加修改波特率功能。
[MolDownload.exe V1.0.0.4]
01. 握手改成持续发送 3 个 7E直到握手成功。
[MolDownload.exe V1.0.0.3]
01. 握手字节改成 9 个 7E。
[MolDownload.exe V1.0.0.2]
01. 编写 Readme.txt。
02. 整理代码。
[MolDownload.exe V1.0.0.1]
01. MolDownload.exe.config 中增加握手 7E 发送间隔单位毫秒HandshakeInterval。
[MolDownload.exe V1.0.0.0]
01. 初版。
02. 引入 SystemCore.dll V1.0.0.10。
03. 引入 SystemWin.dll V1.0.0.10。

Binary file not shown.

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,744 @@
#include "include/mol_lcm_local.h"
#include "include/dsi_com_param.h"
#include "include/mol_lcm.h"
#define LCM_WIDTH 800
#define LCM_HEIGHT 1280
#define LCM_DEBUG 1
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info;
// static dsi_setting_tab_t __er88577b_6hc1017b7e_init_setting[] = {
// {DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
// {DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
// {DSI_DI_END_OF_TABLE, 0x00, {0x00}}
// };
static dsi_setting_tab_t qua_lcm_mipi_er88577b_6hc1017b7e_init_setting[] = {
#if 0
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xB1,0x10,0x01,0x47,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xB2,0x0C,0x14,0x04,0x50,0x50,0x14}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB3,0x56,0x53,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB4,0x33,0x30,0x04}},
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00, 0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB8,0x05,0x12,0x29,0x49,0x48}},
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00, 0xB9,0x7C,0x65,0x55,0x49,0x46,0x36,0x3B,0x24,0x3D,0x3C,0x3D,0x5C,0x4C,0x55,0x47,0x46,0x39,0x26,0x06,0x7C,0x65,0x55,0x49,0x46,0x36,0x3B,0x24,0x3D,0x3C,0x3D,0x5C,0x4C,0x55,0x47,0x46,0x39,0x26,0x06}},
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00, 0xC0,0xFF,0x87,0x12,0x34,0x44,0x44,0x44,0x44,0x98,0x04,0x98,0x04,0x0F,0x00,0x00,0xC1}},
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xC1,0x54,0x94,0x02,0x85,0x9F,0x00,0x7F,0x00,0x54,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00, 0xC2,0x17,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xFF,0x18,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC3,0x86,0x46,0x05,0x05,0x1C,0x1C,0x1D,0x1D,0x02,0x1F,0x1F,0x1E,0x1E,0x0F,0x0F,0x0D,0x0D,0x13,0x13,0x11,0x11,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC4,0x07,0x07,0x04,0x04,0x1C,0x1C,0x1D,0x1D,0x02,0x1F,0x1F,0x1E,0x1E,0x0E,0x0E,0x0C,0x0C,0x12,0x12,0x10,0x10,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xC6,0x2A,0x2A}},
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xCA,0xCB,0x43}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xCD,0x0E,0x4B,0x4B,0x20,0x19,0x6B,0x06,0xB3}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xD2,0xE1,0x2B,0x38,0x08}},
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00, 0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xE6,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xF0,0x12,0x03,0x20,0x00,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
{DSI_DI_DELAY, 120, {0x00}},
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
{DSI_DI_DELAY, 20, {0x00}},
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
#endif
#if 1
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE0,0xAB,0xBA}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xE1,0xBA,0xAB}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x10,0x01,0x47,0xFF}},
//{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xB1,0x11,0x01,0x47,0xFF}}, //BIST
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xB2,0x0C,0x14,0x04,0x50,0x50,0x14}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB3,0x56,0x53,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00,0xB4,0x33,0x30,0x04}},
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00,0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xB8,0x05,0x12,0x29,0x49,0x48}},
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00,0xB9,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06,0x7C,0x61,0x4F,0x42,0x3E,0x2D,0x31,0x1A,0x33,0x33,0x33,0x52,0x40,0x47,0x38,0x34,0x26,0x0E,0x06}},
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00,0xC0,0xCC,0x76,0x12,0x34,0x44,0x44,0x44,0x44,0x98,0x04,0x98,0x04,0x0F,0x00,0x00,0xC1}},
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00,0xC1,0x54,0x94,0x02,0x85,0x9F,0x00,0x6F,0x00,0x54,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00,0xC2,0x17,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xFF,0x18,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC3,0x87,0x47,0x05,0x05,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F,0x0D,0x0D,0x13,0x13,0x11,0x11,0x24}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00,0xC4,0x06,0x06,0x04,0x04,0x1C,0x1C,0x1D,0x1D,0x02,0x1E,0x1E,0x1F,0x1F,0x0E,0x0E,0x0C,0x0C,0x12,0x12,0x10,0x10,0x24}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xC6,0x2A,0x2A}},
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00,0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00,0xCA,0xCB,0x43}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xCD,0x0E,0x4B,0x4B,0x20,0x19,0x6B,0x06,0xB3}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00,0xD2,0xE1,0x2B,0x38,0x08}},
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00,0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00,0xE6,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00,0xF0,0x12,0x03,0x20,0x00,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
{DSI_DI_DELAY, 120, },
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
{DSI_DI_DELAY, 20, },
{DSI_DI_END_OF_TABLE, 0x00, {0}}
#endif
#if 0
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE0,0xAB,0xBA}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xE1,0xBA,0xAB}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xE7,0x00,0x00,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xB1,0x10,0x01,0x7F,0x18}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB2,0x0C,0x10,0x04,0x50,0x50,0x14}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB3,0x56,0xD3,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x06, {0x04,0x00, 0xB4,0x33,0x30,0x04}},
{DSI_DI_DCS_WRITE_LONG, 0x0A, {0x08,0x00, 0xB6,0xB0,0x00,0x00,0x10,0x00,0x10,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xB8,0x05,0x12,0x29,0x49,0x48}},
{DSI_DI_DCS_WRITE_LONG, 0x29, {0x27,0x00, 0xB9,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06,0x7C,0x64,0x53,0x48,0x45,0x38,0x3E,0x27,0x41,0x40,0x40,0x5E,0x4E,0x57,0x49,0x47,0x3B,0x2A,0x06}},
{DSI_DI_DCS_WRITE_LONG, 0x13, {0x11,0x00, 0xC0,0x32,0x45,0xB4,0x54,0x66,0x66,0x44,0x44,0x80,0x04,0x7C,0x04,0x3F,0x00,0x00,0xC1}},
{DSI_DI_DCS_WRITE_LONG, 0x0D, {0x0B,0x00, 0xC1,0x34,0x94,0x02,0x8F,0x80,0x00,0x7C,0x00,0x54,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0F, {0x0D,0x00, 0xC2,0x33,0x09,0x08,0x89,0x08,0x11,0x22,0x20,0x44,0xBB,0x18,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC3,0xA4,0x64,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x24}},
{DSI_DI_DCS_WRITE_LONG, 0x19, {0x17,0x00, 0xC4,0x24,0x24,0x08,0x07,0x06,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x04,0x05,0x02,0x02,0x02,0x02,0x02,0x02,0x02}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xC6,0x40,0x40}},
{DSI_DI_DCS_WRITE_LONG, 0x09, {0x07,0x00, 0xC8,0x21,0x00,0x31,0x42,0x34,0x16}},
{DSI_DI_DCS_WRITE_LONG, 0x05, {0x03,0x00, 0xCA,0xCB,0x43}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xCD,0x0E,0x6E,0x6E,0x22,0x19,0x6B,0x06,0xB3}},
{DSI_DI_DCS_WRITE_LONG, 0x07, {0x05,0x00, 0xD2,0xE1,0x2B,0x38,0x08}},
{DSI_DI_DCS_WRITE_LONG, 0x0E, {0x0C,0x00, 0xD4,0x00,0x01,0x00,0x0E,0x04,0x44,0x08,0x10,0x00,0x00,0x00}},
{DSI_DI_DCS_WRITE_LONG, 0x0B, {0x09,0x00, 0xE6,0x80,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x08, {0x06,0x00, 0xF0,0x12,0x03,0x20,0x00,0xFF}},
{DSI_DI_DCS_WRITE_LONG, 0x04, {0x02,0x00, 0xF3,0x00}},
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x11}},
{DSI_DI_DELAY, 120, {0x00}},
{DSI_DI_DCS_WRITE_0_PARAM, 1, {0x29}},
{DSI_DI_DELAY, 20, {0x00}},
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
#endif
#if 0
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x00}},
{DSI_DI_DELAY, 30, {0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE1, 0x93}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE2, 0x65}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE3, 0xF8}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x01}}, //{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x01}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x01}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x48}}, // 0x3B,0X41~0X48
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0C, 0x74}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x17, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x18, 0xAF}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x19, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1A, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1B, 0xAF}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1C, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x26}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x09}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x38, 0x04}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x39, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3A, 0x01}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3C, 0x78}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3D, 0xFF}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3E, 0xFF}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3F, 0x7F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x40, 0x06}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x41, 0xA0}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x42, 0x81}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x43, 0x14}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x44, 0x23}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x45, 0x28}},
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2,{0x4A,0x35}}, //bist mode
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2,{0x4B,0x04}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x55, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x57, 0x69}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x59, 0x0A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5A, 0x2A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5B, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5D, 0x7F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5E, 0x69}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5F, 0x59}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x60, 0x4C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x61, 0x47}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x62, 0x39}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x63, 0x3B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x64, 0x24}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x65, 0x3D}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x66, 0x3C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x67, 0x3C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x68, 0x5A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x69, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6A, 0x4A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6B, 0x43}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6C, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6D, 0x20}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6E, 0x0F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6F, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x70, 0x7F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x71, 0x69}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x72, 0x59}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x73, 0x4C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x74, 0x47}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x75, 0x39}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x76, 0x3B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x77, 0x24}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x78, 0x3D}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x79, 0x3C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7A, 0x3C}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7B, 0x5A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7C, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7D, 0x4A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7E, 0x43}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7F, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x80, 0x20}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x81, 0x0F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x82, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x42}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x01, 0x42}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x02, 0x40}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x03, 0x40}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x04, 0x5E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x05, 0x5E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x06, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x07, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x08, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x09, 0x57}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0A, 0x57}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0B, 0x77}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0C, 0x77}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0D, 0x47}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0E, 0x47}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0F, 0x45}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x10, 0x45}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x11, 0x4B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x12, 0x4B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x13, 0x49}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x14, 0x49}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x15, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x16, 0x41}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x17, 0x41}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x18, 0x40}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x19, 0x40}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1A, 0x5E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1B, 0x5E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1C, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1D, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1E, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x1F, 0x57}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x20, 0x57}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x21, 0x77}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x22, 0x77}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x23, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x24, 0x46}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x25, 0x44}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x26, 0x44}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x27, 0x4A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x28, 0x4A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x29, 0x48}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2A, 0x48}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2B, 0x5F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2C, 0x01}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2D, 0x01}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2E, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x2F, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x30, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x31, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x32, 0x1E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x33, 0x1E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x34, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x37}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x38, 0x37}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x39, 0x08}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3A, 0x08}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3B, 0x0A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3C, 0x0A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3D, 0x04}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3E, 0x04}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x3F, 0x06}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x40, 0x06}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x41, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x42, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x43, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x44, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x45, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x46, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x47, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x48, 0x1E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x49, 0x1E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4A, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4B, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4C, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4D, 0x37}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4E, 0x37}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4F, 0x09}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x50, 0x09}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x51, 0x0B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x52, 0x0B}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x53, 0x05}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x54, 0x05}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x55, 0x07}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x56, 0x07}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x57, 0x1F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x58, 0x40}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5B, 0x30}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5C, 0x16}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5D, 0x34}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5E, 0x05}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x5F, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x63, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x64, 0x6A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x67, 0x73}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x68, 0x1D}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x69, 0x08}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6A, 0x6A}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6B, 0x08}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6C, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6D, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6E, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x6F, 0x88}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x75, 0xFF}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x77, 0xDD}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x78, 0x3F}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x79, 0x15}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7A, 0x17}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7D, 0x14}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x7E, 0x82}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x04}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x00, 0x0E}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x02, 0xB3}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x09, 0x61}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x0E, 0x48}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x49}}, //mark
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x37, 0x58}}, //mark
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE6, 0x02}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE7, 0x0C}},
#ifdef CONFIG_QUA_LOGO_MIPI_JD9365D_FLIP_H_V
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x36, 0x03}},
#endif
{DSI_DI_GENERIC_WRITE_0_PARAM, 1, {0x11}},
{DSI_DI_DELAY, 240, {0x00}},
/* bist mode */
//{DSI_DI_DELAY, 254, {0x00}},
//{DSI_DI_DELAY, 254, {0x00}},
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x01}},
//{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x4A, 0xB0}}, // bist
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0xE0, 0x00}},
{DSI_DI_GENERIC_WRITE_0_PARAM, 1, {0x29}},
{DSI_DI_DELAY, 5, {0x00}},
{DSI_DI_GENERIC_WRITE_1_PARAM, 2, {0x35, 0x00}},
{DSI_DI_END_OF_TABLE, 0x00, {0x00}}
#endif
};
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL
static int32_t _pwron_1st_exited_flag = 0;
static int32_t _pwron_2nd_exited_flag = 0;
static int32_t qua_lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
#if LCM_DEBUG
printf("%s e\n",__FUNCTION__);
printf("%s:%d\n",__FUNCTION__,__LINE__);
#endif
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
if((lcmHandle->lcm_probe.lcm_id == 0 && _pwron_1st_exited_flag == 0) ||
(lcmHandle->lcm_probe.lcm_id == 1 && _pwron_2nd_exited_flag == 0)) {
printf("%s:%d lcmHandle->lcm_id=%d\n",__func__,__LINE__, lcmHandle->lcm_id);
extern int qua_lcm_mipi_er88577b_hrst(int lcm_id);
qua_lcm_mipi_er88577b_hrst(lcmHandle->lcm_probe.lcm_id);
}
if(lcmHandle->lcm_probe.lcm_id == 0) _pwron_1st_exited_flag = 1;
if(lcmHandle->lcm_probe.lcm_id == 1) _pwron_2nd_exited_flag = 1;
printf("%s:%d - 01\n",__func__,__LINE__);
extern int qua_lcm_mipi_er88577b_bkl(void);
qua_lcm_mipi_er88577b_bkl();
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
#if LCM_DEBUG
printf("%s x\n",__FUNCTION__);
#endif
return rtn;
}
static int32_t _identify_1st_exited_flag = 0;
static int32_t _identify_2nd_exited_flag = 0;
static int32_t _identify_lcm_idenfy_flag = 0;
static int32_t _identify_lcm_idenfy_virt = 0;
extern int qua_lcm_mipi_er88577b_rst(int lcm_id);
extern void qua_set_lcm_bootargs(int value);
extern uint32_t dsi_mipi_get_err_code(void);
static int qua_lcm_mipi_er88577b_identify_entity(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
uint8_t read_buf[4] = {0};
int count = 3;
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
printf("%s e\n",__FUNCTION__);
return 0;
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, __er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(__er88577b_6hc1017b7e_init_setting));
// if(rtn) {
// printf("%s push_table failed.\n", __func__);
// }
while(count){
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_probe.lcm_id, DSI_DI_DCS_READ_0_PARAM, 0x04, 1, read_buf);
printf("%s %d: 0x%x 0x%x 0x%x\n",__func__, lcmHandle->lcm_probe.lcm_id, read_buf[0], read_buf[1], read_buf[2]);
if (rtn) {
printf("%s dcs_read id failed.\n", __func__);
return -1;
}
// if(read_buf[0] == 0x93 || (read_buf[0] == 0xE8 && read_buf[1] == 0x85 && read_buf[2] == 0x76)) {
// printf("%s identify sucess.\n", __func__);
// _identify_lcm_idenfy_flag |= (1 << lcmHandle->lcm_probe.lcm_id);
// qua_set_lcm_bootargs(_identify_lcm_idenfy_flag);
// return 0;
// }
rtn = ops->ctrl_fun.mipi.dcs_read(lcmHandle->lcm_probe.lcm_id, DSI_DI_DCS_READ_0_PARAM, 0xC6, 1, read_buf);
printf("%s %d: 0x%x 0x%x 0x%x\n",__func__, lcmHandle->lcm_probe.lcm_id, read_buf[0], read_buf[1], read_buf[2]);
if (rtn) {
printf("%s dcs_read id failed.\n", __func__);
return -1;
}
ops->delayMs(2);
count--;
if (count == 0) {
printf("%s identify timeout failed.\n", __func__);
return -2;
}
}
return 0;
}
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
#if LCM_DEBUG
printf("%s:%d\n", __func__, __LINE__);
#endif
lcmHandle->lcm_id = lcmHandle->lcm_probe.lcm_id;
if(lcmHandle->lcm_probe.lcm_id == 0 && _identify_1st_exited_flag) return 0;
if(lcmHandle->lcm_probe.lcm_id == 1 && _identify_2nd_exited_flag) return 0;
if(lcmHandle->lcm_probe.lcm_id == 0) _identify_1st_exited_flag = 1;
if(lcmHandle->lcm_probe.lcm_id == 1) _identify_2nd_exited_flag = 1;
/* first identify */
rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
_identify_lcm_idenfy_virt |= (1 << lcmHandle->lcm_probe.lcm_id);
qua_set_lcm_bootargs(_identify_lcm_idenfy_virt);
if(rtn) {
printf("%s identify_entity failed.\n", __func__);
goto __err_exit;
}
printf("%s:%d\n", __func__, __LINE__);
return 0;
// /* second identify */
// __err_srst:
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, lcm_mipi_jd9365d_swrst_setting, ARRAY_SIZE(lcm_mipi_jd9365d_swrst_setting));
// if(rtn) {
// printf("%s push_table failed.\n", __func__);
// goto __err_hrst;
// }
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
// if(rtn) {
// printf("%s identify_entity failed.\n", __func__);
// goto __err_hrst;
// }
// return 0;
// /* third identify */
// __err_hrst:
// qua_lcm_mipi_er88577b_rst(lcmHandle->lcm_probe.lcm_id);
// ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
// ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
// if(rtn) {
// printf("%s identify_entity failed.\n", __func__);
// goto __err_frst;
// }
// return 0;
// /* fourth identify */
// __err_frst:
// qua_lcm_mipi_er88577b_rst(lcmHandle->lcm_probe.lcm_id);
// ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
// ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
// rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, lcm_mipi_jd9365d_swrst_setting, ARRAY_SIZE(lcm_mipi_jd9365d_swrst_setting));
// rtn = qua_lcm_mipi_er88577b_identify_entity(param, ops);
// if(rtn) {
// printf("%s identify_entity failed.\n", __func__);
// goto __err_exit;
// }
// return 0;
__err_exit:
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
//ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, qua_lcm_mipi_er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(qua_lcm_mipi_er88577b_6hc1017b7e_init_setting));
return 0;
}
#else /*CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL*/
static int32_t qua_lcm_mipi_er88577b_PowerOn(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
#if LCM_DEBUG
printf("%s e\n",__func__);
#endif
extern int qua_lcm_mipi_er88577b_bkl(void);
qua_lcm_mipi_er88577b_bkl();
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
#if LCM_DEBUG
printf("%s x\n",__func__);
#endif
return rtn;
}
static int32_t qua_lcm_mipi_er88577b_identify(void * param, lcm_ops *ops)
{
#if LCM_DEBUG
printf("%s e\n",__func__);
#endif
#if LCM_DEBUG
printf("%s x\n",__func__);
#endif
return 0;
}
#endif /*CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL*/
static int32_t qua_lcm_mipi_er88577b_PowerOff(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
#if LCM_DEBUG
printf("%s:%d\n",__FUNCTION__,__LINE__);
#endif
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
#if LCM_DEBUG
printf("%s\n",__func__);
#endif
return rtn;
}
static int32_t qua_lcm_mipi_er88577b_deinit(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
#if LCM_DEBUG
printf("%s:%d\n",__FUNCTION__,__LINE__);
#endif
rtn = qua_lcm_mipi_er88577b_PowerOff(param, ops);
return rtn;
}
static int32_t qua_lcm_mipi_er88577b_init(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
lcm_handle_t *lcmHandle = (lcm_handle_t *)param;
#if LCM_DEBUG
printf("%s:%d\n",__FUNCTION__,__LINE__);
printf("%s lcm_id:%d\n",__FUNCTION__,lcmHandle->lcm_id);
#endif
rtn = ops->ctrl_fun.mipi.push_tab(lcmHandle->lcm_id, qua_lcm_mipi_er88577b_6hc1017b7e_init_setting, ARRAY_SIZE(qua_lcm_mipi_er88577b_6hc1017b7e_init_setting));
#if LCM_DEBUG
printf("%s rtn %d\n",__func__,rtn);
#endif
return rtn;
#ifdef CONFIG_QUA_LOGO_MIPI_ER88577B_PWR_CTRL
/* Check the 2nd lcm initial error code and identify flag
** And just assume that the first screen must be existed.
*/
if ((lcmHandle->lcm_id == 1) && ((_identify_lcm_idenfy_flag & 2) == 0)) {
int lcm = 3, err = 0;
err = dsi_mipi_get_err_code();
if (err & 2) lcm = 1;
printf("%s err=%d lcm=%d\n",__func__,err,lcm);
qua_set_lcm_bootargs(lcm);
}
#endif
return rtn;
}
static int32_t qua_lcm_mipi_er88577b_suspend(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
#if LCM_DEBUG
printf("%s:%d\n",__FUNCTION__,__LINE__);
#endif
ops->ctrl_fun.mipi.bus_deinit((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
return rtn;
}
static int32_t qua_lcm_mipi_er88577b_resume(void * param, lcm_ops *ops)
{
int32_t rtn = 0;
#if LCM_DEBUG
printf("%s:%d\n",__FUNCTION__,__LINE__);
#endif
ops->ctrl_fun.mipi.bus_init((void *)param, (void *)&qua_lcm_mipi_er88577b_6hc1017b7e_info);
//rtn = dsi_push_table(lcm_mipi_JD9365D_sleep_out_setting, ARRAY_SIZE(lcm_mipi_JD9365D_sleep_out_setting));
return rtn;
}
lcm_module_fun qua_lcm_mipi_er88577b_ctrl =
{
.poweron = qua_lcm_mipi_er88577b_PowerOn,
.poweroff = qua_lcm_mipi_er88577b_PowerOff,
.identify = qua_lcm_mipi_er88577b_identify,
.init = qua_lcm_mipi_er88577b_init,
.suspend = qua_lcm_mipi_er88577b_suspend,
.resume = qua_lcm_mipi_er88577b_resume,
.deinit = qua_lcm_mipi_er88577b_deinit,
};
static lcm_display_sync_info_t qua_lcm_mipi_er88577b_dp_info =
{
.hor_sync_active = 20,
.hor_back_porch = 80,
.hor_active_pixel = LCM_WIDTH,
.hor_front_porch = 80,
.ver_sync_active = 4,
.ver_back_porch = 12,
.ver_active_line = LCM_HEIGHT,
.ver_front_porch = 20,
};
static dsi_timing_t qua_lcm_mipi_er88577b_timing =
{
/*clk lane timing cfg*/
.clane.mode = 1,
.clane.lp11 = 0,
.clane.lp01 = 16,
.clane.zero = 0x22,
.clane.prepare = 0x7,
.clane.pre = 0x4,
.clane.post = 0x10,
.clane.trail = 0x9,
.clane.inittime = 0x10,
.clane.exit = 0x10,
/*data lane timing cfg*/
.dlane.mode = 1,
.dlane.lp11 = 0,
.dlane.lp01 = 0x10,
.dlane.zero = 13,
.dlane.prepare = 6,
.dlane.trail = 10,
.dlane.inittime = 16,
.dlane.exit = 16,
/*data lane0 read timing cfg*/
.read.mode = 1,
.read.tago = 67,
.read.tasure = 25,
.read.taget = 84,
/*clk cfg*/
.clk = {
.vou.mode = 1,
.vou.sel = 0x3,
.vou.div = 0,
.mif.mode = 1,
.mif.pll_doubler = 0,
.mif.pll_div_s = 1,
.mif.pll_n = 0,
.mif.pll_kint = 3254779,
.mif.pll_nint = 71,
.mif.pixelclk_div = 12,
.mif.pll_pdiv = 1,
.mif.dhd_div = 1,
}
};
static lcm_mipi_info qua_lcm_mipi_er88577b_mipi_info =
{
.work_mode = DSI_VIDEO_MODE,
.lane_num = DSI_TWO_LANE,
.format = DSI_RGB888,
.packet_size = 256,
.timing = (void *)&qua_lcm_mipi_er88577b_timing,
};
const lcm_cfg_t qua_lcm_mipi_er88577b_6hc1017b7e_info =
{
.verder_name = VENDER_NAME,
.name = "qua_dsi_800_1280_60_er88577b_6hc1017b7e",
.width = LCM_WIDTH,
.height = LCM_HEIGHT,
.type = LCM_TYPE_MIPI, /*mcu, rgb, mipi*/
.fps = 60,
.direction = LCM_DIRECT_NORMAL,
.dp_sync = &qua_lcm_mipi_er88577b_dp_info,
.infor = {
.mipi = &qua_lcm_mipi_er88577b_mipi_info,
},
.fun = &qua_lcm_mipi_er88577b_ctrl,
};

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

@ -9,11 +9,6 @@
#include <common.h> #include <common.h>
void qua_boot_logo(void) { void qua_boot_logo(void) {
#ifdef CONFIG_QUA_LOGO_MIPI_HX8729
extern void qua_boot_logo_hx8729(void);
qua_boot_logo_hx8729();
#endif
#ifdef CONFIG_QUA_LOGO_MIPI_JD9365D #ifdef CONFIG_QUA_LOGO_MIPI_JD9365D
extern void qua_boot_logo_jd9365d(void); extern void qua_boot_logo_jd9365d(void);
qua_boot_logo_jd9365d(); qua_boot_logo_jd9365d();
@ -25,4 +20,14 @@ 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
#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(5,6)
#else
#define REG_PIN_MUX_BASE 0x10200000
#define REG_LCD_DE_PIN 0x64
#define REG_LCD_HS_PIN 0x68
#define REG_LCD_VS_PIN 0x6C
#define REG_LCD_D0_PIN 0x74
#define REG_LCD_D1_PIN 0x78
#define REG_LCD_BL_PIN 0xec
#define REG_PIN_DRV_BASE 0x0B100000
#define REG_LCD_DE_DRV 0x28
#define REG_LCD_HS_DRV 0x2C
#define REG_LCD_VS_DRV 0x30
#define REG_LCD_D0_DRV 0x38
#define REG_LCD_D1_DRV 0x3C
#define GPIO_NUM_INDEX(x,y) (8*x + y)
#define GPIO_NUM_LCD_DE GPIO_NUM_INDEX(3,3)
#define GPIO_NUM_LCD_HS GPIO_NUM_INDEX(3,4)
#define GPIO_NUM_LCD_VS GPIO_NUM_INDEX(3,5)
#define GPIO_NUM_LCD_D0 GPIO_NUM_INDEX(3,7)
#define GPIO_NUM_LCD_D1 GPIO_NUM_INDEX(4,0)
#define GPIO_NUM_LCD_BL GPIO_NUM_INDEX(0,5)
#endif
#define PIN_MUX_GPIO_ENABLE (1)
static void __qua_lcm_mipi_er88577b_hrst(unsigned int vci_pin_reg_oft, unsigned int rst_pin_reg_oft,
unsigned int vci_pin_gpio_num, unsigned int rst_pin_gpio_num)
{
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
printf("%s e\n", __func__);
/* power on rst timing gpio */
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + rst_pin_reg_oft);
gpio_request(rst_pin_gpio_num, "rst_gpio");
gpio_direction_output(rst_pin_gpio_num, 0);
gpio_set_value(rst_pin_gpio_num, 0);
/* power on vci timing gpio, 0: on, 1: off */
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + vci_pin_reg_oft);
gpio_request(vci_pin_gpio_num, "vci_gpio");
gpio_direction_output(vci_pin_gpio_num, 1);
gpio_set_value(vci_pin_gpio_num, 1);
mdelay(500);
gpio_set_value(vci_pin_gpio_num, 0);
mdelay(10);
#if 1
/* power on rst timing */
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(10);
gpio_set_value(rst_pin_gpio_num, 0);
mdelay(10);
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(120);
#endif
#if 0
/* power on rst timing */
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(10);
gpio_set_value(rst_pin_gpio_num, 0);
mdelay(20);
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(10);
#endif
/* power backlight gpio enable, 0x102000ec */
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + REG_LCD_BL_PIN);
gpio_request(GPIO_NUM_LCD_BL, "bkl_gpio");
gpio_direction_output(GPIO_NUM_LCD_BL, 1);
gpio_set_value(GPIO_NUM_LCD_BL, 1);
// gpio_free(rst_pin_gpio_num);
// gpio_free(vci_pin_gpio_num);
printf("%s x\n", __func__);
}
int qua_lcm_mipi_er88577b_hrst(int lcm_id)
{
printf("%s e\n", __func__);
printf("%s lcm_id=%d\n", __func__, lcm_id);
if(lcm_id == 0)
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D0_PIN, REG_LCD_DE_PIN, GPIO_NUM_LCD_D0, GPIO_NUM_LCD_DE);
if(lcm_id == 1)
__qua_lcm_mipi_er88577b_hrst(REG_LCD_D1_PIN, REG_LCD_HS_PIN, GPIO_NUM_LCD_D1, GPIO_NUM_LCD_HS);
printf("%s x\n", __func__);
return 0;
}
static void __qua_lcm_mipi_er88577b_rst(unsigned int rst_pin_reg_oft, unsigned int rst_pin_gpio_num)
{
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
printf("%s e\n", __func__);
/* power on rst timing gpio */
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + rst_pin_reg_oft);
gpio_request(rst_pin_gpio_num, "rst_gpio");
gpio_direction_output(rst_pin_gpio_num, 1);
gpio_set_value(rst_pin_gpio_num, 0);
mdelay(10);
/* power on rst timing */
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(10);
gpio_set_value(rst_pin_gpio_num, 0);
mdelay(20);
gpio_set_value(rst_pin_gpio_num, 1);
mdelay(10);
// gpio_free(rst_pin_gpio_num);
// gpio_free(vci_pin_gpio_num);
printf("%s x\n", __func__);
}
int qua_lcm_mipi_er88577b_rst(int lcm_id)
{
printf("%s e\n", __func__);
printf("%s lcm_id=%d\n", __func__, lcm_id);
if(lcm_id == 0)
__qua_lcm_mipi_er88577b_rst(REG_LCD_DE_PIN, GPIO_NUM_LCD_DE);
if(lcm_id == 1)
__qua_lcm_mipi_er88577b_rst(REG_LCD_HS_PIN, GPIO_NUM_LCD_HS);
printf("%s x\n", __func__);
return 0;
}
int qua_lcm_mipi_er88577b_bkl(void)
{
unsigned int pmux_reg = (unsigned int)REG_PIN_MUX_BASE;
// printf("%s e\n", __func__);
/* power backlight gpio enable, 0x102000b0 */
qua_writel(PIN_MUX_GPIO_ENABLE, pmux_reg + REG_LCD_BL_PIN);
gpio_request(GPIO_NUM_LCD_BL, "bkl_gpio");
gpio_direction_output(GPIO_NUM_LCD_BL, 1);
gpio_set_value(GPIO_NUM_LCD_BL, 1);
// printf("%s x\n", __func__);
return 0;
}
#if 0
int qua_lcm_mipi_er88577b_hrst(int lcm_id)
{
// int rtn = 0, val = 0, tmp = 0, _v = 0, i = 0, count = 3;
// volatile unsigned int *pdrv_reg = (volatile unsigned int *)_vpdrvbase;
volatile unsigned int *pmux_reg = (volatile unsigned int *)REG_PIN_MUX_BASE;
if(lcm_id == 0)
{
/* power on vci timing gpio3_7 */
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_D0_PIN);
qua_gpio_request(GPIO_NUM_LCD_D0, 0);
qua_gpio_direction_output(GPIO_NUM_LCD_D0, 1);
qua_gpio_set_value(GPIO_NUM_LCD_D0, 1);
qua_gpio_set_value(GPIO_NUM_LCD_D0, 0);
mdelay(5);
/* power on rst timing gpio3_3 */
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_DE_PIN);
// tmp = qua_readl((unsigned int)pdrv_reg + REG_LCD_DE_DRV);
// printf("%s LCD_DE drv = 0x%x\n", __func__, tmp);
// _v = ((tmp & 0xf0) | 0x04);
// qua_writel(_v, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
qua_gpio_request(GPIO_NUM_LCD_DE, 0);
qua_gpio_direction_output(GPIO_NUM_LCD_DE, 1);
qua_gpio_set_value(GPIO_NUM_LCD_DE, 1);
qua_gpio_set_value(GPIO_NUM_LCD_DE, 0);
mdelay(5);
qua_gpio_set_value(GPIO_NUM_LCD_DE, 1);
mdelay(5);
printf("%s gpio3_3 \n", __func__);
// printf("%s gpio3_3 val = 0x%x\n", __func__, val);
// qua_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_DE_DRV);
qua_gpio_free(GPIO_NUM_LCD_DE);
qua_gpio_free(GPIO_NUM_LCD_D0);
}
if(lcm_id == 1)
{
/* power on vci timing gpio4_0 */
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_D1_PIN);
qua_gpio_request(GPIO_NUM_LCD_D1, 0);
qua_gpio_direction_output(GPIO_NUM_LCD_D1, 1);
qua_gpio_set_value(GPIO_NUM_LCD_D1, 1);
qua_gpio_set_value(GPIO_NUM_LCD_D1, 0);
mdelay(5);
/* power on rst timing gpio3_4 */
qua_writel(1, (unsigned int)pmux_reg + REG_LCD_HS_PIN);
// tmp = qua_readl((unsigned int)pdrv_reg + REG_LCD_VS_DRV);
// printf("%s LCD_VS drv = 0x%x\n", __func__, tmp);
// _v = ((tmp & 0xf0) | 0x04);
// qua_writel(_v, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
qua_gpio_request(GPIO_NUM_LCD_HS, 0);
qua_gpio_direction_output(GPIO_NUM_LCD_HS, 1);
qua_gpio_set_value(GPIO_NUM_LCD_HS, 1);
// do{
qua_gpio_set_value(GPIO_NUM_LCD_HS, 0);
mdelay(5);
qua_gpio_set_value(GPIO_NUM_LCD_HS, 1);
mdelay(5);
printf("%s gpio3_4 \n", __func__);
// while(1);
// }while(1);
// printf("%s gpio3_4 val = 0x%x\n", __func__, val);
// qua_writel(tmp, (unsigned int)pdrv_reg + REG_LCD_VS_DRV);
qua_gpio_free(GPIO_NUM_LCD_HS);
qua_gpio_free(GPIO_NUM_LCD_D1);
}
return 0;
}
#endif
static int show_qua_boot_logo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
if (argc != 2 && argc != 3)
goto usage;
// 传入logo分区中logo图片的名称
if (argc == 2) {
display_logo_id(VOU_DEV_IDX_DHD, argv[1]);
#if defined(CONFIG_QUA_LCM_2ND_SCR)
display_logo_id(VOU_DEV_IDX_DHD1, argv[1]);
#endif
}
// logo图片已读取到ddr中传入ddr的地址和logo图片大小
if (argc == 3) {
display_logo_id_addr(VOU_DEV_IDX_DHD, argv[1], argv[2]);
#if defined(CONFIG_QUA_LCM_2ND_SCR)
display_logo_id_addr(VOU_DEV_IDX_DHD1, argv[1], argv[2]);
#endif
}
return 0;
usage:
printf("Usage: qua_logo %s\n", cmdtp->usage);
return 1;
}
U_BOOT_CMD(
qua_logo, 3, 0, show_qua_boot_logo,
"show qua boot logo",
"show qua boot logo"
);

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,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_LOG0_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

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

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

@ -0,0 +1,17 @@
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)

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

@ -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
@ -26,8 +24,9 @@ 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
@ -35,7 +34,7 @@ sleep 0.1
#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
@ -46,34 +45,41 @@ sleep 0.1
echo 1 > /sys/class/gpio/gpio9/value echo 1 > /sys/class/gpio/gpio9/value
sleep 1 sleep 1
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
#echo "SDIO INIT begin" #echo "SDIO INIT begin"
#cd bin;./wifi_drv_ins.sh;cd ../ #cd bin;./wifi_drv_ins.sh;cd ../
#cp /vendor/qua/wifi/bin/* /bin/; cp /vendor/qua/wifi/lib/* /lib/ #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 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/qua/lib:/system/qua/wifi/lib/:/lib
export PATH=$PATH:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/bin #export PATH=$PATH:/vendor/qua/BT:/vendor/qua/wifi/bin:/system/qua/BT:/system/qua/wifi/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:/usrdata:/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
if [ -f /data/wifi/wpa_supplicant.conf ];then
wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B
sleep 1
udhcpc -T 2 -q -iwlan0 &
fi fi
#if [ -f /data/wifi/wpa_supplicant.conf ];then
#wpa_supplicant -iwlan0 -D nl80211 -c /data/wifi/wpa_supplicant.conf -B
#sleep 1
#udhcpc -T 2 -q -iwlan0 &
#fi
#bt is not #bt is not
#sleep 30 sleep 1
#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 5
#sleep 5 cd /data;./lbh_client 1>/dev/null 2>&1 &
#lbh_client 1>/dev/null 2>&1 & sleep 5
#lbh_client & 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

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

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

@ -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,8 +1,8 @@
mem_total=64 mem_total=64
mem_mmz_start=0x42600000 mem_mmz_start=0x42600000
mem_mmz_size=0x01A00000 mem_mmz_size=0x01A00000
fb0_start=0x43E00000 fb0_start=0x43C18000
fb0_size=1200 fb0_size=4000
fb0_fbc_eb=1 fb0_fbc_eb=1
fb4_start=0x00000000 fb4_start=0x00000000
fb4_size=0 fb4_size=0

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

@ -3,11 +3,8 @@
echo echo
echo -n "Processing /etc/profile... " echo -n "Processing /etc/profile... "
export LD_LIBRARY_PATH=/lib:/nfs/lib:/vendor/qua/lib:/vendor/qua/wifi/lib:$LD_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=/usrdata/awtk/bin:$LD_LIBRARY_PATH export PATH=$PATH:/vendor/qua/ko:/vendor/qua/BT:/vendor/qua/wifi/bin:/usrdata:/system/qua/BT:/system/qua/wifi/bin
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,11 @@
project_id=0004001
fw_user=bbq
fw_time=20260330_100355
fw_variant=user
fw_version=v5.0.2.3
launcher_name=eplayer_single
launcher_start_cmd=eplayer_single

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

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