FreeCalypso > hg > fc-magnetite
comparison src/cs/drivers/drv_core/abb/abb.c @ 648:337e6d3a4454
abb.c: disable superdeep sleep on Luna
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 07 May 2020 06:28:56 +0000 |
parents | d7b25dca1266 |
children | 4f458e31b6e1 |
comparison
equal
deleted
inserted
replaced
647:94cb5e76b3b5 | 648:337e6d3a4454 |
---|---|
90 * and measurement are appropriate. | 90 * and measurement are appropriate. |
91 */ | 91 */ |
92 | 92 |
93 #define ENABLE_BACKUP_BATTERY 0 | 93 #define ENABLE_BACKUP_BATTERY 0 |
94 | 94 |
95 /* | |
96 * The following ABB_sleep_allowed global variable is yet another FreeCalypso | |
97 * addition. Here is the issue: some handset boards have the controller/driver | |
98 * chip in the LCD powered from Iota VRIO, which is generally a very sensible | |
99 * arrangement. As one reference example, our 176x220 pixel TFT LCDs which | |
100 * we are considering for our own FC handset draw about 3 mA from their Vci | |
101 * supply which we connect to VRIO - perfectly fine when the regulators are | |
102 * in their normal Active mode. But what about sleep mode? Sleep mode VRIO | |
103 * current limit is only 1 mA, thus the combination of the LCD being on and | |
104 * drawing 3 mA with the ABB in sleep mode is invalid. TI's original code | |
105 * already had a check for VRPCSTS: PWON and RPWON need to be released and | |
106 * the charger needs to be unplugged in order to enter ABB superdeep sleep. | |
107 * We are extending this check with one more condition: ABB_sleep_allowed | |
108 * needs to be nonzero; the intent is that this variable will be set by the | |
109 * code responsible for putting the LCD into its own powerdown mode. | |
110 * This logic is included only for affected targets with LCDs. | |
111 */ | |
112 | |
113 #ifdef CONFIG_TARGET_LUNA | |
114 int ABB_sleep_allowed = 0; | |
115 #endif | |
116 | |
95 #if (ABB_SEMAPHORE_PROTECTION) | 117 #if (ABB_SEMAPHORE_PROTECTION) |
96 | 118 |
97 static NU_SEMAPHORE abb_sem; | 119 static NU_SEMAPHORE abb_sem; |
98 | 120 |
99 /*-----------------------------------------------------------------------*/ | 121 /*-----------------------------------------------------------------------*/ |
854 | 876 |
855 #elif (ANLG_FAM == 2) | 877 #elif (ANLG_FAM == 2) |
856 // Read VRPCSTS register value and extract status of meaningfull inputs. | 878 // Read VRPCSTS register value and extract status of meaningfull inputs. |
857 reg_val = ABB_ReadRegister(VRPCSTS) & 0x0070; | 879 reg_val = ABB_ReadRegister(VRPCSTS) & 0x0070; |
858 | 880 |
881 #ifdef CONFIG_TARGET_LUNA | |
882 if (reg_val == 0x30 && ABB_sleep_allowed) | |
883 #else | |
859 if (reg_val == 0x30) | 884 if (reg_val == 0x30) |
885 #endif | |
860 { | 886 { |
861 // start the SLPDLY counter in order to switch the ABB in sleep mode. This transmission sets IOTA sleep bit. | 887 // start the SLPDLY counter in order to switch the ABB in sleep mode. This transmission sets IOTA sleep bit. |
862 ABB_WriteRegister(VRPCDEV, 0x02); | 888 ABB_WriteRegister(VRPCDEV, 0x02); |
863 } | 889 } |
864 | 890 |