aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lcd
diff options
context:
space:
mode:
authortrsaunders <trsaunders@gmail.com>2012-06-27 17:51:08 +0100
committertrsaunders <trsaunders@gmail.com>2012-06-27 17:51:08 +0100
commitbdcbdd4c38b492bba01789ea44d971950ade5864 (patch)
tree862504754595d326c7204df8e2a1235c94204c74 /drivers/lcd
parent8a6337b4e746c3d9f42061b26aa2e17370b7db37 (diff)
parent3a5be9c67812c2ef16f335078f2ec8e8773d2144 (diff)
downloaduGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.tar.gz
uGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.tar.bz2
uGFX-bdcbdd4c38b492bba01789ea44d971950ade5864.zip
merge upstream changes
Diffstat (limited to 'drivers/lcd')
-rw-r--r--drivers/lcd/ssd1289_lld.c134
-rw-r--r--drivers/lcd/ssd1289_lld.h251
2 files changed, 202 insertions, 183 deletions
diff --git a/drivers/lcd/ssd1289_lld.c b/drivers/lcd/ssd1289_lld.c
index 831f0eda..5a14d238 100644
--- a/drivers/lcd/ssd1289_lld.c
+++ b/drivers/lcd/ssd1289_lld.c
@@ -9,11 +9,12 @@ extern uint16_t lcd_width, lcd_height;
static uint16_t buf[((SCREEN_HEIGHT > SCREEN_WIDTH ) ? SCREEN_HEIGHT : SCREEN_WIDTH)];
#ifdef LCD_USE_GPIO
+
static __inline void lld_lcdWriteIndex(uint16_t index) {
Clr_RS;
Set_RD;
- palWritePort(LCD_DATA_PORT, index);
+ lld_lcdWriteGPIO(index);
Clr_WR;
Set_WR;
@@ -22,7 +23,7 @@ static __inline void lld_lcdWriteIndex(uint16_t index) {
static __inline void lld_lcdWriteData(uint16_t data) {
Set_RS;
- palWritePort(LCD_DATA_PORT, data);
+ lld_lcdWriteGPIO(data);
Clr_WR;
Set_WR;
@@ -30,8 +31,10 @@ static __inline void lld_lcdWriteData(uint16_t data) {
static __inline void lld_lcdWriteReg(uint16_t lcdReg,uint16_t lcdRegValue) {
Clr_CS;
+
lld_lcdWriteIndex(lcdReg);
lld_lcdWriteData(lcdRegValue);
+
Set_CS;
}
@@ -42,16 +45,7 @@ static __inline uint16_t lld_lcdReadData(void) {
Set_WR;
Clr_RD;
- // change pin mode to digital input
- LCD_DATA_PORT->CRH = 0x44444444;
- LCD_DATA_PORT->CRL = 0x44444444;
-
- value = palReadPort(LCD_DATA_PORT); // dummy
- value = palReadPort(LCD_DATA_PORT);
-
- // change pin mode back to digital output
- LCD_DATA_PORT->CRH = 0x33333333;
- LCD_DATA_PORT->CRL = 0x33333333;
+ value = lld_lcdReadGPIO();
Set_RD;
@@ -72,6 +66,7 @@ static __inline uint16_t lld_lcdReadReg(uint16_t lcdReg) {
__inline void lld_lcdWriteStreamStart(void) {
Clr_CS;
+
lld_lcdWriteIndex(0x0022);
}
@@ -85,7 +80,7 @@ __inline void lld_lcdWriteStream(uint16_t *buffer, uint16_t size) {
Set_RS;
for(i = 0; i < size; i++) {
- palWritePort(LCD_DATA_PORT, buffer[i]);
+ lld_lcdWriteGPIO(buffer[i]);
Clr_WR;
Set_WR;
}
@@ -112,6 +107,10 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) {
#endif
+#ifdef LCD_USE_SPI
+ /* TODO */
+#endif
+
#ifdef LCD_USE_FSMC
#define LCD_REG (*((volatile uint16_t *) 0x60000000)) /* RS = 0 */
@@ -173,15 +172,30 @@ __inline void lld_lcdReadStream(uint16_t *buffer, size_t size) {
}
#endif
-#ifdef LCD_USE_SPI
-/* TODO! */
-#endif
-
-static __inline void lcdDelay(uint16_t us) {
+static __inline void lld_lcdDelay(uint16_t us) {
chThdSleepMicroseconds(us);
}
-
+void lld_lcdSetPowerMode(uint8_t powerMode) {
+ switch(powerMode) {
+ case powerOff:
+ lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode
+ lld_lcdWriteReg(0x0007, 0x0000); // halt operation
+ lld_lcdWriteReg(0x0000, 0x0000); // turn off oszillator
+ lld_lcdWriteReg(0x0010, 0x0001); // enter sleepmode
+ break;
+ case powerOn:
+ lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode
+ lld_lcdInit();
+ break;
+ case sleepOn:
+ lld_lcdWriteReg(0x0010, 0x0001); // enter sleep mode
+ break;
+ case sleepOff:
+ lld_lcdWriteReg(0x0010, 0x0000); // leave sleep mode
+ break;
+ }
+}
void lld_lcdSetCursor(uint16_t x, uint16_t y) {
/* Reg 0x004E is an 8 bit value
@@ -334,47 +348,47 @@ void lld_lcdInit(void) {
#endif
DeviceCode = lld_lcdReadReg(0x0000);
- lld_lcdWriteReg(0x0000,0x0001); lcdDelay(5);
- lld_lcdWriteReg(0x0003,0xA8A4); lcdDelay(5);
- lld_lcdWriteReg(0x000C,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x000D,0x080C); lcdDelay(5);
- lld_lcdWriteReg(0x000E,0x2B00); lcdDelay(5);
- lld_lcdWriteReg(0x001E,0x00B0); lcdDelay(5);
- lld_lcdWriteReg(0x0001,0x2B3F); lcdDelay(5);
- lld_lcdWriteReg(0x0002,0x0600); lcdDelay(5);
- lld_lcdWriteReg(0x0010,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0011,0x6070); lcdDelay(5);
- lld_lcdWriteReg(0x0005,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0006,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0016,0xEF1C); lcdDelay(5);
- lld_lcdWriteReg(0x0017,0x0003); lcdDelay(5);
- lld_lcdWriteReg(0x0007,0x0133); lcdDelay(5);
- lld_lcdWriteReg(0x000B,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x000F,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0041,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0042,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0048,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0049,0x013F); lcdDelay(5);
- lld_lcdWriteReg(0x004A,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x004B,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0044,0xEF00); lcdDelay(5);
- lld_lcdWriteReg(0x0045,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0046,0x013F); lcdDelay(5);
- lld_lcdWriteReg(0x0030,0x0707); lcdDelay(5);
- lld_lcdWriteReg(0x0031,0x0204); lcdDelay(5);
- lld_lcdWriteReg(0x0032,0x0204); lcdDelay(5);
- lld_lcdWriteReg(0x0033,0x0502); lcdDelay(5);
- lld_lcdWriteReg(0x0034,0x0507); lcdDelay(5);
- lld_lcdWriteReg(0x0035,0x0204); lcdDelay(5);
- lld_lcdWriteReg(0x0036,0x0204); lcdDelay(5);
- lld_lcdWriteReg(0x0037,0x0502); lcdDelay(5);
- lld_lcdWriteReg(0x003A,0x0302); lcdDelay(5);
- lld_lcdWriteReg(0x003B,0x0302); lcdDelay(5);
- lld_lcdWriteReg(0x0023,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0024,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x0025,0x8000); lcdDelay(5);
- lld_lcdWriteReg(0x004f,0x0000); lcdDelay(5);
- lld_lcdWriteReg(0x004e,0x0000); lcdDelay(5);
+ lld_lcdWriteReg(0x0000,0x0001); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0003,0xA8A4); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x000C,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x000D,0x080C); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x000E,0x2B00); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x001E,0x00B0); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0001,0x2B3F); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0002,0x0600); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0010,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0011,0x6070); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0005,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0006,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0016,0xEF1C); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0017,0x0003); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0007,0x0133); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x000B,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x000F,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0041,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0042,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0048,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0049,0x013F); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x004A,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x004B,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0044,0xEF00); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0045,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0046,0x013F); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0030,0x0707); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0031,0x0204); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0032,0x0204); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0033,0x0502); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0034,0x0507); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0035,0x0204); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0036,0x0204); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0037,0x0502); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x003A,0x0302); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x003B,0x0302); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0023,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0024,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x0025,0x8000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x004f,0x0000); lld_lcdDelay(5);
+ lld_lcdWriteReg(0x004e,0x0000); lld_lcdDelay(5);
}
uint16_t lld_lcdGetOrientation(void) {
diff --git a/drivers/lcd/ssd1289_lld.h b/drivers/lcd/ssd1289_lld.h
index 787b7d38..16a9ef0d 100644
--- a/drivers/lcd/ssd1289_lld.h
+++ b/drivers/lcd/ssd1289_lld.h
@@ -5,129 +5,6 @@
#ifdef LCD_USE_SSD1289
-#ifdef LCD_USE_GPIO
-#define Set_CS palSetPad(LCD_CMD_PORT, LCD_CS);
-#define Clr_CS palClearPad(LCD_CMD_PORT, LCD_CS);
-#define Set_RS palSetPad(LCD_CMD_PORT, LCD_RS);
-#define Clr_RS palClearPad(LCD_CMD_PORT, LCD_RS);
-#define Set_WR palSetPad(LCD_CMD_PORT, LCD_WR);
-#define Clr_WR palClearPad(LCD_CMD_PORT, LCD_WR);
-#define Set_RD palSetPad(LCD_CMD_PORT, LCD_RD);
-#define Clr_RD palClearPad(LCD_CMD_PORT, LCD_RD);
-#endif
-
-#ifdef LCD_USE_FSMC
-/* LCD Registers */
-#define R0 0x00
-#define R1 0x01
-#define R2 0x02
-#define R3 0x03
-#define R4 0x04
-#define R5 0x05
-#define R6 0x06
-#define R7 0x07
-#define R8 0x08
-#define R9 0x09
-#define R10 0x0A
-#define R12 0x0C
-#define R13 0x0D
-#define R14 0x0E
-#define R15 0x0F
-#define R16 0x10
-#define R17 0x11
-#define R18 0x12
-#define R19 0x13
-#define R20 0x14
-#define R21 0x15
-#define R22 0x16
-#define R23 0x17
-#define R24 0x18
-#define R25 0x19
-#define R26 0x1A
-#define R27 0x1B
-#define R28 0x1C
-#define R29 0x1D
-#define R30 0x1E
-#define R31 0x1F
-#define R32 0x20
-#define R33 0x21
-#define R34 0x22
-#define R36 0x24
-#define R37 0x25
-#define R40 0x28
-#define R41 0x29
-#define R43 0x2B
-#define R45 0x2D
-#define R48 0x30
-#define R49 0x31
-#define R50 0x32
-#define R51 0x33
-#define R52 0x34
-#define R53 0x35
-#define R54 0x36
-#define R55 0x37
-#define R56 0x38
-#define R57 0x39
-#define R59 0x3B
-#define R60 0x3C
-#define R61 0x3D
-#define R62 0x3E
-#define R63 0x3F
-#define R64 0x40
-#define R65 0x41
-#define R66 0x42
-#define R67 0x43
-#define R68 0x44
-#define R69 0x45
-#define R70 0x46
-#define R71 0x47
-#define R72 0x48
-#define R73 0x49
-#define R74 0x4A
-#define R75 0x4B
-#define R76 0x4C
-#define R77 0x4D
-#define R78 0x4E
-#define R79 0x4F
-#define R80 0x50
-#define R81 0x51
-#define R82 0x52
-#define R83 0x53
-#define R96 0x60
-#define R97 0x61
-#define R106 0x6A
-#define R118 0x76
-#define R128 0x80
-#define R129 0x81
-#define R130 0x82
-#define R131 0x83
-#define R132 0x84
-#define R133 0x85
-#define R134 0x86
-#define R135 0x87
-#define R136 0x88
-#define R137 0x89
-#define R139 0x8B
-#define R140 0x8C
-#define R141 0x8D
-#define R143 0x8F
-#define R144 0x90
-#define R145 0x91
-#define R146 0x92
-#define R147 0x93
-#define R148 0x94
-#define R149 0x95
-#define R150 0x96
-#define R151 0x97
-#define R152 0x98
-#define R153 0x99
-#define R154 0x9A
-#define R157 0x9D
-#define R192 0xC0
-#define R193 0xC1
-#define R229 0xE5
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -142,6 +19,7 @@ void lld_lcdSetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
void lld_lcdClear(uint16_t color);
void lld_lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color);
void lld_lcdFillArea(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);
+void lld_lcdSetPowerMode(uint8_t powerMode);
uint16_t lld_lcdGetPixelColor(uint16_t x, uint16_t y);
uint16_t lld_lcdGetOrientation(void);
uint16_t lld_lcdGetHeight(void);
@@ -152,6 +30,133 @@ void lld_lcdVerticalScroll(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, i
}
#endif
+#ifdef LCD_USE_GPIO
+ #define Set_CS palSetPad(LCD_CMD_PORT, LCD_CS);
+ #define Clr_CS palClearPad(LCD_CMD_PORT, LCD_CS);
+ #define Set_RS palSetPad(LCD_CMD_PORT, LCD_RS);
+ #define Clr_RS palClearPad(LCD_CMD_PORT, LCD_RS);
+ #define Set_WR palSetPad(LCD_CMD_PORT, LCD_WR);
+ #define Clr_WR palClearPad(LCD_CMD_PORT, LCD_WR);
+ #define Set_RD palSetPad(LCD_CMD_PORT, LCD_RD);
+ #define Clr_RD palClearPad(LCD_CMD_PORT, LCD_RD);
+#endif
+
+#ifdef LCD_USE_SPI
+ /* TODO */
+#endif
+
+#ifdef LCD_USE_FSMC
+/* LCD Registers */
+ #define R0 0x00
+ #define R1 0x01
+ #define R2 0x02
+ #define R3 0x03
+ #define R4 0x04
+ #define R5 0x05
+ #define R6 0x06
+ #define R7 0x07
+ #define R8 0x08
+ #define R9 0x09
+ #define R10 0x0A
+ #define R12 0x0C
+ #define R13 0x0D
+ #define R14 0x0E
+ #define R15 0x0F
+ #define R16 0x10
+ #define R17 0x11
+ #define R18 0x12
+ #define R19 0x13
+ #define R20 0x14
+ #define R21 0x15
+ #define R22 0x16
+ #define R23 0x17
+ #define R24 0x18
+ #define R25 0x19
+ #define R26 0x1A
+ #define R27 0x1B
+ #define R28 0x1C
+ #define R29 0x1D
+ #define R30 0x1E
+ #define R31 0x1F
+ #define R32 0x20
+ #define R33 0x21
+ #define R34 0x22
+ #define R36 0x24
+ #define R37 0x25
+ #define R40 0x28
+ #define R41 0x29
+ #define R43 0x2B
+ #define R45 0x2D
+ #define R48 0x30
+ #define R49 0x31
+ #define R50 0x32
+ #define R51 0x33
+ #define R52 0x34
+ #define R53 0x35
+ #define R54 0x36
+ #define R55 0x37
+ #define R56 0x38
+ #define R57 0x39
+ #define R59 0x3B
+ #define R60 0x3C
+ #define R61 0x3D
+ #define R62 0x3E
+ #define R63 0x3F
+ #define R64 0x40
+ #define R65 0x41
+ #define R66 0x42
+ #define R67 0x43
+ #define R68 0x44
+ #define R69 0x45
+ #define R70 0x46
+ #define R71 0x47
+ #define R72 0x48
+ #define R73 0x49
+ #define R74 0x4A
+ #define R75 0x4B
+ #define R76 0x4C
+ #define R77 0x4D
+ #define R78 0x4E
+ #define R79 0x4F
+ #define R80 0x50
+ #define R81 0x51
+ #define R82 0x52
+ #define R83 0x53
+ #define R96 0x60
+ #define R97 0x61
+ #define R106 0x6A
+ #define R118 0x76
+ #define R128 0x80
+ #define R129 0x81
+ #define R130 0x82
+ #define R131 0x83
+ #define R132 0x84
+ #define R133 0x85
+ #define R134 0x86
+ #define R135 0x87
+ #define R136 0x88
+ #define R137 0x89
+ #define R139 0x8B
+ #define R140 0x8C
+ #define R141 0x8D
+ #define R143 0x8F
+ #define R144 0x90
+ #define R145 0x91
+ #define R146 0x92
+ #define R147 0x93
+ #define R148 0x94
+ #define R149 0x95
+ #define R150 0x96
+ #define R151 0x97
+ #define R152 0x98
+ #define R153 0x99
+ #define R154 0x9A
+ #define R157 0x9D
+ #define R192 0xC0
+ #define R193 0xC1
+ #define R229 0xE5
+#endif
+
#endif
#endif