Skip to content

Commit c504bc2

Browse files
committed
Init AXP2101 from board.c
1 parent d8b9f64 commit c504bc2

File tree

1 file changed

+35
-0
lines changed
  • ports/espressif/boards/lilygo_twatch_s3

1 file changed

+35
-0
lines changed

ports/espressif/boards/lilygo_twatch_s3/board.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "supervisor/board.h"
88
#include "mpconfigboard.h"
99
#include "shared-bindings/busio/SPI.h"
10+
#include "shared-bindings/busio/I2C.h"
1011
#include "shared-bindings/fourwire/FourWire.h"
1112
#include "shared-bindings/microcontroller/Pin.h"
1213
#include "shared-module/displayio/__init__.h"
@@ -48,8 +49,42 @@ uint8_t display_init_sequence[] = {
4849
0x29, 0 | DELAY, 255,
4950
};
5051

52+
#define AXP2101_I2C_ADDRESS 0x34
53+
54+
static void write_register8(busio_i2c_obj_t *i2c, uint8_t reg, uint8_t value) {
55+
uint8_t buffer[2];
56+
buffer[0] = reg;
57+
buffer[1] = value;
58+
common_hal_busio_i2c_write(i2c, AXP2101_I2C_ADDRESS, buffer, 2);
59+
}
60+
61+
static void set_bit_in_register(busio_i2c_obj_t *i2c, uint8_t reg, uint8_t bitmask) {
62+
uint8_t buffer[2];
63+
buffer[0] = reg;
64+
buffer[1] = 0;
65+
common_hal_busio_i2c_write_read(i2c, AXP2101_I2C_ADDRESS, &buffer[0], 1, &buffer[1], 1);
66+
buffer[1] |= bitmask;
67+
common_hal_busio_i2c_write(i2c, AXP2101_I2C_ADDRESS, buffer, 2);
68+
}
69+
70+
static void enable_ldo(busio_i2c_obj_t *i2c, uint8_t ldo) {
71+
write_register8(i2c, ldo + 0x92, 0x1C); // 3300mV
72+
set_bit_in_register(i2c, 0x90, 1 << ldo);
73+
}
74+
75+
// Init the AXP2101 by hand as to not include XPOWERS lib.
76+
static void pmic_init(busio_i2c_obj_t *i2c) {
77+
enable_ldo(i2c, 0);
78+
enable_ldo(i2c, 5);
79+
write_register8(i2c, 0x18, 0x0F);
80+
write_register8(i2c, 0x27, 0x1F);
81+
}
82+
5183

5284
void board_init(void) {
85+
busio_i2c_obj_t *internal_i2c = common_hal_board_create_i2c(0);
86+
pmic_init(internal_i2c);
87+
5388
busio_spi_obj_t *spi = common_hal_board_create_spi(0);
5489
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
5590
bus->base.type = &fourwire_fourwire_type;

0 commit comments

Comments
 (0)