Skip to content

Commit 8dc3d9c

Browse files
committed
fix(adc): Add weak definitions for p4 rev 3
1 parent d7de489 commit 8dc3d9c

File tree

1 file changed

+38
-5
lines changed

1 file changed

+38
-5
lines changed

cores/esp32/esp32-hal-adc.c

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,39 @@
2121
#include "esp_adc/adc_continuous.h"
2222
#include "esp_adc/adc_cali_scheme.h"
2323

24+
#if CONFIG_IDF_TARGET_ESP32P4 && CONFIG_ESP32P4_REV_MIN_FULL >= 300
25+
// NOTE: These weak definitions allow successful linkage if the real efuse calibration functions are missing.
26+
// This is a workaround for the ESP32P4 rev 3.0+, which is missing efuse calibration functions in the IDF.
27+
__attribute__((weak)) uint32_t esp_efuse_rtc_calib_get_ver(void)
28+
{
29+
return 0;
30+
}
31+
32+
__attribute__((weak)) uint32_t esp_efuse_rtc_calib_get_init_code(uint32_t atten, uint32_t *code)
33+
{
34+
if (code) {
35+
*code = 0;
36+
}
37+
return 0; // 0 means success in ESP-IDF conventions
38+
}
39+
40+
__attribute__((weak)) uint32_t esp_efuse_rtc_calib_get_chan_compens(uint32_t atten, uint32_t *comp)
41+
{
42+
if (comp) {
43+
*comp = 0;
44+
}
45+
return 0;
46+
}
47+
48+
__attribute__((weak)) uint32_t esp_efuse_rtc_calib_get_cal_voltage(uint32_t atten, uint32_t *voltage)
49+
{
50+
if (voltage) {
51+
*voltage = 0;
52+
}
53+
return 0;
54+
}
55+
#endif
56+
2457
// ESP32-C2 does not define those two for some reason
2558
#ifndef SOC_ADC_DIGI_RESULT_BYTES
2659
#define SOC_ADC_DIGI_RESULT_BYTES (4)
@@ -75,7 +108,7 @@ static bool adcDetachBus(void *pin) {
75108
if (err != ESP_OK) {
76109
return false;
77110
}
78-
#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4))
111+
#elif //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
79112
err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle);
80113
if (err != ESP_OK) {
81114
return false;
@@ -127,7 +160,7 @@ esp_err_t __analogChannelConfig(adc_bitwidth_t width, adc_attenuation_t atten, i
127160
log_e("adc_cali_create_scheme_curve_fitting failed with error: %d", err);
128161
return err;
129162
}
130-
#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
163+
#elif //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
131164
log_d("Deleting ADC_UNIT_%d line cali handle", adc_unit);
132165
err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle);
133166
if (err != ESP_OK) {
@@ -310,7 +343,7 @@ uint32_t __analogReadMilliVolts(uint8_t pin) {
310343
.bitwidth = __analogWidth,
311344
};
312345
err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_handle[adc_unit].adc_cali_handle);
313-
#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
346+
#elif //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
314347
adc_cali_line_fitting_config_t cali_config = {
315348
.unit_id = adc_unit,
316349
.bitwidth = __analogWidth,
@@ -379,7 +412,7 @@ static bool adcContinuousDetachBus(void *adc_unit_number) {
379412
if (err != ESP_OK) {
380413
return false;
381414
}
382-
#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4))
415+
#elif //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
383416
err = adc_cali_delete_scheme_line_fitting(adc_handle[adc_unit].adc_cali_handle);
384417
if (err != ESP_OK) {
385418
return false;
@@ -552,7 +585,7 @@ bool analogContinuous(const uint8_t pins[], size_t pins_count, uint32_t conversi
552585
.bitwidth = __adcContinuousWidth,
553586
};
554587
err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_handle[adc_unit].adc_cali_handle);
555-
#elif (!defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32P4)) //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
588+
#elif //ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
556589
adc_cali_line_fitting_config_t cali_config = {
557590
.unit_id = adc_unit,
558591
.bitwidth = __adcContinuousWidth,

0 commit comments

Comments
 (0)