aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-03-20 23:34:37 +1000
committerinmarket <andrewh@inmarket.com.au>2014-03-20 23:34:37 +1000
commit712ff73f77763eeee798d6913f57e5577adcef3f (patch)
tree53fb458541533a212cc1aa994f4604cfe1e59069 /drivers
parent8b9d31ef902b80c27065ab542c4783d6194f420f (diff)
downloaduGFX-712ff73f77763eeee798d6913f57e5577adcef3f.tar.gz
uGFX-712ff73f77763eeee798d6913f57e5577adcef3f.tar.bz2
uGFX-712ff73f77763eeee798d6913f57e5577adcef3f.zip
Some fixes for the Nokia6610GE8 display driver
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gdisp/Nokia6610GE8/gdisp_lld_Nokia6610GE8.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/drivers/gdisp/Nokia6610GE8/gdisp_lld_Nokia6610GE8.c b/drivers/gdisp/Nokia6610GE8/gdisp_lld_Nokia6610GE8.c
index 0e2c7e4e..9a32cf18 100644
--- a/drivers/gdisp/Nokia6610GE8/gdisp_lld_Nokia6610GE8.c
+++ b/drivers/gdisp/Nokia6610GE8/gdisp_lld_Nokia6610GE8.c
@@ -136,7 +136,8 @@
#define write_cmd3(g, cmd, d1, d2, d3) { write_index(g, cmd); write_data3(g, d1, d2, d3); }
#define write_cmd4(g, cmd, d1, d2, d3, d4) { write_index(g, cmd); write_data4(g, d1, d2, d3, d4); }
-static inline void set_viewport(GDisplay* g) {
+#if GDISP_HARDWARE_DRAWPIXEL
+ static inline void set_viewpoint(GDisplay* g) {
#if GDISP_NOKIA_ORIENTATION && GDISP_NEED_CONTROL
switch(g->g.Orientation) {
default:
@@ -158,6 +159,35 @@ static inline void set_viewport(GDisplay* g) {
break;
}
#else
+ write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x); // Column address set
+ write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->p.y, GDISP_RAM_Y_OFFSET+g->p.y); // Page address set
+ #endif
+ write_index(g, RAMWR);
+ }
+#endif
+
+static inline void set_viewport(GDisplay* g) {
+ #if GDISP_NOKIA_ORIENTATION && GDISP_NEED_CONTROL
+ switch(g->g.Orientation) {
+ default:
+ case GDISP_ROTATE_0:
+ write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x+g->p.cx-1); // Column address set
+ write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->p.y, GDISP_RAM_Y_OFFSET+g->p.y+g->p.cy-1); // Page address set
+ break;
+ case GDISP_ROTATE_90:
+ write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->p.y, GDISP_RAM_X_OFFSET+g->p.y+g->p.cy-1);
+ write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_Y_OFFSET-1+g->g.Width-g->p.x);
+ break;
+ case GDISP_ROTATE_180:
+ write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_X_OFFSET-1+g->g.Width-g->p.x);
+ write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_Y_OFFSET-1+g->g.Height-g->p.y);
+ break;
+ case GDISP_ROTATE_270:
+ write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_X_OFFSET-1+g->g.Height-g->p.y);
+ write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->p.x, GDISP_RAM_Y_OFFSET+g->p.x+g->p.cx-1);
+ break;
+ }
+ #else
write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x+g->p.cx-1); // Column address set
write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET+g->p.y, GDISP_RAM_Y_OFFSET+g->p.y+g->p.cy-1); // Page address set
#endif
@@ -292,8 +322,8 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
c = gdispColor2Native(g->p.color);
acquire_bus(g);
- set_viewport(g);
- write_data3(g, 0, (c>>8) & 0x0F, c & 0xFF);
+ set_viewpoint(g);
+ write_data3(g, 0, ((c>>8) & 0x0F), (c & 0xFF));
release_bus(g);
}
#endif