add SPFD5420, R61581

This commit is contained in:
prenticedavid
2016-09-07 22:52:34 +01:00
parent 297597a81f
commit 18dae26fed

View File

@@ -181,23 +181,28 @@ uint16_t MCUFRIEND_kbv::readID(void)
ret = readReg(0); //forces a reset() if called before begin() ret = readReg(0); //forces a reset() if called before begin()
if (ret == 0x5408) //the SPFD5408 fails the 0xD3D3 test. if (ret == 0x5408) //the SPFD5408 fails the 0xD3D3 test.
return 0x5408; return 0x5408;
if (ret == 0x0089 || ret == 0x8989) if (ret == 0x5420) //the SPFD5420 fails the 0xD3D3 test.
return 0x5420;
if (ret == 0x8989) //SSD1289 is always 8989
return 0x1289; return 0x1289;
ret = readReg(0x67); //HX8347-A ret = readReg(0x67); //HX8347-A
if (ret == 0x4747) if (ret == 0x4747)
return 0x8347; return 0x8347;
#if defined(SUPPORT_1963) && USING_16BIT_BUS
ret = readReg32(0xA1); //SSD1963: [01 57 61 01] ret = readReg32(0xA1); //SSD1963: [01 57 61 01]
if (ret == 0x6101) if (ret == 0x6101)
return 0x1963; return 0x1963;
#endif
ret = readReg40(0xBF); ret = readReg40(0xBF);
//HX8357B: [xx 01 62 83 57 FF] unsupported //HX8357B: [xx 01 62 83 57 FF] unsupported
//R61581: [xx 01 22 15 81] unsupported
if (ret == 0x9481) //ILI9481: [xx 02 04 94 81 FF] if (ret == 0x9481) //ILI9481: [xx 02 04 94 81 FF]
return 0x9481; return 0x9481;
if (ret == 0x1511) //?R61511: [xx 02 04 15 11] not tested yet if (ret == 0x1511) //?R61511: [xx 02 04 15 11] not tested yet
return 0x1511; return 0x1511;
if (ret == 0x1520) //?R61520: [xx 01 22 15 20] if (ret == 0x1520) //?R61520: [xx 01 22 15 20]
return 0x1520; return 0x1520;
if (ret == 0x1581) //R61581: [xx 01 22 15 81]
return 0x1581;
if (ret == 0x1400) //?RM68140:[xx FF 68 14 00] not tested yet if (ret == 0x1400) //?RM68140:[xx FF 68 14 00] not tested yet
return 0x6814; return 0x6814;
ret = readReg40(0xEF); //ILI9327: [xx 02 04 93 27 FF] ret = readReg40(0xEF); //ILI9327: [xx 02 04 93 27 FF]
@@ -325,13 +330,13 @@ void MCUFRIEND_kbv::setRotation(uint8_t r)
d[2] = 0x3B; d[2] = 0x3B;
WriteCmdParamN(0xB6, 3, d); WriteCmdParamN(0xB6, 3, d);
goto common_MC; goto common_MC;
} else if (_lcd_ID == 0x1963 || _lcd_ID == 0x9481 || _lcd_ID == 0x1511) { } else if (_lcd_ID == 0x1963 || _lcd_ID == 0x9481 || _lcd_ID == 0x1511 || _lcd_ID == 0x1581) {
if (val & 0x80) if (val & 0x80)
val |= 0x01; //GS val |= 0x01; //GS
if ((val & 0x40)) if ((val & 0x40))
val |= 0x02; //SS val |= 0x02; //SS
if (_lcd_ID == 0x1963) val &= ~0xC0; if (_lcd_ID == 0x1963) val &= ~0xC0;
if (_lcd_ID == 0x9481) val &= ~0xD0; if (_lcd_ID == 0x9481 || _lcd_ID == 0x1581) val &= ~0xD0;
if (_lcd_ID == 0x1511) { if (_lcd_ID == 0x1511) {
val &= ~0x10; //remove ML val &= ~0x10; //remove ML
val |= 0xC0; //force penguin 180 rotation val |= 0xC0; //force penguin 180 rotation
@@ -369,14 +374,15 @@ void MCUFRIEND_kbv::setRotation(uint8_t r)
SS = (val & 0x40) ? (1 << 8) : 0; SS = (val & 0x40) ? (1 << 8) : 0;
WriteCmdData(0x01, GS | SS | 0x0028); // set Driver Output Control WriteCmdData(0x01, GS | SS | 0x0028); // set Driver Output Control
goto common_ORG; goto common_ORG;
case 0x5420:
case 0x7793: case 0x7793:
case 0x9326: case 0x9326:
case 0xB509: case 0xB509:
_MC = 0x200, _MP = 0x201, _MW = 0x202, _SC = 0x210, _EC = 0x211, _SP = 0x212, _EP = 0x213; _MC = 0x200, _MP = 0x201, _MW = 0x202, _SC = 0x210, _EC = 0x211, _SP = 0x212, _EP = 0x213;
GS = (val & 0x80) ? (1 << 15) : 0; GS = (val & 0x80) ? (1 << 15) : 0;
uint16_t NL; uint16_t NL;
NL = ((HEIGHT / 8) - 1) << 9; NL = ((432 / 8) - 1) << 9;
if (_lcd_ID == 0x9326) NL >>= 1; if (_lcd_ID == 0x9326 || _lcd_ID == 0x5420) NL >>= 1;
WriteCmdData(0x400, GS | NL); WriteCmdData(0x400, GS | NL);
goto common_SS; goto common_SS;
default: default:
@@ -663,6 +669,7 @@ void MCUFRIEND_kbv::vertScroll(int16_t top, int16_t scrollines, int16_t offset)
WriteCmdData(0x41, vsp); //VL# WriteCmdData(0x41, vsp); //VL#
break; break;
#endif #endif
case 0x5420:
case 0x7793: case 0x7793:
case 0x9326: case 0x9326:
case 0xB509: case 0xB509:
@@ -710,6 +717,7 @@ void MCUFRIEND_kbv::invertDisplay(boolean i)
WriteCmdData(0x01, _lcd_drivOut); WriteCmdData(0x01, _lcd_drivOut);
break; break;
#endif #endif
case 0x5420:
case 0x7793: case 0x7793:
case 0x9326: case 0x9326:
case 0xB509: case 0xB509:
@@ -1736,6 +1744,7 @@ void MCUFRIEND_kbv::begin(uint16_t ID)
}; };
init_table16(ILI9325_regValues, sizeof(ILI9325_regValues)); init_table16(ILI9325_regValues, sizeof(ILI9325_regValues));
break; break;
case 0x5420:
case 0x9326: case 0x9326:
_lcd_capable = REV_SCREEN | READ_BGR; _lcd_capable = REV_SCREEN | READ_BGR;
static const uint16_t ILI9326_CPT28_regValues[] PROGMEM = { static const uint16_t ILI9326_CPT28_regValues[] PROGMEM = {
@@ -1921,6 +1930,7 @@ void MCUFRIEND_kbv::begin(uint16_t ID)
init_table(ILI9341_regValues_2_4, sizeof(ILI9341_regValues_2_4)); // init_table(ILI9341_regValues_2_4, sizeof(ILI9341_regValues_2_4)); //
} }
break; break;
case 0x1581:
case 0x9481: case 0x9481:
_lcd_capable = AUTO_READINC | MIPI_DCS_REV1 | MV_AXIS | READ_BGR; _lcd_capable = AUTO_READINC | MIPI_DCS_REV1 | MV_AXIS | READ_BGR;
static const uint8_t ILI9481_regValues[] PROGMEM = { // Atmel MaxTouch static const uint8_t ILI9481_regValues[] PROGMEM = { // Atmel MaxTouch