1
0
Fork 0
forked from len0rd/rockbox

ErosQNative: Add v3 LCD support, conditional on bootloader

bootloader passes the player version to rockbox for LCD init changes

Credit ZappBranigan2972 on forums for original changes
Credit Bilgus for devicedata additions

Change-Id: Ia2ca493edef49b7457e84dc19b05397dc915fa5a
This commit is contained in:
Dana Conrad 2024-08-07 01:12:55 +00:00 committed by William Wilgus
parent a2cc7546d8
commit 878e29396c
5 changed files with 198 additions and 3 deletions

View file

@ -9,6 +9,17 @@
#define BOOTFILE "rockbox." BOOTFILE_EXT #define BOOTFILE "rockbox." BOOTFILE_EXT
#define BOOTDIR "/.rockbox" #define BOOTDIR "/.rockbox"
/* Define EROSQN_VER as a GCC option if desired -
* v1, v2 players: "1"
* v3 players: "3"
* Only bootloader will be affected
*/
#ifdef BOOTLOADER
# ifndef EROSQN_VER /* this should probably go in config/erosqnative.h*/
# define EROSQN_VER 1
# endif
#endif
/* CPU defines */ /* CPU defines */
#define CONFIG_CPU X1000 #define CONFIG_CPU X1000
#define X1000_EXCLK_FREQ 24000000 #define X1000_EXCLK_FREQ 24000000

View file

@ -56,6 +56,10 @@
#include "crc32.h" #include "crc32.h"
#endif #endif
#if defined(HAVE_DEVICEDATA) && !defined(SIMULATOR)
#include "devicedata.h"
#endif
#if CONFIG_CPU == AS3525v2 #if CONFIG_CPU == AS3525v2
#include "ascodec.h" #include "ascodec.h"
#endif #endif

View file

@ -25,11 +25,138 @@
#include "lcd-x1000.h" #include "lcd-x1000.h"
#include "gpio-x1000.h" #include "gpio-x1000.h"
#include "system.h" #include "system.h"
#include "devicedata.h"
/* for reference on these command/data hex values, see the mipi dcs lcd spec. * /* for reference on these command/data hex values, see the mipi dcs lcd spec. *
* Not everything here is there, but all the standard stuff is. */ * Not everything here is there, but all the standard stuff is. */
static const uint32_t erosqnative_lcd_cmd_enable[] = { /* New Display Eroq 2.1 / Hifiwalker 1.7+ / Surfans v3.2, unknown Controller *
* (partially GC9A01 register compatible) *
* https://espruino.microcosm.app/api/v1/files/ \ *
* 9dc1b976d621a2ab3854312cce862c4a9a50dc1b.html#GC9A01 , *
* https://www.buydisplay.com/download/ic/GC9A01A.pdf , *
* https://lcddisplay.co/wp-content/uploads/2023/02/GC9A01.pdf *
* Init sequence From 'EROS Q c口_V2.1_20231209固件.zip' *
* update.upt/.iso -> In 'uboot.bin' at 0x52da0-0x5305f *
* http://www.eroshifi.com/download/firmware/122.html */
static const uint32_t erosqnative_lcd_cmd_enable_v3[] = {
/* Unlock EXTC? */
LCD_INSTR_CMD, 0xfe, // Inter Register Enable1
LCD_INSTR_CMD, 0xef, // Inter Register Enable2
LCD_INSTR_CMD, 0x36, // Memory Access Control
/* Bit7 1:vertical flip 0:no vertical flip
Bit6 1:horizontal flip 0:no horizontal flip
Bit3 1:BGR 0:RGB */
LCD_INSTR_DAT, 0x90,
/* Pixel Format Set */
LCD_INSTR_CMD, 0x3a,
LCD_INSTR_DAT, 0x55, /* Rockbox uses 16pp, OF specified 18 bpp */
LCD_INSTR_CMD, 0x84, // ?? (undocumented)
LCD_INSTR_DAT, 0x04,
LCD_INSTR_CMD, 0x86, // ??
LCD_INSTR_DAT, 0xfb,
LCD_INSTR_CMD, 0x87, // ??
LCD_INSTR_DAT, 0x79,
LCD_INSTR_CMD, 0x89, // ??
LCD_INSTR_DAT, 0x0b,
LCD_INSTR_CMD, 0x8a, // ??
LCD_INSTR_DAT, 0x20,
LCD_INSTR_CMD, 0x8b, // ??
LCD_INSTR_DAT, 0x80,
LCD_INSTR_CMD, 0x8d, // ??
LCD_INSTR_DAT, 0x3b,
LCD_INSTR_CMD, 0x8e, // ??
LCD_INSTR_DAT, 0xcf,
LCD_INSTR_CMD, 0xec, // Charge Pump Frequent Control
LCD_INSTR_DAT, 0x33,
LCD_INSTR_DAT, 0x02,
LCD_INSTR_DAT, 0x4c,
LCD_INSTR_CMD, 0x98, // ?? (undocumented)
LCD_INSTR_DAT, 0x3e,
LCD_INSTR_CMD, 0x9c, // ??
LCD_INSTR_DAT, 0x4b,
LCD_INSTR_CMD, 0x99, // ??
LCD_INSTR_DAT, 0x3e,
LCD_INSTR_CMD, 0x9d, // ??
LCD_INSTR_DAT, 0x4b,
LCD_INSTR_CMD, 0x9b, // ??
LCD_INSTR_DAT, 0x55,
LCD_INSTR_CMD, 0xe8, // Frame Rate
LCD_INSTR_DAT, 0x11,
LCD_INSTR_DAT, 0x00,
LCD_INSTR_CMD, 0xff, // ?? (Adafruit & Co lib. C:0xFF, D:0x60, D:0x01, D:0x04)
LCD_INSTR_DAT, 0x62, // LCD_INSTR_DAT, 0x01, LCD_INSTR_DAT, 0x04,
LCD_INSTR_CMD, 0xc3, // Vreg1a voltage Control
LCD_INSTR_DAT, 0x20,
LCD_INSTR_CMD, 0xc4, // Vreg1b voltage Control
LCD_INSTR_DAT, 0x03,
LCD_INSTR_CMD, 0xc9, // Vreg2a voltage Control
LCD_INSTR_DAT, 0x2a,
LCD_INSTR_CMD, 0xf0, // SET_GAMMA1
LCD_INSTR_DAT, 0x4a,
LCD_INSTR_DAT, 0x10,
LCD_INSTR_DAT, 0x0a,
LCD_INSTR_DAT, 0x0a,
LCD_INSTR_DAT, 0x26,
LCD_INSTR_DAT, 0x39,
LCD_INSTR_CMD, 0xf2, // SET_GAMMA3
LCD_INSTR_DAT, 0x4a,
LCD_INSTR_DAT, 0x10,
LCD_INSTR_DAT, 0x0a,
LCD_INSTR_DAT, 0x0a,
LCD_INSTR_DAT, 0x26,
LCD_INSTR_DAT, 0x39,
LCD_INSTR_CMD, 0xf1, // SET_GAMMA2
LCD_INSTR_DAT, 0x50,
LCD_INSTR_DAT, 0x8f,
LCD_INSTR_DAT, 0xaf,
LCD_INSTR_DAT, 0x3b,
LCD_INSTR_DAT, 0x3f,
LCD_INSTR_DAT, 0x7f,
LCD_INSTR_CMD, 0xf3, // SET_GAMMA4
LCD_INSTR_DAT, 0x50,
LCD_INSTR_DAT, 0x8f,
LCD_INSTR_DAT, 0xaf,
LCD_INSTR_DAT, 0x3b,
LCD_INSTR_DAT, 0x3f,
LCD_INSTR_DAT, 0x7f,
LCD_INSTR_CMD, 0xba, // TE Control
LCD_INSTR_DAT, 0x0a,
#ifdef BOOTLOADER
LCD_INSTR_CMD, 0x35, // Tearing Effect Line ON
LCD_INSTR_DAT, 0x00,
#endif
LCD_INSTR_CMD, 0x21, /* Invert */
/* Lock EXTC? */
LCD_INSTR_CMD, 0xfe, // Inter Register Enable1
LCD_INSTR_CMD, 0xee,
/* Exit Sleep */
LCD_INSTR_CMD, 0x11,
LCD_INSTR_UDELAY, 120000,
/* Display On */
LCD_INSTR_CMD, 0x29,
LCD_INSTR_UDELAY, 20000,
LCD_INSTR_END,
};
/* Original Display / Hifiwalker -1.5 / Surfans -2.7 */
static const uint32_t erosqnative_lcd_cmd_enable_v1[] = {
/* Set EXTC? */ /* Set EXTC? */
LCD_INSTR_CMD, 0xc8, LCD_INSTR_CMD, 0xc8,
LCD_INSTR_DAT, 0xff, LCD_INSTR_DAT, 0xff,
@ -179,7 +306,22 @@ void lcd_tgt_enable(bool enable)
mdelay(5); mdelay(5);
gpio_set_level(GPIO_LCD_CE, 0); gpio_set_level(GPIO_LCD_CE, 0);
lcd_exec_commands(&erosqnative_lcd_cmd_enable[0]); #ifdef BOOTLOADER
# if EROSQN_VER == 3
lcd_exec_commands(&erosqnative_lcd_cmd_enable_v3[0]);
# else
lcd_exec_commands(&erosqnative_lcd_cmd_enable_v1[0]);
# endif
#else
if (device_data.lcd_version == 3)
{
lcd_exec_commands(&erosqnative_lcd_cmd_enable_v3[0]);
}
else
{
lcd_exec_commands(&erosqnative_lcd_cmd_enable_v1[0]);
}
#endif
} else { } else {
/* doesn't flash white if we don't do anything... */ /* doesn't flash white if we don't do anything... */
#if 0 #if 0

View file

@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "system.h" #include "system.h"
#include <string.h>
#include "mips.h" #include "mips.h"
#include "panic.h" #include "panic.h"
#include "button.h" #include "button.h"
@ -36,6 +37,10 @@
#include "x1000/msc.h" #include "x1000/msc.h"
#include "x1000/aic.h" #include "x1000/aic.h"
#if defined(HAVE_DEVICEDATA)
#include "devicedata.h"
#endif
#ifdef X1000_CPUIDLE_STATS #ifdef X1000_CPUIDLE_STATS
int __cpu_idle_avg = 0; int __cpu_idle_avg = 0;
int __cpu_idle_cur = 0; int __cpu_idle_cur = 0;
@ -88,7 +93,7 @@ void fill_devicedata(struct device_data_t *data)
memset(data->payload, 0xff, data->length); memset(data->payload, 0xff, data->length);
data->lcd_version = EROSQN_VER; data->lcd_version = EROSQN_VER;
#else #else
uint8_t lcd_version = data->lcd_version; uint8_t lcd_version = device_data.lcd_version;
memset(data->payload, 0xff, data->length); memset(data->payload, 0xff, data->length);
data->lcd_version = lcd_version; data->lcd_version = lcd_version;
#endif #endif

33
tools/configure vendored
View file

@ -1676,6 +1676,8 @@ cat <<EOF
==AIGO== 244) M3K Linux ==AIGO== 244) M3K Linux
245) Eros Q / K 246) M3K baremetal ==Shanling== 245) Eros Q / K 246) M3K baremetal ==Shanling==
247) Eros Q / K native 260) Q1 247) Eros Q / K native 260) Q1
248) Eros Q / K native v3
(GC9A01 LCD Controller)
EOF EOF
buildfor=`input`; buildfor=`input`;
@ -4190,8 +4192,39 @@ fi
t_cpu="mips" t_cpu="mips"
t_manufacturer="ingenic_x1000" t_manufacturer="ingenic_x1000"
t_model="erosqnative" t_model="erosqnative"
# player version, for bootloader usage
# versions 1 and 2 both use 1
GCCOPTS="$GCCOPTS -DEROSQN_VER=1"
;; ;;
248|erosqnative_v3)
target_id=116
modelname="erosqnative"
target="EROS_QN"
memory=32
mipsr2elcc
appextra="recorder:gui"
plugins="yes"
tool="$rootdir/tools/scramble -add=erosqnative "
boottool="$rootdir/tools/mkspl-x1000 -type=nand -ppb=2 -bpp=2 "
output="rockbox.erosq"
bootoutput="bootloader.erosq"
sysfontbl="16-Terminus"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$x1000tools"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
# architecture, manufacturer and model for the target-tree build
t_cpu="mips"
t_manufacturer="ingenic_x1000"
t_model="erosqnative"
# player version, for bootloader usage
# version 3
GCCOPTS="$GCCOPTS -DEROSQN_VER=3"
;;
*) *)
echo "Please select a supported target platform!" echo "Please select a supported target platform!"
exit 7 exit 7