diff --git a/cpu/atmega_common/periph/adc.c b/cpu/atmega_common/periph/adc.c index 52271feaf5ebe..28de07f9a914c 100644 --- a/cpu/atmega_common/periph/adc.c +++ b/cpu/atmega_common/periph/adc.c @@ -25,6 +25,7 @@ #include "cpu.h" #include "mutex.h" #include "periph/adc.h" +#include "periph/pm.h" #include "periph_conf.h" #define ADC_MAX_CLK (200000U) @@ -33,6 +34,7 @@ static mutex_t lock = MUTEX_INIT; static inline void _prep(void) { + pm_block(3); /* Require clkADC */ mutex_lock(&lock); /* Enable ADC */ ADCSRA |= (1 << ADEN); @@ -43,6 +45,7 @@ static inline void _done(void) /* Disable ADC */ ADCSRA &= ~(1 << ADEN); mutex_unlock(&lock); + pm_unblock(3); } int adc_init(adc_t line) diff --git a/cpu/atmega_common/periph/i2c.c b/cpu/atmega_common/periph/i2c.c index 118eb0964896a..d7425688edc7b 100644 --- a/cpu/atmega_common/periph/i2c.c +++ b/cpu/atmega_common/periph/i2c.c @@ -31,6 +31,7 @@ #include "cpu.h" #include "mutex.h" #include "periph/i2c.h" +#include "periph/pm.h" #include "periph_conf.h" #define ENABLE_DEBUG 0 @@ -226,6 +227,7 @@ void i2c_acquire(i2c_t dev) { assert(dev < I2C_NUMOF); + pm_block(4); /* Require clkIO */ mutex_lock(&locks[dev]); } @@ -234,6 +236,7 @@ void i2c_release(i2c_t dev) assert(dev < I2C_NUMOF); mutex_unlock(&locks[dev]); + pm_unblock(4); } static void i2c_poweron(i2c_t dev) diff --git a/cpu/atmega_common/periph/spi.c b/cpu/atmega_common/periph/spi.c index 4231f4929baae..7dc3370996738 100644 --- a/cpu/atmega_common/periph/spi.c +++ b/cpu/atmega_common/periph/spi.c @@ -31,6 +31,7 @@ #include "cpu.h" #include "mutex.h" #include "periph/spi.h" +#include "periph/pm.h" /** * @brief Extract BR0, BR1 and SPI2X bits from speed value @@ -89,6 +90,7 @@ void spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk) assert(bus == SPI_DEV(0)); /* lock the bus and power on the SPI peripheral */ + pm_block(4); /* Require clkIO */ mutex_lock(&lock); #ifdef PRSPI power_spi_enable(); @@ -112,6 +114,7 @@ void spi_release(spi_t bus) power_spi_disable(); #endif mutex_unlock(&lock); + pm_unblock(4); } void spi_transfer_bytes(spi_t bus, spi_cs_t cs, bool cont,