Skip to content

Commit fdbb037

Browse files
committed
Add Power Manage Function
1 parent e1553fa commit fdbb037

File tree

2 files changed

+52
-21
lines changed

2 files changed

+52
-21
lines changed

src/AXP2101.cpp

+38-15
Original file line numberDiff line numberDiff line change
@@ -295,38 +295,61 @@ void AXP2101::coreS3_AW9523_init() {
295295
write1Byte(0x58, 0x02, 0b00000100);
296296
}
297297

298-
void AXP2101::setBoostEn(bool state) {
299-
uint8_t value = read8Bit(AW9523_ADDR, 0x03);
298+
void AXP2101::setBusOutEn(bool state) { // BUS OUT EN
299+
uint8_t value = read8Bit(AW9523_ADDR, 0x02);
300300
if (state == true)
301-
value |= 0b10000000;
301+
value |= 0b00000010;
302302
else
303-
value &= ~0b10000000;
304-
write1Byte(AW9523_ADDR, 0x03, value);
303+
value &= ~0b00000010;
304+
write1Byte(AW9523_ADDR, 0x02, value);
305305
}
306306

307-
void AXP2101::setBusOutEn(bool state) {
307+
void AXP2101::setUsbOtgEn(bool state) { // USB OTG EN
308308
uint8_t value = read8Bit(AW9523_ADDR, 0x02);
309309
if (state == true)
310-
value |= 0b00000010;
310+
value |= 0b00100000;
311311
else
312-
value &= ~0b00000010;
312+
value &= ~0b00100000;
313313
write1Byte(AW9523_ADDR, 0x02, value);
314314
}
315315

316+
void AXP2101::setBoostEn(bool state) { // Boost
317+
uint8_t value = read8Bit(AW9523_ADDR, 0x03);
318+
if (state == true)
319+
value |= 0b10000000;
320+
else
321+
value &= ~0b10000000;
322+
write1Byte(AW9523_ADDR, 0x03, value);
323+
}
324+
316325
void AXP2101::setBoostBusOutEn(bool state) {
317326
setBoostEn(state);
318327
// delay is required to prevent reverse current flow from VBUS to BUS_OUT
319328
if (state == false) delay(250);
320329
setBusOutEn(state);
321330
}
322331

323-
void AXP2101::setUsbOtgEn(bool state) {
324-
uint8_t value = read8Bit(AW9523_ADDR, 0x02);
325-
if (state == true)
326-
value |= 0b00100000;
327-
else
328-
value &= ~0b00100000;
329-
write1Byte(AW9523_ADDR, 0x02, value);
332+
void AXP2101::powerModeSet(power_mode mode) {
333+
switch (mode) {
334+
case POWER_MODE_USB_IN_BUS_IN:
335+
setUsbOtgEn(false); // USB_OTG_EN=0
336+
setBoostBusOutEn(false); // BUS_OUT_EN,Boost=0
337+
break;
338+
case POWER_MODE_USB_IN_BUS_OUT:
339+
setUsbOtgEn(false); // USB_OTG_EN=0
340+
setBoostBusOutEn(true); // BUS_OUT_EN,Boost=1
341+
break;
342+
case POWER_MODE_USB_OUT_BUS_IN:
343+
setUsbOtgEn(true); // USB_OTG_EN=1
344+
setBoostBusOutEn(false); // BUS_OUT_EN,Boost=0
345+
break;
346+
case POWER_MODE_USB_OUT_BUS_OUT:
347+
setUsbOtgEn(true); // USB_OTG_EN=1
348+
setBoostBusOutEn(true); // BUS_OUT_EN,Boost=1
349+
break;
350+
default:
351+
break;
352+
}
330353
}
331354

332355
/**

src/AXP2101.h

+14-6
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
#include "utility/I2C_PORT.h"
55

66
/* AXP173 device address */
7-
#define AXP2101_ADDR 0x34
8-
#define AW9523_ADDR 0x58
9-
#define AXP173_ADDR_READ 0x69
10-
#define AXP173_ADDR_WRITE 0x68
7+
#define AXP2101_ADDR 0x34
8+
#define AW9523_ADDR 0x58
9+
10+
enum power_mode {
11+
POWER_MODE_USB_IN_BUS_IN = 0,
12+
POWER_MODE_USB_IN_BUS_OUT,
13+
POWER_MODE_USB_OUT_BUS_IN,
14+
POWER_MODE_USB_OUT_BUS_OUT,
15+
};
1116

1217
class AXP2101 : public I2C_PORT {
1318
private:
@@ -52,6 +57,7 @@ class AXP2101 : public I2C_PORT {
5257
COULOMETER_PAUSE,
5358
COULOMETER_ENABLE,
5459
};
60+
5561
/* Init */
5662
bool begin(TwoWire* wire = &Wire1);
5763
/* Power input state */
@@ -97,10 +103,12 @@ class AXP2101 : public I2C_PORT {
97103
void coreS3_init();
98104
void coreS3_AW9523_init();
99105

100-
void setBoostEn(bool state);
106+
// Power Manage
101107
void setBusOutEn(bool state);
102-
void setBoostBusOutEn(bool state);
103108
void setUsbOtgEn(bool state);
109+
void setBoostEn(bool state);
110+
void setBoostBusOutEn(bool state);
111+
void powerModeSet(power_mode mode);
104112

105113
void coreS3_VBUS_boost(bool state);
106114
bool isSDCardExist();

0 commit comments

Comments
 (0)