diff options
Diffstat (limited to 'drivers/gdisp/Nokia6610GE8/gdisp_lld.c')
-rw-r--r-- | drivers/gdisp/Nokia6610GE8/gdisp_lld.c | 284 |
1 files changed, 132 insertions, 152 deletions
diff --git a/drivers/gdisp/Nokia6610GE8/gdisp_lld.c b/drivers/gdisp/Nokia6610GE8/gdisp_lld.c index d3e30d0e..4906ee78 100644 --- a/drivers/gdisp/Nokia6610GE8/gdisp_lld.c +++ b/drivers/gdisp/Nokia6610GE8/gdisp_lld.c @@ -58,9 +58,11 @@ #undef GDISP_SCREEN_WIDTH #endif -#define GDISP_LLD_DECLARATIONS +#define GDISP_DRIVER_VMT GDISPVMT_Nokia6610GE8 +#include "../drivers/gdisp/Nokia6610GE8/gdisp_lld_config.h" #include "gdisp/lld/gdisp_lld.h" -#include "gdisp_lld_board.h" + +#include "board_Nokia6610GE8.h" /*===========================================================================*/ /* Driver local definitions. */ @@ -108,9 +110,9 @@ /*===========================================================================*/ #if GDISP_HARDWARE_STREAM_WRITE - static color_t savecolor; + static color_t savecolor[GDISP_TOTAL_DISPLAYS]; #if GDISP_GE8_BROKEN_CONTROLLER - static color_t firstcolor; + static color_t firstcolor[GDISP_TOTAL_DISPLAYS]; #endif #endif @@ -122,57 +124,86 @@ /*===========================================================================*/ // Some macros just to make reading the code easier -#define delayms(ms) gfxSleepMilliseconds(ms) -#define write_data2(d1, d2) { write_data(d1); write_data(d2); } -#define write_data3(d1, d2, d3) { write_data(d1); write_data(d2); write_data(d3); } -#define write_data4(d1, d2, d3, d4) { write_data(d1); write_data(d2); write_data(d3); write_data(d4); } -#define write_cmd1(cmd, d1) { write_cmd(cmd); write_data(d1); } -#define write_cmd2(cmd, d1, d2) { write_cmd(cmd); write_data2(d1, d2); } -#define write_cmd3(cmd, d1, d2, d3) { write_cmd(cmd); write_data3(d1, d2, d3); } -#define write_cmd4(cmd, d1, d2, d3, d4) { write_cmd(cmd); write_data4(d1, d2, d3, d4); } - +#define delayms(ms) gfxSleepMilliseconds(ms) +#define write_data2(g, d1, d2) { write_data(g, d1); write_data(g, d2); } +#define write_data3(g, d1, d2, d3) { write_data(g, d1); write_data(g, d2); write_data(g, d3); } +#define write_data4(g, d1, d2, d3, d4) { write_data(g, d1); write_data(g, d2); write_data(g, d3); write_data(g, d4); } +#define write_cmd1(g, cmd, d1) { write_index(g, cmd); write_data(g, d1); } +#define write_cmd2(g, cmd, d1, d2) { write_index(g, cmd); write_data2(g, d1, d2); } +#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_NOKIA_ORIENTATION && GDISP_NEED_CONTROL + switch(g->g.Orientation) { + case GDISP_ROTATE_0: + 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 + break; + case GDISP_ROTATE_90: + write_cmd2(g, CASET, GDISP_RAM_X_OFFSET+g->p.y, GDISP_RAM_X_OFFSET+g->p.y); + write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET-1+g->g.Width-g->p.x, GDISP_RAM_Y_OFFSET-1+g->g.Width-g->p.x); + break; + case GDISP_ROTATE_180: + write_cmd2(g, CASET, GDISP_RAM_X_OFFSET-1+g->g.Width-g->p.x, GDISP_RAM_X_OFFSET-1+g->g.Width-g->p.x); + write_cmd2(g, PASET, GDISP_RAM_Y_OFFSET-1+g->g.Height-g->p.y, GDISP_RAM_Y_OFFSET-1+g->g.Height-g->p.y); + break; + case GDISP_ROTATE_270: + write_cmd2(g, CASET, GDISP_RAM_X_OFFSET-1+g->g.Height-g->p.y, 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); + 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 + write_index(g, RAMWR); +} /*===========================================================================*/ /* Driver exported functions. */ /*===========================================================================*/ -LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { /* Initialise your display */ - init_board(); + init_board(g); // Hardware reset - setpin_reset(TRUE); + setpin_reset(g, TRUE); delayms(20); - setpin_reset(FALSE); + setpin_reset(g, FALSE); delayms(20); // Get the bus for the following initialisation commands - acquire_bus(); + acquire_bus(g); - write_cmd4(DISCTL, 0x00, GDISP_SCAN_LINES/4-1, 0x0A, 0x00); // Display control - How the controller drives the LCD + write_cmd4(g, DISCTL, 0x00, GDISP_SCAN_LINES/4-1, 0x0A, 0x00); // Display control - How the controller drives the LCD // P1: 0x00 = 2 divisions, switching period=8 (default) // P2: 0x20 = nlines/4 - 1 = 132/4 - 1 = 32) // P3: 0x0A = standard inverse highlight, inversion every frame // P4: 0x00 = dispersion on - write_cmd1(COMSCN, 0x01); // COM scan - How the LCD is connected to the controller + write_cmd1(g, COMSCN, 0x01); // COM scan - How the LCD is connected to the controller // P1: 0x01 = Scan 1->80, 160<-81 - write_cmd(OSCON); // Internal oscillator ON - write_cmd(SLPOUT); // Sleep out - write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON - write_cmd3(DATCTL, 0x00, 0x00, 0x02); // Data control + write_index(g, OSCON); // Internal oscillator ON + write_index(g, SLPOUT); // Sleep out + write_cmd1(g, PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON + write_cmd3(g, DATCTL, 0x00, 0x00, 0x02); // Data control // P1: 0x00 = page address normal, column address normal, address scan in column direction // P2: 0x00 = RGB sequence (default value) // P3: 0x02 = 4 bits per colour (Type A) - write_cmd2(VOLCTR, 63*GDISP_INITIAL_CONTRAST/100, 0x03); // Voltage control (contrast setting) + write_cmd2(g, VOLCTR, 63*GDISP_INITIAL_CONTRAST/100, 0x03); // Voltage control (contrast setting) // P1 = Contrast (0..63) // P2 = 3 resistance ratio (only value that works) delayms(100); // Allow power supply to stabilise - write_cmd(DISON); // Turn on the display + write_index(g, DISON); // Turn on the display + + // Finish Init + post_init_board(g); // Release the bus - release_bus(); + release_bus(g); /* Turn on the back-light */ - set_backlight(GDISP_INITIAL_BACKLIGHT); + set_backlight(g, GDISP_INITIAL_BACKLIGHT); /* Initialise the GDISP structure to match */ g->g.Orientation = GDISP_ROTATE_0; @@ -185,30 +216,30 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { } #if GDISP_HARDWARE_STREAM_WRITE - LLDSPEC void gdisp_lld_write_start(GDISPDriver *g) { - acquire_bus(); - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x+g->p.cx-1); // Column address set - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->p.y, GDISP_RAM_Y_OFFSET+g->p.y+g->p.cy-1); // Page address set - write_cmd(RAMWR); + LLDSPEC void gdisp_lld_write_start(GDisplay *g) { + acquire_bus(g); + set_viewport(g); g->flags &= ~(GDISP_FLG_ODDBYTE|GDISP_FLG_RUNBYTE); } - LLDSPEC void gdisp_lld_write_color(GDISPDriver *g) { + LLDSPEC void gdisp_lld_write_color(GDisplay *g) { #if GDISP_GE8_BROKEN_CONTROLLER if (!(g->flags & GDISP_FLG_RUNBYTE)) { - firstcolor = g->p.color; + firstcolor[g->controllerdisplay] = g->p.color; g->flags |= GDISP_FLG_RUNBYTE; } #endif if ((g->flags & GDISP_FLG_ODDBYTE)) { // Write the pair of pixels to the display - write_data3(((savecolor >> 4) & 0xFF), (((savecolor << 4) & 0xF0)|((g->p.color >> 8) & 0x0F)), (g->p.color & 0xFF)); + write_data3(g, ((savecolor[g->controllerdisplay] >> 4) & 0xFF), + (((savecolor[g->controllerdisplay] << 4) & 0xF0)|((g->p.color >> 8) & 0x0F)), + (g->p.color & 0xFF)); g->flags &= ~GDISP_FLG_ODDBYTE; } else { - savecolor = g->p.color; + savecolor[g->controllerdisplay] = g->p.color; g->flags |= GDISP_FLG_ODDBYTE; } } - LLDSPEC void gdisp_lld_write_stop(GDISPDriver *g) { + LLDSPEC void gdisp_lld_write_stop(GDisplay *g) { if ((g->flags & GDISP_FLG_ODDBYTE)) { #if GDISP_GE8_BROKEN_CONTROLLER /** @@ -229,80 +260,47 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { * user application uses the streaming calls and then terminates the stream early or after buffer wrap. * Since this is such an unlikely situation we just don't handle it. */ - write_data3(((savecolor >> 4) & 0xFF), (((savecolor << 4) & 0xF0)|((firstcolor >> 8) & 0x0F)), (firstcolor & 0xFF)); + write_data3(g, ((savecolor[g->controllerdisplay] >> 4) & 0xFF), + (((savecolor[g->controllerdisplay] << 4) & 0xF0)|((firstcolor[g->controllerdisplay] >> 8) & 0x0F)), + (firstcolor[g->controllerdisplay] & 0xFF)); #else - write_data2(((savecolor >> 4) & 0xFF), ((savecolor << 4) & 0xF0)); - write_cmd(NOP); + write_data2(g, ((savecolor[g->controllerdisplay] >> 4) & 0xFF), ((savecolor[g->controllerdisplay] << 4) & 0xF0)); + write_index(g, NOP); #endif } - release_bus(); + release_bus(g); } #endif #if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDISPDriver *g) { - acquire_bus(); - switch(g->g.Orientation) { - case GDISP_ROTATE_0: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x); // Column address set - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->p.y, GDISP_RAM_Y_OFFSET+g->p.y); // Page address set - break; - case GDISP_ROTATE_90: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->p.y, GDISP_RAM_X_OFFSET+g->p.y); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET-1+g->g.Width-g->p.x, GDISP_RAM_Y_OFFSET-1+g->g.Width-g->p.x); - break; - case GDISP_ROTATE_180: - write_cmd2(CASET, GDISP_RAM_X_OFFSET-1+g->g.Width-g->p.x, GDISP_RAM_X_OFFSET-1+g->g.Width-g->p.x); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET-1+g->g.Height-g->p.y, GDISP_RAM_Y_OFFSET-1+g->g.Height-g->p.y); - break; - case GDISP_ROTATE_270: - write_cmd2(CASET, GDISP_RAM_X_OFFSET-1+g->g.Height-g->p.y, GDISP_RAM_X_OFFSET-1+g->g.Height-g->p.y); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->p.x, GDISP_RAM_Y_OFFSET+g->p.x); - break; - } - write_cmd3(RAMWR, 0, (g->p.color>>8) & 0x0F, g->p.color & 0xFF); - release_bus(); + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + acquire_bus(g); + set_viewport(g); + write_data3(g, 0, (g->p.color>>8) & 0x0F, g->p.color & 0xFF); + release_bus(g); } #endif /* ---- Optional Routines ---- */ #if GDISP_HARDWARE_FILLS - LLDSPEC void gdisp_lld_fill_area(GDISPDriver *g) { + LLDSPEC void gdisp_lld_fill_area(GDisplay *g) { unsigned tuples; tuples = (g->p.cx*g->p.cy+1)>>1; // With an odd sized area we over-print by one pixel. // This extra pixel overwrites the first pixel (harmless as it is the same colour) - acquire_bus(); - switch(g->g.Orientation) { - case GDISP_ROTATE_0: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x+g->p.cx-1); // Column address set - write_cmd2(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(CASET, GDISP_RAM_X_OFFSET+g->p.y, GDISP_RAM_X_OFFSET+g->p.y+g->p.cy-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_Y_OFFSET+g->g.Width-g->p.x-1); - break; - case GDISP_ROTATE_180: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_X_OFFSET+g->g.Width-g->p.x-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_Y_OFFSET+g->g.Height-g->p.y-1); - break; - case GDISP_ROTATE_270: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_X_OFFSET+g->g.Height-g->p.y-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->p.x, GDISP_RAM_Y_OFFSET+g->p.x+g->p.cx-1); - break; - } - write_cmd(RAMWR); + acquire_bus(g); + set_viewport(g); while(tuples--) - write_data3(((g->p.color >> 4) & 0xFF), (((g->p.color << 4) & 0xF0)|((g->p.color >> 8) & 0x0F)), (g->p.color & 0xFF)); - release_bus(); + write_data3(g, ((g->p.color >> 4) & 0xFF), (((g->p.color << 4) & 0xF0)|((g->p.color >> 8) & 0x0F)), (g->p.color & 0xFF)); + release_bus(g); } #endif #if GDISP_HARDWARE_BITFILLS - LLDSPEC void gdisp_lld_blit_area(GDISPDriver *g) { + LLDSPEC void gdisp_lld_blit_area(GDisplay *g) { coord_t lg, x, y; color_t c1, c2; unsigned tuples; @@ -318,26 +316,8 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { buffer = (const pixel_t *)g->p.ptr; /* Set up the data window to transfer */ - acquire_bus(); - switch(g->g.Orientation) { - case GDISP_ROTATE_0: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->p.x, GDISP_RAM_X_OFFSET+g->p.x+g->p.cx-1); // Column address set - write_cmd2(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(CASET, GDISP_RAM_X_OFFSET+g->p.y, GDISP_RAM_X_OFFSET+g->p.y+g->p.cy-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_Y_OFFSET+g->g.Width-g->p.x-1); - break; - case GDISP_ROTATE_180: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->g.Width-g->p.x-g->p.cx, GDISP_RAM_X_OFFSET+g->g.Width-g->p.x-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_Y_OFFSET+g->g.Height-g->p.y-1); - break; - case GDISP_ROTATE_270: - write_cmd2(CASET, GDISP_RAM_X_OFFSET+g->g.Height-g->p.y-g->p.cy, GDISP_RAM_X_OFFSET+g->g.Height-g->p.y-1); - write_cmd2(PASET, GDISP_RAM_Y_OFFSET+g->p.x, GDISP_RAM_Y_OFFSET+g->p.x+g->p.cx-1); - break; - } - write_cmd(RAMWR); + acquire_bus(g); + set_viewport(g); /* * Due to the way the Nokia6610 handles a decrementing column or page, @@ -389,7 +369,7 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { } /* Write the pair of pixels to the display */ - write_data3(((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF)); + write_data3(g, ((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF)); } #else @@ -445,17 +425,17 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { } /* Write the pair of pixels to the display */ - write_data3(((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF)); + write_data3(g, ((c1 >> 4) & 0xFF), (((c1 << 4) & 0xF0)|((c2 >> 8) & 0x0F)), (c2 & 0xFF)); } #endif /* All done */ - release_bus(); + release_bus(g); } #endif #if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDISPDriver *g) { + LLDSPEC void gdisp_lld_control(GDisplay *g) { /* The hardware is capable of supporting... * GDISP_CONTROL_POWER - supported * GDISP_CONTROL_ORIENTATION - supported @@ -466,96 +446,96 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { case GDISP_CONTROL_POWER: if (g->g.Powermode == (powermode_t)g->p.ptr) return; - acquire_bus(); + acquire_bus(g); switch((powermode_t)g->p.ptr) { case powerOff: - set_backlight(0); // Turn off the backlight - write_cmd(DISOFF); // Turn off the display - write_cmd1(PWRCTR, 0x00); // Power control - all off - write_cmd(SLPIN); // Sleep in - write_cmd(OSCOFF); // Internal oscillator off + set_backlight(g, 0); // Turn off the backlight + write_index(g, DISOFF); // Turn off the display + write_cmd1(g, PWRCTR, 0x00); // Power control - all off + write_index(g, SLPIN); // Sleep in + write_index(g, OSCOFF); // Internal oscillator off break; case powerOn: - write_cmd(OSCON); // Internal oscillator on - write_cmd(SLPOUT); // Sleep out - write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON - write_cmd2(VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) + write_index(g, OSCON); // Internal oscillator on + write_index(g, SLPOUT); // Sleep out + write_cmd1(g, PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON + write_cmd2(g, VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) delayms(100); // Allow power supply to stabilise - write_cmd(DISON); // Turn on the display - write_cmd(PTLOUT); // Remove sleep window - set_backlight(g->g.Backlight); // Turn on the backlight + write_index(g, DISON); // Turn on the display + write_index(g, PTLOUT); // Remove sleep window + set_backlight(g, g->g.Backlight); // Turn on the backlight break; case powerSleep: - write_cmd(OSCON); // Internal oscillator on - write_cmd(SLPOUT); // Sleep out - write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON - write_cmd2(VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) + write_index(g, OSCON); // Internal oscillator on + write_index(g, SLPOUT); // Sleep out + write_cmd1(g, PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON + write_cmd2(g, VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) delayms(100); // Allow power supply to stabilise - write_cmd(DISON); // Turn on the display - write_cmd2(PTLIN, GDISP_SLEEP_POS/4, (GDISP_SLEEP_POS+GDISP_SLEEP_SIZE)/4); // Sleep Window - set_backlight(g->g.Backlight); // Turn on the backlight + write_index(g, DISON); // Turn on the display + write_cmd2(g, PTLIN, GDISP_SLEEP_POS/4, (GDISP_SLEEP_POS+GDISP_SLEEP_SIZE)/4); // Sleep Window + set_backlight(g, g->g.Backlight); // Turn on the backlight break; case powerDeepSleep: - write_cmd(OSCON); // Internal oscillator on - write_cmd(SLPOUT); // Sleep out - write_cmd1(PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON - write_cmd2(VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) + write_index(g, OSCON); // Internal oscillator on + write_index(g, SLPOUT); // Sleep out + write_cmd1(g, PWRCTR, 0x0F); // Power control - reference voltage regulator on, circuit voltage follower on, BOOST ON + write_cmd2(g, VOLCTR, g->g.Contrast, 0x03); // Voltage control (contrast setting) delayms(100); // Allow power supply to stabilise - write_cmd(DISON); // Turn on the display - write_cmd2(PTLIN, GDISP_SLEEP_POS/4, (GDISP_SLEEP_POS+GDISP_SLEEP_SIZE)/4); // Sleep Window - set_backlight(0); // Turn off the backlight + write_index(g, DISON); // Turn on the display + write_cmd2(g, PTLIN, GDISP_SLEEP_POS/4, (GDISP_SLEEP_POS+GDISP_SLEEP_SIZE)/4); // Sleep Window + set_backlight(g, 0); // Turn off the backlight break; default: - release_bus(); + release_bus(g); return; } - release_bus(); + release_bus(g); g->g.Powermode = (powermode_t)g->p.ptr; return; #if GDISP_NOKIA_ORIENTATION case GDISP_CONTROL_ORIENTATION: if (g->g.Orientation == (orientation_t)g->p.ptr) return; - acquire_bus(); + acquire_bus(g); switch((orientation_t)g->p.ptr) { case GDISP_ROTATE_0: - write_cmd3(DATCTL, 0x00, 0x00, 0x02); // P1: page normal, column normal, scan in column direction + write_cmd3(g, DATCTL, 0x00, 0x00, 0x02); // P1: page normal, column normal, scan in column direction g->g.Height = GDISP_SCREEN_HEIGHT; g->g.Width = GDISP_SCREEN_WIDTH; break; case GDISP_ROTATE_90: - write_cmd3(DATCTL, 0x05, 0x00, 0x02); // P1: page reverse, column normal, scan in page direction + write_cmd3(g, DATCTL, 0x05, 0x00, 0x02); // P1: page reverse, column normal, scan in page direction g->g.Height = GDISP_SCREEN_WIDTH; g->g.Width = GDISP_SCREEN_HEIGHT; break; case GDISP_ROTATE_180: - write_cmd3(DATCTL, 0x03, 0x00, 0x02); // P1: page reverse, column reverse, scan in column direction + write_cmd3(g, DATCTL, 0x03, 0x00, 0x02); // P1: page reverse, column reverse, scan in column direction g->g.Height = GDISP_SCREEN_HEIGHT; g->g.Width = GDISP_SCREEN_WIDTH; break; case GDISP_ROTATE_270: - write_cmd3(DATCTL, 0x06, 0x00, 0x02); // P1: page normal, column reverse, scan in page direction + write_cmd3(g, DATCTL, 0x06, 0x00, 0x02); // P1: page normal, column reverse, scan in page direction g->g.Height = GDISP_SCREEN_WIDTH; g->g.Width = GDISP_SCREEN_HEIGHT; break; default: - release_bus(); + release_bus(g); return; } - release_bus(); + release_bus(g); g->g.Orientation = (orientation_t)g->p.ptr; return; #endif case GDISP_CONTROL_BACKLIGHT: if ((unsigned)g->p.ptr > 100) g->p.ptr = (void *)100; - set_backlight((unsigned)g->p.ptr); + set_backlight(g, (unsigned)g->p.ptr); g->g.Backlight = (unsigned)g->p.ptr; return; case GDISP_CONTROL_CONTRAST: if ((unsigned)g->p.ptr > 100) g->p.ptr = (void *)100; - acquire_bus(); - write_cmd2(VOLCTR, 63*(unsigned)g->p.ptr/100, 0x03); - release_bus(); + acquire_bus(g); + write_cmd2(g, VOLCTR, 63*(unsigned)g->p.ptr/100, 0x03); + release_bus(g); g->g.Contrast = (unsigned)g->p.ptr; return; } |