From e40375c4f255de98ecf56a628030fe522264470c Mon Sep 17 00:00:00 2001 From: omriiluz Date: Sat, 14 Dec 2013 03:11:48 -0800 Subject: [PATCH] Allow for LCD specific configuration - Bias Horizontal/Vertical flipping Page Mapping per hard wiring of the LCD panel --- drivers/gdisp/ST7565/board_ST7565_template.h | 12 +++++++++ drivers/gdisp/ST7565/gdisp_lld_ST7565.c | 26 +++++++++++++++++--- 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 @@ -16,6 +16,18 @@ #ifndef _GDISP_LLD_BOARD_H #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. * 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 @@ -41,6 +41,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);