diff --git a/halimpl/config/README.md b/halimpl/config/README.md
index de62154..67c6a53 100644
--- a/halimpl/config/README.md
+++ b/halimpl/config/README.md
@@ -70,6 +70,8 @@
 * if the file path has `<country>` in it, `<country>` part will be replaced with country code (or region string)
 * if the file path has `<sku>` in it, `<sku>` part will be replace with the 'persist.vendor.uwb.cal.sku' property value.
   if `persist.vendor.uwb.cal.sku` is unspecified, HAL will try to use `defaultsku` as a default.
+* if the file path has `<revision>` in it, `<revision>` part will be replace with the 'persist.vendor.uwb.cal.revision' property value.
+  if `persist.vendor.uwb.cal.revision` is unspecified, HAL will try to use `defaultrevision` as a default.
 
 Example:
 
@@ -79,7 +81,8 @@
 EXTRA_CONF_PATH_1="/vendor/etc/uwb/cal-base.conf"
 EXTRA_CONF_PATH_2="/vendor/etc/uwb/cal-<sku>.conf"
 EXTRA_CONF_PATH_3="/vendor/etc/uwb/cal-<country>.conf"
-EXTRA_CONF_PATH_4="/mnt/vendor/persist/uwb/cal-factory.conf"
+EXTRA_CONF_PATH_4="/vendor/etc/uwb/cal-<revision>.conf"
+EXTRA_CONF_PATH_5="/mnt/vendor/persist/uwb/cal-factory.conf"
 ```
 
 #### Region mapping
@@ -131,9 +134,33 @@
 
 e.g. `cal.xtal={11 00 11 00 3f 00}`
 
-##### *cal.ant`<antenna-id>`.ch`<channel-number>`.ant_delay*`=<16bit unsigned>`
+##### RX antenna delay
 
-Per-country, RX antenna delay value in Q14.2. e.g. `cal.ant1.ch5.ant_delay=2000`
+* *cal.ant`<antenna-id>`.ch`<channel-number>`.ant_delay*`=<16bit unsigned>`
+
+  Default RX antenna delay value in Q14.2.
+
+* *cal.ant`<antenna-id>`.ch`<channel-number>`.ant_delay.force_version*`=<16bit unsigned>`
+
+  Forcefully override *...ant_delay* value by specifying version number.
+  Platform can specify multiple version numbers for selecting alternate delay values
+  using *...ant_delay.force_value.`<version>`* property.
+
+* *cal.ant`<antenna-id>`.ch`<channel-number>`.ant_delay.force_value.`<version>`*`=<16bit unsigned>`
+
+  Alternate RX antenna delay value in Q14.2.
+  HAL will take this value if *...ant_delay.force_version=`<version>`* and
+  and *ant_delay.force_value.`<version>`* are provided.
+
+e.g.
+```
+cal.ant1.ch5.ant_delay=2000
+cal.ant1.ch5.ant_delay.force_version=2
+cal.ant1.cht.ant_delay.force_value.1=2100
+cal.ant1.cht.ant_delay.force_value.2=2200
+```
+
+In the above example, HAL applies 2200 for the antenna delay.
 
 ##### *cal.ant`<antenna-id>`.ch`<channel-number>`.tx_power*`=<byte array>`
 
@@ -165,7 +192,8 @@
 EXTRA_CONF_PATH_1="/vendor/etc/uwb/cal-base.conf"
 EXTRA_CONF_PATH_2="/vendor/etc/uwb/cal-<sku>.conf"
 EXTRA_CONF_PATH_3="/vendor/etc/uwb/cal-<country>.conf"
-EXTRA_CONF_PATH_4="/mnt/vendor/persist/uwb/cal-factory.conf"
+EXTRA_CONF_PATH_4="/vendor/etc/uwb/cal-<sku>-<revision>.conf"
+EXTRA_CONF_PATH_5="/mnt/vendor/persist/uwb/cal-factory.conf"
 
 # /vendor/etc/uwb/cal-base.conf:
 cal.rx_antenna_mask=0x03
@@ -205,4 +233,9 @@
 CE="AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LV LT LU MT NI NL NO PL PT RO SE SK SI"
 FCC="US CA"
 RESTRICTED="AR AM AZ BY ID KZ KG NP PK PY RU SB TJ TM UA UZ"
+
+# /vendor/etc/uwb/cal-modelA-EVT.conf:
+# effective when persist.vendor.uwb.cal.sku=modelA && persist.vendor.uwb.cal.revision=EVT
+cal.ant1.ch5.tx_power={02, 00, 11, 00}
+cal.ant1.ch9.tx_power={02, 00, 12, 00}
 ```
diff --git a/halimpl/hal/phNxpUciHal_ext.cc b/halimpl/hal/phNxpUciHal_ext.cc
index 21776f8..f5cc90d 100644
--- a/halimpl/hal/phNxpUciHal_ext.cc
+++ b/halimpl/hal/phNxpUciHal_ext.cc
@@ -572,14 +572,35 @@
           continue;
 
         const uint8_t ant_id = i + 1;
-        uint16_t delay_value;
-        char key[32];
-        std::snprintf(key, sizeof(key), "cal.ant%u.ch%u.ant_delay", ant_id, ch);
 
-        if (!NxpConfig_GetNum(key, &delay_value, 2))
+        uint16_t delay_value, version_value;
+        bool value_provided = false;
+
+        const std::string key_ant_delay = std::format("cal.ant{}.ch{}.ant_delay", ant_id, ch);
+        const std::string key_force_version = key_ant_delay + std::format(".force_version", ant_id, ch);
+
+        // 1) try cal.ant{N}.ch{N}.ant_delay.force_value.{N}
+        if (NxpConfig_GetNum(key_force_version.c_str(), &version_value, 2)) {
+          const std::string key_force_value = key_ant_delay + std::format(".force_value.{}", ant_id, ch, version_value);
+          if (NxpConfig_GetNum(key_force_value.c_str(), &delay_value, 2)) {
+            value_provided = true;
+            NXPLOG_UCIHAL_D("Apply RX_ANT_DELAY_CALIB %s = %u", key_force_value.c_str(), delay_value);
+          }
+        }
+
+        // 2) try cal.ant{N}.ch{N}.ant_delay
+        if (!value_provided) {
+          if (NxpConfig_GetNum(key_ant_delay.c_str(), &delay_value, 2)) {
+            value_provided = true;
+            NXPLOG_UCIHAL_D("Apply RX_ANT_DELAY_CALIB: %s = %u", key_ant_delay.c_str(), delay_value);
+          }
+        }
+
+        if (!value_provided) {
+          NXPLOG_UCIHAL_V("%s was not provided from configuration files.", key_ant_delay.c_str());
           continue;
+        }
 
-        NXPLOG_UCIHAL_D("Apply RX_ANT_DELAY_CALIB: %s = %u", key, delay_value);
         entries.push_back(ant_id);
         // Little Endian
         entries.push_back(delay_value & 0xff);
diff --git a/halimpl/utils/phNxpConfig.cc b/halimpl/utils/phNxpConfig.cc
index ad6faf3..b929a03 100644
--- a/halimpl/utils/phNxpConfig.cc
+++ b/halimpl/utils/phNxpConfig.cc
@@ -50,12 +50,17 @@
 static const char country_code_specifier[] = "<country>";
 static const char sku_specifier[] = "<sku>";
 static const char extid_specifier[] = "<extid>";
+static const char revision_specifier[] = "<revision>";
+
 static const char extid_config_name[] = "cal.extid";
 static const char extid_default_value[] = "defaultextid";
 
 static const char prop_name_calsku[] = "persist.vendor.uwb.cal.sku";
 static const char prop_default_calsku[] = "defaultsku";
 
+static const char prop_name_revision[] = "persist.vendor.uwb.cal.revision";
+static const char prop_default_revision[] = "defaultrevision";
+
 using namespace::std;
 
 class uwbParam
@@ -660,10 +665,12 @@
         string mCurSku;
         string mCurExtid;
         string mCurRegionCode;
+        string mCurRevision;
         void reset() {
             mCurSku.clear();
             mCurExtid.clear();
             mCurRegionCode.clear();
+            mCurRevision.clear();
         }
     };
     ExtraConfPathSpecifiers mExtraConfSpecifiers;
@@ -693,27 +700,28 @@
     bool updated = false;
 
     for (auto& [filename, config] : mExtraConfig) {
-        auto posSku = filename.find(sku_specifier);
-        auto posExtid = filename.find(extid_specifier);
-        auto posCountry = filename.find(country_code_specifier);
-
-        if (posSku == std::string::npos && posExtid == std::string::npos && posCountry == std::string::npos)
-            continue;
-
         std::string new_filename(filename);
 
+        auto posSku = filename.find(sku_specifier);
         if (posSku != std::string::npos && !mExtraConfSpecifiers.mCurSku.empty()) {
             new_filename.replace(posSku, strlen(sku_specifier), mExtraConfSpecifiers.mCurSku);
         }
+
+        auto posExtid = filename.find(extid_specifier);
         if (posExtid != std::string::npos && !mExtraConfSpecifiers.mCurExtid.empty()) {
-            posExtid = new_filename.find(extid_specifier);
             new_filename.replace(posExtid, strlen(extid_specifier), mExtraConfSpecifiers.mCurExtid);
         }
+
+        auto posCountry = filename.find(country_code_specifier);
         if (posCountry != std::string::npos && !mExtraConfSpecifiers.mCurRegionCode.empty()) {
-            posCountry = new_filename.find(country_code_specifier);
             new_filename.replace(posCountry, strlen(country_code_specifier), mExtraConfSpecifiers.mCurRegionCode);
         }
 
+        auto posRevision = filename.find(revision_specifier);
+        if (posRevision != std::string::npos && !mExtraConfSpecifiers.mCurRevision.empty()) {
+            new_filename.replace(posRevision, strlen(revision_specifier), mExtraConfSpecifiers.mCurRevision);
+        }
+
         // re-open the file if filepath got re-evaluated.
         if (new_filename != config.getFilePath()) {
             config.open(new_filename.c_str());
@@ -750,7 +758,9 @@
     }
 
     char sku_value[PROPERTY_VALUE_MAX];
+    char revision_value[PROPERTY_VALUE_MAX];
     property_get(prop_name_calsku, sku_value, prop_default_calsku);
+    property_get(prop_name_revision, revision_value, prop_default_revision);
 
     // Read EXTRA_CONF_PATH[N]
     for (int i = 1; i <= 10; i++) {
@@ -766,8 +776,9 @@
         mExtraConfig.emplace_back(std::move(entry));
     }
 
-    // evaluate <sku>
+    // evaluate <sku> and <revision>
     mExtraConfSpecifiers.mCurSku = sku_value;
+    mExtraConfSpecifiers.mCurRevision = revision_value;
     evaluateExtraConfPaths();
 
     // re-evaluate with "<extid>"
@@ -778,6 +789,8 @@
     mExtraConfSpecifiers.mCurExtid = extid_value;
     evaluateExtraConfPaths();
 
+    ALOGI("Provided specifiers: sku=[%s] revision=[%s] extid=[%s]", sku_value, revision_value, extid_value);
+
     // Pick one libuwb-countrycode.conf with the highest VERSION number
     // from multiple directories specified by COUNTRY_CODE_CAP_FILE_LOCATION
     unsigned long arrLen = 0;
