Skip to content

Commit

Permalink
support for Olmio A25
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyakurdyukov authored Sep 2, 2024
1 parent 9d82f8a commit 92ed93a
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 40 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,11 @@ All feature phone LCDs I've seen are vertical, if you have a phone with a horizo
| 33 | Texet TM-D324 | SC6531E | NT35310 320x480 | 0 |
| 34 | Texet TM-302 | SC6531DA | ST7789 240x320 | 0 |
| 35 | Strike A13 | SC6531DA | GC9106 128x160 | left soft |
| 36 | Olmio A25 | SC6531E | ILI9328 240x320 | dial |

* Vertex M115, Nokia TA-1174, BQ 3586, Energizer E12,
Sunwind C2401, DEXP SD2810, YX Q5 Kids Camera, Nomi i184, Sigma IO67,
F+ F197, Texet TM-302, Strike A13:
F+ F197, Texet TM-302, Strike A13, Olmio A25:
need keymap file
* Nobby 170B: use `--spi 1 --mac 0xa8` without `--rotate`
* Smart Watch DZ09: use `--spi 0 --lcd 0x80009307`, no controls - you can only watch replays, no boot key - use boot cable
Expand Down
11 changes: 6 additions & 5 deletions fpdoom/entry.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,15 +322,16 @@ void entry_main(char *image_addr, uint32_t image_size, uint32_t bss_size) {
FILE *f = fopen(argv[1], "rb");
if (f) {
unsigned i, n, nrow;
uint8_t *p = sys_data.keytrn;
printf("keymap loaded from file\n");
sys_data.keymap_addr = (short*)sys_data.keytrn;
memset(sys_data.keytrn, -1, 64 * 2);
n = fread(sys_data.keytrn, 1, 64 * 2, f);
sys_data.keymap_addr = (short*)p;
memset(p, -1, 64 * 2);
n = fread(p, 1, 64 * 2, f);
fclose(f);
nrow = 8;
if (_chip == 1)
for (i = 0; i < n; i += 8)
if (*(int32_t*)&sys_data.keytrn[i + 6] != -1) {
for (i = 12; i < n; i += 16)
if (*(int32_t*)&p[i] != -1) {
nrow = 5; break;
}
sys_data.keyrows = nrow;
Expand Down
63 changes: 63 additions & 0 deletions fpdoom/lcd_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,64 @@ static const uint8_t cmd5310_init[] = {
LCM_CMD(0x29, 0), // Display ON
LCM_END
};

static const uint8_t cmd9328_init[] = {
LCM_DELAY(120),
#define X(a, b) LCM_CMD(0x00, 0), LCM_CMD(a, b)
X(0x01, 2), 0x01,0x00, // Driver Output Control 1
X(0x02, 2), 0x07,0x00, // LCD Driving Control
//X(0x03, 2), 0x10,0x30, // Entry Mode
X(0x04, 2), 0x00,0x00, // Resize Control
X(0x08, 2), 0x02,0x07, // Display Control 2
X(0x09, 2), 0x00,0x00, // Display Control 3
X(0x0a, 2), 0x00,0x00, // Display Control 4
X(0x0c, 2), 0x00,0x00, // RGB Display Interface Control 1
X(0x0d, 2), 0x00,0x00, // Frame Maker Position
X(0x0f, 2), 0x00,0x00, // RGB Display Interface Control 2
X(0x10, 2), 0x00,0x00, // Power Control 1
X(0x11, 2), 0x00,0x07, // Power Control 2
X(0x12, 2), 0x00,0x00, // Power Control 3
X(0x13, 2), 0x00,0x00, // Power Control 4
X(0x07, 2), 0x00,0x01, // Display Control 1
X(0x10, 2), 0x12,0x90, // Power Control 1
X(0x11, 2), 0x02,0x27, // Power Control 2
X(0x12, 2), 0x00,0x9d, // Power Control 3
X(0x13, 2), 0x1a,0x00, // Power Control 4
X(0x29, 2), 0x00,0x1d, // Power Control 7
X(0x2b, 2), 0x00,0x0d, // Frame Rate and Color Control
//X(0x20, 2), 0x00,0x00, // Horizontal GRAM Address Set
//X(0x21, 2), 0x00,0x00, // Vertical GRAM Address Set
X(0x30, 2), 0x00,0x00, // Gamma Control 1
X(0x31, 2), 0x02,0x01, // Gamma Control 2
X(0x32, 2), 0x00,0x03, // Gamma Control 3
X(0x35, 2), 0x03,0x05, // Gamma Control 4
X(0x36, 2), 0x00,0x04, // Gamma Control 5
X(0x37, 2), 0x04,0x07, // Gamma Control 6
X(0x38, 2), 0x06,0x05, // Gamma Control 7
X(0x39, 2), 0x07,0x07, // Gamma Control 8
X(0x3c, 2), 0x05,0x03, // Gamma Control 9
X(0x3d, 2), 0x00,0x04, // Gamma Control 10
//X(0x50, 2), 0x00,0x00, // Horizontal Address Start Position
//X(0x51, 2), 0x00,0xef, // Horizontal Address End Position
//X(0x52, 2), 0x00,0x00, // Vertical Address Start Position
//X(0x53, 2), 0x01,0x3f, // Vertical Address End Position
X(0x60, 2), 0xa7,0x00, // Driver Output Control 2
X(0x61, 2), 0x00,0x01, // Base Image Display Control
X(0x6a, 2), 0x00,0x00, // Vertical Scroll Control
X(0x80, 2), 0x00,0x00, // Partial Image 1 Display Position
X(0x81, 2), 0x00,0x00, // Partial Image 1 Area (Start Line)
X(0x82, 2), 0x00,0x00, // Partial Image 1 Area (End Line)
X(0x83, 2), 0x00,0x00, // Partial Image 2 Display Position
X(0x84, 2), 0x00,0x00, // Partial Image 2 Area (Start Line)
X(0x85, 2), 0x00,0x00, // Partial Image 2 Area (End Line)
X(0x90, 2), 0x00,0x10, // Panel Interface Control 1
X(0x92, 2), 0x06,0x00, // Panel Interface Control 2
X(0x07, 2), 0x01,0x33, // Display Control 1
//X(0x22, 0), // Write Data to GRAM
#undef X
LCM_END
};

#endif

#if CHIP == 2 || CHIP == 3
Expand Down Expand Up @@ -1119,6 +1177,11 @@ static const lcd_config_t lcd_config[] = {

// NovaTek NT35310
{ 0x01015310, 0xffffffff, 0, 0, 1, 320, 480, 1, 0, 0, { 5, 150, 150, 10, 20, 20 }, { 0 }, 0x00, cmd5310_init },

/* Olmio A25 */

// Ilitek ILI9328
{ 0x289328, 0x00ffffff, 0, 0, 1, 240, 320, 1, 0, 0, { 5, 150, 150, 10, 50, 50 }, { 0 }, 0xc0, cmd9328_init },
#endif

#if CHIP == 2 || CHIP == 3
Expand Down
70 changes: 40 additions & 30 deletions fpdoom/syscode.c
Original file line number Diff line number Diff line change
Expand Up @@ -541,20 +541,6 @@ static unsigned lcd_getid2(void) {
}

#if 0
static void lcd_set_rect(int x0, int y0, int x1, int y1) {
lcm_send_cmd(0x2a); // Column Address Set
lcm_send_data(x0 >> 8);
lcm_send_data(x0 & 0xff);
lcm_send_data(x1 >> 8);
lcm_send_data(x1 & 0xff);
lcm_send_cmd(0x2b); // Page Address Set
lcm_send_data(y0 >> 8);
lcm_send_data(y0 & 0xff);
lcm_send_data(y1 >> 8);
lcm_send_data(y1 & 0xff);
lcm_send_cmd(0x2c); // Memory Write
}

void lcm_send_rgb16(uint16_t *ptr, uint32_t size) {
uint32_t addr, tmp;
//lcm_set_mode(1);
Expand Down Expand Up @@ -666,22 +652,46 @@ static void lcd_init(void) {
sys_data.display.h1 = h;

lcm_exec(lcd->cmd_init);
#if 1
cmd_init2[2] = mac_arg;
cmd_init2[3 + 2] = x2 >> 8;
cmd_init2[3 + 3] = x2;
cmd_init2[3 + 4] = w2 >> 8;
cmd_init2[3 + 5] = w2;
cmd_init2[3 + 6 + 2] = y2 >> 8;
cmd_init2[3 + 6 + 3] = y2;
cmd_init2[3 + 6 + 4] = h2 >> 8;
cmd_init2[3 + 6 + 5] = h2;
lcm_exec(cmd_init2);
#else
lcm_send_cmd(0x36); // Memory Access Control
lcm_send_data(mac_arg);
lcd_set_rect(x2, y2, w2, h2);
#endif
if (lcd->id == 0x289328) {
/* Why can't people use standardized commands? */
static uint8_t cmd_init2_ili9328[] = {
#define X(a, b) LCM_CMD(0x00, 0), LCM_CMD(a, b)
// ORG, 0, I/D1, I/D0, AM, 0, 0, 0
X(0x03, 2), 0x10,0, // Entry Mode
X(0x50, 2), 0,0, // Horizontal Address Start Position
X(0x51, 2), 0,0, // Horizontal Address End Position
X(0x52, 2), 0,0, // Vertical Address Start Position
X(0x53, 2), 0,0, // Vertical Address End Position
X(0x20, 2), 0,0, // Horizontal GRAM Address Set
X(0x21, 2), 0,0, // Vertical GRAM Address Set
X(0x22, 0), // Write Data to GRAM
#undef X
LCM_END
};
uint8_t *p = cmd_init2_ili9328;
p[5] = mac_arg >> 2; p += 6;
if (mac_arg & 0x20) {
unsigned t;
t = w2; w2 = h2; h2 = t;
t = x2; x2 = y2; x2 = t;
}
p[4] = x2 >> 8; p[5] = x2; p += 6;
p[4] = w2 >> 8; p[5] = w2; p += 6;
p[4] = y2 >> 8; p[5] = y2; p += 6;
p[4] = h2 >> 8; p[5] = h2; p += 6;
if (!(mac_arg & 0x40)) p[4] = w2 >> 8, p[5] = w2;
p += 6;
if (!(mac_arg & 0x80)) p[4] = h2 >> 8, p[5] = h2;
lcm_exec(cmd_init2_ili9328);
} else {
uint8_t *p = cmd_init2;
p[2] = mac_arg; p += 3;
p[2] = x2 >> 8; p[3] = x2;
p[4] = w2 >> 8; p[5] = w2; p += 6;
p[2] = y2 >> 8; p[3] = y2;
p[4] = h2 >> 8; p[5] = h2;
lcm_exec(cmd_init2);
}
}

static void lcdc_init(void) {
Expand Down
8 changes: 4 additions & 4 deletions fpdoom/syscode.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ extern void (*app_scr_update)(uint8_t *src, void *dest);
#define KEYPAD_ENUM(M) \
M(0x01, DIAL) \
M(0x04, UP) M(0x05, DOWN) M(0x06, LEFT) M(0x07, RIGHT) \
M(0x08, LSOFT) M(0x09, RSOFT) \
M(0x0d, CENTER) \
M(0x23, HASH) M(0x24, VOLUP) M(0x25, VOLDOWN) \
M(0x29, EXTRA) M(0x2a, STAR) M(0x2b, PLUS) M(0x2d, MINUS) \
M(0x08, LSOFT) M(0x09, RSOFT) M(0x0d, CENTER) \
M(0x0e, CAMERA) M(0x1d, EXT_1D) M(0x1f, EXT_1F) \
M(0x21, EXT_21) M(0x23, HASH) M(0x24, VOLUP) M(0x25, VOLDOWN) \
M(0x29, EXT_29) M(0x2a, STAR) M(0x2b, PLUS) M(0x2d, MINUS) \
M(0x30, 0) M(0x31, 1) M(0x32, 2) M(0x33, 3) M(0x34, 4) \
M(0x35, 5) M(0x36, 6) M(0x37, 7) M(0x38, 8) M(0x39, 9)

Expand Down

0 comments on commit 92ed93a

Please sign in to comment.