Skip to content

Commit

Permalink
adafruit-esp32s3-camera: set up backlight at boot & add solarize
Browse files Browse the repository at this point in the history
the backlight situation will be revisited with the next board prototype,
but it's good to prove this can be done.

Depends on adafruit/esp32-camera#6 which should
be merged before this.
  • Loading branch information
jepler committed Aug 2, 2023
1 parent 2b0f1cd commit 4e01e6b
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
64 changes: 64 additions & 0 deletions ports/espressif/boards/adafruit_esp32s3_camera/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
#include "shared-bindings/board/__init__.h"

#include "esp_log.h"
#include "esp_err.h"
#include "driver/i2c.h"

displayio_fourwire_obj_t board_display_obj;

Expand All @@ -50,7 +52,69 @@ uint8_t display_init_sequence[] = {
0x29, 0 | DELAY, 5, // _DISPON
};

#define I2C_MASTER_SCL_IO 34
#define I2C_MASTER_SDA_IO 33
#define I2C_MASTER_NUM 0
#define I2C_MASTER_FREQ_HZ 400000
#define I2C_MASTER_TX_BUF_DISABLE 0
#define I2C_MASTER_RX_BUF_DISABLE 0
#define I2C_MASTER_TIMEOUT_MS 1000
#define I2C_WAIT 40 // Timing (in microseconds) for I2C

#define AW9523_ADDR (0x5B)
#define AW9523_REG_SOFTRESET (0x7f)
#define AW9523_REG_OUTPUT0 (0x02)
#define AW9523_REG_CONFIG0 (0x04)
#define AW9523_DEFAULT_OUTPUT (0)
#define AW9523_DEFAULT_CONFIG (0x2)


static void io_expander_backlight_init(void) {
int i2c_num = I2C_MASTER_NUM;
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ,
};
i2c_param_config(i2c_num, &conf);
i2c_driver_install(i2c_num, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, AW9523_REG_SOFTRESET, true);
i2c_master_write_byte(cmd, 0, true);
i2c_master_stop(cmd);
i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);

cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, AW9523_REG_CONFIG0, true);
i2c_master_write_byte(cmd, AW9523_DEFAULT_CONFIG >> 8, true);
i2c_master_write_byte(cmd, AW9523_DEFAULT_CONFIG & 0xff, true);
i2c_master_stop(cmd);
i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);

cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, AW9523_REG_OUTPUT0, true);
i2c_master_write_byte(cmd, AW9523_DEFAULT_OUTPUT >> 8, true);
i2c_master_write_byte(cmd, AW9523_DEFAULT_OUTPUT & 0xff, true);
i2c_master_stop(cmd);
i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);

i2c_driver_delete(i2c_num);
}

void board_init(void) {
io_expander_backlight_init();
busio_spi_obj_t *spi = common_hal_board_create_spi(0);
displayio_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
bus->base.type = &displayio_fourwire_type;
Expand Down
2 changes: 1 addition & 1 deletion ports/espressif/esp32-camera

0 comments on commit 4e01e6b

Please sign in to comment.