aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authoromriiluz <omri@iluz.net>2013-12-14 03:11:48 -0800
committeromriiluz <omri@iluz.net>2013-12-14 03:11:48 -0800
commite40375c4f255de98ecf56a628030fe522264470c (patch)
tree0a52216d281286cafdb6ea059676dee501da3a9c /drivers
parent763f948b442f4d7448a61dfeb00d8851a94c4b76 (diff)
downloaduGFX-e40375c4f255de98ecf56a628030fe522264470c.tar.gz
uGFX-e40375c4f255de98ecf56a628030fe522264470c.tar.bz2
uGFX-e40375c4f255de98ecf56a628030fe522264470c.zip
Allow for LCD specific configuration -
Bias Horizontal/Vertical flipping Page Mapping per hard wiring of the LCD panel
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gdisp/ST7565/board_ST7565_template.h12
-rw-r--r--drivers/gdisp/ST7565/gdisp_lld_ST7565.c26
2 files changed, 34 insertions, 4 deletions
diff --git a/drivers/gdisp/ST7565/board_ST7565_template.h b/drivers/gdisp/ST7565/board_ST7565_template.h
index aef6cf2b..4eb45701 100644
--- a/drivers/gdisp/ST7565/board_ST7565_template.h
+++ b/drivers/gdisp/ST7565/board_ST7565_template.h
@@ -17,6 +17,18 @@
#define _GDISP_LLD_BOARD_H
/**
+ * Driver configuration
+ */
+#define ST7565_LCD_BIAS ST7565_LCD_BIAS_7
+#define ST7565_ADC ST7565_ADC_NORMAL
+#define ST7565_COM_SCAN ST7565_COM_SCAN_INC
+#define ST7565_PAGE_ORDER 0,1,2,3,4,5,6,7
+/*
+ * Custom page order for several LCD boards, e.g. HEM12864-99
+ * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3
+ */
+
+/**
* @brief Initialise the board for the display.
*
* @param[in] g The GDisplay structure
diff --git a/drivers/gdisp/ST7565/gdisp_lld_ST7565.c b/drivers/gdisp/ST7565/gdisp_lld_ST7565.c
index 769f2eaf..5b0e9f27 100644
--- a/drivers/gdisp/ST7565/gdisp_lld_ST7565.c
+++ b/drivers/gdisp/ST7565/gdisp_lld_ST7565.c
@@ -42,6 +42,22 @@
#include "st7565.h"
/*===========================================================================*/
+/* Driver config defaults for backward compatibility. */
+/*===========================================================================*/
+#ifndef ST7565_LCD_BIAS
+ #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7
+#endif
+#ifndef ST7565_ADC
+ #define ST7565_ADC ST7565_ADC_NORMAL
+#endif
+#ifndef ST7565_COM_SCAN
+ #define ST7565_COM_SCAN ST7565_COM_SCAN_INC
+#endif
+#ifndef ST7565_PAGE_ORDER
+ #define ST7565_PAGE_ORDER 0,1,2,3,4,5,6,7
+#endif
+
+/*===========================================================================*/
/* Driver local functions. */
/*===========================================================================*/
@@ -83,9 +99,10 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
acquire_bus(g);
- write_cmd(g, ST7565_LCD_BIAS_7);
- write_cmd(g, ST7565_ADC_NORMAL);
- write_cmd(g, ST7565_COM_SCAN_INC);
+ write_cmd(g, ST7565_LCD_BIAS);
+ write_cmd(g, ST7565_ADC);
+ write_cmd(g, ST7565_COM_SCAN);
+
write_cmd(g, ST7565_START_LINE | 0);
write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101);
@@ -134,8 +151,9 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
return;
acquire_bus(g);
+ uint8_t pagemap[8]={ST7565_PAGE_ORDER};
for (p = 0; p < 8; p++) {
- write_cmd(g, ST7565_PAGE | p);
+ write_cmd(g, ST7565_PAGE | pagemap[p]);
write_cmd(g, ST7565_COLUMN_MSB | 0);
write_cmd(g, ST7565_COLUMN_LSB | 0);
write_cmd(g, ST7565_RMW);