|
38 | 38 | // Default: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
|
39 | 39 |
|
40 | 40 | // *INDENT-OFF*
|
41 |
| -#define REG_WR_OC_DEFAULT_VAL (0x0FUL) |
42 |
| -#define REG_WR_IO_DEFAULT_VAL (0xFFUL) |
| 41 | +#define REG_WR_OC_DEFAULT_VAL (0x0FU) |
| 42 | +#define REG_WR_IO_DEFAULT_VAL (0xFFU) |
43 | 43 | #define REG_OUT_DEFAULT_VAL ((REG_WR_OC_DEFAULT_VAL << 8) | REG_WR_IO_DEFAULT_VAL)
|
44 |
| -#define REG_DIR_DEFAULT_VAL (0xFFFUL) |
| 44 | +#define REG_DIR_DEFAULT_VAL (0xFFFU) |
45 | 45 |
|
46 |
| -#define REG_WR_SET_BIT_IO_OE (1 << 0) |
47 |
| -#define REG_WR_SET_BIT_OD_EN (1 << 2) |
| 46 | +#define REG_WR_SET_BIT_IO_OE (1U << 0) |
| 47 | +#define REG_WR_SET_BIT_OD_EN (1U << 2) |
| 48 | +#define REG_WR_SET_BIT_SLEEP (1U << 3) |
48 | 49 |
|
49 | 50 | /**
|
50 | 51 | * @brief Device Structure Type
|
@@ -171,6 +172,38 @@ esp_err_t esp_io_expander_ch422g_set_all_output(esp_io_expander_handle_t handle)
|
171 | 172 | return ESP_OK;
|
172 | 173 | }
|
173 | 174 |
|
| 175 | +esp_err_t esp_io_expander_ch422g_enter_sleep(esp_io_expander_handle_t handle) |
| 176 | +{ |
| 177 | + esp_io_expander_ch422g_t *ch422g = (esp_io_expander_ch422g_t *)__containerof(handle, esp_io_expander_ch422g_t, base); |
| 178 | + uint8_t data = (uint8_t)(ch422g->regs.wr_set | REG_WR_SET_BIT_SLEEP); |
| 179 | + |
| 180 | + // WR-SET |
| 181 | + ESP_RETURN_ON_ERROR( |
| 182 | + i2c_master_write_to_device( |
| 183 | + ch422g->i2c_num, CH422G_REG_WR_SET, &data, sizeof(data), pdMS_TO_TICKS(I2C_TIMEOUT_MS) |
| 184 | + ), TAG, "Write WR_SET reg failed" |
| 185 | + ); |
| 186 | + ch422g->regs.wr_set = data; |
| 187 | + |
| 188 | + return ESP_OK; |
| 189 | +} |
| 190 | + |
| 191 | +esp_err_t esp_io_expander_ch422g_exit_sleep(esp_io_expander_handle_t handle) |
| 192 | +{ |
| 193 | + esp_io_expander_ch422g_t *ch422g = (esp_io_expander_ch422g_t *)__containerof(handle, esp_io_expander_ch422g_t, base); |
| 194 | + uint8_t data = (uint8_t)(ch422g->regs.wr_set & ~REG_WR_SET_BIT_SLEEP); |
| 195 | + |
| 196 | + // WR-SET |
| 197 | + ESP_RETURN_ON_ERROR( |
| 198 | + i2c_master_write_to_device( |
| 199 | + ch422g->i2c_num, CH422G_REG_WR_SET, &data, sizeof(data), pdMS_TO_TICKS(I2C_TIMEOUT_MS) |
| 200 | + ), TAG, "Write WR_SET reg failed" |
| 201 | + ); |
| 202 | + ch422g->regs.wr_set = data; |
| 203 | + |
| 204 | + return ESP_OK; |
| 205 | +} |
| 206 | + |
174 | 207 | static esp_err_t read_input_reg(esp_io_expander_handle_t handle, uint32_t *value)
|
175 | 208 | {
|
176 | 209 | esp_io_expander_ch422g_t *ch422g = (esp_io_expander_ch422g_t *)__containerof(handle, esp_io_expander_ch422g_t, base);
|
|
0 commit comments