This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 712aea0f27d1bc5b0c7b5bb017e08bf39208f8e0
Author: Jerzy Kasenberg <jerzy.kasenb...@codecoup.pl>
AuthorDate: Tue Apr 23 14:51:13 2019 +0200

    hw/drivers/adc: Add battery reading channel
    
    When application wants to use ADC (GP or SD) for battery
    reading it may enable it with GPADC_BATTERY or SDADC_BATTERY
    open device BATTERY_ADC_DEV_NAME and read value from ADC.
    
    adc = (struct adc_dev *)da1469x_open_battery_adc(BATTERY_ADC_DEV_NAME, 1);
    adc_read_channel(adc, BATTERY_ADC_CHANNEL, &bat_val);
    os_dev_close(&adc->ad_dev);
---
 .../include/gpadc_da1469x/gpadc_da1469x.h          |  7 ++++++
 hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c   | 27 ++++++++++++++++++++++
 .../include/sdadc_da1469x/sdadc_da1469x.h          |  7 ++++++
 hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c   | 25 ++++++++++++++++++++
 hw/mcu/dialog/da1469x/syscfg.yml                   | 12 ++++++++++
 5 files changed, 78 insertions(+)

diff --git a/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h 
b/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h
index c8bf3e3..01b9b27 100644
--- a/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h
+++ b/hw/drivers/adc/gpadc_da1469x/include/gpadc_da1469x/gpadc_da1469x.h
@@ -66,6 +66,13 @@ struct da1469x_gpadc_chan_cfg {
  */
 int da1469x_gpadc_init(struct os_dev *, void *);
 
+#if MYNEWT_VAL(GPADC_BATTERY)
+
+#define BATTERY_ADC_DEV_NAME    "gpadc"
+
+struct os_dev *da1469x_open_battery_adc(const char *dev_name, uint32_t wait);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c 
b/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c
index 28b5031..0a7faea 100644
--- a/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c
+++ b/hw/drivers/adc/gpadc_da1469x/src/gpadc_da1469x.c
@@ -662,3 +662,30 @@ da1469x_gpadc_init(struct os_dev *odev, void *arg)
 
     return 0;
 }
+
+#if MYNEWT_VAL(GPADC_BATTERY)
+
+static struct da1469x_gpadc_dev_cfg os_bsp_gpadc_battery_cfg = {
+    .dgdc_gpadc_ctrl = (1U << GPADC_GP_ADC_CTRL_REG_GP_ADC_SE_Pos) |
+                       (8U << GPADC_GP_ADC_CTRL_REG_GP_ADC_SEL_Pos),
+    .dgdc_gpadc_ctrl2 = 0,
+    .dgdc_gpadc_ctrl3 = 0,
+    .dgdc_gpadc_set_offp = 0,
+    .dgdc_gpadc_set_offn = 0,
+    .dgdc_gpadc_offp = 0,
+    .dgdc_gpadc_offn = 0,
+};
+
+struct os_dev *
+da1469x_open_battery_adc(const char *dev_name, uint32_t wait)
+{
+    struct os_dev *adc = os_dev_open(dev_name, wait, 
&os_bsp_gpadc_battery_cfg);
+    if (adc) {
+        /* call adc_chan_config to setup correct multiplier so read returns
+         * value in mV */
+        adc_chan_config((struct adc_dev *)adc, 0, NULL);
+    }
+    return adc;
+}
+
+#endif
diff --git a/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h 
b/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h
index 81b8ce6..7244315 100644
--- a/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h
+++ b/hw/drivers/adc/sdadc_da1469x/include/sdadc_da1469x/sdadc_da1469x.h
@@ -63,6 +63,13 @@ struct da1469x_sdadc_chan_cfg {
  */
 int da1469x_sdadc_init(struct os_dev *, void *);
 
+#if MYNEWT_VAL(SDADC_BATTERY)
+
+#define BATTERY_ADC_DEV_NAME    "sdadc"
+
+struct os_dev *da1469x_open_battery_adc(const char *dev_name, uint32_t wait);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c 
b/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c
index dab155f..baef543 100644
--- a/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c
+++ b/hw/drivers/adc/sdadc_da1469x/src/sdadc_da1469x.c
@@ -453,3 +453,28 @@ da1469x_sdadc_init(struct os_dev *odev, void *arg)
 
     return 0;
 }
+
+#if MYNEWT_VAL(SDADC_BATTERY)
+
+static struct da1469x_sdadc_dev_cfg os_bsp_adc_battery_cfg = {
+    .dsdc_sdadc_ctrl = (1U << SDADC_SDADC_CTRL_REG_SDADC_SE_Pos) |
+                       (8U << SDADC_SDADC_CTRL_REG_SDADC_INP_SEL_Pos),
+    .dsdc_sdadc_gain_corr = 0,
+    .dsdc_sdadc_offs_corr = 0,
+    .dsdc_sdadc_set_gain_corr = 0,
+    .dsdc_sdadc_set_offs_corr = 0,
+};
+
+struct os_dev *
+da1469x_open_battery_adc(const char *dev_name, uint32_t wait)
+{
+    struct os_dev *adc = os_dev_open(dev_name, wait, &os_bsp_adc_battery_cfg);
+    if (adc) {
+        /* call adc_chan_config to setup correct multiplier so read returns
+         * value in mV */
+        adc_chan_config((struct adc_dev *)adc, 0, NULL);
+    }
+    return adc;
+}
+
+#endif
diff --git a/hw/mcu/dialog/da1469x/syscfg.yml b/hw/mcu/dialog/da1469x/syscfg.yml
index 58fc080..bce3120 100644
--- a/hw/mcu/dialog/da1469x/syscfg.yml
+++ b/hw/mcu/dialog/da1469x/syscfg.yml
@@ -286,6 +286,12 @@ syscfg.defs:
         description: >
           'DMA priority for GPADC, 0-7'
         value: 0
+    GPADC_BATTERY:
+        description: >
+          Enable battery measurement on GPADC
+        value: 0
+        restrictions:
+            - '!SDADC_BATTERY'
 
     SDADC:
         description: Enable DA1469x sigma delta ADC
@@ -298,6 +304,12 @@ syscfg.defs:
         description: >
           'DMA priority for SDADC, 0-7'
         value: 0
+    SDADC_BATTERY:
+        description: >
+          Enable battery measurement on SDADC
+        value: 0
+        restrictions:
+            - '!GPADC_BATTERY'
 
 syscfg.restrictions:
     - "QSPI_FLASH_ADDRESS_LENGTH==24"

Reply via email to