Skip to content

Commit 26eb429

Browse files
committed
restore install/delete for i2c driver
1 parent 7ab75fa commit 26eb429

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

ports/esp32s2/common-hal/busio/I2C.c

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ void i2c_reset(void) {
5353
}
5454
}
5555
}
56-
static bool i2c_inited[I2C_NUM_MAX];
5756

5857
void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
5958
const mcu_pin_obj_t* scl, const mcu_pin_obj_t* sda, uint32_t frequency, uint32_t timeout) {
@@ -90,10 +89,9 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
9089
#endif
9190

9291

93-
if (xSemaphoreCreateBinaryStatic(&self->semaphore) != &self->semaphore) {
92+
if (xSemaphoreCreateMutexStatic(&self->semaphore) != &self->semaphore) {
9493
mp_raise_RuntimeError(translate("Unable to create lock"));
9594
}
96-
xSemaphoreGive(&self->semaphore);
9795
self->sda_pin = sda;
9896
self->scl_pin = scl;
9997
self->i2c_num = I2C_NUM_MAX;
@@ -106,34 +104,29 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
106104
mp_raise_ValueError(translate("All I2C peripherals are in use"));
107105
}
108106
i2c_status[self->i2c_num] = STATUS_IN_USE;
107+
108+
// Delete any previous driver.
109+
i2c_driver_delete(self->i2c_num);
110+
109111
i2c_config_t i2c_conf = {
110112
.mode = I2C_MODE_MASTER,
111113
.sda_io_num = self->sda_pin->number,
112114
.scl_io_num = self->scl_pin->number,
113-
.sda_pullup_en = GPIO_PULLUP_DISABLE, /*!< Internal GPIO pull mode for I2C sda signal*/
114-
.scl_pullup_en = GPIO_PULLUP_DISABLE, /*!< Internal GPIO pull mode for I2C scl signal*/
115115

116116
.master = {
117117
.clk_speed = frequency,
118118
}
119119
};
120-
esp_err_t result = i2c_param_config(self->i2c_num, &i2c_conf);
121-
if (result != ESP_OK) {
122-
mp_raise_ValueError(translate("Invalid pins"));
120+
if (i2c_param_config(self->i2c_num, &i2c_conf) != ESP_OK) {
121+
mp_raise_ValueError(translate("Invalid frequency"));
123122
}
124123

125-
126-
if (!i2c_inited[self->i2c_num]) {
127-
result = i2c_driver_install(self->i2c_num,
128-
I2C_MODE_MASTER,
129-
0,
130-
0,
131-
0);
132-
if (result != ESP_OK) {
133-
mp_raise_OSError(MP_EIO);
134-
}
135-
i2c_inited[self->i2c_num] = true;
136-
124+
if (i2c_driver_install(self->i2c_num,
125+
I2C_MODE_MASTER,
126+
0,
127+
0,
128+
0) != ESP_OK) {
129+
mp_raise_OSError(MP_EIO);
137130
}
138131

139132
claim_pin(sda);
@@ -149,12 +142,14 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
149142
return;
150143
}
151144

152-
i2c_status[self->i2c_num] = STATUS_FREE;
145+
i2c_driver_delete(self->i2c_num);
153146

154-
common_hal_reset_pin(self->sda_pin);
155147
common_hal_reset_pin(self->scl_pin);
148+
common_hal_reset_pin(self->sda_pin);
156149
self->sda_pin = NULL;
157150
self->scl_pin = NULL;
151+
152+
i2c_status[self->i2c_num] = STATUS_FREE;
158153
}
159154

160155
bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {

ports/esp32s2/common-hal/wifi/__init__.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ void common_hal_wifi_init(void) {
109109

110110
wifi_radio_obj_t* self = &common_hal_wifi_radio_obj;
111111
self->netif = esp_netif_create_default_wifi_sta();
112+
self->started = false;
112113

113114
// Even though we just called esp_netif_create_default_wifi_sta,
114115
// station mode isn't actually ready for use until esp_wifi_set_mode()

0 commit comments

Comments
 (0)