FreeCalypso > hg > fc-tourmaline
view src/cs/drivers/drv_app/r2d/lcds/luna/r2d_onoff_i.c @ 278:75758d7a9be3
Luna: allow ABB superdeep sleep when the LCD is in suspend mode
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 07 Sep 2021 22:36:16 +0000 |
parents | 0196b6bf633c |
children |
line wrap: on
line source
#include "r2d/lcds/luna/r2d_luna_lcd.h" #include "main/sys_types.h" #include "armio.h" static void lcd_suspend(void) { if (r2d_lcd_hw_suspend) return; /* already in suspend */ r2d_lcd_hw_suspend = 1; LCD_REG_WR(0x0007, 0); /* display off */ rvf_delay(RVF_MS_TO_TICKS(50)); LCD_REG_WR(0x0010, 1); /* suspend mode */ ABB_sleep_allowed = 1; } static void lcd_resume(void) { if (!r2d_lcd_hw_suspend) return; /* already on */ ABB_sleep_allowed = 0; LCD_REG_WR(0x0010, 0); /* out of suspend */ rvf_delay(RVF_MS_TO_TICKS(50)); LCD_REG_WR(0x0007, 0x1017); /* display on */ r2d_lcd_hw_suspend = 0; r2d_refresh(); } static void r2d_onoff_action(enum blrr_display_state set_state) { UBYTE on_off; /* * PWL control: on our current Luna setups (Caramel2 or iWOW DSK) * PWL is only an indicator LED for developers. We use this PWL * indicator to show the state of "virtual dimming", as there is * no physical LCD backlight dimming control on Luna. */ switch (set_state) { case BLRR_DISPLAY_OFF: *(volatile SYS_UWORD8 *)0xFFFE8000 = 0; *(volatile SYS_UWORD8 *)0xFFFE8001 = 0; on_off = 0; break; case BLRR_DISPLAY_ON: *(volatile SYS_UWORD8 *)0xFFFE8000 = 255; *(volatile SYS_UWORD8 *)0xFFFE8001 = 1; on_off = 1; break; case BLRR_DISPLAY_INCALL: *(volatile SYS_UWORD8 *)0xFFFE8000 = 16; *(volatile SYS_UWORD8 *)0xFFFE8001 = 1; on_off = 1; break; case BLRR_DISPLAY_CHG_BOOT: *(volatile SYS_UWORD8 *)0xFFFE8000 = 64; *(volatile SYS_UWORD8 *)0xFFFE8001 = 1; on_off = 1; break; default: return; /* error, but we are a void function */ } /* physical LCD and backlight on/off */ if (on_off) { lcd_resume(); AI_SetBit(9); } else { AI_ResetBit(9); lcd_suspend(); } }