LCOV - code coverage report
Current view: top level - zephyr/drivers/mfd - max22017.h Coverage Total Hit
Test: new.info Lines: 2.2 % 93 2
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Analog Devices Inc.
       3              :  * Copyright (c) 2024 Baylibre SAS
       4              :  *
       5              :  * SPDX-License-Identifier: Apache-2.0
       6              :  */
       7              : 
       8              : #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_MAX22017_H_
       9              : #define ZEPHYR_INCLUDE_DRIVERS_MFD_MAX22017_H_
      10              : 
      11              : #include <zephyr/device.h>
      12              : 
      13            0 : #define MAX22017_LDAC_TOGGLE_TIME 200
      14            0 : #define MAX22017_MAX_CHANNEL      2
      15            0 : #define MAX22017_CRC_POLY         0x8c /* reversed 0x31 poly for crc8-maxim */
      16              : 
      17            0 : #define MAX22017_GEN_ID_OFF     0x00
      18            0 : #define MAX22017_GEN_ID_PROD_ID GENMASK(15, 8)
      19            0 : #define MAX22017_GEN_ID_REV_ID  GENMASK(7, 0)
      20              : 
      21            0 : #define MAX22017_GEN_SERIAL_MSB_OFF        0x01
      22            0 : #define MAX22017_GEN_SERIAL_MSB_SERIAL_MSB GENMASK(15, 0)
      23              : 
      24            0 : #define MAX22017_GEN_SERIAL_LSB_OFF        0x02
      25            0 : #define MAX22017_GEN_SERIAL_LSB_SERIAL_LSB GENMASK(15, 0)
      26              : 
      27            0 : #define MAX22017_GEN_CNFG_OFF                0x03
      28            0 : #define MAX22017_GEN_CNFG_OPENWIRE_DTCT_CNFG GENMASK(15, 14)
      29            0 : #define MAX22017_GEN_CNFG_TMOUT_SEL          GENMASK(13, 10)
      30            0 : #define MAX22017_GEN_CNFG_TMOUT_CNFG         BIT(9)
      31            0 : #define MAX22017_GEN_CNFG_TMOUT_EN           BIT(8)
      32            0 : #define MAX22017_GEN_CNFG_THSHDN_CNFG        GENMASK(7, 6)
      33            0 : #define MAX22017_GEN_CNFG_OVC_SHDN_CNFG      GENMASK(5, 4)
      34            0 : #define MAX22017_GEN_CNFG_OVC_CNFG           GENMASK(3, 2)
      35            0 : #define MAX22017_GEN_CNFG_CRC_EN             BIT(1)
      36            0 : #define MAX22017_GEN_CNFG_DACREF_SEL         BIT(0)
      37              : 
      38            0 : #define MAX22017_GEN_GPIO_CTRL_OFF      0x04
      39            0 : #define MAX22017_GEN_GPIO_CTRL_GPIO_EN  GENMASK(13, 8)
      40            0 : #define MAX22017_GEN_GPIO_CTRL_GPIO_DIR GENMASK(5, 0)
      41              : 
      42            0 : #define MAX22017_GEN_GPIO_DATA_OFF      0x05
      43            0 : #define MAX22017_GEN_GPIO_DATA_GPO_DATA GENMASK(13, 8)
      44            0 : #define MAX22017_GEN_GPIO_DATA_GPI_DATA GENMASK(5, 0)
      45              : 
      46            0 : #define MAX22017_GEN_GPI_INT_OFF              0x06
      47            0 : #define MAX22017_GEN_GPI_INT_GPI_POS_EDGE_INT GENMASK(13, 8)
      48            0 : #define MAX22017_GEN_GPI_INT_GPI_NEG_EDGE_INT GENMASK(5, 0)
      49              : 
      50            0 : #define MAX22017_GEN_GPI_INT_STA_OFF                  0x07
      51            0 : #define MAX22017_GEN_GPI_INT_STA_GPI_POS_EDGE_INT_STA GENMASK(13, 8)
      52            0 : #define MAX22017_GEN_GPI_INT_STA_GPI_NEG_EDGE_INT_STA GENMASK(5, 0)
      53              : 
      54            0 : #define MAX22017_GEN_INT_OFF               0x08
      55            0 : #define MAX22017_GEN_INT_FAIL_INT          BIT(15)
      56            0 : #define MAX22017_GEN_INT_CONV_OVF_INT      GENMASK(13, 12)
      57            0 : #define MAX22017_GEN_INT_OPENWIRE_DTCT_INT GENMASK(11, 10)
      58            0 : #define MAX22017_GEN_INT_HVDD_INT          BIT(9)
      59            0 : #define MAX22017_GEN_INT_TMOUT_INT         BIT(8)
      60            0 : #define MAX22017_GEN_INT_THSHDN_INT        GENMASK(7, 6)
      61            0 : #define MAX22017_GEN_INT_THWRNG_INT        GENMASK(5, 4)
      62            0 : #define MAX22017_GEN_INT_OVC_INT           GENMASK(3, 2)
      63            0 : #define MAX22017_GEN_INT_CRC_INT           BIT(1)
      64            0 : #define MAX22017_GEN_INT_GPI_INT           BIT(0)
      65              : 
      66            0 : #define MAX22017_GEN_INTEN_OFF                 0x09
      67            0 : #define MAX22017_GEN_INTEN_CONV_OVF_INTEN      GENMASK(13, 12)
      68            0 : #define MAX22017_GEN_INTEN_OPENWIRE_DTCT_INTEN GENMASK(11, 10)
      69            0 : #define MAX22017_GEN_INTEN_HVDD_INTEN          BIT(9)
      70            0 : #define MAX22017_GEN_INTEN_TMOUT_INTEN         BIT(8)
      71            0 : #define MAX22017_GEN_INTEN_THSHDN_INTEN        GENMASK(7, 6)
      72            0 : #define MAX22017_GEN_INTEN_THWRNG_INTEN        GENMASK(5, 4)
      73            0 : #define MAX22017_GEN_INTEN_OVC_INTEN           GENMASK(3, 2)
      74            0 : #define MAX22017_GEN_INTEN_CRC_INTEN           BIT(1)
      75            0 : #define MAX22017_GEN_INTEN_GPI_INTEN           BIT(0)
      76              : 
      77            0 : #define MAX22017_GEN_RST_CTRL_OFF             0x0A
      78            0 : #define MAX22017_GEN_RST_CTRL_AO_COEFF_RELOAD GENMASK(15, 14)
      79            0 : #define MAX22017_GEN_RST_CTRL_GEN_RST         BIT(9)
      80              : 
      81            0 : #define MAX22017_AO_CMD_OFF        0x40
      82            0 : #define MAX22017_AO_CMD_AO_LD_CTRL GENMASK(15, 14)
      83              : 
      84            0 : #define MAX22017_AO_STA_OFF      0x41
      85            0 : #define MAX22017_AO_STA_BUSY_STA GENMASK(15, 14)
      86            0 : #define MAX22017_AO_STA_SLEW_STA GENMASK(13, 12)
      87            0 : #define MAX22017_AO_STA_FAIL_STA BIT(0)
      88              : 
      89            0 : #define MAX22017_AO_CNFG_OFF                  0x42
      90            0 : #define MAX22017_AO_CNFG_AO_LD_CNFG           GENMASK(15, 14)
      91            0 : #define MAX22017_AO_CNFG_AO_CM_SENSE          GENMASK(13, 12)
      92            0 : #define MAX22017_AO_CNFG_AO_UNI               GENMASK(11, 10)
      93            0 : #define MAX22017_AO_CNFG_AO_MODE              GENMASK(9, 8)
      94            0 : #define MAX22017_AO_CNFG_AO_OPENWIRE_DTCT_LMT GENMASK(5, 4)
      95            0 : #define MAX22017_AO_CNFG_AI_EN                GENMASK(3, 2)
      96            0 : #define MAX22017_AO_CNFG_AO_EN                GENMASK(1, 0)
      97              : 
      98            0 : #define MAX22017_AO_SLEW_RATE_CHn_OFF(n)                (0x43 + n)
      99            0 : #define MAX22017_AO_SLEW_RATE_CHn_AO_SR_EN_CHn          BIT(5)
     100            0 : #define MAX22017_AO_SLEW_RATE_CHn_AO_SR_SEL_CHn         BIT(4)
     101            0 : #define MAX22017_AO_SLEW_RATE_CHn_AO_SR_STEP_SIZE_CHn   GENMASK(3, 2)
     102            0 : #define MAX22017_AO_SLEW_RATE_CHn_AO_SR_UPDATE_RATE_CHn GENMASK(1, 0)
     103              : 
     104            0 : #define MAX22017_AO_DATA_CHn_OFF(n)     (0x45 + n)
     105            0 : #define MAX22017_AO_DATA_CHn_AO_DATA_CH GENMASK(15, 0)
     106              : 
     107            0 : #define MAX22017_AO_OFFSET_CORR_CHn_OFF(n)       (0x47 + (2 * n))
     108            0 : #define MAX22017_AO_OFFSET_CORR_CHn_AO_OFFSET_CH GENMASK(15, 0)
     109              : 
     110            0 : #define MAX22017_AO_GAIN_CORR_CHn_OFF(n)     (0x48 + (2 * n))
     111            0 : #define MAX22017_AO_GAIN_CORR_CHn_AO_GAIN_CH GENMASK(15, 0)
     112              : 
     113            0 : #define MAX22017_SPI_TRANS_ADDR    GENMASK(7, 1)
     114            0 : #define MAX22017_SPI_TRANS_DIR     BIT(0)
     115            0 : #define MAX22017_SPI_TRANS_PAYLOAD GENMASK(15, 0)
     116              : 
     117              : /**
     118              :  * @defgroup mdf_interface_max22017 MFD MAX22017 interface
     119              :  * @ingroup mfd_interfaces
     120              :  * @{
     121              :  */
     122              : 
     123              : /**
     124              :  * @brief Read register from max22017
     125              :  *
     126              :  * @param dev max22017 mfd device
     127              :  * @param addr register address to read from
     128              :  * @param value pointer to buffer for received data
     129              :  * @retval 0 If successful
     130              :  * @retval -errno In case of any error (see spi_transceive_dt())
     131              :  */
     132            1 : int max22017_reg_read(const struct device *dev, uint8_t addr, uint16_t *value);
     133              : 
     134              : /**
     135              :  * @brief Write register to max22017
     136              :  *
     137              :  * @param dev max22017 mfd device
     138              :  * @param addr register address to write to
     139              :  * @param value content to write
     140              :  * @retval 0 If successful
     141              :  * @retval -errno In case of any error (see spi_write_dt())
     142              :  */
     143            1 : int max22017_reg_write(const struct device *dev, uint8_t addr, uint16_t value);
     144              : 
     145              : /**
     146              :  * @}
     147              :  */
     148              : 
     149            0 : struct max22017_data {
     150            0 :         const struct device *dev;
     151            0 :         struct k_mutex lock;
     152            0 :         struct k_work int_work;
     153            0 :         struct gpio_callback callback_int;
     154            0 :         bool crc_enabled;
     155              : #ifdef CONFIG_GPIO_MAX22017
     156              :         sys_slist_t callbacks_gpi;
     157              : #endif
     158              : };
     159              : 
     160              : #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_MAX22017_H_ */
        

Generated by: LCOV version 2.0-1