mirror of
https://github.com/esphome/esphome.git
synced 2026-02-28 09:54:19 -07:00
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
#ifdef USE_ESP32_VARIANT_ESP32P4
|
|
#include "esp_ldo.h"
|
|
#include "esphome/core/log.h"
|
|
#include "esphome/core/helpers.h"
|
|
|
|
namespace esphome {
|
|
namespace esp_ldo {
|
|
|
|
static const char *const TAG = "esp_ldo";
|
|
void EspLdo::setup() {
|
|
esp_ldo_channel_config_t config{};
|
|
config.chan_id = this->channel_;
|
|
config.voltage_mv = this->voltage_mv_;
|
|
config.flags.adjustable = this->adjustable_;
|
|
auto err = esp_ldo_acquire_channel(&config, &this->handle_);
|
|
if (err != ESP_OK) {
|
|
ESP_LOGE(TAG, "Failed to acquire LDO channel %d with voltage %dmV", this->channel_, this->voltage_mv_);
|
|
this->mark_failed(LOG_STR("Failed to acquire LDO channel"));
|
|
} else {
|
|
ESP_LOGD(TAG, "Acquired LDO channel %d with voltage %dmV", this->channel_, this->voltage_mv_);
|
|
}
|
|
}
|
|
void EspLdo::dump_config() {
|
|
ESP_LOGCONFIG(TAG,
|
|
"ESP LDO Channel %d:\n"
|
|
" Voltage: %dmV\n"
|
|
" Adjustable: %s",
|
|
this->channel_, this->voltage_mv_, YESNO(this->adjustable_));
|
|
}
|
|
|
|
void EspLdo::adjust_voltage(float voltage) {
|
|
if (!std::isfinite(voltage) || voltage < 0.5f || voltage > 2.7f) {
|
|
ESP_LOGE(TAG, "Invalid voltage %fV for LDO channel %d (must be 0.5V-2.7V)", voltage, this->channel_);
|
|
return;
|
|
}
|
|
int voltage_mv = (int) roundf(voltage * 1000.0f);
|
|
auto err = esp_ldo_channel_adjust_voltage(this->handle_, voltage_mv);
|
|
if (err != ESP_OK) {
|
|
ESP_LOGE(TAG, "Failed to adjust LDO channel %d to voltage %dmV: %s", this->channel_, voltage_mv,
|
|
esp_err_to_name(err));
|
|
}
|
|
}
|
|
|
|
} // namespace esp_ldo
|
|
} // namespace esphome
|
|
|
|
#endif // USE_ESP32_VARIANT_ESP32P4
|