Przeglądaj źródła

Fixed resetting interrupt

Stefan Krupop 8 miesięcy temu
rodzic
commit
672aca8258
1 zmienionych plików z 4 dodań i 2 usunięć
  1. 4 2
      components/services/gpio_exp.c

+ 4 - 2
components/services/gpio_exp.c

@@ -689,7 +689,9 @@ static void aw9523_set_direction(gpio_exp_t* self) {
 }
 
 static uint32_t aw9523_read(gpio_exp_t* self) {
-	return i2c_read(self->phy.port, self->phy.addr, 0x00, 2);
+	// Reading both registers in one go does not seem to reset IRQ correctly
+	uint8_t port1 = i2c_read(self->phy.port, self->phy.addr, 0x00, 1);
+	return (i2c_read(self->phy.port, self->phy.addr, 0x01, 1) << 8) | port1;
 }
 
 static void aw9523_write(gpio_exp_t* self) {
@@ -818,4 +820,4 @@ static uint32_t spi_read(spi_device_handle_t handle, uint8_t addr, uint8_t reg,
 	free(transaction);
 
 	return data;
-}
+}