MAX77658 Ultra-Low Power PMIC Mbed Driver

Committer:
Okan Sahin
Date:
Fri Aug 26 15:02:25 2022 +0300
Revision:
1:40ef1dc30cb7
Parent:
0:00d2a8670533
Child:
2:70a11f46a913
Coverity fixes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
metin.ozkan@analog.com 0:00d2a8670533 1 /*******************************************************************************
metin.ozkan@analog.com 0:00d2a8670533 2 * Copyright(C) Analog Devices Inc., All Rights Reserved.
metin.ozkan@analog.com 0:00d2a8670533 3 *
metin.ozkan@analog.com 0:00d2a8670533 4 * Permission is hereby granted, free of charge, to any person obtaining a
metin.ozkan@analog.com 0:00d2a8670533 5 * copy of this software and associated documentation files(the "Software"),
metin.ozkan@analog.com 0:00d2a8670533 6 * to deal in the Software without restriction, including without limitation
metin.ozkan@analog.com 0:00d2a8670533 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
metin.ozkan@analog.com 0:00d2a8670533 8 * and/or sell copies of the Software, and to permit persons to whom the
metin.ozkan@analog.com 0:00d2a8670533 9 * Software is furnished to do so, subject to the following conditions:
metin.ozkan@analog.com 0:00d2a8670533 10 *
metin.ozkan@analog.com 0:00d2a8670533 11 * The above copyright notice and this permission notice shall be included
metin.ozkan@analog.com 0:00d2a8670533 12 * in all copies or substantial portions of the Software.
metin.ozkan@analog.com 0:00d2a8670533 13 *
metin.ozkan@analog.com 0:00d2a8670533 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
metin.ozkan@analog.com 0:00d2a8670533 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
metin.ozkan@analog.com 0:00d2a8670533 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
metin.ozkan@analog.com 0:00d2a8670533 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
metin.ozkan@analog.com 0:00d2a8670533 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
metin.ozkan@analog.com 0:00d2a8670533 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
metin.ozkan@analog.com 0:00d2a8670533 20 * OTHER DEALINGS IN THE SOFTWARE.
metin.ozkan@analog.com 0:00d2a8670533 21 *
metin.ozkan@analog.com 0:00d2a8670533 22 * Except as contained in this notice, the name of Analog Devices Inc.
metin.ozkan@analog.com 0:00d2a8670533 23 * shall not be used except as stated in the Analog Devices Inc.
metin.ozkan@analog.com 0:00d2a8670533 24 * Branding Policy.
metin.ozkan@analog.com 0:00d2a8670533 25 *
metin.ozkan@analog.com 0:00d2a8670533 26 * The mere transfer of this software does not imply any licenses
metin.ozkan@analog.com 0:00d2a8670533 27 * of trade secrets, proprietary technology, copyrights, patents,
metin.ozkan@analog.com 0:00d2a8670533 28 * trademarks, maskwork rights, or any other form of intellectual
metin.ozkan@analog.com 0:00d2a8670533 29 * property whatsoever. Analog Devices Inc.retains all ownership rights.
metin.ozkan@analog.com 0:00d2a8670533 30 *******************************************************************************
metin.ozkan@analog.com 0:00d2a8670533 31 */
metin.ozkan@analog.com 0:00d2a8670533 32
metin.ozkan@analog.com 0:00d2a8670533 33 #include <Thread.h>
metin.ozkan@analog.com 0:00d2a8670533 34 #include "MAX77658.h"
metin.ozkan@analog.com 0:00d2a8670533 35 #include <math.h>
metin.ozkan@analog.com 0:00d2a8670533 36
metin.ozkan@analog.com 0:00d2a8670533 37 #define POST_INTR_WORK_SIGNAL_ID 0x1
metin.ozkan@analog.com 0:00d2a8670533 38 #define TO_UINT8 0xFF
metin.ozkan@analog.com 0:00d2a8670533 39 #define TO_UINT16 0xFFFF
metin.ozkan@analog.com 0:00d2a8670533 40
metin.ozkan@analog.com 0:00d2a8670533 41 MAX77658::MAX77658(I2C *i2c, PinName IRQPin)
metin.ozkan@analog.com 0:00d2a8670533 42 {
metin.ozkan@analog.com 0:00d2a8670533 43 if (i2c == NULL)
metin.ozkan@analog.com 0:00d2a8670533 44 return;
metin.ozkan@analog.com 0:00d2a8670533 45
metin.ozkan@analog.com 0:00d2a8670533 46 i2c_handler = i2c;
metin.ozkan@analog.com 0:00d2a8670533 47
metin.ozkan@analog.com 0:00d2a8670533 48 if (IRQPin != NC) {
metin.ozkan@analog.com 0:00d2a8670533 49 irq_disable_all();
metin.ozkan@analog.com 0:00d2a8670533 50 post_intr_work_thread = new Thread();
metin.ozkan@analog.com 0:00d2a8670533 51 post_intr_work_thread->start(Callback<void()>(this, &MAX77658::post_interrupt_work));
metin.ozkan@analog.com 0:00d2a8670533 52
metin.ozkan@analog.com 0:00d2a8670533 53 this->irq_pin = new InterruptIn(IRQPin);
metin.ozkan@analog.com 0:00d2a8670533 54 this->irq_pin->fall(Callback<void()>(this, &MAX77658::interrupt_handler));
metin.ozkan@analog.com 0:00d2a8670533 55 this->irq_pin->enable_irq();
metin.ozkan@analog.com 0:00d2a8670533 56 } else {
metin.ozkan@analog.com 0:00d2a8670533 57 this->irq_pin = NULL;
metin.ozkan@analog.com 0:00d2a8670533 58 }
metin.ozkan@analog.com 0:00d2a8670533 59 }
metin.ozkan@analog.com 0:00d2a8670533 60
metin.ozkan@analog.com 0:00d2a8670533 61 MAX77658::~MAX77658()
metin.ozkan@analog.com 0:00d2a8670533 62 {
metin.ozkan@analog.com 0:00d2a8670533 63 if (post_intr_work_thread)
metin.ozkan@analog.com 0:00d2a8670533 64 delete post_intr_work_thread;
metin.ozkan@analog.com 0:00d2a8670533 65
metin.ozkan@analog.com 0:00d2a8670533 66 if (irq_pin)
metin.ozkan@analog.com 0:00d2a8670533 67 delete irq_pin;
metin.ozkan@analog.com 0:00d2a8670533 68 }
metin.ozkan@analog.com 0:00d2a8670533 69
metin.ozkan@analog.com 0:00d2a8670533 70 int MAX77658::read_register(uint8_t reg, uint8_t *value)
metin.ozkan@analog.com 0:00d2a8670533 71 {
metin.ozkan@analog.com 0:00d2a8670533 72 int rtn_val;
metin.ozkan@analog.com 0:00d2a8670533 73
metin.ozkan@analog.com 0:00d2a8670533 74 if (value == NULL)
metin.ozkan@analog.com 0:00d2a8670533 75 return MAX77658_VALUE_NULL;
metin.ozkan@analog.com 0:00d2a8670533 76
metin.ozkan@analog.com 0:00d2a8670533 77 rtn_val = i2c_handler->write(MAX77658_I2C_ADDRESS_PMIC_1, (const char *)&reg, 1, true);
metin.ozkan@analog.com 0:00d2a8670533 78 if (rtn_val != 0)
metin.ozkan@analog.com 0:00d2a8670533 79 return MAX77658_WRITE_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 80
metin.ozkan@analog.com 0:00d2a8670533 81 rtn_val = i2c_handler->read(MAX77658_I2C_ADDRESS_PMIC_1, (char *) value, 1, false);
metin.ozkan@analog.com 0:00d2a8670533 82 if (rtn_val < 0)
metin.ozkan@analog.com 0:00d2a8670533 83 return MAX77658_READ_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 84
metin.ozkan@analog.com 0:00d2a8670533 85 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 86 }
metin.ozkan@analog.com 0:00d2a8670533 87
metin.ozkan@analog.com 0:00d2a8670533 88 int MAX77658::write_register(uint8_t reg, const uint8_t *value)
metin.ozkan@analog.com 0:00d2a8670533 89 {
metin.ozkan@analog.com 0:00d2a8670533 90 int rtn_val;
metin.ozkan@analog.com 0:00d2a8670533 91 unsigned char local_data[2];
metin.ozkan@analog.com 0:00d2a8670533 92
metin.ozkan@analog.com 0:00d2a8670533 93 if (value == NULL)
metin.ozkan@analog.com 0:00d2a8670533 94 return MAX77658_VALUE_NULL;
metin.ozkan@analog.com 0:00d2a8670533 95
metin.ozkan@analog.com 0:00d2a8670533 96 local_data[0] = reg;
metin.ozkan@analog.com 0:00d2a8670533 97
metin.ozkan@analog.com 0:00d2a8670533 98 memcpy(&local_data[1], value, 1);
metin.ozkan@analog.com 0:00d2a8670533 99
metin.ozkan@analog.com 0:00d2a8670533 100 rtn_val = i2c_handler->write(MAX77658_I2C_ADDRESS_PMIC_1, (const char *)local_data, sizeof(local_data));
metin.ozkan@analog.com 0:00d2a8670533 101 if (rtn_val != MAX77658_NO_ERROR)
metin.ozkan@analog.com 0:00d2a8670533 102 return MAX77658_WRITE_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 103
metin.ozkan@analog.com 0:00d2a8670533 104 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 105 }
metin.ozkan@analog.com 0:00d2a8670533 106
metin.ozkan@analog.com 0:00d2a8670533 107 int MAX77658::read_fg_register(uint8_t reg, uint8_t *value)
metin.ozkan@analog.com 0:00d2a8670533 108 {
metin.ozkan@analog.com 0:00d2a8670533 109 int rtn_val;
metin.ozkan@analog.com 0:00d2a8670533 110
metin.ozkan@analog.com 0:00d2a8670533 111 if (value == NULL)
metin.ozkan@analog.com 0:00d2a8670533 112 return MAX77658_VALUE_NULL;
metin.ozkan@analog.com 0:00d2a8670533 113
metin.ozkan@analog.com 0:00d2a8670533 114 rtn_val = i2c_handler->write(MAX77658_I2C_ADDRESS_FG, (const char *)&reg, 1, true);
metin.ozkan@analog.com 0:00d2a8670533 115 if (rtn_val != 0)
metin.ozkan@analog.com 0:00d2a8670533 116 return MAX77658_WRITE_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 117
metin.ozkan@analog.com 0:00d2a8670533 118 rtn_val = i2c_handler->read(MAX77658_I2C_ADDRESS_FG, (char *) value, 2, false);
metin.ozkan@analog.com 0:00d2a8670533 119 if (rtn_val < 0)
metin.ozkan@analog.com 0:00d2a8670533 120 return MAX77658_READ_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 121
metin.ozkan@analog.com 0:00d2a8670533 122 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 123 }
metin.ozkan@analog.com 0:00d2a8670533 124
metin.ozkan@analog.com 0:00d2a8670533 125 int MAX77658::write_fg_register(uint8_t reg, const uint8_t *value)
metin.ozkan@analog.com 0:00d2a8670533 126 {
metin.ozkan@analog.com 0:00d2a8670533 127 int rtn_val;
metin.ozkan@analog.com 0:00d2a8670533 128 unsigned char local_data[3];
metin.ozkan@analog.com 0:00d2a8670533 129
metin.ozkan@analog.com 0:00d2a8670533 130 if (value == NULL)
metin.ozkan@analog.com 0:00d2a8670533 131 return MAX77658_VALUE_NULL;
metin.ozkan@analog.com 0:00d2a8670533 132
metin.ozkan@analog.com 0:00d2a8670533 133 local_data[0] = reg;
metin.ozkan@analog.com 0:00d2a8670533 134
metin.ozkan@analog.com 0:00d2a8670533 135 memcpy(&local_data[1], value, 2);
metin.ozkan@analog.com 0:00d2a8670533 136
metin.ozkan@analog.com 0:00d2a8670533 137 rtn_val = i2c_handler->write(MAX77658_I2C_ADDRESS_FG, (const char *)local_data, sizeof(local_data));
metin.ozkan@analog.com 0:00d2a8670533 138 if (rtn_val != MAX77658_NO_ERROR)
metin.ozkan@analog.com 0:00d2a8670533 139 return MAX77658_WRITE_DATA_FAILED;
metin.ozkan@analog.com 0:00d2a8670533 140
metin.ozkan@analog.com 0:00d2a8670533 141 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 142 }
metin.ozkan@analog.com 0:00d2a8670533 143
metin.ozkan@analog.com 0:00d2a8670533 144 #define SET_BIT_FIELD(address, reg_name, bit_field_name, value) \
metin.ozkan@analog.com 0:00d2a8670533 145 int ret_val; \
metin.ozkan@analog.com 0:00d2a8670533 146 ret_val = read_register(address, (uint8_t *)&(reg_name)); \
metin.ozkan@analog.com 0:00d2a8670533 147 if (ret_val) { \
metin.ozkan@analog.com 0:00d2a8670533 148 return ret_val; \
metin.ozkan@analog.com 0:00d2a8670533 149 } \
metin.ozkan@analog.com 0:00d2a8670533 150 bit_field_name = value; \
metin.ozkan@analog.com 0:00d2a8670533 151 ret_val = write_register(address, (uint8_t *)&(reg_name)); \
metin.ozkan@analog.com 0:00d2a8670533 152 if (ret_val) { \
metin.ozkan@analog.com 0:00d2a8670533 153 return ret_val; \
metin.ozkan@analog.com 0:00d2a8670533 154 }
metin.ozkan@analog.com 0:00d2a8670533 155
metin.ozkan@analog.com 0:00d2a8670533 156
metin.ozkan@analog.com 0:00d2a8670533 157
metin.ozkan@analog.com 0:00d2a8670533 158 #define SET_FG_BIT_FIELD(address, reg_name, bit_field_name, value) \
metin.ozkan@analog.com 0:00d2a8670533 159 int ret_val_fg; \
metin.ozkan@analog.com 0:00d2a8670533 160 ret_val_fg = read_fg_register(address, (uint8_t *)&(reg_name)); \
metin.ozkan@analog.com 0:00d2a8670533 161 if (ret_val_fg) { \
metin.ozkan@analog.com 0:00d2a8670533 162 return ret_val_fg; \
metin.ozkan@analog.com 0:00d2a8670533 163 } \
metin.ozkan@analog.com 0:00d2a8670533 164 bit_field_name = value; \
metin.ozkan@analog.com 0:00d2a8670533 165 ret_val_fg = write_fg_register(address, (uint8_t *)&(reg_name)); \
metin.ozkan@analog.com 0:00d2a8670533 166 if (ret_val_fg) { \
metin.ozkan@analog.com 0:00d2a8670533 167 return ret_val_fg; \
metin.ozkan@analog.com 0:00d2a8670533 168 }
metin.ozkan@analog.com 0:00d2a8670533 169
metin.ozkan@analog.com 0:00d2a8670533 170 int MAX77658::get_ercflag(reg_bit_ercflag_t bit_field, uint8_t *flag)
metin.ozkan@analog.com 0:00d2a8670533 171 {
metin.ozkan@analog.com 0:00d2a8670533 172 int ret;
Okan Sahin 1:40ef1dc30cb7 173 reg_ercflag_t reg_ercflag = {0};
metin.ozkan@analog.com 0:00d2a8670533 174
metin.ozkan@analog.com 0:00d2a8670533 175 ret = read_register(ERCFLAG, (uint8_t *)&(reg_ercflag));
metin.ozkan@analog.com 0:00d2a8670533 176 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 177
metin.ozkan@analog.com 0:00d2a8670533 178 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 179 {
metin.ozkan@analog.com 0:00d2a8670533 180 case ERCFLAG_TOVLD:
metin.ozkan@analog.com 0:00d2a8670533 181 *flag = (uint8_t)reg_ercflag.bits.tovld;
metin.ozkan@analog.com 0:00d2a8670533 182 break;
metin.ozkan@analog.com 0:00d2a8670533 183 case ERCFLAG_SYSOVLO:
metin.ozkan@analog.com 0:00d2a8670533 184 *flag = (uint8_t)reg_ercflag.bits.sysovlo;
metin.ozkan@analog.com 0:00d2a8670533 185 break;
metin.ozkan@analog.com 0:00d2a8670533 186 case ERCFLAG_SYSUVLO:
metin.ozkan@analog.com 0:00d2a8670533 187 *flag = (uint8_t)reg_ercflag.bits.sysuvlo;
metin.ozkan@analog.com 0:00d2a8670533 188 break;
metin.ozkan@analog.com 0:00d2a8670533 189 case ERCFLAG_MRST_F:
metin.ozkan@analog.com 0:00d2a8670533 190 *flag = (uint8_t)reg_ercflag.bits.mrst_f;
metin.ozkan@analog.com 0:00d2a8670533 191 break;
metin.ozkan@analog.com 0:00d2a8670533 192 case ERCFLAG_SFT_OFF_F:
metin.ozkan@analog.com 0:00d2a8670533 193 *flag = (uint8_t)reg_ercflag.bits.sft_off_f;
metin.ozkan@analog.com 0:00d2a8670533 194 break;
metin.ozkan@analog.com 0:00d2a8670533 195 case ERCFLAG_SFT_CRST_F:
metin.ozkan@analog.com 0:00d2a8670533 196 *flag = (uint8_t)reg_ercflag.bits.sft_crst_f;
metin.ozkan@analog.com 0:00d2a8670533 197 break;
metin.ozkan@analog.com 0:00d2a8670533 198 case ERCFLAG_WDT_OFF:
metin.ozkan@analog.com 0:00d2a8670533 199 *flag = (uint8_t)reg_ercflag.bits.wdt_off;
metin.ozkan@analog.com 0:00d2a8670533 200 break;
metin.ozkan@analog.com 0:00d2a8670533 201 case ERCFLAG_WDT_RST:
metin.ozkan@analog.com 0:00d2a8670533 202 *flag = (uint8_t)reg_ercflag.bits.wdt_rst;
metin.ozkan@analog.com 0:00d2a8670533 203 break;
metin.ozkan@analog.com 0:00d2a8670533 204 default:
metin.ozkan@analog.com 0:00d2a8670533 205 ret = MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 206 break;
metin.ozkan@analog.com 0:00d2a8670533 207 }
metin.ozkan@analog.com 0:00d2a8670533 208
metin.ozkan@analog.com 0:00d2a8670533 209 return ret;
metin.ozkan@analog.com 0:00d2a8670533 210 }
metin.ozkan@analog.com 0:00d2a8670533 211
metin.ozkan@analog.com 0:00d2a8670533 212 int MAX77658::get_stat_glbl(reg_bit_stat_glbl_t bit_field, uint8_t *status)
metin.ozkan@analog.com 0:00d2a8670533 213 {
metin.ozkan@analog.com 0:00d2a8670533 214 int ret;
Okan Sahin 1:40ef1dc30cb7 215 reg_stat_glbl_t reg_stat_glbl = {0};
metin.ozkan@analog.com 0:00d2a8670533 216
metin.ozkan@analog.com 0:00d2a8670533 217 ret = read_register(STAT_GLBL, (uint8_t *)&(reg_stat_glbl));
metin.ozkan@analog.com 0:00d2a8670533 218 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 219
metin.ozkan@analog.com 0:00d2a8670533 220 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 221 {
metin.ozkan@analog.com 0:00d2a8670533 222 case STAT_GLBL_STAT_IRQ:
metin.ozkan@analog.com 0:00d2a8670533 223 *status = (uint8_t)reg_stat_glbl.bits.stat_irq;
metin.ozkan@analog.com 0:00d2a8670533 224 break;
metin.ozkan@analog.com 0:00d2a8670533 225 case STAT_GLBL_STAT_EN:
metin.ozkan@analog.com 0:00d2a8670533 226 *status = (uint8_t)reg_stat_glbl.bits.stat_en;
metin.ozkan@analog.com 0:00d2a8670533 227 break;
metin.ozkan@analog.com 0:00d2a8670533 228 case STAT_GLBL_TJAL1_S:
metin.ozkan@analog.com 0:00d2a8670533 229 *status = (uint8_t)reg_stat_glbl.bits.tjal1_s;
metin.ozkan@analog.com 0:00d2a8670533 230 break;
metin.ozkan@analog.com 0:00d2a8670533 231 case STAT_GLBL_TJAL2_S:
metin.ozkan@analog.com 0:00d2a8670533 232 *status = (uint8_t)reg_stat_glbl.bits.tjal2_s;
metin.ozkan@analog.com 0:00d2a8670533 233 break;
metin.ozkan@analog.com 0:00d2a8670533 234 case STAT_GLBL_DOD1_S:
metin.ozkan@analog.com 0:00d2a8670533 235 *status = (uint8_t)reg_stat_glbl.bits.dod1_s;
metin.ozkan@analog.com 0:00d2a8670533 236 break;
metin.ozkan@analog.com 0:00d2a8670533 237 case STAT_GLBL_DOD0_S:
metin.ozkan@analog.com 0:00d2a8670533 238 *status = (uint8_t)reg_stat_glbl.bits.dod0_s;
metin.ozkan@analog.com 0:00d2a8670533 239 break;
metin.ozkan@analog.com 0:00d2a8670533 240 case STAT_GLBL_BOK:
metin.ozkan@analog.com 0:00d2a8670533 241 *status = (uint8_t)reg_stat_glbl.bits.bok;
metin.ozkan@analog.com 0:00d2a8670533 242 break;
metin.ozkan@analog.com 0:00d2a8670533 243 case STAT_GLBL_DIDM:
metin.ozkan@analog.com 0:00d2a8670533 244 *status = (uint8_t)reg_stat_glbl.bits.didm;
metin.ozkan@analog.com 0:00d2a8670533 245 break;
metin.ozkan@analog.com 0:00d2a8670533 246 default:
metin.ozkan@analog.com 0:00d2a8670533 247 ret = MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 248 break;
metin.ozkan@analog.com 0:00d2a8670533 249 }
metin.ozkan@analog.com 0:00d2a8670533 250
metin.ozkan@analog.com 0:00d2a8670533 251 return ret;
metin.ozkan@analog.com 0:00d2a8670533 252 }
metin.ozkan@analog.com 0:00d2a8670533 253
metin.ozkan@analog.com 0:00d2a8670533 254 int MAX77658::set_interrupt_mask(reg_bit_int_mask_t bit_field, uint8_t maskBit)
metin.ozkan@analog.com 0:00d2a8670533 255 {
metin.ozkan@analog.com 0:00d2a8670533 256 int ret;
metin.ozkan@analog.com 0:00d2a8670533 257 uint8_t reg_addr;
Okan Sahin 1:40ef1dc30cb7 258 reg_int_m_chg_t reg_int_m_chg = {0};
Okan Sahin 1:40ef1dc30cb7 259 reg_intm_glbl0_t reg_intm_glbl0 = {0};
Okan Sahin 1:40ef1dc30cb7 260 reg_intm_glbl1_t reg_intm_glbl1 = {0};
metin.ozkan@analog.com 0:00d2a8670533 261
metin.ozkan@analog.com 0:00d2a8670533 262 //INT_M_CHG (0x07), INTM_GLBL0 (0x08) and INTM_GLBL1 (0x09)
metin.ozkan@analog.com 0:00d2a8670533 263 reg_addr = (uint8_t)floor((static_cast<uint8_t>(bit_field)) / 8) + 0x07;
metin.ozkan@analog.com 0:00d2a8670533 264
metin.ozkan@analog.com 0:00d2a8670533 265 if (reg_addr == INT_M_CHG)
metin.ozkan@analog.com 0:00d2a8670533 266 ret = read_register(INT_M_CHG, (uint8_t *)&(reg_int_m_chg));
metin.ozkan@analog.com 0:00d2a8670533 267 else if (reg_addr == INTM_GLBL0)
metin.ozkan@analog.com 0:00d2a8670533 268 ret = read_register(INTM_GLBL0, (uint8_t *)&(reg_intm_glbl0));
metin.ozkan@analog.com 0:00d2a8670533 269 else if (reg_addr == INTM_GLBL1)
metin.ozkan@analog.com 0:00d2a8670533 270 ret = read_register(INTM_GLBL1, (uint8_t *)&(reg_intm_glbl1));
metin.ozkan@analog.com 0:00d2a8670533 271 else
metin.ozkan@analog.com 0:00d2a8670533 272 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 273
metin.ozkan@analog.com 0:00d2a8670533 274 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 275
metin.ozkan@analog.com 0:00d2a8670533 276 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 277 {
metin.ozkan@analog.com 0:00d2a8670533 278 case INT_M_CHG_THM_M:
metin.ozkan@analog.com 0:00d2a8670533 279 reg_int_m_chg.bits.thm_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 280 break;
metin.ozkan@analog.com 0:00d2a8670533 281 case INT_M_CHG_CHG_M:
metin.ozkan@analog.com 0:00d2a8670533 282 reg_int_m_chg.bits.chg_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 283 break;
metin.ozkan@analog.com 0:00d2a8670533 284 case INT_M_CHG_CHGIN_M:
metin.ozkan@analog.com 0:00d2a8670533 285 reg_int_m_chg.bits.chgin_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 286 break;
metin.ozkan@analog.com 0:00d2a8670533 287 case INT_M_CHG_TJ_REG_M:
metin.ozkan@analog.com 0:00d2a8670533 288 reg_int_m_chg.bits.tj_reg_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 289 break;
metin.ozkan@analog.com 0:00d2a8670533 290 case INT_M_CHG_CHGIN_CTRL_M:
metin.ozkan@analog.com 0:00d2a8670533 291 reg_int_m_chg.bits.chgin_ctrl_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 292 break;
metin.ozkan@analog.com 0:00d2a8670533 293 case INT_M_CHG_SYS_CTRL_M:
metin.ozkan@analog.com 0:00d2a8670533 294 reg_int_m_chg.bits.sys_ctrl_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 295 break;
metin.ozkan@analog.com 0:00d2a8670533 296 case INT_M_CHG_SYS_CNFG_M:
metin.ozkan@analog.com 0:00d2a8670533 297 reg_int_m_chg.bits.sys_cnfg_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 298 break;
metin.ozkan@analog.com 0:00d2a8670533 299 case INT_M_CHG_DIS_AICL:
metin.ozkan@analog.com 0:00d2a8670533 300 reg_int_m_chg.bits.dis_aicl = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 301 break;
metin.ozkan@analog.com 0:00d2a8670533 302 case INTM_GLBL0_GPI0_FM:
metin.ozkan@analog.com 0:00d2a8670533 303 reg_intm_glbl0.bits.gpi0_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 304 break;
metin.ozkan@analog.com 0:00d2a8670533 305 case INTM_GLBL0_GPI0_RM:
metin.ozkan@analog.com 0:00d2a8670533 306 reg_intm_glbl0.bits.gpi0_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 307 break;
metin.ozkan@analog.com 0:00d2a8670533 308 case INTM_GLBL0_nEN_FM:
metin.ozkan@analog.com 0:00d2a8670533 309 reg_intm_glbl0.bits.nen_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 310 break;
metin.ozkan@analog.com 0:00d2a8670533 311 case INTM_GLBL0_nEN_RM:
metin.ozkan@analog.com 0:00d2a8670533 312 reg_intm_glbl0.bits.nen_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 313 break;
metin.ozkan@analog.com 0:00d2a8670533 314 case INTM_GLBL0_TJAL1_RM:
metin.ozkan@analog.com 0:00d2a8670533 315 reg_intm_glbl0.bits.tjal1_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 316 break;
metin.ozkan@analog.com 0:00d2a8670533 317 case INTM_GLBL0_TJAL2_RM:
metin.ozkan@analog.com 0:00d2a8670533 318 reg_intm_glbl0.bits.tjal2_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 319 break;
metin.ozkan@analog.com 0:00d2a8670533 320 case INTM_GLBL0_DOD1_RM:
metin.ozkan@analog.com 0:00d2a8670533 321 reg_intm_glbl0.bits.dod1_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 322 break;
metin.ozkan@analog.com 0:00d2a8670533 323 case INTM_GLBL0_DOD0_RM:
metin.ozkan@analog.com 0:00d2a8670533 324 reg_intm_glbl0.bits.dod0_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 325 break;
metin.ozkan@analog.com 0:00d2a8670533 326 case INTM_GLBL1_GPI1_FM:
metin.ozkan@analog.com 0:00d2a8670533 327 reg_intm_glbl1.bits.gpi1_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 328 break;
metin.ozkan@analog.com 0:00d2a8670533 329 case INTM_GLBL1_GPI1_RM:
metin.ozkan@analog.com 0:00d2a8670533 330 reg_intm_glbl1.bits.gpi1_rm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 331 break;
metin.ozkan@analog.com 0:00d2a8670533 332 case INTM_GLBL1_SBB0_FM:
metin.ozkan@analog.com 0:00d2a8670533 333 reg_intm_glbl1.bits.sbb0_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 334 break;
metin.ozkan@analog.com 0:00d2a8670533 335 case INTM_GLBL1_SBB1_FM:
metin.ozkan@analog.com 0:00d2a8670533 336 reg_intm_glbl1.bits.sbb1_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 337 break;
metin.ozkan@analog.com 0:00d2a8670533 338 case INTM_GLBL1_SBB2_FM:
metin.ozkan@analog.com 0:00d2a8670533 339 reg_intm_glbl1.bits.sbb2_fm = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 340 break;
metin.ozkan@analog.com 0:00d2a8670533 341 case INTM_GLBL1_LDO0_M:
metin.ozkan@analog.com 0:00d2a8670533 342 reg_intm_glbl1.bits.ldo0_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 343 break;
metin.ozkan@analog.com 0:00d2a8670533 344 case INTM_GLBL1_LDO1_M:
metin.ozkan@analog.com 0:00d2a8670533 345 reg_intm_glbl1.bits.ldo1_m = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 346 break;
metin.ozkan@analog.com 0:00d2a8670533 347 case INTM_GLBL1_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 348 reg_intm_glbl1.bits.rsvd = maskBit;
metin.ozkan@analog.com 0:00d2a8670533 349 break;
metin.ozkan@analog.com 0:00d2a8670533 350 default:
metin.ozkan@analog.com 0:00d2a8670533 351 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 352 break;
metin.ozkan@analog.com 0:00d2a8670533 353 }
metin.ozkan@analog.com 0:00d2a8670533 354
metin.ozkan@analog.com 0:00d2a8670533 355 if (reg_addr == INT_M_CHG)
metin.ozkan@analog.com 0:00d2a8670533 356 return write_register(INT_M_CHG, (uint8_t *)&(reg_int_m_chg));
metin.ozkan@analog.com 0:00d2a8670533 357 else if (reg_addr == INTM_GLBL0)
metin.ozkan@analog.com 0:00d2a8670533 358 return write_register(INTM_GLBL0, (uint8_t *)&(reg_intm_glbl0));
metin.ozkan@analog.com 0:00d2a8670533 359 else if (reg_addr == INTM_GLBL1)
metin.ozkan@analog.com 0:00d2a8670533 360 return write_register(INTM_GLBL1, (uint8_t *)&(reg_intm_glbl1));
metin.ozkan@analog.com 0:00d2a8670533 361 }
metin.ozkan@analog.com 0:00d2a8670533 362
metin.ozkan@analog.com 0:00d2a8670533 363 int MAX77658::get_interrupt_mask(reg_bit_int_mask_t bit_field, uint8_t *maskBit)
metin.ozkan@analog.com 0:00d2a8670533 364 {
metin.ozkan@analog.com 0:00d2a8670533 365 int ret;
metin.ozkan@analog.com 0:00d2a8670533 366 uint8_t reg_addr;
Okan Sahin 1:40ef1dc30cb7 367 reg_int_m_chg_t reg_int_m_chg = {0};
Okan Sahin 1:40ef1dc30cb7 368 reg_intm_glbl0_t reg_intm_glbl0 = {0};
Okan Sahin 1:40ef1dc30cb7 369 reg_intm_glbl1_t reg_intm_glbl1 = {0};
metin.ozkan@analog.com 0:00d2a8670533 370
metin.ozkan@analog.com 0:00d2a8670533 371 //INT_M_CHG (0x07), INTM_GLBL0 (0x08) and INTM_GLBL1 (0x09)
metin.ozkan@analog.com 0:00d2a8670533 372 reg_addr = (uint8_t)floor((static_cast<uint8_t>(bit_field)) / 8) + 0x07;
metin.ozkan@analog.com 0:00d2a8670533 373
metin.ozkan@analog.com 0:00d2a8670533 374 if (reg_addr == INT_M_CHG)
metin.ozkan@analog.com 0:00d2a8670533 375 ret = read_register(INT_M_CHG, (uint8_t *)&(reg_int_m_chg));
metin.ozkan@analog.com 0:00d2a8670533 376 else if (reg_addr == INTM_GLBL0)
metin.ozkan@analog.com 0:00d2a8670533 377 ret = read_register(INTM_GLBL0, (uint8_t *)&(reg_intm_glbl0));
metin.ozkan@analog.com 0:00d2a8670533 378 else if (reg_addr == INTM_GLBL1)
metin.ozkan@analog.com 0:00d2a8670533 379 ret = read_register(INTM_GLBL1, (uint8_t *)&(reg_intm_glbl1));
metin.ozkan@analog.com 0:00d2a8670533 380 else
metin.ozkan@analog.com 0:00d2a8670533 381 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 382
metin.ozkan@analog.com 0:00d2a8670533 383 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 384
metin.ozkan@analog.com 0:00d2a8670533 385 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 386 {
metin.ozkan@analog.com 0:00d2a8670533 387 case INT_M_CHG_THM_M:
metin.ozkan@analog.com 0:00d2a8670533 388 *maskBit = (uint8_t)reg_int_m_chg.bits.thm_m;
metin.ozkan@analog.com 0:00d2a8670533 389 break;
metin.ozkan@analog.com 0:00d2a8670533 390 case INT_M_CHG_CHG_M:
metin.ozkan@analog.com 0:00d2a8670533 391 *maskBit = (uint8_t)reg_int_m_chg.bits.chg_m;
metin.ozkan@analog.com 0:00d2a8670533 392 break;
metin.ozkan@analog.com 0:00d2a8670533 393 case INT_M_CHG_CHGIN_M:
metin.ozkan@analog.com 0:00d2a8670533 394 *maskBit = (uint8_t)reg_int_m_chg.bits.chgin_m;
metin.ozkan@analog.com 0:00d2a8670533 395 break;
metin.ozkan@analog.com 0:00d2a8670533 396 case INT_M_CHG_TJ_REG_M:
metin.ozkan@analog.com 0:00d2a8670533 397 *maskBit = (uint8_t)reg_int_m_chg.bits.tj_reg_m;
metin.ozkan@analog.com 0:00d2a8670533 398 break;
metin.ozkan@analog.com 0:00d2a8670533 399 case INT_M_CHG_CHGIN_CTRL_M:
metin.ozkan@analog.com 0:00d2a8670533 400 *maskBit = (uint8_t)reg_int_m_chg.bits.chgin_ctrl_m;
metin.ozkan@analog.com 0:00d2a8670533 401 break;
metin.ozkan@analog.com 0:00d2a8670533 402 case INT_M_CHG_SYS_CTRL_M:
metin.ozkan@analog.com 0:00d2a8670533 403 *maskBit = (uint8_t)reg_int_m_chg.bits.sys_ctrl_m;
metin.ozkan@analog.com 0:00d2a8670533 404 break;
metin.ozkan@analog.com 0:00d2a8670533 405 case INT_M_CHG_SYS_CNFG_M:
metin.ozkan@analog.com 0:00d2a8670533 406 *maskBit = (uint8_t)reg_int_m_chg.bits.sys_cnfg_m;
metin.ozkan@analog.com 0:00d2a8670533 407 break;
metin.ozkan@analog.com 0:00d2a8670533 408 case INT_M_CHG_DIS_AICL:
metin.ozkan@analog.com 0:00d2a8670533 409 *maskBit = (uint8_t)reg_int_m_chg.bits.dis_aicl;
metin.ozkan@analog.com 0:00d2a8670533 410 break;
metin.ozkan@analog.com 0:00d2a8670533 411 case INTM_GLBL0_GPI0_FM:
metin.ozkan@analog.com 0:00d2a8670533 412 *maskBit = (uint8_t)reg_intm_glbl0.bits.gpi0_fm;
metin.ozkan@analog.com 0:00d2a8670533 413 break;
metin.ozkan@analog.com 0:00d2a8670533 414 case INTM_GLBL0_GPI0_RM:
metin.ozkan@analog.com 0:00d2a8670533 415 *maskBit = (uint8_t)reg_intm_glbl0.bits.gpi0_rm;
metin.ozkan@analog.com 0:00d2a8670533 416 break;
metin.ozkan@analog.com 0:00d2a8670533 417 case INTM_GLBL0_nEN_FM:
metin.ozkan@analog.com 0:00d2a8670533 418 *maskBit = (uint8_t)reg_intm_glbl0.bits.nen_fm;
metin.ozkan@analog.com 0:00d2a8670533 419 break;
metin.ozkan@analog.com 0:00d2a8670533 420 case INTM_GLBL0_nEN_RM:
metin.ozkan@analog.com 0:00d2a8670533 421 *maskBit = (uint8_t)reg_intm_glbl0.bits.nen_rm;
metin.ozkan@analog.com 0:00d2a8670533 422 break;
metin.ozkan@analog.com 0:00d2a8670533 423 case INTM_GLBL0_TJAL1_RM:
metin.ozkan@analog.com 0:00d2a8670533 424 *maskBit = (uint8_t)reg_intm_glbl0.bits.tjal1_rm;
metin.ozkan@analog.com 0:00d2a8670533 425 break;
metin.ozkan@analog.com 0:00d2a8670533 426 case INTM_GLBL0_TJAL2_RM:
metin.ozkan@analog.com 0:00d2a8670533 427 *maskBit = (uint8_t)reg_intm_glbl0.bits.tjal2_rm;
metin.ozkan@analog.com 0:00d2a8670533 428 break;
metin.ozkan@analog.com 0:00d2a8670533 429 case INTM_GLBL0_DOD1_RM:
metin.ozkan@analog.com 0:00d2a8670533 430 *maskBit = (uint8_t)reg_intm_glbl0.bits.dod1_rm;
metin.ozkan@analog.com 0:00d2a8670533 431 break;
metin.ozkan@analog.com 0:00d2a8670533 432 case INTM_GLBL0_DOD0_RM:
metin.ozkan@analog.com 0:00d2a8670533 433 *maskBit = (uint8_t)reg_intm_glbl0.bits.dod0_rm;
metin.ozkan@analog.com 0:00d2a8670533 434 break;
metin.ozkan@analog.com 0:00d2a8670533 435 case INTM_GLBL1_GPI1_FM:
metin.ozkan@analog.com 0:00d2a8670533 436 *maskBit = (uint8_t)reg_intm_glbl1.bits.gpi1_fm;
metin.ozkan@analog.com 0:00d2a8670533 437 break;
metin.ozkan@analog.com 0:00d2a8670533 438 case INTM_GLBL1_GPI1_RM:
metin.ozkan@analog.com 0:00d2a8670533 439 *maskBit = (uint8_t)reg_intm_glbl1.bits.gpi1_rm;
metin.ozkan@analog.com 0:00d2a8670533 440 break;
metin.ozkan@analog.com 0:00d2a8670533 441 case INTM_GLBL1_SBB0_FM:
metin.ozkan@analog.com 0:00d2a8670533 442 *maskBit = (uint8_t)reg_intm_glbl1.bits.sbb0_fm;
metin.ozkan@analog.com 0:00d2a8670533 443 break;
metin.ozkan@analog.com 0:00d2a8670533 444 case INTM_GLBL1_SBB1_FM:
metin.ozkan@analog.com 0:00d2a8670533 445 *maskBit = (uint8_t)reg_intm_glbl1.bits.sbb1_fm;
metin.ozkan@analog.com 0:00d2a8670533 446 break;
metin.ozkan@analog.com 0:00d2a8670533 447 case INTM_GLBL1_SBB2_FM:
metin.ozkan@analog.com 0:00d2a8670533 448 *maskBit = (uint8_t)reg_intm_glbl1.bits.sbb2_fm;
metin.ozkan@analog.com 0:00d2a8670533 449 break;
metin.ozkan@analog.com 0:00d2a8670533 450 case INTM_GLBL1_LDO0_M:
metin.ozkan@analog.com 0:00d2a8670533 451 *maskBit = (uint8_t)reg_intm_glbl1.bits.ldo0_m;
metin.ozkan@analog.com 0:00d2a8670533 452 break;
metin.ozkan@analog.com 0:00d2a8670533 453 case INTM_GLBL1_LDO1_M:
metin.ozkan@analog.com 0:00d2a8670533 454 *maskBit = (uint8_t)reg_intm_glbl1.bits.ldo1_m;
metin.ozkan@analog.com 0:00d2a8670533 455 break;
metin.ozkan@analog.com 0:00d2a8670533 456 case INTM_GLBL1_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 457 *maskBit = (uint8_t)reg_intm_glbl1.bits.rsvd;
metin.ozkan@analog.com 0:00d2a8670533 458 break;
metin.ozkan@analog.com 0:00d2a8670533 459 default:
metin.ozkan@analog.com 0:00d2a8670533 460 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 461 break;
metin.ozkan@analog.com 0:00d2a8670533 462 }
metin.ozkan@analog.com 0:00d2a8670533 463
metin.ozkan@analog.com 0:00d2a8670533 464 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 465 }
metin.ozkan@analog.com 0:00d2a8670533 466
metin.ozkan@analog.com 0:00d2a8670533 467 int MAX77658::set_cnfg_glbl(reg_bit_cnfg_glbl_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 468 {
metin.ozkan@analog.com 0:00d2a8670533 469 int ret;
Okan Sahin 1:40ef1dc30cb7 470 reg_cnfg_glbl_t reg_cnfg_glbl = {0};
metin.ozkan@analog.com 0:00d2a8670533 471
metin.ozkan@analog.com 0:00d2a8670533 472 ret = read_register(CNFG_GLBL, (uint8_t *)&(reg_cnfg_glbl));
metin.ozkan@analog.com 0:00d2a8670533 473 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 474
metin.ozkan@analog.com 0:00d2a8670533 475 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 476 {
metin.ozkan@analog.com 0:00d2a8670533 477 case CNFG_GLBL_SFT_CTRL:
metin.ozkan@analog.com 0:00d2a8670533 478 reg_cnfg_glbl.bits.sft_ctrl = config;
metin.ozkan@analog.com 0:00d2a8670533 479 break;
metin.ozkan@analog.com 0:00d2a8670533 480 case CNFG_GLBL_DBEN_nEN:
metin.ozkan@analog.com 0:00d2a8670533 481 reg_cnfg_glbl.bits.dben_nen = config;
metin.ozkan@analog.com 0:00d2a8670533 482 break;
metin.ozkan@analog.com 0:00d2a8670533 483 case CNFG_GLBL_nEN_MODE:
metin.ozkan@analog.com 0:00d2a8670533 484 reg_cnfg_glbl.bits.nen_mode = config;
metin.ozkan@analog.com 0:00d2a8670533 485 break;
metin.ozkan@analog.com 0:00d2a8670533 486 case CNFG_GLBL_SBIA_LPM:
metin.ozkan@analog.com 0:00d2a8670533 487 reg_cnfg_glbl.bits.sbia_lpm = config;
metin.ozkan@analog.com 0:00d2a8670533 488 break;
metin.ozkan@analog.com 0:00d2a8670533 489 case CNFG_GLBL_T_MRST:
metin.ozkan@analog.com 0:00d2a8670533 490 reg_cnfg_glbl.bits.t_mrst = config;
metin.ozkan@analog.com 0:00d2a8670533 491 break;
metin.ozkan@analog.com 0:00d2a8670533 492 case CNFG_GLBL_PU_DIS:
metin.ozkan@analog.com 0:00d2a8670533 493 reg_cnfg_glbl.bits.pu_dis = config;
metin.ozkan@analog.com 0:00d2a8670533 494 break;
metin.ozkan@analog.com 0:00d2a8670533 495 default:
metin.ozkan@analog.com 0:00d2a8670533 496 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 497 break;
metin.ozkan@analog.com 0:00d2a8670533 498 }
metin.ozkan@analog.com 0:00d2a8670533 499
metin.ozkan@analog.com 0:00d2a8670533 500 return write_register(CNFG_GLBL, (uint8_t *)&(reg_cnfg_glbl));
metin.ozkan@analog.com 0:00d2a8670533 501 }
metin.ozkan@analog.com 0:00d2a8670533 502
metin.ozkan@analog.com 0:00d2a8670533 503 int MAX77658::get_cnfg_glbl(reg_bit_cnfg_glbl_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 504 {
metin.ozkan@analog.com 0:00d2a8670533 505 int ret;
Okan Sahin 1:40ef1dc30cb7 506 reg_cnfg_glbl_t reg_cnfg_glbl = {0};
metin.ozkan@analog.com 0:00d2a8670533 507
metin.ozkan@analog.com 0:00d2a8670533 508 ret = read_register(CNFG_GLBL, (uint8_t *)&(reg_cnfg_glbl));
metin.ozkan@analog.com 0:00d2a8670533 509 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 510
metin.ozkan@analog.com 0:00d2a8670533 511 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 512 {
metin.ozkan@analog.com 0:00d2a8670533 513 case CNFG_GLBL_SFT_CTRL:
metin.ozkan@analog.com 0:00d2a8670533 514 *config = (uint8_t)reg_cnfg_glbl.bits.sft_ctrl;
metin.ozkan@analog.com 0:00d2a8670533 515 break;
metin.ozkan@analog.com 0:00d2a8670533 516 case CNFG_GLBL_DBEN_nEN:
metin.ozkan@analog.com 0:00d2a8670533 517 *config = (uint8_t)reg_cnfg_glbl.bits.dben_nen;
metin.ozkan@analog.com 0:00d2a8670533 518 break;
metin.ozkan@analog.com 0:00d2a8670533 519 case CNFG_GLBL_nEN_MODE:
metin.ozkan@analog.com 0:00d2a8670533 520 *config = (uint8_t)reg_cnfg_glbl.bits.nen_mode;
metin.ozkan@analog.com 0:00d2a8670533 521 break;
metin.ozkan@analog.com 0:00d2a8670533 522 case CNFG_GLBL_SBIA_LPM:
metin.ozkan@analog.com 0:00d2a8670533 523 *config = (uint8_t)reg_cnfg_glbl.bits.sbia_lpm;
metin.ozkan@analog.com 0:00d2a8670533 524 break;
metin.ozkan@analog.com 0:00d2a8670533 525 case CNFG_GLBL_T_MRST:
metin.ozkan@analog.com 0:00d2a8670533 526 *config = (uint8_t)reg_cnfg_glbl.bits.t_mrst;
metin.ozkan@analog.com 0:00d2a8670533 527 break;
metin.ozkan@analog.com 0:00d2a8670533 528 case CNFG_GLBL_PU_DIS:
metin.ozkan@analog.com 0:00d2a8670533 529 *config = (uint8_t)reg_cnfg_glbl.bits.pu_dis;
metin.ozkan@analog.com 0:00d2a8670533 530 break;
metin.ozkan@analog.com 0:00d2a8670533 531 default:
metin.ozkan@analog.com 0:00d2a8670533 532 ret = MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 533 break;
metin.ozkan@analog.com 0:00d2a8670533 534 }
metin.ozkan@analog.com 0:00d2a8670533 535
metin.ozkan@analog.com 0:00d2a8670533 536 return ret;
metin.ozkan@analog.com 0:00d2a8670533 537 }
metin.ozkan@analog.com 0:00d2a8670533 538
metin.ozkan@analog.com 0:00d2a8670533 539 int MAX77658::set_cnfg_gpio(reg_bit_cnfg_gpio_t bit_field, uint8_t channel, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 540 {
metin.ozkan@analog.com 0:00d2a8670533 541 int ret;
Okan Sahin 1:40ef1dc30cb7 542 reg_cnfg_gpio0_t reg_cnfg_gpio0 = {0};
Okan Sahin 1:40ef1dc30cb7 543 reg_cnfg_gpio1_t reg_cnfg_gpio1 = {0};
Okan Sahin 1:40ef1dc30cb7 544 reg_cnfg_gpio2_t reg_cnfg_gpio2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 545
metin.ozkan@analog.com 0:00d2a8670533 546 if (channel == 0)
metin.ozkan@analog.com 0:00d2a8670533 547 {
metin.ozkan@analog.com 0:00d2a8670533 548 ret = read_register(CNFG_GPIO0, (uint8_t *)&(reg_cnfg_gpio0));
metin.ozkan@analog.com 0:00d2a8670533 549 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 550
metin.ozkan@analog.com 0:00d2a8670533 551 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 552 {
metin.ozkan@analog.com 0:00d2a8670533 553 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 554 reg_cnfg_gpio0.bits.gpo_dir = config;
metin.ozkan@analog.com 0:00d2a8670533 555 break;
metin.ozkan@analog.com 0:00d2a8670533 556 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 557 reg_cnfg_gpio0.bits.gpo_di = config;
metin.ozkan@analog.com 0:00d2a8670533 558 break;
metin.ozkan@analog.com 0:00d2a8670533 559 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 560 reg_cnfg_gpio0.bits.gpo_drv = config;
metin.ozkan@analog.com 0:00d2a8670533 561 break;
metin.ozkan@analog.com 0:00d2a8670533 562 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 563 reg_cnfg_gpio0.bits.gpo_do = config;
metin.ozkan@analog.com 0:00d2a8670533 564 break;
metin.ozkan@analog.com 0:00d2a8670533 565 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 566 reg_cnfg_gpio0.bits.dben_gpi = config;
metin.ozkan@analog.com 0:00d2a8670533 567 break;
metin.ozkan@analog.com 0:00d2a8670533 568 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 569 reg_cnfg_gpio0.bits.alt_gpio = config;
metin.ozkan@analog.com 0:00d2a8670533 570 break;
metin.ozkan@analog.com 0:00d2a8670533 571 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 572 default:
metin.ozkan@analog.com 0:00d2a8670533 573 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 574 break;
metin.ozkan@analog.com 0:00d2a8670533 575 }
metin.ozkan@analog.com 0:00d2a8670533 576
metin.ozkan@analog.com 0:00d2a8670533 577 return write_register(CNFG_GPIO0, (uint8_t *)&(reg_cnfg_gpio0));
metin.ozkan@analog.com 0:00d2a8670533 578 }
metin.ozkan@analog.com 0:00d2a8670533 579 else if (channel == 1)
metin.ozkan@analog.com 0:00d2a8670533 580 {
metin.ozkan@analog.com 0:00d2a8670533 581 ret = read_register(CNFG_GPIO1, (uint8_t *)&(reg_cnfg_gpio1));
metin.ozkan@analog.com 0:00d2a8670533 582 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 583
metin.ozkan@analog.com 0:00d2a8670533 584 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 585 {
metin.ozkan@analog.com 0:00d2a8670533 586 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 587 reg_cnfg_gpio1.bits.gpo_dir = config;
metin.ozkan@analog.com 0:00d2a8670533 588 break;
metin.ozkan@analog.com 0:00d2a8670533 589 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 590 reg_cnfg_gpio1.bits.gpo_di = config;
metin.ozkan@analog.com 0:00d2a8670533 591 break;
metin.ozkan@analog.com 0:00d2a8670533 592 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 593 reg_cnfg_gpio1.bits.gpo_drv = config;
metin.ozkan@analog.com 0:00d2a8670533 594 break;
metin.ozkan@analog.com 0:00d2a8670533 595 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 596 reg_cnfg_gpio1.bits.gpo_do = config;
metin.ozkan@analog.com 0:00d2a8670533 597 break;
metin.ozkan@analog.com 0:00d2a8670533 598 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 599 reg_cnfg_gpio1.bits.dben_gpi = config;
metin.ozkan@analog.com 0:00d2a8670533 600 break;
metin.ozkan@analog.com 0:00d2a8670533 601 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 602 reg_cnfg_gpio1.bits.alt_gpio = config;
metin.ozkan@analog.com 0:00d2a8670533 603 break;
metin.ozkan@analog.com 0:00d2a8670533 604 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 605 default:
metin.ozkan@analog.com 0:00d2a8670533 606 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 607 break;
metin.ozkan@analog.com 0:00d2a8670533 608 }
metin.ozkan@analog.com 0:00d2a8670533 609
metin.ozkan@analog.com 0:00d2a8670533 610 return write_register(CNFG_GPIO1, (uint8_t *)&(reg_cnfg_gpio1));
metin.ozkan@analog.com 0:00d2a8670533 611 }
metin.ozkan@analog.com 0:00d2a8670533 612 else if (channel == 2)
metin.ozkan@analog.com 0:00d2a8670533 613 {
metin.ozkan@analog.com 0:00d2a8670533 614 ret = read_register(CNFG_GPIO2, (uint8_t *)&(reg_cnfg_gpio2));
metin.ozkan@analog.com 0:00d2a8670533 615 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 616
metin.ozkan@analog.com 0:00d2a8670533 617 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 618 {
metin.ozkan@analog.com 0:00d2a8670533 619 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 620 reg_cnfg_gpio2.bits.gpo_dir = config;
metin.ozkan@analog.com 0:00d2a8670533 621 break;
metin.ozkan@analog.com 0:00d2a8670533 622 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 623 reg_cnfg_gpio2.bits.gpo_di = config;
metin.ozkan@analog.com 0:00d2a8670533 624 break;
metin.ozkan@analog.com 0:00d2a8670533 625 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 626 reg_cnfg_gpio2.bits.gpo_drv = config;
metin.ozkan@analog.com 0:00d2a8670533 627 break;
metin.ozkan@analog.com 0:00d2a8670533 628 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 629 reg_cnfg_gpio2.bits.gpo_do = config;
metin.ozkan@analog.com 0:00d2a8670533 630 break;
metin.ozkan@analog.com 0:00d2a8670533 631 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 632 reg_cnfg_gpio2.bits.dben_gpi = config;
metin.ozkan@analog.com 0:00d2a8670533 633 break;
metin.ozkan@analog.com 0:00d2a8670533 634 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 635 reg_cnfg_gpio2.bits.alt_gpio = config;
metin.ozkan@analog.com 0:00d2a8670533 636 break;
metin.ozkan@analog.com 0:00d2a8670533 637 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 638 default:
metin.ozkan@analog.com 0:00d2a8670533 639 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 640 break;
metin.ozkan@analog.com 0:00d2a8670533 641 }
metin.ozkan@analog.com 0:00d2a8670533 642
metin.ozkan@analog.com 0:00d2a8670533 643 return write_register(CNFG_GPIO2, (uint8_t *)&(reg_cnfg_gpio2));
metin.ozkan@analog.com 0:00d2a8670533 644 }
metin.ozkan@analog.com 0:00d2a8670533 645 else {
metin.ozkan@analog.com 0:00d2a8670533 646 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 647 }
metin.ozkan@analog.com 0:00d2a8670533 648 }
metin.ozkan@analog.com 0:00d2a8670533 649
metin.ozkan@analog.com 0:00d2a8670533 650 int MAX77658::get_cnfg_gpio(reg_bit_cnfg_gpio_t bit_field, uint8_t channel, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 651 {
metin.ozkan@analog.com 0:00d2a8670533 652 int ret;
Okan Sahin 1:40ef1dc30cb7 653 reg_cnfg_gpio0_t reg_cnfg_gpio0 = {0};
Okan Sahin 1:40ef1dc30cb7 654 reg_cnfg_gpio1_t reg_cnfg_gpio1 = {0};
Okan Sahin 1:40ef1dc30cb7 655 reg_cnfg_gpio2_t reg_cnfg_gpio2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 656
metin.ozkan@analog.com 0:00d2a8670533 657 if (channel == 0)
metin.ozkan@analog.com 0:00d2a8670533 658 {
metin.ozkan@analog.com 0:00d2a8670533 659 ret = read_register(CNFG_GPIO0, (uint8_t *)&(reg_cnfg_gpio0));
metin.ozkan@analog.com 0:00d2a8670533 660 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 661
metin.ozkan@analog.com 0:00d2a8670533 662 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 663 {
metin.ozkan@analog.com 0:00d2a8670533 664 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 665 *config = (uint8_t)reg_cnfg_gpio0.bits.gpo_dir;
metin.ozkan@analog.com 0:00d2a8670533 666 break;
metin.ozkan@analog.com 0:00d2a8670533 667 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 668 *config = (uint8_t)reg_cnfg_gpio0.bits.gpo_di;
metin.ozkan@analog.com 0:00d2a8670533 669 break;
metin.ozkan@analog.com 0:00d2a8670533 670 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 671 *config = (uint8_t)reg_cnfg_gpio0.bits.gpo_drv;
metin.ozkan@analog.com 0:00d2a8670533 672 break;
metin.ozkan@analog.com 0:00d2a8670533 673 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 674 *config = (uint8_t)reg_cnfg_gpio0.bits.gpo_do;
metin.ozkan@analog.com 0:00d2a8670533 675 break;
metin.ozkan@analog.com 0:00d2a8670533 676 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 677 *config = (uint8_t)reg_cnfg_gpio0.bits.dben_gpi;
metin.ozkan@analog.com 0:00d2a8670533 678 break;
metin.ozkan@analog.com 0:00d2a8670533 679 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 680 *config = (uint8_t)reg_cnfg_gpio0.bits.alt_gpio;
metin.ozkan@analog.com 0:00d2a8670533 681 break;
metin.ozkan@analog.com 0:00d2a8670533 682 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 683 default:
metin.ozkan@analog.com 0:00d2a8670533 684 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 685 break;
metin.ozkan@analog.com 0:00d2a8670533 686 }
metin.ozkan@analog.com 0:00d2a8670533 687 }
metin.ozkan@analog.com 0:00d2a8670533 688 else if (channel == 1)
metin.ozkan@analog.com 0:00d2a8670533 689 {
metin.ozkan@analog.com 0:00d2a8670533 690 ret = read_register(CNFG_GPIO1, (uint8_t *)&(reg_cnfg_gpio1));
metin.ozkan@analog.com 0:00d2a8670533 691 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 692
metin.ozkan@analog.com 0:00d2a8670533 693 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 694 {
metin.ozkan@analog.com 0:00d2a8670533 695 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 696 *config = (uint8_t)reg_cnfg_gpio1.bits.gpo_dir;
metin.ozkan@analog.com 0:00d2a8670533 697 break;
metin.ozkan@analog.com 0:00d2a8670533 698 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 699 *config = (uint8_t)reg_cnfg_gpio1.bits.gpo_di;
metin.ozkan@analog.com 0:00d2a8670533 700 break;
metin.ozkan@analog.com 0:00d2a8670533 701 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 702 *config = (uint8_t)reg_cnfg_gpio1.bits.gpo_drv;
metin.ozkan@analog.com 0:00d2a8670533 703 break;
metin.ozkan@analog.com 0:00d2a8670533 704 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 705 *config = (uint8_t)reg_cnfg_gpio1.bits.gpo_do;
metin.ozkan@analog.com 0:00d2a8670533 706 break;
metin.ozkan@analog.com 0:00d2a8670533 707 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 708 *config = (uint8_t)reg_cnfg_gpio1.bits.dben_gpi;
metin.ozkan@analog.com 0:00d2a8670533 709 break;
metin.ozkan@analog.com 0:00d2a8670533 710 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 711 *config = (uint8_t)reg_cnfg_gpio1.bits.alt_gpio;
metin.ozkan@analog.com 0:00d2a8670533 712 break;
metin.ozkan@analog.com 0:00d2a8670533 713 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 714 default:
metin.ozkan@analog.com 0:00d2a8670533 715 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 716 break;
metin.ozkan@analog.com 0:00d2a8670533 717 }
metin.ozkan@analog.com 0:00d2a8670533 718 }
metin.ozkan@analog.com 0:00d2a8670533 719 else if (channel == 2)
metin.ozkan@analog.com 0:00d2a8670533 720 {
metin.ozkan@analog.com 0:00d2a8670533 721 ret = read_register(CNFG_GPIO2, (uint8_t *)&(reg_cnfg_gpio2));
metin.ozkan@analog.com 0:00d2a8670533 722 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 723
metin.ozkan@analog.com 0:00d2a8670533 724 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 725 {
metin.ozkan@analog.com 0:00d2a8670533 726 case CNFG_GPIO_DIR:
metin.ozkan@analog.com 0:00d2a8670533 727 *config = (uint8_t)reg_cnfg_gpio2.bits.gpo_dir;
metin.ozkan@analog.com 0:00d2a8670533 728 break;
metin.ozkan@analog.com 0:00d2a8670533 729 case CNFG_GPIO_DI:
metin.ozkan@analog.com 0:00d2a8670533 730 *config = (uint8_t)reg_cnfg_gpio2.bits.gpo_di;
metin.ozkan@analog.com 0:00d2a8670533 731 break;
metin.ozkan@analog.com 0:00d2a8670533 732 case CNFG_GPIO_DRV:
metin.ozkan@analog.com 0:00d2a8670533 733 *config = (uint8_t)reg_cnfg_gpio2.bits.gpo_drv;
metin.ozkan@analog.com 0:00d2a8670533 734 break;
metin.ozkan@analog.com 0:00d2a8670533 735 case CNFG_GPIO_DO:
metin.ozkan@analog.com 0:00d2a8670533 736 *config = (uint8_t)reg_cnfg_gpio2.bits.gpo_do;
metin.ozkan@analog.com 0:00d2a8670533 737 break;
metin.ozkan@analog.com 0:00d2a8670533 738 case CNFG_GPIO_DBEN_GPI:
metin.ozkan@analog.com 0:00d2a8670533 739 *config = (uint8_t)reg_cnfg_gpio2.bits.dben_gpi;
metin.ozkan@analog.com 0:00d2a8670533 740 break;
metin.ozkan@analog.com 0:00d2a8670533 741 case CNFG_GPIO_ALT_GPIO:
metin.ozkan@analog.com 0:00d2a8670533 742 *config = (uint8_t)reg_cnfg_gpio2.bits.alt_gpio;
metin.ozkan@analog.com 0:00d2a8670533 743 break;
metin.ozkan@analog.com 0:00d2a8670533 744 case CNFG_GPIO_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 745 default:
metin.ozkan@analog.com 0:00d2a8670533 746 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 747 break;
metin.ozkan@analog.com 0:00d2a8670533 748 }
metin.ozkan@analog.com 0:00d2a8670533 749 }
metin.ozkan@analog.com 0:00d2a8670533 750 else {
metin.ozkan@analog.com 0:00d2a8670533 751 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 752 }
metin.ozkan@analog.com 0:00d2a8670533 753
metin.ozkan@analog.com 0:00d2a8670533 754 return ret;
metin.ozkan@analog.com 0:00d2a8670533 755 }
metin.ozkan@analog.com 0:00d2a8670533 756
metin.ozkan@analog.com 0:00d2a8670533 757 int MAX77658::get_cid(void) {
metin.ozkan@analog.com 0:00d2a8670533 758 char rbuf[1];
metin.ozkan@analog.com 0:00d2a8670533 759 int ret;
metin.ozkan@analog.com 0:00d2a8670533 760
metin.ozkan@analog.com 0:00d2a8670533 761 ret = read_register(CID, (uint8_t *)&(rbuf));
metin.ozkan@analog.com 0:00d2a8670533 762 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 763
metin.ozkan@analog.com 0:00d2a8670533 764 return *rbuf;
metin.ozkan@analog.com 0:00d2a8670533 765 }
metin.ozkan@analog.com 0:00d2a8670533 766
metin.ozkan@analog.com 0:00d2a8670533 767 int MAX77658::set_cnfg_wdt(reg_bit_cnfg_wdt_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 768 {
metin.ozkan@analog.com 0:00d2a8670533 769 int ret;
Okan Sahin 1:40ef1dc30cb7 770 reg_cnfg_wdt_t reg_cnfg_wdt = {0};
metin.ozkan@analog.com 0:00d2a8670533 771
metin.ozkan@analog.com 0:00d2a8670533 772 ret = read_register(CNFG_WDT, (uint8_t *)&(reg_cnfg_wdt));
metin.ozkan@analog.com 0:00d2a8670533 773 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 774
metin.ozkan@analog.com 0:00d2a8670533 775 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 776 {
metin.ozkan@analog.com 0:00d2a8670533 777 case CNFG_WDT_WDT_LOCK:
metin.ozkan@analog.com 0:00d2a8670533 778 reg_cnfg_wdt.bits.wdt_lock = config;
metin.ozkan@analog.com 0:00d2a8670533 779 break;
metin.ozkan@analog.com 0:00d2a8670533 780 case CNFG_WDT_WDT_EN:
metin.ozkan@analog.com 0:00d2a8670533 781 reg_cnfg_wdt.bits.wdt_en = config;
metin.ozkan@analog.com 0:00d2a8670533 782 break;
metin.ozkan@analog.com 0:00d2a8670533 783 case CNFG_WDT_WDT_CLR:
metin.ozkan@analog.com 0:00d2a8670533 784 reg_cnfg_wdt.bits.wdt_clr = config;
metin.ozkan@analog.com 0:00d2a8670533 785 break;
metin.ozkan@analog.com 0:00d2a8670533 786 case CNFG_WDT_WDT_MODE:
metin.ozkan@analog.com 0:00d2a8670533 787 reg_cnfg_wdt.bits.wdt_mode = config;
metin.ozkan@analog.com 0:00d2a8670533 788 break;
metin.ozkan@analog.com 0:00d2a8670533 789 case CNFG_WDT_WDT_PER:
metin.ozkan@analog.com 0:00d2a8670533 790 reg_cnfg_wdt.bits.wdt_per = config;
metin.ozkan@analog.com 0:00d2a8670533 791 break;
metin.ozkan@analog.com 0:00d2a8670533 792 case CNFG_WDT_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 793 default:
metin.ozkan@analog.com 0:00d2a8670533 794 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 795 break;
metin.ozkan@analog.com 0:00d2a8670533 796 }
metin.ozkan@analog.com 0:00d2a8670533 797
metin.ozkan@analog.com 0:00d2a8670533 798 return write_register(CNFG_WDT, (uint8_t *)&(reg_cnfg_wdt));
metin.ozkan@analog.com 0:00d2a8670533 799 }
metin.ozkan@analog.com 0:00d2a8670533 800
metin.ozkan@analog.com 0:00d2a8670533 801 int MAX77658::get_cnfg_wdt(reg_bit_cnfg_wdt_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 802 {
metin.ozkan@analog.com 0:00d2a8670533 803 int ret;
Okan Sahin 1:40ef1dc30cb7 804 reg_cnfg_wdt_t reg_cnfg_wdt = {0};
metin.ozkan@analog.com 0:00d2a8670533 805
metin.ozkan@analog.com 0:00d2a8670533 806 ret = read_register(CNFG_WDT, (uint8_t *)&(reg_cnfg_wdt));
metin.ozkan@analog.com 0:00d2a8670533 807 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 808
metin.ozkan@analog.com 0:00d2a8670533 809 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 810 {
metin.ozkan@analog.com 0:00d2a8670533 811 case CNFG_WDT_WDT_LOCK:
metin.ozkan@analog.com 0:00d2a8670533 812 *config = (uint8_t)reg_cnfg_wdt.bits.wdt_lock;
metin.ozkan@analog.com 0:00d2a8670533 813 break;
metin.ozkan@analog.com 0:00d2a8670533 814 case CNFG_WDT_WDT_EN:
metin.ozkan@analog.com 0:00d2a8670533 815 *config = (uint8_t)reg_cnfg_wdt.bits.wdt_en;
metin.ozkan@analog.com 0:00d2a8670533 816 break;
metin.ozkan@analog.com 0:00d2a8670533 817 case CNFG_WDT_WDT_CLR:
metin.ozkan@analog.com 0:00d2a8670533 818 *config = (uint8_t)reg_cnfg_wdt.bits.wdt_clr;
metin.ozkan@analog.com 0:00d2a8670533 819 break;
metin.ozkan@analog.com 0:00d2a8670533 820 case CNFG_WDT_WDT_MODE:
metin.ozkan@analog.com 0:00d2a8670533 821 *config = (uint8_t)reg_cnfg_wdt.bits.wdt_mode;
metin.ozkan@analog.com 0:00d2a8670533 822 break;
metin.ozkan@analog.com 0:00d2a8670533 823 case CNFG_WDT_WDT_PER:
metin.ozkan@analog.com 0:00d2a8670533 824 *config = (uint8_t)reg_cnfg_wdt.bits.wdt_per;
metin.ozkan@analog.com 0:00d2a8670533 825 break;
metin.ozkan@analog.com 0:00d2a8670533 826 case CNFG_WDT_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 827 default:
metin.ozkan@analog.com 0:00d2a8670533 828 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 829 break;
metin.ozkan@analog.com 0:00d2a8670533 830 }
metin.ozkan@analog.com 0:00d2a8670533 831
metin.ozkan@analog.com 0:00d2a8670533 832 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 833 }
metin.ozkan@analog.com 0:00d2a8670533 834
metin.ozkan@analog.com 0:00d2a8670533 835 int MAX77658::get_stat_chg_a(reg_bit_stat_chg_a_t bit_field, uint8_t *status)
metin.ozkan@analog.com 0:00d2a8670533 836 {
metin.ozkan@analog.com 0:00d2a8670533 837 int ret;
Okan Sahin 1:40ef1dc30cb7 838 reg_stat_chg_a_t reg_stat_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 839
metin.ozkan@analog.com 0:00d2a8670533 840 ret = read_register(STAT_CHG_A, (uint8_t *)&(reg_stat_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 841 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 842
metin.ozkan@analog.com 0:00d2a8670533 843 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 844 {
metin.ozkan@analog.com 0:00d2a8670533 845 case STAT_CHG_A_THM_DTLS:
metin.ozkan@analog.com 0:00d2a8670533 846 *status = (uint8_t)reg_stat_chg_a.bits.thm_dtls;
metin.ozkan@analog.com 0:00d2a8670533 847 break;
metin.ozkan@analog.com 0:00d2a8670533 848 case STAT_CHG_A_TJ_REG_STAT:
metin.ozkan@analog.com 0:00d2a8670533 849 *status = (uint8_t)reg_stat_chg_a.bits.tj_reg_stat;
metin.ozkan@analog.com 0:00d2a8670533 850 break;
metin.ozkan@analog.com 0:00d2a8670533 851 case STAT_CHG_A_VSYS_MIN_STAT:
metin.ozkan@analog.com 0:00d2a8670533 852 *status = (uint8_t)reg_stat_chg_a.bits.vsys_min_stat;
metin.ozkan@analog.com 0:00d2a8670533 853 break;
metin.ozkan@analog.com 0:00d2a8670533 854 case STAT_CHG_A_ICHGIN_LIM_STAT:
metin.ozkan@analog.com 0:00d2a8670533 855 *status = (uint8_t)reg_stat_chg_a.bits.ichgin_lim_stat;
metin.ozkan@analog.com 0:00d2a8670533 856 break;
metin.ozkan@analog.com 0:00d2a8670533 857 case STAT_CHG_A_VCHGIN_MIN_STAT:
metin.ozkan@analog.com 0:00d2a8670533 858 *status = (uint8_t)reg_stat_chg_a.bits.vchgin_min_stat;
metin.ozkan@analog.com 0:00d2a8670533 859 break;
metin.ozkan@analog.com 0:00d2a8670533 860 case STAT_CHG_A_RSVD:
metin.ozkan@analog.com 0:00d2a8670533 861 default:
metin.ozkan@analog.com 0:00d2a8670533 862 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 863 break;
metin.ozkan@analog.com 0:00d2a8670533 864 }
metin.ozkan@analog.com 0:00d2a8670533 865
metin.ozkan@analog.com 0:00d2a8670533 866 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 867 }
metin.ozkan@analog.com 0:00d2a8670533 868
metin.ozkan@analog.com 0:00d2a8670533 869 int MAX77658::get_thm_dtls(decode_thm_dtls_t *thm_dtls)
metin.ozkan@analog.com 0:00d2a8670533 870 {
metin.ozkan@analog.com 0:00d2a8670533 871 int ret;
Okan Sahin 1:40ef1dc30cb7 872 reg_stat_chg_a_t reg_stat_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 873
metin.ozkan@analog.com 0:00d2a8670533 874 ret = read_register(STAT_CHG_A, (uint8_t *)&(reg_stat_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 875 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 876
metin.ozkan@analog.com 0:00d2a8670533 877 *thm_dtls = (decode_thm_dtls_t)reg_stat_chg_a.bits.thm_dtls;
metin.ozkan@analog.com 0:00d2a8670533 878
metin.ozkan@analog.com 0:00d2a8670533 879 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 880 }
metin.ozkan@analog.com 0:00d2a8670533 881
metin.ozkan@analog.com 0:00d2a8670533 882 int MAX77658::get_stat_chg_b(reg_bit_stat_chg_b_t bit_field, uint8_t *status)
metin.ozkan@analog.com 0:00d2a8670533 883 {
metin.ozkan@analog.com 0:00d2a8670533 884 int ret;
Okan Sahin 1:40ef1dc30cb7 885 reg_stat_chg_b_t reg_stat_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 886
metin.ozkan@analog.com 0:00d2a8670533 887 ret = read_register(STAT_CHG_B, (uint8_t *)&(reg_stat_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 888 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 889
metin.ozkan@analog.com 0:00d2a8670533 890 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 891 {
metin.ozkan@analog.com 0:00d2a8670533 892 case STAT_CHG_B_TIME_SUS:
metin.ozkan@analog.com 0:00d2a8670533 893 *status = (uint8_t)reg_stat_chg_b.bits.time_sus;
metin.ozkan@analog.com 0:00d2a8670533 894 break;
metin.ozkan@analog.com 0:00d2a8670533 895 case STAT_CHG_B_CHG:
metin.ozkan@analog.com 0:00d2a8670533 896 *status = (uint8_t)reg_stat_chg_b.bits.chg;
metin.ozkan@analog.com 0:00d2a8670533 897 break;
metin.ozkan@analog.com 0:00d2a8670533 898 case STAT_CHG_B_CHGIN_DTLS:
metin.ozkan@analog.com 0:00d2a8670533 899 *status = (uint8_t)reg_stat_chg_b.bits.chgin_dtls;
metin.ozkan@analog.com 0:00d2a8670533 900 break;
metin.ozkan@analog.com 0:00d2a8670533 901 case STAT_CHG_B_CHG_DTLS:
metin.ozkan@analog.com 0:00d2a8670533 902 *status = (uint8_t)reg_stat_chg_b.bits.chg_dtls;
metin.ozkan@analog.com 0:00d2a8670533 903 break;
metin.ozkan@analog.com 0:00d2a8670533 904 default:
metin.ozkan@analog.com 0:00d2a8670533 905 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 906 break;
metin.ozkan@analog.com 0:00d2a8670533 907 }
metin.ozkan@analog.com 0:00d2a8670533 908
metin.ozkan@analog.com 0:00d2a8670533 909 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 910 }
metin.ozkan@analog.com 0:00d2a8670533 911
metin.ozkan@analog.com 0:00d2a8670533 912 int MAX77658::get_chg_dtls(decode_chg_dtls_t *chg_dtls)
metin.ozkan@analog.com 0:00d2a8670533 913 {
metin.ozkan@analog.com 0:00d2a8670533 914 int ret;
Okan Sahin 1:40ef1dc30cb7 915 reg_stat_chg_b_t reg_stat_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 916
metin.ozkan@analog.com 0:00d2a8670533 917 ret = read_register(STAT_CHG_B, (uint8_t *)&(reg_stat_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 918 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 919
metin.ozkan@analog.com 0:00d2a8670533 920 *chg_dtls = (decode_chg_dtls_t)reg_stat_chg_b.bits.chg_dtls;
metin.ozkan@analog.com 0:00d2a8670533 921
metin.ozkan@analog.com 0:00d2a8670533 922 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 923 }
metin.ozkan@analog.com 0:00d2a8670533 924
metin.ozkan@analog.com 0:00d2a8670533 925 int MAX77658::set_thm_hot(int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 926 {
metin.ozkan@analog.com 0:00d2a8670533 927 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 928 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 929
metin.ozkan@analog.com 0:00d2a8670533 930 if (tempDegC < 45) tempDegC = 45;
metin.ozkan@analog.com 0:00d2a8670533 931 else if (tempDegC > 60) tempDegC = 60;
metin.ozkan@analog.com 0:00d2a8670533 932
metin.ozkan@analog.com 0:00d2a8670533 933 value = (tempDegC - 45) / 5;
metin.ozkan@analog.com 0:00d2a8670533 934
metin.ozkan@analog.com 0:00d2a8670533 935 SET_BIT_FIELD(CNFG_CHG_A, reg_cnfg_chg_a, reg_cnfg_chg_a.bits.thm_hot, value);
metin.ozkan@analog.com 0:00d2a8670533 936 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 937 }
metin.ozkan@analog.com 0:00d2a8670533 938
metin.ozkan@analog.com 0:00d2a8670533 939 int MAX77658::get_thm_hot(int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 940 {
metin.ozkan@analog.com 0:00d2a8670533 941 int ret;
metin.ozkan@analog.com 0:00d2a8670533 942 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 943 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 944
metin.ozkan@analog.com 0:00d2a8670533 945 ret = read_register(CNFG_CHG_A, (uint8_t *)&(reg_cnfg_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 946 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 947
metin.ozkan@analog.com 0:00d2a8670533 948 bit_value = (uint8_t)reg_cnfg_chg_a.bits.thm_hot;
metin.ozkan@analog.com 0:00d2a8670533 949 if (bit_value <= 3)
metin.ozkan@analog.com 0:00d2a8670533 950 *tempDegC = (bit_value * 5) + 45;
metin.ozkan@analog.com 0:00d2a8670533 951 else
metin.ozkan@analog.com 0:00d2a8670533 952 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 953
metin.ozkan@analog.com 0:00d2a8670533 954 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 955 }
metin.ozkan@analog.com 0:00d2a8670533 956
metin.ozkan@analog.com 0:00d2a8670533 957 int MAX77658::set_thm_warm(int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 958 {
metin.ozkan@analog.com 0:00d2a8670533 959 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 960 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 961
metin.ozkan@analog.com 0:00d2a8670533 962 if (tempDegC < 35) tempDegC = 35;
metin.ozkan@analog.com 0:00d2a8670533 963 else if (tempDegC > 50) tempDegC = 50;
metin.ozkan@analog.com 0:00d2a8670533 964
metin.ozkan@analog.com 0:00d2a8670533 965 value = (tempDegC - 35) / 5;
metin.ozkan@analog.com 0:00d2a8670533 966
metin.ozkan@analog.com 0:00d2a8670533 967 SET_BIT_FIELD(CNFG_CHG_A, reg_cnfg_chg_a, reg_cnfg_chg_a.bits.thm_warm, value);
metin.ozkan@analog.com 0:00d2a8670533 968 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 969 }
metin.ozkan@analog.com 0:00d2a8670533 970
metin.ozkan@analog.com 0:00d2a8670533 971 int MAX77658::get_thm_warm(int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 972 {
metin.ozkan@analog.com 0:00d2a8670533 973 int ret;
metin.ozkan@analog.com 0:00d2a8670533 974 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 975 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 976
metin.ozkan@analog.com 0:00d2a8670533 977 ret = read_register(CNFG_CHG_A, (uint8_t *)&(reg_cnfg_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 978 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 979
metin.ozkan@analog.com 0:00d2a8670533 980 bit_value = (uint8_t)reg_cnfg_chg_a.bits.thm_warm;
metin.ozkan@analog.com 0:00d2a8670533 981 if (bit_value <= 3)
metin.ozkan@analog.com 0:00d2a8670533 982 *tempDegC = (bit_value * 5) + 35;
metin.ozkan@analog.com 0:00d2a8670533 983 else
metin.ozkan@analog.com 0:00d2a8670533 984 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 985
metin.ozkan@analog.com 0:00d2a8670533 986 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 987 }
metin.ozkan@analog.com 0:00d2a8670533 988
metin.ozkan@analog.com 0:00d2a8670533 989 int MAX77658::set_thm_cool(int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 990 {
metin.ozkan@analog.com 0:00d2a8670533 991 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 992 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 993
metin.ozkan@analog.com 0:00d2a8670533 994 if (tempDegC < 0) tempDegC = 0;
metin.ozkan@analog.com 0:00d2a8670533 995 else if (tempDegC > 15) tempDegC = 15;
metin.ozkan@analog.com 0:00d2a8670533 996
metin.ozkan@analog.com 0:00d2a8670533 997 value = tempDegC / 5;
metin.ozkan@analog.com 0:00d2a8670533 998
metin.ozkan@analog.com 0:00d2a8670533 999 SET_BIT_FIELD(CNFG_CHG_A, reg_cnfg_chg_a, reg_cnfg_chg_a.bits.thm_cool, value);
metin.ozkan@analog.com 0:00d2a8670533 1000 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1001 }
metin.ozkan@analog.com 0:00d2a8670533 1002
metin.ozkan@analog.com 0:00d2a8670533 1003 int MAX77658::get_thm_cool(int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 1004 {
metin.ozkan@analog.com 0:00d2a8670533 1005 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1006 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1007 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1008
metin.ozkan@analog.com 0:00d2a8670533 1009 ret = read_register(CNFG_CHG_A, (uint8_t *)&(reg_cnfg_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 1010 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1011
metin.ozkan@analog.com 0:00d2a8670533 1012 bit_value = (uint8_t)reg_cnfg_chg_a.bits.thm_cool;
metin.ozkan@analog.com 0:00d2a8670533 1013 if (bit_value <= 3)
metin.ozkan@analog.com 0:00d2a8670533 1014 *tempDegC = bit_value * 5;
metin.ozkan@analog.com 0:00d2a8670533 1015 else
metin.ozkan@analog.com 0:00d2a8670533 1016 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1017
metin.ozkan@analog.com 0:00d2a8670533 1018 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1019 }
metin.ozkan@analog.com 0:00d2a8670533 1020
metin.ozkan@analog.com 0:00d2a8670533 1021 int MAX77658::set_thm_cold(int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 1022 {
metin.ozkan@analog.com 0:00d2a8670533 1023 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1024 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1025
metin.ozkan@analog.com 0:00d2a8670533 1026 if (tempDegC < -10) tempDegC = -10;
metin.ozkan@analog.com 0:00d2a8670533 1027 else if (tempDegC > 5) tempDegC = 5;
metin.ozkan@analog.com 0:00d2a8670533 1028
metin.ozkan@analog.com 0:00d2a8670533 1029 value = (tempDegC + 10) / 5;
metin.ozkan@analog.com 0:00d2a8670533 1030
metin.ozkan@analog.com 0:00d2a8670533 1031 SET_BIT_FIELD(CNFG_CHG_A, reg_cnfg_chg_a, reg_cnfg_chg_a.bits.thm_cold, value);
metin.ozkan@analog.com 0:00d2a8670533 1032 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1033 }
metin.ozkan@analog.com 0:00d2a8670533 1034
metin.ozkan@analog.com 0:00d2a8670533 1035 int MAX77658::get_thm_cold(int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 1036 {
metin.ozkan@analog.com 0:00d2a8670533 1037 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1038 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1039 reg_cnfg_chg_a_t reg_cnfg_chg_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1040
metin.ozkan@analog.com 0:00d2a8670533 1041 ret = read_register(CNFG_CHG_A, (uint8_t *)&(reg_cnfg_chg_a));
metin.ozkan@analog.com 0:00d2a8670533 1042 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1043
metin.ozkan@analog.com 0:00d2a8670533 1044 bit_value = (uint8_t)reg_cnfg_chg_a.bits.thm_cold;
metin.ozkan@analog.com 0:00d2a8670533 1045 if (bit_value <= 3)
metin.ozkan@analog.com 0:00d2a8670533 1046 *tempDegC = (bit_value * 5) - 10;
metin.ozkan@analog.com 0:00d2a8670533 1047 else
metin.ozkan@analog.com 0:00d2a8670533 1048 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1049
metin.ozkan@analog.com 0:00d2a8670533 1050 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1051 }
metin.ozkan@analog.com 0:00d2a8670533 1052
metin.ozkan@analog.com 0:00d2a8670533 1053 int MAX77658::set_cnfg_chg_b(reg_bit_cnfg_chg_b_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 1054 {
metin.ozkan@analog.com 0:00d2a8670533 1055 int ret;
Okan Sahin 1:40ef1dc30cb7 1056 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1057
metin.ozkan@analog.com 0:00d2a8670533 1058 ret = read_register(CNFG_CHG_B, (uint8_t *)&(reg_cnfg_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 1059 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1060
metin.ozkan@analog.com 0:00d2a8670533 1061 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1062 {
metin.ozkan@analog.com 0:00d2a8670533 1063 case CNFG_CHG_B_CHG_EN:
metin.ozkan@analog.com 0:00d2a8670533 1064 reg_cnfg_chg_b.bits.chg_en = config;
metin.ozkan@analog.com 0:00d2a8670533 1065 break;
metin.ozkan@analog.com 0:00d2a8670533 1066 case CNFG_CHG_B_I_PQ:
metin.ozkan@analog.com 0:00d2a8670533 1067 reg_cnfg_chg_b.bits.i_pq = config;
metin.ozkan@analog.com 0:00d2a8670533 1068 break;
metin.ozkan@analog.com 0:00d2a8670533 1069 case CNFG_CHG_B_ICHGIN_LIM:
metin.ozkan@analog.com 0:00d2a8670533 1070 reg_cnfg_chg_b.bits.ichgin_lim = config;
metin.ozkan@analog.com 0:00d2a8670533 1071 break;
metin.ozkan@analog.com 0:00d2a8670533 1072 case CNFG_CHG_B_VCHGIN_MIN:
metin.ozkan@analog.com 0:00d2a8670533 1073 reg_cnfg_chg_b.bits.vchgin_min = config;
metin.ozkan@analog.com 0:00d2a8670533 1074 break;
metin.ozkan@analog.com 0:00d2a8670533 1075 default:
metin.ozkan@analog.com 0:00d2a8670533 1076 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1077 break;
metin.ozkan@analog.com 0:00d2a8670533 1078 }
metin.ozkan@analog.com 0:00d2a8670533 1079
metin.ozkan@analog.com 0:00d2a8670533 1080 return write_register(CNFG_CHG_B, (uint8_t *)&(reg_cnfg_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 1081 }
metin.ozkan@analog.com 0:00d2a8670533 1082
metin.ozkan@analog.com 0:00d2a8670533 1083 int MAX77658::get_cnfg_chg_b(reg_bit_cnfg_chg_b_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 1084 {
metin.ozkan@analog.com 0:00d2a8670533 1085 int ret;
Okan Sahin 1:40ef1dc30cb7 1086 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1087
metin.ozkan@analog.com 0:00d2a8670533 1088 ret = read_register(CNFG_CHG_B, (uint8_t *)&(reg_cnfg_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 1089 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1090
metin.ozkan@analog.com 0:00d2a8670533 1091 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1092 {
metin.ozkan@analog.com 0:00d2a8670533 1093 case CNFG_CHG_B_CHG_EN:
metin.ozkan@analog.com 0:00d2a8670533 1094 *config = (uint8_t)reg_cnfg_chg_b.bits.chg_en;
metin.ozkan@analog.com 0:00d2a8670533 1095 break;
metin.ozkan@analog.com 0:00d2a8670533 1096 case CNFG_CHG_B_I_PQ:
metin.ozkan@analog.com 0:00d2a8670533 1097 *config = (uint8_t)reg_cnfg_chg_b.bits.i_pq;
metin.ozkan@analog.com 0:00d2a8670533 1098 break;
metin.ozkan@analog.com 0:00d2a8670533 1099 case CNFG_CHG_B_ICHGIN_LIM:
metin.ozkan@analog.com 0:00d2a8670533 1100 *config = (uint8_t)reg_cnfg_chg_b.bits.ichgin_lim;
metin.ozkan@analog.com 0:00d2a8670533 1101 break;
metin.ozkan@analog.com 0:00d2a8670533 1102 case CNFG_CHG_B_VCHGIN_MIN:
metin.ozkan@analog.com 0:00d2a8670533 1103 *config = (uint8_t)reg_cnfg_chg_b.bits.vchgin_min;
metin.ozkan@analog.com 0:00d2a8670533 1104 break;
metin.ozkan@analog.com 0:00d2a8670533 1105 default:
metin.ozkan@analog.com 0:00d2a8670533 1106 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1107 break;
metin.ozkan@analog.com 0:00d2a8670533 1108 }
metin.ozkan@analog.com 0:00d2a8670533 1109
metin.ozkan@analog.com 0:00d2a8670533 1110 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1111 }
metin.ozkan@analog.com 0:00d2a8670533 1112
metin.ozkan@analog.com 0:00d2a8670533 1113 int MAX77658::set_vchgin_min(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1114 {
metin.ozkan@analog.com 0:00d2a8670533 1115 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1116 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1117 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1118
metin.ozkan@analog.com 0:00d2a8670533 1119 if (voltmV < 4000) voltmV = 4000;
metin.ozkan@analog.com 0:00d2a8670533 1120 else if (voltmV > 4700) voltmV = 4700;
metin.ozkan@analog.com 0:00d2a8670533 1121
metin.ozkan@analog.com 0:00d2a8670533 1122 value = (voltmV - 4000) / 100;
metin.ozkan@analog.com 0:00d2a8670533 1123
metin.ozkan@analog.com 0:00d2a8670533 1124 SET_BIT_FIELD(CNFG_CHG_B, reg_cnfg_chg_b, reg_cnfg_chg_b.bits.vchgin_min, value);
metin.ozkan@analog.com 0:00d2a8670533 1125 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1126 }
metin.ozkan@analog.com 0:00d2a8670533 1127
metin.ozkan@analog.com 0:00d2a8670533 1128 int MAX77658::get_vchgin_min(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1129 {
metin.ozkan@analog.com 0:00d2a8670533 1130 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1131 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1132 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1133
metin.ozkan@analog.com 0:00d2a8670533 1134 ret = read_register(CNFG_CHG_B, (uint8_t *)&(reg_cnfg_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 1135 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1136
metin.ozkan@analog.com 0:00d2a8670533 1137 value = (uint8_t)reg_cnfg_chg_b.bits.vchgin_min;
metin.ozkan@analog.com 0:00d2a8670533 1138 *voltV = (float)(value * 0.1f) + 4.0f;
metin.ozkan@analog.com 0:00d2a8670533 1139 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1140 }
metin.ozkan@analog.com 0:00d2a8670533 1141
metin.ozkan@analog.com 0:00d2a8670533 1142 int MAX77658::set_ichgin_lim(int currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1143 {
metin.ozkan@analog.com 0:00d2a8670533 1144 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1145 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1146
metin.ozkan@analog.com 0:00d2a8670533 1147 if (currentmA < 95) currentmA = 95;
metin.ozkan@analog.com 0:00d2a8670533 1148 else if (currentmA > 475) currentmA = 475;
metin.ozkan@analog.com 0:00d2a8670533 1149
metin.ozkan@analog.com 0:00d2a8670533 1150 value = (currentmA - 95) / 95;
metin.ozkan@analog.com 0:00d2a8670533 1151
metin.ozkan@analog.com 0:00d2a8670533 1152 SET_BIT_FIELD(CNFG_CHG_B, reg_cnfg_chg_b, reg_cnfg_chg_b.bits.ichgin_lim, value);
metin.ozkan@analog.com 0:00d2a8670533 1153 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1154 }
metin.ozkan@analog.com 0:00d2a8670533 1155
metin.ozkan@analog.com 0:00d2a8670533 1156 int MAX77658::get_ichgin_lim(int *currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1157 {
metin.ozkan@analog.com 0:00d2a8670533 1158 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1159 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1160 reg_cnfg_chg_b_t reg_cnfg_chg_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1161
metin.ozkan@analog.com 0:00d2a8670533 1162 ret = read_register(CNFG_CHG_B, (uint8_t *)&(reg_cnfg_chg_b));
metin.ozkan@analog.com 0:00d2a8670533 1163 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1164
metin.ozkan@analog.com 0:00d2a8670533 1165 bit_value = (uint8_t)reg_cnfg_chg_b.bits.ichgin_lim;
metin.ozkan@analog.com 0:00d2a8670533 1166 *currentmA = (bit_value * 95) + 95;
metin.ozkan@analog.com 0:00d2a8670533 1167 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1168 }
metin.ozkan@analog.com 0:00d2a8670533 1169
metin.ozkan@analog.com 0:00d2a8670533 1170 int MAX77658::set_chg_pq(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1171 {
metin.ozkan@analog.com 0:00d2a8670533 1172 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1173 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1174 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1175
metin.ozkan@analog.com 0:00d2a8670533 1176 if (voltmV < 2300) voltmV = 2300;
metin.ozkan@analog.com 0:00d2a8670533 1177 else if (voltmV > 3000) voltmV = 3000;
metin.ozkan@analog.com 0:00d2a8670533 1178
metin.ozkan@analog.com 0:00d2a8670533 1179 value = (voltmV - 2300) / 100;
metin.ozkan@analog.com 0:00d2a8670533 1180
metin.ozkan@analog.com 0:00d2a8670533 1181 SET_BIT_FIELD(CNFG_CHG_C, reg_cnfg_chg_c, reg_cnfg_chg_c.bits.chg_pq, value);
metin.ozkan@analog.com 0:00d2a8670533 1182 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1183 }
metin.ozkan@analog.com 0:00d2a8670533 1184
metin.ozkan@analog.com 0:00d2a8670533 1185 int MAX77658::get_chg_pq(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1186 {
metin.ozkan@analog.com 0:00d2a8670533 1187 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1188 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1189 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1190
metin.ozkan@analog.com 0:00d2a8670533 1191 ret = read_register(CNFG_CHG_C, (uint8_t *)&(reg_cnfg_chg_c));
metin.ozkan@analog.com 0:00d2a8670533 1192 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1193
metin.ozkan@analog.com 0:00d2a8670533 1194 bit_value = (uint8_t)reg_cnfg_chg_c.bits.chg_pq;
metin.ozkan@analog.com 0:00d2a8670533 1195 *voltV = (bit_value * 0.1f) + 2.3f;
metin.ozkan@analog.com 0:00d2a8670533 1196 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1197 }
metin.ozkan@analog.com 0:00d2a8670533 1198
metin.ozkan@analog.com 0:00d2a8670533 1199 int MAX77658::set_i_term(float percent)
metin.ozkan@analog.com 0:00d2a8670533 1200 {
metin.ozkan@analog.com 0:00d2a8670533 1201 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1202 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1203
metin.ozkan@analog.com 0:00d2a8670533 1204 if (percent < 7.5f) value = 0;
metin.ozkan@analog.com 0:00d2a8670533 1205 else if ((percent >= 7.5f) && (percent < 10)) value = 1;
metin.ozkan@analog.com 0:00d2a8670533 1206 else if ((percent >= 10) && (percent < 15)) value = 2;
metin.ozkan@analog.com 0:00d2a8670533 1207 else if (percent >= 15) value = 3;
metin.ozkan@analog.com 0:00d2a8670533 1208
metin.ozkan@analog.com 0:00d2a8670533 1209 SET_BIT_FIELD(CNFG_CHG_C, reg_cnfg_chg_c, reg_cnfg_chg_c.bits.i_term, value);
metin.ozkan@analog.com 0:00d2a8670533 1210 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1211 }
metin.ozkan@analog.com 0:00d2a8670533 1212
metin.ozkan@analog.com 0:00d2a8670533 1213 int MAX77658::get_i_term(float *percent)
metin.ozkan@analog.com 0:00d2a8670533 1214 {
metin.ozkan@analog.com 0:00d2a8670533 1215 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1216 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1217 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1218
metin.ozkan@analog.com 0:00d2a8670533 1219 ret = read_register(CNFG_CHG_C, (uint8_t *)&(reg_cnfg_chg_c));
metin.ozkan@analog.com 0:00d2a8670533 1220 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1221
metin.ozkan@analog.com 0:00d2a8670533 1222 bit_value = (uint8_t)reg_cnfg_chg_c.bits.i_term;
metin.ozkan@analog.com 0:00d2a8670533 1223
metin.ozkan@analog.com 0:00d2a8670533 1224 if (bit_value == 0) *percent = 5.0f;
metin.ozkan@analog.com 0:00d2a8670533 1225 else if (bit_value == 1) *percent = 7.5f;
metin.ozkan@analog.com 0:00d2a8670533 1226 else if (bit_value == 2) *percent = 10.0f;
metin.ozkan@analog.com 0:00d2a8670533 1227 else if (bit_value == 3) *percent = 15.0f;
metin.ozkan@analog.com 0:00d2a8670533 1228 else return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1229
metin.ozkan@analog.com 0:00d2a8670533 1230 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1231 }
metin.ozkan@analog.com 0:00d2a8670533 1232
metin.ozkan@analog.com 0:00d2a8670533 1233 int MAX77658::set_t_topoff(uint8_t minute)
metin.ozkan@analog.com 0:00d2a8670533 1234 {
metin.ozkan@analog.com 0:00d2a8670533 1235 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1236 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1237
metin.ozkan@analog.com 0:00d2a8670533 1238 if (minute > 35) minute = 35;
metin.ozkan@analog.com 0:00d2a8670533 1239
metin.ozkan@analog.com 0:00d2a8670533 1240 value = (uint8_t)(minute / 5);
metin.ozkan@analog.com 0:00d2a8670533 1241
metin.ozkan@analog.com 0:00d2a8670533 1242 SET_BIT_FIELD(CNFG_CHG_C, reg_cnfg_chg_c, reg_cnfg_chg_c.bits.t_topoff, value);
metin.ozkan@analog.com 0:00d2a8670533 1243 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1244 }
metin.ozkan@analog.com 0:00d2a8670533 1245
metin.ozkan@analog.com 0:00d2a8670533 1246 int MAX77658::get_t_topoff(uint8_t *minute)
metin.ozkan@analog.com 0:00d2a8670533 1247 {
metin.ozkan@analog.com 0:00d2a8670533 1248 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1249 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1250 reg_cnfg_chg_c_t reg_cnfg_chg_c = {0};
metin.ozkan@analog.com 0:00d2a8670533 1251
metin.ozkan@analog.com 0:00d2a8670533 1252 ret = read_register(CNFG_CHG_C, (uint8_t *)&(reg_cnfg_chg_c));
metin.ozkan@analog.com 0:00d2a8670533 1253 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1254
metin.ozkan@analog.com 0:00d2a8670533 1255 bit_value = (uint8_t)reg_cnfg_chg_c.bits.t_topoff;
metin.ozkan@analog.com 0:00d2a8670533 1256 *minute = (bit_value * 5);
metin.ozkan@analog.com 0:00d2a8670533 1257 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1258 }
metin.ozkan@analog.com 0:00d2a8670533 1259
metin.ozkan@analog.com 0:00d2a8670533 1260 int MAX77658::set_tj_reg(uint8_t tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 1261 {
metin.ozkan@analog.com 0:00d2a8670533 1262 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1263 reg_cnfg_chg_d_t reg_cnfg_chg_d = {0};
metin.ozkan@analog.com 0:00d2a8670533 1264
metin.ozkan@analog.com 0:00d2a8670533 1265 if (tempDegC < 60) tempDegC = 60;
metin.ozkan@analog.com 0:00d2a8670533 1266 else if (tempDegC > 100) tempDegC = 100;
metin.ozkan@analog.com 0:00d2a8670533 1267
metin.ozkan@analog.com 0:00d2a8670533 1268 value = (tempDegC - 60) / 10;
metin.ozkan@analog.com 0:00d2a8670533 1269
metin.ozkan@analog.com 0:00d2a8670533 1270 SET_BIT_FIELD(CNFG_CHG_D, reg_cnfg_chg_d, reg_cnfg_chg_d.bits.tj_reg, value);
metin.ozkan@analog.com 0:00d2a8670533 1271 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1272 }
metin.ozkan@analog.com 0:00d2a8670533 1273
metin.ozkan@analog.com 0:00d2a8670533 1274 int MAX77658::get_tj_reg(uint8_t *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 1275 {
metin.ozkan@analog.com 0:00d2a8670533 1276 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1277 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1278 reg_cnfg_chg_d_t reg_cnfg_chg_d = {0};
metin.ozkan@analog.com 0:00d2a8670533 1279
metin.ozkan@analog.com 0:00d2a8670533 1280 ret = read_register(CNFG_CHG_D, (uint8_t *)&(reg_cnfg_chg_d));
metin.ozkan@analog.com 0:00d2a8670533 1281 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1282
metin.ozkan@analog.com 0:00d2a8670533 1283 bit_value = (uint8_t)reg_cnfg_chg_d.bits.tj_reg;
metin.ozkan@analog.com 0:00d2a8670533 1284 *tempDegC = (bit_value * 10) + 60;
metin.ozkan@analog.com 0:00d2a8670533 1285 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1286 }
metin.ozkan@analog.com 0:00d2a8670533 1287
metin.ozkan@analog.com 0:00d2a8670533 1288 int MAX77658::set_vsys_reg(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1289 {
metin.ozkan@analog.com 0:00d2a8670533 1290 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1291 reg_cnfg_chg_d_t reg_cnfg_chg_d = {0};
metin.ozkan@analog.com 0:00d2a8670533 1292 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1293
metin.ozkan@analog.com 0:00d2a8670533 1294 if (voltmV < 3300) voltmV = 3300;
metin.ozkan@analog.com 0:00d2a8670533 1295 else if (voltmV > 4800) voltmV = 4800;
metin.ozkan@analog.com 0:00d2a8670533 1296
metin.ozkan@analog.com 0:00d2a8670533 1297 value = (voltmV - 3300) / 50;
metin.ozkan@analog.com 0:00d2a8670533 1298
metin.ozkan@analog.com 0:00d2a8670533 1299 SET_BIT_FIELD(CNFG_CHG_D, reg_cnfg_chg_d, reg_cnfg_chg_d.bits.vsys_reg, value);
metin.ozkan@analog.com 0:00d2a8670533 1300 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1301 }
metin.ozkan@analog.com 0:00d2a8670533 1302
metin.ozkan@analog.com 0:00d2a8670533 1303 int MAX77658::get_vsys_reg(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1304 {
metin.ozkan@analog.com 0:00d2a8670533 1305 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1306 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1307 reg_cnfg_chg_d_t reg_cnfg_chg_d = {0};
metin.ozkan@analog.com 0:00d2a8670533 1308
metin.ozkan@analog.com 0:00d2a8670533 1309 ret = read_register(CNFG_CHG_D, (uint8_t *)&(reg_cnfg_chg_d));
metin.ozkan@analog.com 0:00d2a8670533 1310 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1311
metin.ozkan@analog.com 0:00d2a8670533 1312 bit_value = (uint8_t)reg_cnfg_chg_d.bits.vsys_reg;
metin.ozkan@analog.com 0:00d2a8670533 1313 *voltV = (bit_value * 0.05f) + 3.3f;
metin.ozkan@analog.com 0:00d2a8670533 1314 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1315 }
metin.ozkan@analog.com 0:00d2a8670533 1316
metin.ozkan@analog.com 0:00d2a8670533 1317 int MAX77658::set_chg_cc(float currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1318 {
metin.ozkan@analog.com 0:00d2a8670533 1319 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1320 reg_cnfg_chg_e_t reg_cnfg_chg_e = {0};
metin.ozkan@analog.com 0:00d2a8670533 1321 float currentuA = currentmA * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1322
metin.ozkan@analog.com 0:00d2a8670533 1323 if (currentuA < 7500) currentuA = 7500;
metin.ozkan@analog.com 0:00d2a8670533 1324 if (currentuA > 300000) currentuA = 300000;
metin.ozkan@analog.com 0:00d2a8670533 1325
metin.ozkan@analog.com 0:00d2a8670533 1326 value = (currentuA - 7500) / 7500;
metin.ozkan@analog.com 0:00d2a8670533 1327
metin.ozkan@analog.com 0:00d2a8670533 1328 SET_BIT_FIELD(CNFG_CHG_E, reg_cnfg_chg_e, reg_cnfg_chg_e.bits.chg_cc, value);
metin.ozkan@analog.com 0:00d2a8670533 1329 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1330 }
metin.ozkan@analog.com 0:00d2a8670533 1331
metin.ozkan@analog.com 0:00d2a8670533 1332 int MAX77658::get_chg_cc(float *currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1333 {
metin.ozkan@analog.com 0:00d2a8670533 1334 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1335 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1336 reg_cnfg_chg_e_t reg_cnfg_chg_e = {0};
metin.ozkan@analog.com 0:00d2a8670533 1337
metin.ozkan@analog.com 0:00d2a8670533 1338 ret = read_register(CNFG_CHG_E, (uint8_t *)&(reg_cnfg_chg_e));
metin.ozkan@analog.com 0:00d2a8670533 1339 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1340
metin.ozkan@analog.com 0:00d2a8670533 1341 bit_value = (uint8_t)reg_cnfg_chg_e.bits.chg_cc;
metin.ozkan@analog.com 0:00d2a8670533 1342 if (bit_value >= 39) bit_value = 39; //0x27 to 0x3F = 300.0mA
metin.ozkan@analog.com 0:00d2a8670533 1343
metin.ozkan@analog.com 0:00d2a8670533 1344 *currentmA = (bit_value * 7.5f) + 7.5f;
metin.ozkan@analog.com 0:00d2a8670533 1345
metin.ozkan@analog.com 0:00d2a8670533 1346 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1347 }
metin.ozkan@analog.com 0:00d2a8670533 1348
metin.ozkan@analog.com 0:00d2a8670533 1349 int MAX77658::set_t_fast_chg(decode_t_fast_chg_t t_fast_chg)
metin.ozkan@analog.com 0:00d2a8670533 1350 {
Okan Sahin 1:40ef1dc30cb7 1351 reg_cnfg_chg_e_t reg_cnfg_chg_e = {0};
metin.ozkan@analog.com 0:00d2a8670533 1352
metin.ozkan@analog.com 0:00d2a8670533 1353 SET_BIT_FIELD(CNFG_CHG_E, reg_cnfg_chg_e, reg_cnfg_chg_e.bits.t_fast_chg, t_fast_chg);
metin.ozkan@analog.com 0:00d2a8670533 1354 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1355 }
metin.ozkan@analog.com 0:00d2a8670533 1356
metin.ozkan@analog.com 0:00d2a8670533 1357 int MAX77658::get_t_fast_chg(decode_t_fast_chg_t *t_fast_chg)
metin.ozkan@analog.com 0:00d2a8670533 1358 {
metin.ozkan@analog.com 0:00d2a8670533 1359 int ret;
Okan Sahin 1:40ef1dc30cb7 1360 reg_cnfg_chg_e_t reg_cnfg_chg_e = {0};
metin.ozkan@analog.com 0:00d2a8670533 1361
metin.ozkan@analog.com 0:00d2a8670533 1362 ret = read_register(CNFG_CHG_E, (uint8_t *)&(reg_cnfg_chg_e));
metin.ozkan@analog.com 0:00d2a8670533 1363 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1364
metin.ozkan@analog.com 0:00d2a8670533 1365 *t_fast_chg = (decode_t_fast_chg_t)reg_cnfg_chg_e.bits.t_fast_chg;
metin.ozkan@analog.com 0:00d2a8670533 1366
metin.ozkan@analog.com 0:00d2a8670533 1367 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1368 }
metin.ozkan@analog.com 0:00d2a8670533 1369
metin.ozkan@analog.com 0:00d2a8670533 1370 int MAX77658::set_chg_cc_jeita(float currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1371 {
metin.ozkan@analog.com 0:00d2a8670533 1372 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1373 reg_cnfg_chg_f_t reg_cnfg_chg_f = {0};
metin.ozkan@analog.com 0:00d2a8670533 1374 float currentuA = currentmA * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1375
metin.ozkan@analog.com 0:00d2a8670533 1376 if (currentuA < 7500) currentuA = 7500;
metin.ozkan@analog.com 0:00d2a8670533 1377 else if (currentuA > 300000) currentuA = 300000;
metin.ozkan@analog.com 0:00d2a8670533 1378
metin.ozkan@analog.com 0:00d2a8670533 1379 value = round(currentuA - 7500) / 7500;
metin.ozkan@analog.com 0:00d2a8670533 1380
metin.ozkan@analog.com 0:00d2a8670533 1381 SET_BIT_FIELD(CNFG_CHG_F, reg_cnfg_chg_f, reg_cnfg_chg_f.bits.chg_cc_jeita, value);
metin.ozkan@analog.com 0:00d2a8670533 1382 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1383 }
metin.ozkan@analog.com 0:00d2a8670533 1384
metin.ozkan@analog.com 0:00d2a8670533 1385 int MAX77658::get_chg_cc_jeita(float *currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1386 {
metin.ozkan@analog.com 0:00d2a8670533 1387 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1388 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1389 reg_cnfg_chg_f_t reg_cnfg_chg_f = {0};
metin.ozkan@analog.com 0:00d2a8670533 1390
metin.ozkan@analog.com 0:00d2a8670533 1391 ret = read_register(CNFG_CHG_F, (uint8_t *)&(reg_cnfg_chg_f));
metin.ozkan@analog.com 0:00d2a8670533 1392 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1393
metin.ozkan@analog.com 0:00d2a8670533 1394 bit_value = (uint8_t)reg_cnfg_chg_f.bits.chg_cc_jeita;
metin.ozkan@analog.com 0:00d2a8670533 1395 if (bit_value >= 39) bit_value = 39; //0x27 to 0x3F = 300.0mA
metin.ozkan@analog.com 0:00d2a8670533 1396
metin.ozkan@analog.com 0:00d2a8670533 1397 *currentmA = (bit_value * 7.5f) + 7.5f;
metin.ozkan@analog.com 0:00d2a8670533 1398 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1399 }
metin.ozkan@analog.com 0:00d2a8670533 1400
metin.ozkan@analog.com 0:00d2a8670533 1401 int MAX77658::set_cnfg_chg_g(reg_bit_cnfg_chg_g_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 1402 {
metin.ozkan@analog.com 0:00d2a8670533 1403 int ret;
Okan Sahin 1:40ef1dc30cb7 1404 reg_cnfg_chg_g_t reg_cnfg_chg_g = {0};
metin.ozkan@analog.com 0:00d2a8670533 1405
metin.ozkan@analog.com 0:00d2a8670533 1406 ret = read_register(CNFG_CHG_G, (uint8_t *)&(reg_cnfg_chg_g));
metin.ozkan@analog.com 0:00d2a8670533 1407 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1408
metin.ozkan@analog.com 0:00d2a8670533 1409 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1410 {
metin.ozkan@analog.com 0:00d2a8670533 1411 case CNFG_CHG_G_FUS_M:
metin.ozkan@analog.com 0:00d2a8670533 1412 reg_cnfg_chg_g.bits.fus_m = config;
metin.ozkan@analog.com 0:00d2a8670533 1413 break;
metin.ozkan@analog.com 0:00d2a8670533 1414 case CNFG_CHG_G_USBS:
metin.ozkan@analog.com 0:00d2a8670533 1415 reg_cnfg_chg_g.bits.usbs = config;
metin.ozkan@analog.com 0:00d2a8670533 1416 break;
metin.ozkan@analog.com 0:00d2a8670533 1417 case CNFG_CHG_G_CHG_CV:
metin.ozkan@analog.com 0:00d2a8670533 1418 reg_cnfg_chg_g.bits.chg_cv = config;
metin.ozkan@analog.com 0:00d2a8670533 1419 break;
metin.ozkan@analog.com 0:00d2a8670533 1420 default:
metin.ozkan@analog.com 0:00d2a8670533 1421 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1422 break;
metin.ozkan@analog.com 0:00d2a8670533 1423 }
metin.ozkan@analog.com 0:00d2a8670533 1424
metin.ozkan@analog.com 0:00d2a8670533 1425 return write_register(CNFG_CHG_G, (uint8_t *)&(reg_cnfg_chg_g));
metin.ozkan@analog.com 0:00d2a8670533 1426 }
metin.ozkan@analog.com 0:00d2a8670533 1427
metin.ozkan@analog.com 0:00d2a8670533 1428 int MAX77658::get_cnfg_chg_g(reg_bit_cnfg_chg_g_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 1429 {
metin.ozkan@analog.com 0:00d2a8670533 1430 int ret;
Okan Sahin 1:40ef1dc30cb7 1431 reg_cnfg_chg_g_t reg_cnfg_chg_g = {0};
metin.ozkan@analog.com 0:00d2a8670533 1432
metin.ozkan@analog.com 0:00d2a8670533 1433 ret = read_register(CNFG_CHG_G, (uint8_t *)&(reg_cnfg_chg_g));
metin.ozkan@analog.com 0:00d2a8670533 1434 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1435
metin.ozkan@analog.com 0:00d2a8670533 1436 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1437 {
metin.ozkan@analog.com 0:00d2a8670533 1438 case CNFG_CHG_G_FUS_M:
metin.ozkan@analog.com 0:00d2a8670533 1439 *config = (uint8_t)reg_cnfg_chg_g.bits.fus_m;
metin.ozkan@analog.com 0:00d2a8670533 1440 break;
metin.ozkan@analog.com 0:00d2a8670533 1441 case CNFG_CHG_G_USBS:
metin.ozkan@analog.com 0:00d2a8670533 1442 *config = (uint8_t)reg_cnfg_chg_g.bits.usbs;
metin.ozkan@analog.com 0:00d2a8670533 1443 break;
metin.ozkan@analog.com 0:00d2a8670533 1444 case CNFG_CHG_G_CHG_CV:
metin.ozkan@analog.com 0:00d2a8670533 1445 *config = (uint8_t)reg_cnfg_chg_g.bits.chg_cv;
metin.ozkan@analog.com 0:00d2a8670533 1446 break;
metin.ozkan@analog.com 0:00d2a8670533 1447 default:
metin.ozkan@analog.com 0:00d2a8670533 1448 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1449 break;
metin.ozkan@analog.com 0:00d2a8670533 1450 }
metin.ozkan@analog.com 0:00d2a8670533 1451
metin.ozkan@analog.com 0:00d2a8670533 1452 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1453 }
metin.ozkan@analog.com 0:00d2a8670533 1454
metin.ozkan@analog.com 0:00d2a8670533 1455 int MAX77658::set_chg_cv(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1456 {
metin.ozkan@analog.com 0:00d2a8670533 1457 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1458 reg_cnfg_chg_g_t reg_cnfg_chg_g = {0};
metin.ozkan@analog.com 0:00d2a8670533 1459 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1460
metin.ozkan@analog.com 0:00d2a8670533 1461 if (voltmV < 3600) voltmV = 3600;
metin.ozkan@analog.com 0:00d2a8670533 1462 else if (voltmV > 4600) voltmV = 4600;
metin.ozkan@analog.com 0:00d2a8670533 1463
metin.ozkan@analog.com 0:00d2a8670533 1464 value = (voltmV - 3600) / 25;
metin.ozkan@analog.com 0:00d2a8670533 1465
metin.ozkan@analog.com 0:00d2a8670533 1466 SET_BIT_FIELD(CNFG_CHG_G, reg_cnfg_chg_g, reg_cnfg_chg_g.bits.chg_cv, value);
metin.ozkan@analog.com 0:00d2a8670533 1467 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1468 }
metin.ozkan@analog.com 0:00d2a8670533 1469
metin.ozkan@analog.com 0:00d2a8670533 1470 int MAX77658::get_chg_cv(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1471 {
metin.ozkan@analog.com 0:00d2a8670533 1472 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1473 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1474 reg_cnfg_chg_g_t reg_cnfg_chg_g = {0};
metin.ozkan@analog.com 0:00d2a8670533 1475
metin.ozkan@analog.com 0:00d2a8670533 1476 ret = read_register(CNFG_CHG_G, (uint8_t *)&(reg_cnfg_chg_g));
metin.ozkan@analog.com 0:00d2a8670533 1477 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1478
metin.ozkan@analog.com 0:00d2a8670533 1479 bit_value = (uint8_t)reg_cnfg_chg_g.bits.chg_cv;
metin.ozkan@analog.com 0:00d2a8670533 1480 *voltV = (bit_value * 0.025f) + 3.6f;
metin.ozkan@analog.com 0:00d2a8670533 1481 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1482 }
metin.ozkan@analog.com 0:00d2a8670533 1483
metin.ozkan@analog.com 0:00d2a8670533 1484 int MAX77658::set_cnfg_chg_h(reg_bit_cnfg_chg_h_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 1485 {
metin.ozkan@analog.com 0:00d2a8670533 1486 int ret;
Okan Sahin 1:40ef1dc30cb7 1487 reg_cnfg_chg_h_t reg_cnfg_chg_h = {0};
metin.ozkan@analog.com 0:00d2a8670533 1488
metin.ozkan@analog.com 0:00d2a8670533 1489 ret = read_register(CNFG_CHG_H, (uint8_t *)&(reg_cnfg_chg_h));
metin.ozkan@analog.com 0:00d2a8670533 1490 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1491
metin.ozkan@analog.com 0:00d2a8670533 1492 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1493 {
metin.ozkan@analog.com 0:00d2a8670533 1494 case CNFG_CHG_H_CHR_TH_DIS:
metin.ozkan@analog.com 0:00d2a8670533 1495 reg_cnfg_chg_h.bits.chr_th_dis = config;
metin.ozkan@analog.com 0:00d2a8670533 1496 break;
metin.ozkan@analog.com 0:00d2a8670533 1497 case CNFG_CHG_H_SYS_BAT_PRT:
metin.ozkan@analog.com 0:00d2a8670533 1498 reg_cnfg_chg_h.bits.sys_bat_prt = config;
metin.ozkan@analog.com 0:00d2a8670533 1499 break;
metin.ozkan@analog.com 0:00d2a8670533 1500 case CNFG_CHG_H_CHG_CV_JEITA:
metin.ozkan@analog.com 0:00d2a8670533 1501 reg_cnfg_chg_h.bits.chg_cv_jeita = config;
metin.ozkan@analog.com 0:00d2a8670533 1502 break;
metin.ozkan@analog.com 0:00d2a8670533 1503 default:
metin.ozkan@analog.com 0:00d2a8670533 1504 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1505 break;
metin.ozkan@analog.com 0:00d2a8670533 1506 }
metin.ozkan@analog.com 0:00d2a8670533 1507
metin.ozkan@analog.com 0:00d2a8670533 1508 return write_register(CNFG_CHG_H, (uint8_t *)&(reg_cnfg_chg_h));
metin.ozkan@analog.com 0:00d2a8670533 1509 }
metin.ozkan@analog.com 0:00d2a8670533 1510
metin.ozkan@analog.com 0:00d2a8670533 1511 int MAX77658::get_cnfg_chg_h(reg_bit_cnfg_chg_h_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 1512 {
metin.ozkan@analog.com 0:00d2a8670533 1513 int ret;
Okan Sahin 1:40ef1dc30cb7 1514 reg_cnfg_chg_h_t reg_cnfg_chg_h = {0};
metin.ozkan@analog.com 0:00d2a8670533 1515
metin.ozkan@analog.com 0:00d2a8670533 1516 ret = read_register(CNFG_CHG_H, (uint8_t *)&(reg_cnfg_chg_h));
metin.ozkan@analog.com 0:00d2a8670533 1517 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1518
metin.ozkan@analog.com 0:00d2a8670533 1519 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1520 {
metin.ozkan@analog.com 0:00d2a8670533 1521 case CNFG_CHG_H_CHR_TH_DIS:
metin.ozkan@analog.com 0:00d2a8670533 1522 *config = (uint8_t)reg_cnfg_chg_h.bits.chr_th_dis;
metin.ozkan@analog.com 0:00d2a8670533 1523 break;
metin.ozkan@analog.com 0:00d2a8670533 1524 case CNFG_CHG_H_SYS_BAT_PRT:
metin.ozkan@analog.com 0:00d2a8670533 1525 *config = (uint8_t)reg_cnfg_chg_h.bits.sys_bat_prt;
metin.ozkan@analog.com 0:00d2a8670533 1526 break;
metin.ozkan@analog.com 0:00d2a8670533 1527 case CNFG_CHG_H_CHG_CV_JEITA:
metin.ozkan@analog.com 0:00d2a8670533 1528 *config = (uint8_t)reg_cnfg_chg_h.bits.chg_cv_jeita;
metin.ozkan@analog.com 0:00d2a8670533 1529 break;
metin.ozkan@analog.com 0:00d2a8670533 1530 default:
metin.ozkan@analog.com 0:00d2a8670533 1531 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1532 break;
metin.ozkan@analog.com 0:00d2a8670533 1533 }
metin.ozkan@analog.com 0:00d2a8670533 1534
metin.ozkan@analog.com 0:00d2a8670533 1535 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1536 }
metin.ozkan@analog.com 0:00d2a8670533 1537
metin.ozkan@analog.com 0:00d2a8670533 1538 int MAX77658::set_chg_cv_jeita(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1539 {
metin.ozkan@analog.com 0:00d2a8670533 1540 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1541 reg_cnfg_chg_h_t reg_cnfg_chg_h = {0};
metin.ozkan@analog.com 0:00d2a8670533 1542 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1543
metin.ozkan@analog.com 0:00d2a8670533 1544 if (voltmV < 3600) voltmV = 3600;
metin.ozkan@analog.com 0:00d2a8670533 1545 else if (voltmV > 4600) voltmV = 4600;
metin.ozkan@analog.com 0:00d2a8670533 1546
metin.ozkan@analog.com 0:00d2a8670533 1547 value = round(voltmV - 3600) / 25;
metin.ozkan@analog.com 0:00d2a8670533 1548
metin.ozkan@analog.com 0:00d2a8670533 1549 SET_BIT_FIELD(CNFG_CHG_H, reg_cnfg_chg_h, reg_cnfg_chg_h.bits.chg_cv_jeita, value);
metin.ozkan@analog.com 0:00d2a8670533 1550 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1551 }
metin.ozkan@analog.com 0:00d2a8670533 1552
metin.ozkan@analog.com 0:00d2a8670533 1553 int MAX77658::get_chg_cv_jeita(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1554 {
metin.ozkan@analog.com 0:00d2a8670533 1555 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1556 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1557 reg_cnfg_chg_h_t reg_cnfg_chg_h = {0};
metin.ozkan@analog.com 0:00d2a8670533 1558
metin.ozkan@analog.com 0:00d2a8670533 1559 ret = read_register(CNFG_CHG_H, (uint8_t *)&(reg_cnfg_chg_h));
metin.ozkan@analog.com 0:00d2a8670533 1560 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1561
metin.ozkan@analog.com 0:00d2a8670533 1562 bit_value = (uint8_t)reg_cnfg_chg_h.bits.chg_cv_jeita;
metin.ozkan@analog.com 0:00d2a8670533 1563 *voltV = (bit_value * 0.025f) + 3.6f;
metin.ozkan@analog.com 0:00d2a8670533 1564 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1565 }
metin.ozkan@analog.com 0:00d2a8670533 1566
metin.ozkan@analog.com 0:00d2a8670533 1567 int MAX77658::set_imon_dischg_scale(float currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1568 {
metin.ozkan@analog.com 0:00d2a8670533 1569 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1570 reg_cnfg_chg_i_t reg_cnfg_chg_i = {0};
metin.ozkan@analog.com 0:00d2a8670533 1571
metin.ozkan@analog.com 0:00d2a8670533 1572 if (currentmA < 40.5f) value = 0;
metin.ozkan@analog.com 0:00d2a8670533 1573 else if ((currentmA >= 40.5f) && (currentmA < 72.3f)) value = 1;
metin.ozkan@analog.com 0:00d2a8670533 1574 else if ((currentmA >= 72.3f) && (currentmA < 103.4f)) value = 2;
metin.ozkan@analog.com 0:00d2a8670533 1575 else if ((currentmA >= 103.4f) && (currentmA < 134.1f)) value = 3;
metin.ozkan@analog.com 0:00d2a8670533 1576 else if ((currentmA >= 134.1f) && (currentmA < 164.1f)) value = 4;
metin.ozkan@analog.com 0:00d2a8670533 1577 else if ((currentmA >= 164.1f) && (currentmA < 193.7f)) value = 5;
metin.ozkan@analog.com 0:00d2a8670533 1578 else if ((currentmA >= 193.7f) && (currentmA < 222.7f)) value = 6;
metin.ozkan@analog.com 0:00d2a8670533 1579 else if ((currentmA >= 222.7f) && (currentmA < 251.2f)) value = 7;
metin.ozkan@analog.com 0:00d2a8670533 1580 else if ((currentmA >= 251.2f) && (currentmA < 279.3f)) value = 8;
metin.ozkan@analog.com 0:00d2a8670533 1581 else if ((currentmA >= 279.3f) && (currentmA < 300.0f)) value = 9;
metin.ozkan@analog.com 0:00d2a8670533 1582 else if (currentmA >= 300.0f) value = 10;
metin.ozkan@analog.com 0:00d2a8670533 1583
metin.ozkan@analog.com 0:00d2a8670533 1584 SET_BIT_FIELD(CNFG_CHG_I, reg_cnfg_chg_i, reg_cnfg_chg_i.bits.imon_dischg_scale, value);
metin.ozkan@analog.com 0:00d2a8670533 1585 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1586 }
metin.ozkan@analog.com 0:00d2a8670533 1587
metin.ozkan@analog.com 0:00d2a8670533 1588 int MAX77658::get_imon_dischg_scale(float *currentmA)
metin.ozkan@analog.com 0:00d2a8670533 1589 {
metin.ozkan@analog.com 0:00d2a8670533 1590 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1591 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1592 reg_cnfg_chg_i_t reg_cnfg_chg_i = {0};
metin.ozkan@analog.com 0:00d2a8670533 1593
metin.ozkan@analog.com 0:00d2a8670533 1594 ret = read_register(CNFG_CHG_I, (uint8_t *)&(reg_cnfg_chg_i));
metin.ozkan@analog.com 0:00d2a8670533 1595 if (ret != MAX77658_NO_ERROR) {
metin.ozkan@analog.com 0:00d2a8670533 1596 return ret;
metin.ozkan@analog.com 0:00d2a8670533 1597 }
metin.ozkan@analog.com 0:00d2a8670533 1598
metin.ozkan@analog.com 0:00d2a8670533 1599 bit_value = (uint8_t)reg_cnfg_chg_i.bits.imon_dischg_scale;
metin.ozkan@analog.com 0:00d2a8670533 1600
metin.ozkan@analog.com 0:00d2a8670533 1601 if (bit_value == 0) *currentmA = 8.2f;
metin.ozkan@analog.com 0:00d2a8670533 1602 else if (bit_value == 1) *currentmA = 40.5f;
metin.ozkan@analog.com 0:00d2a8670533 1603 else if (bit_value == 2) *currentmA = 72.3f;
metin.ozkan@analog.com 0:00d2a8670533 1604 else if (bit_value == 3) *currentmA = 103.4f;
metin.ozkan@analog.com 0:00d2a8670533 1605 else if (bit_value == 4) *currentmA = 134.1f;
metin.ozkan@analog.com 0:00d2a8670533 1606 else if (bit_value == 5) *currentmA = 164.1f;
metin.ozkan@analog.com 0:00d2a8670533 1607 else if (bit_value == 6) *currentmA = 193.7f;
metin.ozkan@analog.com 0:00d2a8670533 1608 else if (bit_value == 7) *currentmA = 222.7f;
metin.ozkan@analog.com 0:00d2a8670533 1609 else if (bit_value == 8) *currentmA = 251.2f;
metin.ozkan@analog.com 0:00d2a8670533 1610 else if (bit_value == 9) *currentmA = 279.3f;
metin.ozkan@analog.com 0:00d2a8670533 1611 else *currentmA = 300.0f; //0xA to 0xF = 300.0mA
metin.ozkan@analog.com 0:00d2a8670533 1612
metin.ozkan@analog.com 0:00d2a8670533 1613 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1614 }
metin.ozkan@analog.com 0:00d2a8670533 1615
metin.ozkan@analog.com 0:00d2a8670533 1616 int MAX77658::set_mux_sel(decode_mux_sel_t selection)
metin.ozkan@analog.com 0:00d2a8670533 1617 {
Okan Sahin 1:40ef1dc30cb7 1618 reg_cnfg_chg_i_t reg_cnfg_chg_i = {0};
metin.ozkan@analog.com 0:00d2a8670533 1619
metin.ozkan@analog.com 0:00d2a8670533 1620 SET_BIT_FIELD(CNFG_CHG_I, reg_cnfg_chg_i, reg_cnfg_chg_i.bits.mux_sel, selection);
metin.ozkan@analog.com 0:00d2a8670533 1621 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1622 }
metin.ozkan@analog.com 0:00d2a8670533 1623
metin.ozkan@analog.com 0:00d2a8670533 1624 int MAX77658::get_mux_sel(decode_mux_sel_t *selection)
metin.ozkan@analog.com 0:00d2a8670533 1625 {
metin.ozkan@analog.com 0:00d2a8670533 1626 int ret;
Okan Sahin 1:40ef1dc30cb7 1627 reg_cnfg_chg_i_t reg_cnfg_chg_i = {0};
metin.ozkan@analog.com 0:00d2a8670533 1628
metin.ozkan@analog.com 0:00d2a8670533 1629 ret = read_register(CNFG_CHG_I, (uint8_t *)&(reg_cnfg_chg_i));
metin.ozkan@analog.com 0:00d2a8670533 1630 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1631
metin.ozkan@analog.com 0:00d2a8670533 1632 *selection = (decode_mux_sel_t)reg_cnfg_chg_i.bits.mux_sel;
metin.ozkan@analog.com 0:00d2a8670533 1633 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1634 }
metin.ozkan@analog.com 0:00d2a8670533 1635
metin.ozkan@analog.com 0:00d2a8670533 1636 int MAX77658::set_cnfg_sbb_top(reg_bit_cnfg_sbb_top_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 1637 {
metin.ozkan@analog.com 0:00d2a8670533 1638 int ret;
Okan Sahin 1:40ef1dc30cb7 1639 reg_cnfg_sbb_top_t reg_cnfg_sbb_top = {0};
metin.ozkan@analog.com 0:00d2a8670533 1640
metin.ozkan@analog.com 0:00d2a8670533 1641 ret = read_register(CNFG_SBB_TOP, (uint8_t *)&(reg_cnfg_sbb_top));
metin.ozkan@analog.com 0:00d2a8670533 1642 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1643
metin.ozkan@analog.com 0:00d2a8670533 1644 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1645 {
metin.ozkan@analog.com 0:00d2a8670533 1646 case CNFG_SBB_TOP_DRV_SBB:
metin.ozkan@analog.com 0:00d2a8670533 1647 reg_cnfg_sbb_top.bits.drv_sbb = config;
metin.ozkan@analog.com 0:00d2a8670533 1648 break;
metin.ozkan@analog.com 0:00d2a8670533 1649 case CNFG_SBB_TOP_DIS_LPM:
metin.ozkan@analog.com 0:00d2a8670533 1650 reg_cnfg_sbb_top.bits.dis_lpm = config;
metin.ozkan@analog.com 0:00d2a8670533 1651 break;
metin.ozkan@analog.com 0:00d2a8670533 1652 default:
metin.ozkan@analog.com 0:00d2a8670533 1653 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1654 break;
metin.ozkan@analog.com 0:00d2a8670533 1655 }
metin.ozkan@analog.com 0:00d2a8670533 1656
metin.ozkan@analog.com 0:00d2a8670533 1657 return write_register(CNFG_SBB_TOP, (uint8_t *)&(reg_cnfg_sbb_top));
metin.ozkan@analog.com 0:00d2a8670533 1658 }
metin.ozkan@analog.com 0:00d2a8670533 1659
metin.ozkan@analog.com 0:00d2a8670533 1660 int MAX77658::get_cnfg_sbb_top(reg_bit_cnfg_sbb_top_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 1661 {
metin.ozkan@analog.com 0:00d2a8670533 1662 int ret;
Okan Sahin 1:40ef1dc30cb7 1663 reg_cnfg_sbb_top_t reg_cnfg_sbb_top = {0};
metin.ozkan@analog.com 0:00d2a8670533 1664
metin.ozkan@analog.com 0:00d2a8670533 1665 ret = read_register(CNFG_SBB_TOP, (uint8_t *)&(reg_cnfg_sbb_top));
metin.ozkan@analog.com 0:00d2a8670533 1666 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1667
metin.ozkan@analog.com 0:00d2a8670533 1668 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 1669 {
metin.ozkan@analog.com 0:00d2a8670533 1670 case CNFG_SBB_TOP_DRV_SBB:
metin.ozkan@analog.com 0:00d2a8670533 1671 *config = (uint8_t)reg_cnfg_sbb_top.bits.drv_sbb;
metin.ozkan@analog.com 0:00d2a8670533 1672 break;
metin.ozkan@analog.com 0:00d2a8670533 1673 case CNFG_SBB_TOP_DIS_LPM:
metin.ozkan@analog.com 0:00d2a8670533 1674 *config = (uint8_t)reg_cnfg_sbb_top.bits.dis_lpm;
metin.ozkan@analog.com 0:00d2a8670533 1675 break;
metin.ozkan@analog.com 0:00d2a8670533 1676 default:
metin.ozkan@analog.com 0:00d2a8670533 1677 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1678 break;
metin.ozkan@analog.com 0:00d2a8670533 1679 }
metin.ozkan@analog.com 0:00d2a8670533 1680
metin.ozkan@analog.com 0:00d2a8670533 1681 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1682 }
metin.ozkan@analog.com 0:00d2a8670533 1683
metin.ozkan@analog.com 0:00d2a8670533 1684 int MAX77658::set_tv_sbb_a(uint8_t channel, float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1685 {
metin.ozkan@analog.com 0:00d2a8670533 1686 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1687 reg_cnfg_sbb0_a_t reg_cnfg_sbb0_a = {0};
Okan Sahin 1:40ef1dc30cb7 1688 reg_cnfg_sbb1_a_t reg_cnfg_sbb1_a = {0};
Okan Sahin 1:40ef1dc30cb7 1689 reg_cnfg_sbb2_a_t reg_cnfg_sbb2_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1690 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1691
metin.ozkan@analog.com 0:00d2a8670533 1692 if (voltmV < 500) voltmV = 500;
metin.ozkan@analog.com 0:00d2a8670533 1693 else if (voltmV > 5500) voltmV = 5500;
metin.ozkan@analog.com 0:00d2a8670533 1694
metin.ozkan@analog.com 0:00d2a8670533 1695 value = (voltmV - 500) / 25;
metin.ozkan@analog.com 0:00d2a8670533 1696
metin.ozkan@analog.com 0:00d2a8670533 1697 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1698 SET_BIT_FIELD(CNFG_SBB0_A, reg_cnfg_sbb0_a, reg_cnfg_sbb0_a.bits.tv_sbb0, value);
metin.ozkan@analog.com 0:00d2a8670533 1699 }
metin.ozkan@analog.com 0:00d2a8670533 1700 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1701 SET_BIT_FIELD(CNFG_SBB1_A, reg_cnfg_sbb1_a, reg_cnfg_sbb1_a.bits.tv_sbb1, value);
metin.ozkan@analog.com 0:00d2a8670533 1702 }
metin.ozkan@analog.com 0:00d2a8670533 1703 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1704 SET_BIT_FIELD(CNFG_SBB2_A, reg_cnfg_sbb2_a, reg_cnfg_sbb2_a.bits.tv_sbb2, value);
metin.ozkan@analog.com 0:00d2a8670533 1705 }
metin.ozkan@analog.com 0:00d2a8670533 1706 else {
metin.ozkan@analog.com 0:00d2a8670533 1707 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1708 }
metin.ozkan@analog.com 0:00d2a8670533 1709
metin.ozkan@analog.com 0:00d2a8670533 1710 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1711 }
metin.ozkan@analog.com 0:00d2a8670533 1712
metin.ozkan@analog.com 0:00d2a8670533 1713 int MAX77658::get_tv_sbb_a(uint8_t channel, float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1714 {
metin.ozkan@analog.com 0:00d2a8670533 1715 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1716 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1717 reg_cnfg_sbb0_a_t reg_cnfg_sbb0_a = {0};
Okan Sahin 1:40ef1dc30cb7 1718 reg_cnfg_sbb1_a_t reg_cnfg_sbb1_a = {0};
Okan Sahin 1:40ef1dc30cb7 1719 reg_cnfg_sbb2_a_t reg_cnfg_sbb2_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1720
metin.ozkan@analog.com 0:00d2a8670533 1721 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1722 ret = read_register(CNFG_SBB0_A, (uint8_t *)&(reg_cnfg_sbb0_a));
metin.ozkan@analog.com 0:00d2a8670533 1723 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1724
metin.ozkan@analog.com 0:00d2a8670533 1725 bit_value = (uint8_t)reg_cnfg_sbb0_a.bits.tv_sbb0;
metin.ozkan@analog.com 0:00d2a8670533 1726 }
metin.ozkan@analog.com 0:00d2a8670533 1727 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1728 ret = read_register(CNFG_SBB1_A, (uint8_t *)&(reg_cnfg_sbb1_a));
metin.ozkan@analog.com 0:00d2a8670533 1729 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1730
metin.ozkan@analog.com 0:00d2a8670533 1731 bit_value = (uint8_t)reg_cnfg_sbb1_a.bits.tv_sbb1;
metin.ozkan@analog.com 0:00d2a8670533 1732 }
metin.ozkan@analog.com 0:00d2a8670533 1733 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1734 ret = read_register(CNFG_SBB2_A, (uint8_t *)&(reg_cnfg_sbb2_a));
metin.ozkan@analog.com 0:00d2a8670533 1735 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1736
metin.ozkan@analog.com 0:00d2a8670533 1737 bit_value = (uint8_t)reg_cnfg_sbb2_a.bits.tv_sbb2;
metin.ozkan@analog.com 0:00d2a8670533 1738 }
metin.ozkan@analog.com 0:00d2a8670533 1739 else return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1740
metin.ozkan@analog.com 0:00d2a8670533 1741 if (bit_value > 200) bit_value = 200;
metin.ozkan@analog.com 0:00d2a8670533 1742 *voltV = (bit_value * 0.025f) + 0.5f;
metin.ozkan@analog.com 0:00d2a8670533 1743
metin.ozkan@analog.com 0:00d2a8670533 1744 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1745 }
metin.ozkan@analog.com 0:00d2a8670533 1746
metin.ozkan@analog.com 0:00d2a8670533 1747 int MAX77658::set_op_mode(uint8_t channel, decode_op_mode_t mode)
metin.ozkan@analog.com 0:00d2a8670533 1748 {
Okan Sahin 1:40ef1dc30cb7 1749 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1750 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1751 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1752
metin.ozkan@analog.com 0:00d2a8670533 1753 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1754 SET_BIT_FIELD(CNFG_SBB0_B, reg_cnfg_sbb0_b, reg_cnfg_sbb0_b.bits.op_mode0, mode);
metin.ozkan@analog.com 0:00d2a8670533 1755 }
metin.ozkan@analog.com 0:00d2a8670533 1756 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1757 SET_BIT_FIELD(CNFG_SBB1_B, reg_cnfg_sbb1_b, reg_cnfg_sbb1_b.bits.op_mode1, mode);
metin.ozkan@analog.com 0:00d2a8670533 1758 }
metin.ozkan@analog.com 0:00d2a8670533 1759 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1760 SET_BIT_FIELD(CNFG_SBB2_B, reg_cnfg_sbb2_b, reg_cnfg_sbb2_b.bits.op_mode2, mode);
metin.ozkan@analog.com 0:00d2a8670533 1761 }
metin.ozkan@analog.com 0:00d2a8670533 1762 else {
metin.ozkan@analog.com 0:00d2a8670533 1763 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1764 }
metin.ozkan@analog.com 0:00d2a8670533 1765
metin.ozkan@analog.com 0:00d2a8670533 1766 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1767 }
metin.ozkan@analog.com 0:00d2a8670533 1768
metin.ozkan@analog.com 0:00d2a8670533 1769 int MAX77658::get_op_mode(uint8_t channel, decode_op_mode_t *mode)
metin.ozkan@analog.com 0:00d2a8670533 1770 {
metin.ozkan@analog.com 0:00d2a8670533 1771 int ret;
Okan Sahin 1:40ef1dc30cb7 1772 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1773 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1774 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1775
metin.ozkan@analog.com 0:00d2a8670533 1776 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1777 ret = read_register(CNFG_SBB0_B, (uint8_t *)&(reg_cnfg_sbb0_b));
metin.ozkan@analog.com 0:00d2a8670533 1778 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1779
metin.ozkan@analog.com 0:00d2a8670533 1780 *mode = (decode_op_mode_t)reg_cnfg_sbb0_b.bits.op_mode0;
metin.ozkan@analog.com 0:00d2a8670533 1781 }
metin.ozkan@analog.com 0:00d2a8670533 1782 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1783 ret = read_register(CNFG_SBB1_B, (uint8_t *)&(reg_cnfg_sbb1_b));
metin.ozkan@analog.com 0:00d2a8670533 1784 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1785
metin.ozkan@analog.com 0:00d2a8670533 1786 *mode = (decode_op_mode_t)reg_cnfg_sbb1_b.bits.op_mode1;
metin.ozkan@analog.com 0:00d2a8670533 1787 }
metin.ozkan@analog.com 0:00d2a8670533 1788 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1789 ret = read_register(CNFG_SBB2_B, (uint8_t *)&(reg_cnfg_sbb2_b));
metin.ozkan@analog.com 0:00d2a8670533 1790 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1791
metin.ozkan@analog.com 0:00d2a8670533 1792 *mode = (decode_op_mode_t)reg_cnfg_sbb2_b.bits.op_mode2;
metin.ozkan@analog.com 0:00d2a8670533 1793 }
metin.ozkan@analog.com 0:00d2a8670533 1794 else {
metin.ozkan@analog.com 0:00d2a8670533 1795 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1796 }
metin.ozkan@analog.com 0:00d2a8670533 1797
metin.ozkan@analog.com 0:00d2a8670533 1798 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1799 }
metin.ozkan@analog.com 0:00d2a8670533 1800
metin.ozkan@analog.com 0:00d2a8670533 1801 int MAX77658::set_ip_sbb(uint8_t channel, decode_ip_sbb_t ip_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1802 {
Okan Sahin 1:40ef1dc30cb7 1803 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1804 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1805 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1806
metin.ozkan@analog.com 0:00d2a8670533 1807 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1808 SET_BIT_FIELD(CNFG_SBB0_B, reg_cnfg_sbb0_b, reg_cnfg_sbb0_b.bits.ip_sbb0, ip_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1809 }
metin.ozkan@analog.com 0:00d2a8670533 1810 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1811 SET_BIT_FIELD(CNFG_SBB1_B, reg_cnfg_sbb1_b, reg_cnfg_sbb1_b.bits.ip_sbb1, ip_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1812 }
metin.ozkan@analog.com 0:00d2a8670533 1813 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1814 SET_BIT_FIELD(CNFG_SBB2_B, reg_cnfg_sbb2_b, reg_cnfg_sbb2_b.bits.ip_sbb2, ip_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1815 }
metin.ozkan@analog.com 0:00d2a8670533 1816 else {
metin.ozkan@analog.com 0:00d2a8670533 1817 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1818 }
metin.ozkan@analog.com 0:00d2a8670533 1819
metin.ozkan@analog.com 0:00d2a8670533 1820 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1821 }
metin.ozkan@analog.com 0:00d2a8670533 1822
metin.ozkan@analog.com 0:00d2a8670533 1823 int MAX77658::get_ip_sbb(uint8_t channel, decode_ip_sbb_t *ip_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1824 {
metin.ozkan@analog.com 0:00d2a8670533 1825 int ret;
Okan Sahin 1:40ef1dc30cb7 1826 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1827 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1828 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1829
metin.ozkan@analog.com 0:00d2a8670533 1830 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1831 ret = read_register(CNFG_SBB0_B, (uint8_t *)&(reg_cnfg_sbb0_b));
metin.ozkan@analog.com 0:00d2a8670533 1832 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1833
metin.ozkan@analog.com 0:00d2a8670533 1834 *ip_sbb = (decode_ip_sbb_t)reg_cnfg_sbb0_b.bits.ip_sbb0;
metin.ozkan@analog.com 0:00d2a8670533 1835 }
metin.ozkan@analog.com 0:00d2a8670533 1836 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1837 ret = read_register(CNFG_SBB1_B, (uint8_t *)&(reg_cnfg_sbb1_b));
metin.ozkan@analog.com 0:00d2a8670533 1838 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1839
metin.ozkan@analog.com 0:00d2a8670533 1840 *ip_sbb = (decode_ip_sbb_t)reg_cnfg_sbb1_b.bits.ip_sbb1;
metin.ozkan@analog.com 0:00d2a8670533 1841 }
metin.ozkan@analog.com 0:00d2a8670533 1842 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1843 ret = read_register(CNFG_SBB2_B, (uint8_t *)&(reg_cnfg_sbb2_b));
metin.ozkan@analog.com 0:00d2a8670533 1844 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1845
metin.ozkan@analog.com 0:00d2a8670533 1846 *ip_sbb = (decode_ip_sbb_t)reg_cnfg_sbb2_b.bits.ip_sbb2;
metin.ozkan@analog.com 0:00d2a8670533 1847 }
metin.ozkan@analog.com 0:00d2a8670533 1848 else {
metin.ozkan@analog.com 0:00d2a8670533 1849 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1850 }
metin.ozkan@analog.com 0:00d2a8670533 1851
metin.ozkan@analog.com 0:00d2a8670533 1852 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1853 }
metin.ozkan@analog.com 0:00d2a8670533 1854
metin.ozkan@analog.com 0:00d2a8670533 1855 int MAX77658::set_ade_sbb(uint8_t channel, decode_ade_sbb_t ade_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1856 {
Okan Sahin 1:40ef1dc30cb7 1857 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1858 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1859 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1860
metin.ozkan@analog.com 0:00d2a8670533 1861 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1862 SET_BIT_FIELD(CNFG_SBB0_B, reg_cnfg_sbb0_b, reg_cnfg_sbb0_b.bits.ade_sbb0, ade_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1863 }
metin.ozkan@analog.com 0:00d2a8670533 1864 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1865 SET_BIT_FIELD(CNFG_SBB1_B, reg_cnfg_sbb1_b, reg_cnfg_sbb1_b.bits.ade_sbb1, ade_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1866 }
metin.ozkan@analog.com 0:00d2a8670533 1867 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1868 SET_BIT_FIELD(CNFG_SBB2_B, reg_cnfg_sbb2_b, reg_cnfg_sbb2_b.bits.ade_sbb2, ade_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1869 }
metin.ozkan@analog.com 0:00d2a8670533 1870 else {
metin.ozkan@analog.com 0:00d2a8670533 1871 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1872 }
metin.ozkan@analog.com 0:00d2a8670533 1873
metin.ozkan@analog.com 0:00d2a8670533 1874 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1875 }
metin.ozkan@analog.com 0:00d2a8670533 1876
metin.ozkan@analog.com 0:00d2a8670533 1877 int MAX77658::get_ade_sbb(uint8_t channel, decode_ade_sbb_t *ade_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1878 {
metin.ozkan@analog.com 0:00d2a8670533 1879 int ret;
Okan Sahin 1:40ef1dc30cb7 1880 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1881 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1882 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1883
metin.ozkan@analog.com 0:00d2a8670533 1884 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1885 ret = read_register(CNFG_SBB0_B, (uint8_t *)&(reg_cnfg_sbb0_b));
metin.ozkan@analog.com 0:00d2a8670533 1886 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1887
metin.ozkan@analog.com 0:00d2a8670533 1888 *ade_sbb = (decode_ade_sbb_t)reg_cnfg_sbb0_b.bits.ade_sbb0;
metin.ozkan@analog.com 0:00d2a8670533 1889 }
metin.ozkan@analog.com 0:00d2a8670533 1890 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1891 ret = read_register(CNFG_SBB1_B, (uint8_t *)&(reg_cnfg_sbb1_b));
metin.ozkan@analog.com 0:00d2a8670533 1892 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1893
metin.ozkan@analog.com 0:00d2a8670533 1894 *ade_sbb = (decode_ade_sbb_t)reg_cnfg_sbb1_b.bits.ade_sbb1;
metin.ozkan@analog.com 0:00d2a8670533 1895 }
metin.ozkan@analog.com 0:00d2a8670533 1896 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1897 ret = read_register(CNFG_SBB2_B, (uint8_t *)&(reg_cnfg_sbb2_b));
metin.ozkan@analog.com 0:00d2a8670533 1898 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1899
metin.ozkan@analog.com 0:00d2a8670533 1900 *ade_sbb = (decode_ade_sbb_t)reg_cnfg_sbb2_b.bits.ade_sbb2;
metin.ozkan@analog.com 0:00d2a8670533 1901 }
metin.ozkan@analog.com 0:00d2a8670533 1902 else {
metin.ozkan@analog.com 0:00d2a8670533 1903 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1904 }
metin.ozkan@analog.com 0:00d2a8670533 1905
metin.ozkan@analog.com 0:00d2a8670533 1906 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1907 }
metin.ozkan@analog.com 0:00d2a8670533 1908
metin.ozkan@analog.com 0:00d2a8670533 1909 int MAX77658::set_en_sbb(uint8_t channel, decode_en_sbb_t en_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1910 {
Okan Sahin 1:40ef1dc30cb7 1911 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1912 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1913 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1914
metin.ozkan@analog.com 0:00d2a8670533 1915 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1916 SET_BIT_FIELD(CNFG_SBB0_B, reg_cnfg_sbb0_b, reg_cnfg_sbb0_b.bits.en_sbb0, en_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1917 }
metin.ozkan@analog.com 0:00d2a8670533 1918 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1919 SET_BIT_FIELD(CNFG_SBB1_B, reg_cnfg_sbb1_b, reg_cnfg_sbb1_b.bits.en_sbb1, en_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1920 }
metin.ozkan@analog.com 0:00d2a8670533 1921 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1922 SET_BIT_FIELD(CNFG_SBB2_B, reg_cnfg_sbb2_b, reg_cnfg_sbb2_b.bits.en_sbb2, en_sbb);
metin.ozkan@analog.com 0:00d2a8670533 1923 }
metin.ozkan@analog.com 0:00d2a8670533 1924 else {
metin.ozkan@analog.com 0:00d2a8670533 1925 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1926 }
metin.ozkan@analog.com 0:00d2a8670533 1927
metin.ozkan@analog.com 0:00d2a8670533 1928 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1929 }
metin.ozkan@analog.com 0:00d2a8670533 1930
metin.ozkan@analog.com 0:00d2a8670533 1931 int MAX77658::get_en_sbb(uint8_t channel, decode_en_sbb_t *en_sbb)
metin.ozkan@analog.com 0:00d2a8670533 1932 {
metin.ozkan@analog.com 0:00d2a8670533 1933 int ret;
Okan Sahin 1:40ef1dc30cb7 1934 reg_cnfg_sbb0_b_t reg_cnfg_sbb0_b = {0};
Okan Sahin 1:40ef1dc30cb7 1935 reg_cnfg_sbb1_b_t reg_cnfg_sbb1_b = {0};
Okan Sahin 1:40ef1dc30cb7 1936 reg_cnfg_sbb2_b_t reg_cnfg_sbb2_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 1937
metin.ozkan@analog.com 0:00d2a8670533 1938 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 1939 ret = read_register(CNFG_SBB0_B, (uint8_t *)&(reg_cnfg_sbb0_b));
metin.ozkan@analog.com 0:00d2a8670533 1940 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1941
metin.ozkan@analog.com 0:00d2a8670533 1942 *en_sbb = (decode_en_sbb_t)reg_cnfg_sbb0_b.bits.en_sbb0;
metin.ozkan@analog.com 0:00d2a8670533 1943 }
metin.ozkan@analog.com 0:00d2a8670533 1944 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 1945 ret = read_register(CNFG_SBB1_B, (uint8_t *)&(reg_cnfg_sbb1_b));
metin.ozkan@analog.com 0:00d2a8670533 1946 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1947
metin.ozkan@analog.com 0:00d2a8670533 1948 *en_sbb = (decode_en_sbb_t)reg_cnfg_sbb1_b.bits.en_sbb1;
metin.ozkan@analog.com 0:00d2a8670533 1949 }
metin.ozkan@analog.com 0:00d2a8670533 1950 else if (channel == 2) {
metin.ozkan@analog.com 0:00d2a8670533 1951 ret = read_register(CNFG_SBB2_B, (uint8_t *)&(reg_cnfg_sbb2_b));
metin.ozkan@analog.com 0:00d2a8670533 1952 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1953
metin.ozkan@analog.com 0:00d2a8670533 1954 *en_sbb = (decode_en_sbb_t)reg_cnfg_sbb2_b.bits.en_sbb2;
metin.ozkan@analog.com 0:00d2a8670533 1955 }
metin.ozkan@analog.com 0:00d2a8670533 1956 else return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 1957
metin.ozkan@analog.com 0:00d2a8670533 1958 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1959 }
metin.ozkan@analog.com 0:00d2a8670533 1960
metin.ozkan@analog.com 0:00d2a8670533 1961 int MAX77658::set_tv_sbb_dvs(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1962 {
metin.ozkan@analog.com 0:00d2a8670533 1963 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1964 reg_cnfg_dvs_sbb0_a_t reg_cnfg_dvs_sbb0_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1965 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 1966
metin.ozkan@analog.com 0:00d2a8670533 1967 if (voltmV < 500) voltmV = 500;
metin.ozkan@analog.com 0:00d2a8670533 1968 else if (voltmV > 5500) voltmV = 5500;
metin.ozkan@analog.com 0:00d2a8670533 1969
metin.ozkan@analog.com 0:00d2a8670533 1970 value = (voltmV - 500) / 25;
metin.ozkan@analog.com 0:00d2a8670533 1971
metin.ozkan@analog.com 0:00d2a8670533 1972 SET_BIT_FIELD(CNFG_DVS_SBB0_A, reg_cnfg_dvs_sbb0_a, reg_cnfg_dvs_sbb0_a.bits.tv_sbb0_dvs, value);
metin.ozkan@analog.com 0:00d2a8670533 1973 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1974 }
metin.ozkan@analog.com 0:00d2a8670533 1975
metin.ozkan@analog.com 0:00d2a8670533 1976 int MAX77658::get_tv_sbb_dvs(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 1977 {
metin.ozkan@analog.com 0:00d2a8670533 1978 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1979 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 1980 reg_cnfg_dvs_sbb0_a_t reg_cnfg_dvs_sbb0_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1981
metin.ozkan@analog.com 0:00d2a8670533 1982 ret = read_register(CNFG_DVS_SBB0_A, (uint8_t *)&(reg_cnfg_dvs_sbb0_a));
metin.ozkan@analog.com 0:00d2a8670533 1983 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 1984
metin.ozkan@analog.com 0:00d2a8670533 1985 bit_value = (uint8_t)reg_cnfg_dvs_sbb0_a.bits.tv_sbb0_dvs;
metin.ozkan@analog.com 0:00d2a8670533 1986
metin.ozkan@analog.com 0:00d2a8670533 1987 if (bit_value > 200) bit_value = 200;
metin.ozkan@analog.com 0:00d2a8670533 1988
metin.ozkan@analog.com 0:00d2a8670533 1989 *voltV = (bit_value * 0.025f) + 0.5f;
metin.ozkan@analog.com 0:00d2a8670533 1990 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 1991 }
metin.ozkan@analog.com 0:00d2a8670533 1992
metin.ozkan@analog.com 0:00d2a8670533 1993 int MAX77658::set_tv_ldo_volt_a(uint8_t channel, float voltV)
metin.ozkan@analog.com 0:00d2a8670533 1994 {
metin.ozkan@analog.com 0:00d2a8670533 1995 int ret;
metin.ozkan@analog.com 0:00d2a8670533 1996 uint8_t value;
Okan Sahin 1:40ef1dc30cb7 1997 reg_cnfg_ldo0_a_t reg_cnfg_ldo0_a = {0};
Okan Sahin 1:40ef1dc30cb7 1998 reg_cnfg_ldo1_a_t reg_cnfg_ldo1_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 1999 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 2000
metin.ozkan@analog.com 0:00d2a8670533 2001 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2002 ret = read_register(CNFG_LDO0_A, (uint8_t *)&(reg_cnfg_ldo0_a));
metin.ozkan@analog.com 0:00d2a8670533 2003 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2004
metin.ozkan@analog.com 0:00d2a8670533 2005 if ((uint8_t)reg_cnfg_ldo0_a.bits.tv_ldo0_7 == 0) { //No Offset
metin.ozkan@analog.com 0:00d2a8670533 2006 if (voltmV < 500) voltmV = 500;
metin.ozkan@analog.com 0:00d2a8670533 2007 else if (voltmV > 3675) voltmV = 3675;
metin.ozkan@analog.com 0:00d2a8670533 2008
metin.ozkan@analog.com 0:00d2a8670533 2009 value = (voltmV - 500) / 25;
metin.ozkan@analog.com 0:00d2a8670533 2010 }
metin.ozkan@analog.com 0:00d2a8670533 2011 else { //1.325V Offset
metin.ozkan@analog.com 0:00d2a8670533 2012 if (voltmV < 1825) voltmV = 1825;
metin.ozkan@analog.com 0:00d2a8670533 2013 else if (voltmV > 5000) voltmV = 5000;
metin.ozkan@analog.com 0:00d2a8670533 2014
metin.ozkan@analog.com 0:00d2a8670533 2015 value = (voltmV - 1825) / 25;
metin.ozkan@analog.com 0:00d2a8670533 2016 }
metin.ozkan@analog.com 0:00d2a8670533 2017
metin.ozkan@analog.com 0:00d2a8670533 2018 SET_BIT_FIELD(CNFG_LDO0_A, reg_cnfg_ldo0_a, reg_cnfg_ldo0_a.bits.tv_ldo0_6_0, value);
metin.ozkan@analog.com 0:00d2a8670533 2019 }
metin.ozkan@analog.com 0:00d2a8670533 2020 else {
metin.ozkan@analog.com 0:00d2a8670533 2021 ret = read_register(CNFG_LDO1_A, (uint8_t *)&(reg_cnfg_ldo1_a));
metin.ozkan@analog.com 0:00d2a8670533 2022 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2023
metin.ozkan@analog.com 0:00d2a8670533 2024 if ((uint8_t)reg_cnfg_ldo1_a.bits.tv_ldo1_7 == 0) { //No Offset
metin.ozkan@analog.com 0:00d2a8670533 2025 if (voltmV < 500) voltmV = 500;
metin.ozkan@analog.com 0:00d2a8670533 2026 else if (voltmV > 3675) voltmV = 3675;
metin.ozkan@analog.com 0:00d2a8670533 2027
metin.ozkan@analog.com 0:00d2a8670533 2028 value = (voltmV - 500) / 25;
metin.ozkan@analog.com 0:00d2a8670533 2029 }
metin.ozkan@analog.com 0:00d2a8670533 2030 else { //1.325V Offset
metin.ozkan@analog.com 0:00d2a8670533 2031 if (voltmV < 1825) voltmV = 1825;
metin.ozkan@analog.com 0:00d2a8670533 2032 else if (voltmV > 5000) voltmV = 5000;
metin.ozkan@analog.com 0:00d2a8670533 2033
metin.ozkan@analog.com 0:00d2a8670533 2034 value = (voltmV - 1825) / 25;
metin.ozkan@analog.com 0:00d2a8670533 2035 }
metin.ozkan@analog.com 0:00d2a8670533 2036
metin.ozkan@analog.com 0:00d2a8670533 2037 SET_BIT_FIELD(CNFG_LDO1_A, reg_cnfg_ldo1_a, reg_cnfg_ldo1_a.bits.tv_ldo1_6_0, value);
metin.ozkan@analog.com 0:00d2a8670533 2038 }
metin.ozkan@analog.com 0:00d2a8670533 2039 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2040 }
metin.ozkan@analog.com 0:00d2a8670533 2041
metin.ozkan@analog.com 0:00d2a8670533 2042 int MAX77658::get_tv_ldo_volt_a(uint8_t channel, float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 2043 {
metin.ozkan@analog.com 0:00d2a8670533 2044 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2045 uint8_t bit_value;
Okan Sahin 1:40ef1dc30cb7 2046 reg_cnfg_ldo0_a_t reg_cnfg_ldo0_a = {0};
Okan Sahin 1:40ef1dc30cb7 2047 reg_cnfg_ldo1_a_t reg_cnfg_ldo1_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 2048
metin.ozkan@analog.com 0:00d2a8670533 2049 if (channel == 0){
metin.ozkan@analog.com 0:00d2a8670533 2050 ret = read_register(CNFG_LDO0_A, (uint8_t *)&(reg_cnfg_ldo0_a));
metin.ozkan@analog.com 0:00d2a8670533 2051 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2052
metin.ozkan@analog.com 0:00d2a8670533 2053 bit_value = (uint8_t)reg_cnfg_ldo0_a.bits.tv_ldo0_6_0;
metin.ozkan@analog.com 0:00d2a8670533 2054 if ((uint8_t)reg_cnfg_ldo0_a.bits.tv_ldo0_7 == 0) //No Offset
metin.ozkan@analog.com 0:00d2a8670533 2055 *voltV = (bit_value * 0.025f) + 0.5f;
metin.ozkan@analog.com 0:00d2a8670533 2056 else //1.325V Offset
metin.ozkan@analog.com 0:00d2a8670533 2057 *voltV = (bit_value * 0.025f) + 1.825f;
metin.ozkan@analog.com 0:00d2a8670533 2058 }
metin.ozkan@analog.com 0:00d2a8670533 2059 else {
metin.ozkan@analog.com 0:00d2a8670533 2060 ret = read_register(CNFG_LDO1_A, (uint8_t *)&(reg_cnfg_ldo1_a));
metin.ozkan@analog.com 0:00d2a8670533 2061 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2062
metin.ozkan@analog.com 0:00d2a8670533 2063 bit_value = (uint8_t)reg_cnfg_ldo1_a.bits.tv_ldo1_6_0;
metin.ozkan@analog.com 0:00d2a8670533 2064 if ((uint8_t)reg_cnfg_ldo1_a.bits.tv_ldo1_7 == 0) //No Offset
metin.ozkan@analog.com 0:00d2a8670533 2065 *voltV = (bit_value * 0.025f) + 0.5f;
metin.ozkan@analog.com 0:00d2a8670533 2066 else //1.325V Offset
metin.ozkan@analog.com 0:00d2a8670533 2067 *voltV = (bit_value * 0.025f) + 1.825f;
metin.ozkan@analog.com 0:00d2a8670533 2068 }
metin.ozkan@analog.com 0:00d2a8670533 2069
metin.ozkan@analog.com 0:00d2a8670533 2070 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2071 }
metin.ozkan@analog.com 0:00d2a8670533 2072
metin.ozkan@analog.com 0:00d2a8670533 2073 int MAX77658::set_tv_ldo_offset_a(uint8_t channel, decode_tv_ldo_offset_a_t offset)
metin.ozkan@analog.com 0:00d2a8670533 2074 {
Okan Sahin 1:40ef1dc30cb7 2075 reg_cnfg_ldo0_a_t reg_cnfg_ldo0_a = {0};
Okan Sahin 1:40ef1dc30cb7 2076 reg_cnfg_ldo1_a_t reg_cnfg_ldo1_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 2077
metin.ozkan@analog.com 0:00d2a8670533 2078 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2079 SET_BIT_FIELD(CNFG_LDO0_A, reg_cnfg_ldo0_a, reg_cnfg_ldo0_a.bits.tv_ldo0_7, offset);
metin.ozkan@analog.com 0:00d2a8670533 2080 }
metin.ozkan@analog.com 0:00d2a8670533 2081 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2082 SET_BIT_FIELD(CNFG_LDO1_A, reg_cnfg_ldo1_a, reg_cnfg_ldo1_a.bits.tv_ldo1_7, offset);
metin.ozkan@analog.com 0:00d2a8670533 2083 }
metin.ozkan@analog.com 0:00d2a8670533 2084 else {
metin.ozkan@analog.com 0:00d2a8670533 2085 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2086 }
metin.ozkan@analog.com 0:00d2a8670533 2087
metin.ozkan@analog.com 0:00d2a8670533 2088 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2089 }
metin.ozkan@analog.com 0:00d2a8670533 2090
metin.ozkan@analog.com 0:00d2a8670533 2091 int MAX77658::get_tv_ldo_offset_a(uint8_t channel, decode_tv_ldo_offset_a_t *offset)
metin.ozkan@analog.com 0:00d2a8670533 2092 {
metin.ozkan@analog.com 0:00d2a8670533 2093 int ret;
Okan Sahin 1:40ef1dc30cb7 2094 reg_cnfg_ldo0_a_t reg_cnfg_ldo0_a = {0};
Okan Sahin 1:40ef1dc30cb7 2095 reg_cnfg_ldo1_a_t reg_cnfg_ldo1_a = {0};
metin.ozkan@analog.com 0:00d2a8670533 2096
metin.ozkan@analog.com 0:00d2a8670533 2097 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2098 ret = read_register(CNFG_LDO0_A, (uint8_t *)&(reg_cnfg_ldo0_a));
metin.ozkan@analog.com 0:00d2a8670533 2099 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2100
metin.ozkan@analog.com 0:00d2a8670533 2101 *offset = (decode_tv_ldo_offset_a_t)reg_cnfg_ldo0_a.bits.tv_ldo0_7;
metin.ozkan@analog.com 0:00d2a8670533 2102 }
metin.ozkan@analog.com 0:00d2a8670533 2103 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2104 ret = read_register(CNFG_LDO1_A, (uint8_t *)&(reg_cnfg_ldo1_a));
metin.ozkan@analog.com 0:00d2a8670533 2105 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2106
metin.ozkan@analog.com 0:00d2a8670533 2107 *offset = (decode_tv_ldo_offset_a_t)reg_cnfg_ldo1_a.bits.tv_ldo1_7;
metin.ozkan@analog.com 0:00d2a8670533 2108 }
metin.ozkan@analog.com 0:00d2a8670533 2109 else {
metin.ozkan@analog.com 0:00d2a8670533 2110 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2111 }
metin.ozkan@analog.com 0:00d2a8670533 2112
metin.ozkan@analog.com 0:00d2a8670533 2113 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2114 }
metin.ozkan@analog.com 0:00d2a8670533 2115
metin.ozkan@analog.com 0:00d2a8670533 2116 int MAX77658::set_en_ldo(uint8_t channel, decode_en_ldo_t en_ldo)
metin.ozkan@analog.com 0:00d2a8670533 2117 {
Okan Sahin 1:40ef1dc30cb7 2118 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2119 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2120
metin.ozkan@analog.com 0:00d2a8670533 2121 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2122 SET_BIT_FIELD(CNFG_LDO0_B, reg_cnfg_ldo0_b, reg_cnfg_ldo0_b.bits.en_ldo0, en_ldo);
metin.ozkan@analog.com 0:00d2a8670533 2123 }
metin.ozkan@analog.com 0:00d2a8670533 2124 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2125 SET_BIT_FIELD(CNFG_LDO1_B, reg_cnfg_ldo1_b, reg_cnfg_ldo1_b.bits.en_ldo1, en_ldo);
metin.ozkan@analog.com 0:00d2a8670533 2126 }
metin.ozkan@analog.com 0:00d2a8670533 2127 else {
metin.ozkan@analog.com 0:00d2a8670533 2128 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2129 }
metin.ozkan@analog.com 0:00d2a8670533 2130
metin.ozkan@analog.com 0:00d2a8670533 2131 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2132 }
metin.ozkan@analog.com 0:00d2a8670533 2133
metin.ozkan@analog.com 0:00d2a8670533 2134 int MAX77658::get_en_ldo(uint8_t channel, decode_en_ldo_t *en_ldo)
metin.ozkan@analog.com 0:00d2a8670533 2135 {
metin.ozkan@analog.com 0:00d2a8670533 2136 int ret;
Okan Sahin 1:40ef1dc30cb7 2137 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2138 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2139
metin.ozkan@analog.com 0:00d2a8670533 2140 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2141 ret = read_register(CNFG_LDO0_B, (uint8_t *)&(reg_cnfg_ldo0_b));
metin.ozkan@analog.com 0:00d2a8670533 2142 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2143
metin.ozkan@analog.com 0:00d2a8670533 2144 *en_ldo = (decode_en_ldo_t)reg_cnfg_ldo0_b.bits.en_ldo0;
metin.ozkan@analog.com 0:00d2a8670533 2145 }
metin.ozkan@analog.com 0:00d2a8670533 2146 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2147 ret = read_register(CNFG_LDO1_B, (uint8_t *)&(reg_cnfg_ldo1_b));
metin.ozkan@analog.com 0:00d2a8670533 2148 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2149
metin.ozkan@analog.com 0:00d2a8670533 2150 *en_ldo = (decode_en_ldo_t)reg_cnfg_ldo1_b.bits.en_ldo1;
metin.ozkan@analog.com 0:00d2a8670533 2151 }
metin.ozkan@analog.com 0:00d2a8670533 2152 else return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2153
metin.ozkan@analog.com 0:00d2a8670533 2154 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2155 }
metin.ozkan@analog.com 0:00d2a8670533 2156
metin.ozkan@analog.com 0:00d2a8670533 2157 int MAX77658::set_ade_ldo(uint8_t channel, decode_ade_ldo_t ade_ldo)
metin.ozkan@analog.com 0:00d2a8670533 2158 {
Okan Sahin 1:40ef1dc30cb7 2159 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2160 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2161
metin.ozkan@analog.com 0:00d2a8670533 2162 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2163 SET_BIT_FIELD(CNFG_LDO0_B, reg_cnfg_ldo0_b, reg_cnfg_ldo0_b.bits.ade_ldo0, ade_ldo);
metin.ozkan@analog.com 0:00d2a8670533 2164 }
metin.ozkan@analog.com 0:00d2a8670533 2165 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2166 SET_BIT_FIELD(CNFG_LDO1_B, reg_cnfg_ldo1_b, reg_cnfg_ldo1_b.bits.ade_ldo1, ade_ldo);
metin.ozkan@analog.com 0:00d2a8670533 2167 }
metin.ozkan@analog.com 0:00d2a8670533 2168 else {
metin.ozkan@analog.com 0:00d2a8670533 2169 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2170 }
metin.ozkan@analog.com 0:00d2a8670533 2171
metin.ozkan@analog.com 0:00d2a8670533 2172 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2173 }
metin.ozkan@analog.com 0:00d2a8670533 2174
metin.ozkan@analog.com 0:00d2a8670533 2175 int MAX77658::get_ade_ldo(uint8_t channel, decode_ade_ldo_t *ade_ldo)
metin.ozkan@analog.com 0:00d2a8670533 2176 {
metin.ozkan@analog.com 0:00d2a8670533 2177 int ret;
Okan Sahin 1:40ef1dc30cb7 2178 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2179 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2180
metin.ozkan@analog.com 0:00d2a8670533 2181 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2182 ret = read_register(CNFG_LDO0_B, (uint8_t *)&(reg_cnfg_ldo0_b));
metin.ozkan@analog.com 0:00d2a8670533 2183 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2184
metin.ozkan@analog.com 0:00d2a8670533 2185 *ade_ldo = (decode_ade_ldo_t)reg_cnfg_ldo0_b.bits.ade_ldo0;
metin.ozkan@analog.com 0:00d2a8670533 2186 }
metin.ozkan@analog.com 0:00d2a8670533 2187 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2188 ret = read_register(CNFG_LDO1_B, (uint8_t *)&(reg_cnfg_ldo1_b));
metin.ozkan@analog.com 0:00d2a8670533 2189 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2190
metin.ozkan@analog.com 0:00d2a8670533 2191 *ade_ldo = (decode_ade_ldo_t)reg_cnfg_ldo1_b.bits.ade_ldo1;
metin.ozkan@analog.com 0:00d2a8670533 2192 }
metin.ozkan@analog.com 0:00d2a8670533 2193 else {
metin.ozkan@analog.com 0:00d2a8670533 2194 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2195 }
metin.ozkan@analog.com 0:00d2a8670533 2196
metin.ozkan@analog.com 0:00d2a8670533 2197 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2198 }
metin.ozkan@analog.com 0:00d2a8670533 2199
metin.ozkan@analog.com 0:00d2a8670533 2200 int MAX77658::set_ldo_md(uint8_t channel, decode_ldo_md_t mode)
metin.ozkan@analog.com 0:00d2a8670533 2201 {
Okan Sahin 1:40ef1dc30cb7 2202 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2203 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2204
metin.ozkan@analog.com 0:00d2a8670533 2205 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2206 SET_BIT_FIELD(CNFG_LDO0_B, reg_cnfg_ldo0_b, reg_cnfg_ldo0_b.bits.ldo0_md, mode);
metin.ozkan@analog.com 0:00d2a8670533 2207 }
metin.ozkan@analog.com 0:00d2a8670533 2208 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2209 SET_BIT_FIELD(CNFG_LDO1_B, reg_cnfg_ldo1_b, reg_cnfg_ldo1_b.bits.ldo1_md, mode);
metin.ozkan@analog.com 0:00d2a8670533 2210 }
metin.ozkan@analog.com 0:00d2a8670533 2211 else {
metin.ozkan@analog.com 0:00d2a8670533 2212 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2213 }
metin.ozkan@analog.com 0:00d2a8670533 2214
metin.ozkan@analog.com 0:00d2a8670533 2215 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2216 }
metin.ozkan@analog.com 0:00d2a8670533 2217
metin.ozkan@analog.com 0:00d2a8670533 2218 int MAX77658::get_ldo_md(uint8_t channel, decode_ldo_md_t *mode)
metin.ozkan@analog.com 0:00d2a8670533 2219 {
metin.ozkan@analog.com 0:00d2a8670533 2220 int ret;
Okan Sahin 1:40ef1dc30cb7 2221 reg_cnfg_ldo0_b_t reg_cnfg_ldo0_b = {0};
Okan Sahin 1:40ef1dc30cb7 2222 reg_cnfg_ldo1_b_t reg_cnfg_ldo1_b = {0};
metin.ozkan@analog.com 0:00d2a8670533 2223
metin.ozkan@analog.com 0:00d2a8670533 2224 if (channel == 0) {
metin.ozkan@analog.com 0:00d2a8670533 2225 ret = read_register(CNFG_LDO0_B, (uint8_t *)&(reg_cnfg_ldo0_b));
metin.ozkan@analog.com 0:00d2a8670533 2226 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2227
metin.ozkan@analog.com 0:00d2a8670533 2228 *mode = (decode_ldo_md_t)reg_cnfg_ldo0_b.bits.ldo0_md;
metin.ozkan@analog.com 0:00d2a8670533 2229 }
metin.ozkan@analog.com 0:00d2a8670533 2230 else if (channel == 1) {
metin.ozkan@analog.com 0:00d2a8670533 2231 ret = read_register(CNFG_LDO1_B, (uint8_t *)&(reg_cnfg_ldo1_b));
metin.ozkan@analog.com 0:00d2a8670533 2232 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2233
metin.ozkan@analog.com 0:00d2a8670533 2234 *mode = (decode_ldo_md_t)reg_cnfg_ldo1_b.bits.ldo1_md;
metin.ozkan@analog.com 0:00d2a8670533 2235 }
metin.ozkan@analog.com 0:00d2a8670533 2236 else {
metin.ozkan@analog.com 0:00d2a8670533 2237 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2238 }
metin.ozkan@analog.com 0:00d2a8670533 2239
metin.ozkan@analog.com 0:00d2a8670533 2240 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2241 }
metin.ozkan@analog.com 0:00d2a8670533 2242
metin.ozkan@analog.com 0:00d2a8670533 2243 int MAX77658::set_fg_status(reg_bit_status_t bit_field, uint8_t status)
metin.ozkan@analog.com 0:00d2a8670533 2244 {
metin.ozkan@analog.com 0:00d2a8670533 2245 int ret;
Okan Sahin 1:40ef1dc30cb7 2246 reg_status_t reg_status = {0};
metin.ozkan@analog.com 0:00d2a8670533 2247
metin.ozkan@analog.com 0:00d2a8670533 2248 ret = read_fg_register(Status, (uint8_t *)&(reg_status));
metin.ozkan@analog.com 0:00d2a8670533 2249 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2250
metin.ozkan@analog.com 0:00d2a8670533 2251 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2252 {
metin.ozkan@analog.com 0:00d2a8670533 2253 case Status_Imn:
metin.ozkan@analog.com 0:00d2a8670533 2254 reg_status.bits.imn = status;
metin.ozkan@analog.com 0:00d2a8670533 2255 break;
metin.ozkan@analog.com 0:00d2a8670533 2256 case Status_POR:
metin.ozkan@analog.com 0:00d2a8670533 2257 reg_status.bits.por = status;
metin.ozkan@analog.com 0:00d2a8670533 2258 break;
metin.ozkan@analog.com 0:00d2a8670533 2259 case Status_SPR_2:
metin.ozkan@analog.com 0:00d2a8670533 2260 reg_status.bits.spr_2 = status;
metin.ozkan@analog.com 0:00d2a8670533 2261 break;
metin.ozkan@analog.com 0:00d2a8670533 2262 case Status_Bst:
metin.ozkan@analog.com 0:00d2a8670533 2263 reg_status.bits.bst = status;
metin.ozkan@analog.com 0:00d2a8670533 2264 break;
metin.ozkan@analog.com 0:00d2a8670533 2265 case Status_Isysmx:
metin.ozkan@analog.com 0:00d2a8670533 2266 reg_status.bits.isysmx = status;
metin.ozkan@analog.com 0:00d2a8670533 2267 break;
metin.ozkan@analog.com 0:00d2a8670533 2268 case Status_SPR_5:
metin.ozkan@analog.com 0:00d2a8670533 2269 reg_status.bits.spr_5 = status;
metin.ozkan@analog.com 0:00d2a8670533 2270 break;
metin.ozkan@analog.com 0:00d2a8670533 2271 case Status_ThmHot:
metin.ozkan@analog.com 0:00d2a8670533 2272 reg_status.bits.thmhot = status;
metin.ozkan@analog.com 0:00d2a8670533 2273 break;
metin.ozkan@analog.com 0:00d2a8670533 2274 case Status_dSOCi:
metin.ozkan@analog.com 0:00d2a8670533 2275 reg_status.bits.dsoci = status;
metin.ozkan@analog.com 0:00d2a8670533 2276 break;
metin.ozkan@analog.com 0:00d2a8670533 2277 case Status_Vmn:
metin.ozkan@analog.com 0:00d2a8670533 2278 reg_status.bits.vmn = status;
metin.ozkan@analog.com 0:00d2a8670533 2279 break;
metin.ozkan@analog.com 0:00d2a8670533 2280 case Status_Tmn:
metin.ozkan@analog.com 0:00d2a8670533 2281 reg_status.bits.tmn = status;
metin.ozkan@analog.com 0:00d2a8670533 2282 break;
metin.ozkan@analog.com 0:00d2a8670533 2283 case Status_Smn:
metin.ozkan@analog.com 0:00d2a8670533 2284 reg_status.bits.smn = status;
metin.ozkan@analog.com 0:00d2a8670533 2285 break;
metin.ozkan@analog.com 0:00d2a8670533 2286 case Status_Bi:
metin.ozkan@analog.com 0:00d2a8670533 2287 reg_status.bits.bi = status;
metin.ozkan@analog.com 0:00d2a8670533 2288 break;
metin.ozkan@analog.com 0:00d2a8670533 2289 case Status_Vmx:
metin.ozkan@analog.com 0:00d2a8670533 2290 reg_status.bits.vmx = status;
metin.ozkan@analog.com 0:00d2a8670533 2291 break;
metin.ozkan@analog.com 0:00d2a8670533 2292 case Status_Tmx:
metin.ozkan@analog.com 0:00d2a8670533 2293 reg_status.bits.tmx = status;
metin.ozkan@analog.com 0:00d2a8670533 2294 break;
metin.ozkan@analog.com 0:00d2a8670533 2295 case Status_Smx:
metin.ozkan@analog.com 0:00d2a8670533 2296 reg_status.bits.smx = status;
metin.ozkan@analog.com 0:00d2a8670533 2297 break;
metin.ozkan@analog.com 0:00d2a8670533 2298 case Status_Br:
metin.ozkan@analog.com 0:00d2a8670533 2299 reg_status.bits.br = status;
metin.ozkan@analog.com 0:00d2a8670533 2300 break;
metin.ozkan@analog.com 0:00d2a8670533 2301 default:
metin.ozkan@analog.com 0:00d2a8670533 2302 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2303 break;
metin.ozkan@analog.com 0:00d2a8670533 2304 }
metin.ozkan@analog.com 0:00d2a8670533 2305
metin.ozkan@analog.com 0:00d2a8670533 2306 return write_fg_register(Status, (uint8_t *)&(reg_status));
metin.ozkan@analog.com 0:00d2a8670533 2307 }
metin.ozkan@analog.com 0:00d2a8670533 2308
metin.ozkan@analog.com 0:00d2a8670533 2309 int MAX77658::get_fg_status(reg_bit_status_t bit_field, uint8_t *status)
metin.ozkan@analog.com 0:00d2a8670533 2310 {
metin.ozkan@analog.com 0:00d2a8670533 2311 int ret;
Okan Sahin 1:40ef1dc30cb7 2312 reg_status_t reg_status = {0};
metin.ozkan@analog.com 0:00d2a8670533 2313
metin.ozkan@analog.com 0:00d2a8670533 2314 ret = read_fg_register(Status, (uint8_t *)&(reg_status));
metin.ozkan@analog.com 0:00d2a8670533 2315 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2316
metin.ozkan@analog.com 0:00d2a8670533 2317 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2318 {
metin.ozkan@analog.com 0:00d2a8670533 2319 case Status_Imn:
metin.ozkan@analog.com 0:00d2a8670533 2320 *status = (uint8_t)reg_status.bits.imn;
metin.ozkan@analog.com 0:00d2a8670533 2321 break;
metin.ozkan@analog.com 0:00d2a8670533 2322 case Status_POR:
metin.ozkan@analog.com 0:00d2a8670533 2323 *status = (uint8_t)reg_status.bits.por;
metin.ozkan@analog.com 0:00d2a8670533 2324 break;
metin.ozkan@analog.com 0:00d2a8670533 2325 case Status_SPR_2:
metin.ozkan@analog.com 0:00d2a8670533 2326 *status = (uint8_t)reg_status.bits.spr_2;
metin.ozkan@analog.com 0:00d2a8670533 2327 break;
metin.ozkan@analog.com 0:00d2a8670533 2328 case Status_Bst:
metin.ozkan@analog.com 0:00d2a8670533 2329 *status = (uint8_t)reg_status.bits.bst;
metin.ozkan@analog.com 0:00d2a8670533 2330 break;
metin.ozkan@analog.com 0:00d2a8670533 2331 case Status_Isysmx:
metin.ozkan@analog.com 0:00d2a8670533 2332 *status = (uint8_t)reg_status.bits.isysmx;
metin.ozkan@analog.com 0:00d2a8670533 2333 break;
metin.ozkan@analog.com 0:00d2a8670533 2334 case Status_SPR_5:
metin.ozkan@analog.com 0:00d2a8670533 2335 *status = (uint8_t)reg_status.bits.spr_5;
metin.ozkan@analog.com 0:00d2a8670533 2336 break;
metin.ozkan@analog.com 0:00d2a8670533 2337 case Status_ThmHot:
metin.ozkan@analog.com 0:00d2a8670533 2338 *status = (uint8_t)reg_status.bits.thmhot;
metin.ozkan@analog.com 0:00d2a8670533 2339 break;
metin.ozkan@analog.com 0:00d2a8670533 2340 case Status_dSOCi:
metin.ozkan@analog.com 0:00d2a8670533 2341 *status = (uint8_t)reg_status.bits.dsoci;
metin.ozkan@analog.com 0:00d2a8670533 2342 break;
metin.ozkan@analog.com 0:00d2a8670533 2343 case Status_Vmn:
metin.ozkan@analog.com 0:00d2a8670533 2344 *status = (uint8_t)reg_status.bits.vmn;
metin.ozkan@analog.com 0:00d2a8670533 2345 break;
metin.ozkan@analog.com 0:00d2a8670533 2346 case Status_Tmn:
metin.ozkan@analog.com 0:00d2a8670533 2347 *status = (uint8_t)reg_status.bits.tmn;
metin.ozkan@analog.com 0:00d2a8670533 2348 break;
metin.ozkan@analog.com 0:00d2a8670533 2349 case Status_Smn:
metin.ozkan@analog.com 0:00d2a8670533 2350 *status = (uint8_t)reg_status.bits.smn;
metin.ozkan@analog.com 0:00d2a8670533 2351 break;
metin.ozkan@analog.com 0:00d2a8670533 2352 case Status_Bi:
metin.ozkan@analog.com 0:00d2a8670533 2353 *status = (uint8_t)reg_status.bits.bi;
metin.ozkan@analog.com 0:00d2a8670533 2354 break;
metin.ozkan@analog.com 0:00d2a8670533 2355 case Status_Vmx:
metin.ozkan@analog.com 0:00d2a8670533 2356 *status = (uint8_t)reg_status.bits.vmx;
metin.ozkan@analog.com 0:00d2a8670533 2357 break;
metin.ozkan@analog.com 0:00d2a8670533 2358 case Status_Tmx:
metin.ozkan@analog.com 0:00d2a8670533 2359 *status = (uint8_t)reg_status.bits.tmx;
metin.ozkan@analog.com 0:00d2a8670533 2360 break;
metin.ozkan@analog.com 0:00d2a8670533 2361 case Status_Smx:
metin.ozkan@analog.com 0:00d2a8670533 2362 *status = (uint8_t)reg_status.bits.smx;
metin.ozkan@analog.com 0:00d2a8670533 2363 break;
metin.ozkan@analog.com 0:00d2a8670533 2364 case Status_Br:
metin.ozkan@analog.com 0:00d2a8670533 2365 *status = (uint8_t)reg_status.bits.br;
metin.ozkan@analog.com 0:00d2a8670533 2366 break;
metin.ozkan@analog.com 0:00d2a8670533 2367 default:
metin.ozkan@analog.com 0:00d2a8670533 2368 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2369 break;
metin.ozkan@analog.com 0:00d2a8670533 2370 }
metin.ozkan@analog.com 0:00d2a8670533 2371
metin.ozkan@analog.com 0:00d2a8670533 2372 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2373 }
metin.ozkan@analog.com 0:00d2a8670533 2374
metin.ozkan@analog.com 0:00d2a8670533 2375 int MAX77658::set_fg_valrt_th(reg_bit_valrt_th_t bit_field, float voltV)
metin.ozkan@analog.com 0:00d2a8670533 2376 {
metin.ozkan@analog.com 0:00d2a8670533 2377 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2378 uint8_t voltRaw;
Okan Sahin 1:40ef1dc30cb7 2379 reg_valrt_th_t reg_valrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2380 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 2381
metin.ozkan@analog.com 0:00d2a8670533 2382 ret = read_fg_register(VAlrtTh, (uint8_t *)&(reg_valrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2383 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2384
metin.ozkan@analog.com 0:00d2a8670533 2385 //20mV resolution
metin.ozkan@analog.com 0:00d2a8670533 2386 voltRaw = (int)(voltmV / 20) & TO_UINT8;
metin.ozkan@analog.com 0:00d2a8670533 2387
metin.ozkan@analog.com 0:00d2a8670533 2388 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2389 {
metin.ozkan@analog.com 0:00d2a8670533 2390 case VAlrtTh_MinVoltageAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2391 reg_valrt_th.bits.min_voltage_alrt = voltRaw;
metin.ozkan@analog.com 0:00d2a8670533 2392 break;
metin.ozkan@analog.com 0:00d2a8670533 2393 case VAlrtTh_MaxVoltageAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2394 reg_valrt_th.bits.max_voltage_alrt = voltRaw;
metin.ozkan@analog.com 0:00d2a8670533 2395 break;
metin.ozkan@analog.com 0:00d2a8670533 2396 default:
metin.ozkan@analog.com 0:00d2a8670533 2397 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2398 break;
metin.ozkan@analog.com 0:00d2a8670533 2399 }
metin.ozkan@analog.com 0:00d2a8670533 2400
metin.ozkan@analog.com 0:00d2a8670533 2401 return write_fg_register(VAlrtTh, (uint8_t *)&(reg_valrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2402 }
metin.ozkan@analog.com 0:00d2a8670533 2403
metin.ozkan@analog.com 0:00d2a8670533 2404 int MAX77658::get_fg_valrt_th(reg_bit_valrt_th_t bit_field, float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 2405 {
metin.ozkan@analog.com 0:00d2a8670533 2406 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2407 int8_t voltSigned;
Okan Sahin 1:40ef1dc30cb7 2408 reg_valrt_th_t reg_valrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2409
metin.ozkan@analog.com 0:00d2a8670533 2410 ret = read_fg_register(VAlrtTh, (uint8_t *)&(reg_valrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2411 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2412
metin.ozkan@analog.com 0:00d2a8670533 2413 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2414 {
metin.ozkan@analog.com 0:00d2a8670533 2415 case VAlrtTh_MinVoltageAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2416 voltSigned = (int8_t)reg_valrt_th.bits.min_voltage_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2417 break;
metin.ozkan@analog.com 0:00d2a8670533 2418 case VAlrtTh_MaxVoltageAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2419 voltSigned = (int8_t)reg_valrt_th.bits.max_voltage_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2420 break;
metin.ozkan@analog.com 0:00d2a8670533 2421 default:
metin.ozkan@analog.com 0:00d2a8670533 2422 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2423 break;
metin.ozkan@analog.com 0:00d2a8670533 2424 }
metin.ozkan@analog.com 0:00d2a8670533 2425
metin.ozkan@analog.com 0:00d2a8670533 2426 //20mV resolution
metin.ozkan@analog.com 0:00d2a8670533 2427 *voltV = (float)((voltSigned * 20.0f) / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 2428
metin.ozkan@analog.com 0:00d2a8670533 2429 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2430 }
metin.ozkan@analog.com 0:00d2a8670533 2431
metin.ozkan@analog.com 0:00d2a8670533 2432 int MAX77658::set_fg_talrt_th(reg_bit_talrt_th_t bit_field, int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 2433 {
metin.ozkan@analog.com 0:00d2a8670533 2434 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2435 uint8_t tempRaw;
Okan Sahin 1:40ef1dc30cb7 2436 reg_talrt_th_t reg_talrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2437
metin.ozkan@analog.com 0:00d2a8670533 2438 ret = read_fg_register(TAlrtTh, (uint8_t *)&(reg_talrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2439 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2440
metin.ozkan@analog.com 0:00d2a8670533 2441 //1°C resolution
metin.ozkan@analog.com 0:00d2a8670533 2442 tempRaw = tempDegC & TO_UINT8;
metin.ozkan@analog.com 0:00d2a8670533 2443
metin.ozkan@analog.com 0:00d2a8670533 2444 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2445 {
metin.ozkan@analog.com 0:00d2a8670533 2446 case TAlrtTh_MinTempAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2447 if(tempRaw < 128) tempRaw = 128;
metin.ozkan@analog.com 0:00d2a8670533 2448 reg_talrt_th.bits.min_temp_alrt = tempRaw;
metin.ozkan@analog.com 0:00d2a8670533 2449 break;
metin.ozkan@analog.com 0:00d2a8670533 2450 case TAlrtTh_MaxTempAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2451 if(tempRaw > 127) tempRaw = 127;
metin.ozkan@analog.com 0:00d2a8670533 2452 reg_talrt_th.bits.max_temp_alrt = tempRaw;
metin.ozkan@analog.com 0:00d2a8670533 2453 break;
metin.ozkan@analog.com 0:00d2a8670533 2454 default:
metin.ozkan@analog.com 0:00d2a8670533 2455 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2456 break;
metin.ozkan@analog.com 0:00d2a8670533 2457 }
metin.ozkan@analog.com 0:00d2a8670533 2458
metin.ozkan@analog.com 0:00d2a8670533 2459 return write_fg_register(TAlrtTh, (uint8_t *)&(reg_talrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2460 }
metin.ozkan@analog.com 0:00d2a8670533 2461
metin.ozkan@analog.com 0:00d2a8670533 2462 int MAX77658::get_fg_talrt_th(reg_bit_talrt_th_t bit_field, int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 2463 {
metin.ozkan@analog.com 0:00d2a8670533 2464 int ret, tempSigned;
Okan Sahin 1:40ef1dc30cb7 2465 reg_talrt_th_t reg_talrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2466
metin.ozkan@analog.com 0:00d2a8670533 2467 ret = read_fg_register(TAlrtTh, (uint8_t *)&(reg_talrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2468 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2469
metin.ozkan@analog.com 0:00d2a8670533 2470 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2471 {
metin.ozkan@analog.com 0:00d2a8670533 2472 case TAlrtTh_MinTempAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2473 tempSigned = (int)reg_talrt_th.bits.min_temp_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2474 if(tempSigned < -128) tempSigned = -128;
metin.ozkan@analog.com 0:00d2a8670533 2475 break;
metin.ozkan@analog.com 0:00d2a8670533 2476 case TAlrtTh_MaxTempAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2477 tempSigned = (int)reg_talrt_th.bits.max_temp_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2478 if(tempSigned > 127) tempSigned = 127;
metin.ozkan@analog.com 0:00d2a8670533 2479 break;
metin.ozkan@analog.com 0:00d2a8670533 2480 default:
metin.ozkan@analog.com 0:00d2a8670533 2481 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2482 break;
metin.ozkan@analog.com 0:00d2a8670533 2483 }
metin.ozkan@analog.com 0:00d2a8670533 2484
metin.ozkan@analog.com 0:00d2a8670533 2485 //1°C resolution
metin.ozkan@analog.com 0:00d2a8670533 2486 *tempDegC = (int)tempSigned & 0xFF;
metin.ozkan@analog.com 0:00d2a8670533 2487
metin.ozkan@analog.com 0:00d2a8670533 2488 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2489 }
metin.ozkan@analog.com 0:00d2a8670533 2490
metin.ozkan@analog.com 0:00d2a8670533 2491 int MAX77658::set_fg_salrt_th(reg_bit_salrt_th_t bit_field, uint8_t soc)
metin.ozkan@analog.com 0:00d2a8670533 2492 {
metin.ozkan@analog.com 0:00d2a8670533 2493 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2494 uint8_t capRaw;
Okan Sahin 1:40ef1dc30cb7 2495 reg_salrt_th_t reg_salrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2496
metin.ozkan@analog.com 0:00d2a8670533 2497 ret = read_fg_register(SAlrtTh, (uint8_t *)&(reg_salrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2498 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2499
metin.ozkan@analog.com 0:00d2a8670533 2500 //%1 resolution
metin.ozkan@analog.com 0:00d2a8670533 2501 capRaw = (uint8_t)(soc);
metin.ozkan@analog.com 0:00d2a8670533 2502
metin.ozkan@analog.com 0:00d2a8670533 2503 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2504 {
metin.ozkan@analog.com 0:00d2a8670533 2505 case SAlrtTh_MinSocAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2506 reg_salrt_th.bits.min_soc_alrt = capRaw;
metin.ozkan@analog.com 0:00d2a8670533 2507 break;
metin.ozkan@analog.com 0:00d2a8670533 2508 case SAlrtTh_MaxSocAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2509 reg_salrt_th.bits.max_soc_alrt = capRaw;
metin.ozkan@analog.com 0:00d2a8670533 2510 break;
metin.ozkan@analog.com 0:00d2a8670533 2511 default:
metin.ozkan@analog.com 0:00d2a8670533 2512 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2513 break;
metin.ozkan@analog.com 0:00d2a8670533 2514 }
metin.ozkan@analog.com 0:00d2a8670533 2515
metin.ozkan@analog.com 0:00d2a8670533 2516 return write_fg_register(SAlrtTh, (uint8_t *)&(reg_salrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2517 }
metin.ozkan@analog.com 0:00d2a8670533 2518
metin.ozkan@analog.com 0:00d2a8670533 2519 int MAX77658::get_fg_salrt_th(reg_bit_salrt_th_t bit_field, uint8_t *soc)
metin.ozkan@analog.com 0:00d2a8670533 2520 {
metin.ozkan@analog.com 0:00d2a8670533 2521 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2522 uint8_t capRaw;
Okan Sahin 1:40ef1dc30cb7 2523 reg_salrt_th_t reg_salrt_th = {0};
metin.ozkan@analog.com 0:00d2a8670533 2524
metin.ozkan@analog.com 0:00d2a8670533 2525 ret = read_fg_register(SAlrtTh, (uint8_t *)&(reg_salrt_th));
metin.ozkan@analog.com 0:00d2a8670533 2526 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2527
metin.ozkan@analog.com 0:00d2a8670533 2528 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2529 {
metin.ozkan@analog.com 0:00d2a8670533 2530 case SAlrtTh_MinSocAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2531 capRaw = (uint8_t)reg_salrt_th.bits.min_soc_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2532 break;
metin.ozkan@analog.com 0:00d2a8670533 2533 case SAlrtTh_MaxSocAlrt:
metin.ozkan@analog.com 0:00d2a8670533 2534 capRaw = (uint8_t)reg_salrt_th.bits.max_soc_alrt;
metin.ozkan@analog.com 0:00d2a8670533 2535 break;
metin.ozkan@analog.com 0:00d2a8670533 2536 default:
metin.ozkan@analog.com 0:00d2a8670533 2537 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2538 break;
metin.ozkan@analog.com 0:00d2a8670533 2539 }
metin.ozkan@analog.com 0:00d2a8670533 2540
metin.ozkan@analog.com 0:00d2a8670533 2541 //%1 resolution
metin.ozkan@analog.com 0:00d2a8670533 2542 *soc = (uint8_t)(capRaw);
metin.ozkan@analog.com 0:00d2a8670533 2543
metin.ozkan@analog.com 0:00d2a8670533 2544 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2545 }
metin.ozkan@analog.com 0:00d2a8670533 2546
metin.ozkan@analog.com 0:00d2a8670533 2547 int MAX77658::set_fg_full_soc_thr(float soc_thr)
metin.ozkan@analog.com 0:00d2a8670533 2548 {
metin.ozkan@analog.com 0:00d2a8670533 2549 int capRaw;
Okan Sahin 1:40ef1dc30cb7 2550 reg_full_soc_thr_t reg_full_soc_thr = {0};
metin.ozkan@analog.com 0:00d2a8670533 2551
metin.ozkan@analog.com 0:00d2a8670533 2552 //LSB unit is 1/256%.
metin.ozkan@analog.com 0:00d2a8670533 2553 capRaw = (int)round(soc_thr * 256);
metin.ozkan@analog.com 0:00d2a8670533 2554
metin.ozkan@analog.com 0:00d2a8670533 2555 SET_FG_BIT_FIELD(FullSocThr, reg_full_soc_thr, reg_full_soc_thr.bits.full_soc_thr, capRaw);
metin.ozkan@analog.com 0:00d2a8670533 2556 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2557 }
metin.ozkan@analog.com 0:00d2a8670533 2558
metin.ozkan@analog.com 0:00d2a8670533 2559 int MAX77658::get_fg_full_soc_thr(float *soc_thr)
metin.ozkan@analog.com 0:00d2a8670533 2560 {
metin.ozkan@analog.com 0:00d2a8670533 2561 int ret, capRaw;
Okan Sahin 1:40ef1dc30cb7 2562 reg_full_soc_thr_t reg_full_soc_thr = {0};
metin.ozkan@analog.com 0:00d2a8670533 2563
metin.ozkan@analog.com 0:00d2a8670533 2564 ret = read_fg_register(FullSocThr, (uint8_t *)&(reg_full_soc_thr));
metin.ozkan@analog.com 0:00d2a8670533 2565 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2566
metin.ozkan@analog.com 0:00d2a8670533 2567 //LSB unit is 1/256%.
metin.ozkan@analog.com 0:00d2a8670533 2568 capRaw = (int)reg_full_soc_thr.bits.full_soc_thr;
metin.ozkan@analog.com 0:00d2a8670533 2569 *soc_thr = (float)(capRaw / 256.0f);
metin.ozkan@analog.com 0:00d2a8670533 2570
metin.ozkan@analog.com 0:00d2a8670533 2571 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2572 }
metin.ozkan@analog.com 0:00d2a8670533 2573
metin.ozkan@analog.com 0:00d2a8670533 2574 int MAX77658::set_fg_design_cap(float capacitymAh)
metin.ozkan@analog.com 0:00d2a8670533 2575 {
metin.ozkan@analog.com 0:00d2a8670533 2576 int capRaw;
Okan Sahin 1:40ef1dc30cb7 2577 reg_design_cap_t reg_design_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 2578
metin.ozkan@analog.com 0:00d2a8670533 2579 //Min is 0.0mAh and Max is 6553.5mAh.
metin.ozkan@analog.com 0:00d2a8670533 2580 if (capacitymAh < 0) capacitymAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 2581 else if (capacitymAh > 6553.5f) capacitymAh = 6553.5;
metin.ozkan@analog.com 0:00d2a8670533 2582
metin.ozkan@analog.com 0:00d2a8670533 2583 //LSB unit is 0.1mAh.
metin.ozkan@analog.com 0:00d2a8670533 2584 capRaw = (int)(capacitymAh * 10);
metin.ozkan@analog.com 0:00d2a8670533 2585
metin.ozkan@analog.com 0:00d2a8670533 2586 SET_FG_BIT_FIELD(DesignCap, reg_design_cap, reg_design_cap.bits.design_cap, capRaw);
metin.ozkan@analog.com 0:00d2a8670533 2587 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2588 }
metin.ozkan@analog.com 0:00d2a8670533 2589
metin.ozkan@analog.com 0:00d2a8670533 2590 int MAX77658::get_fg_design_cap(float *capacitymAh)
metin.ozkan@analog.com 0:00d2a8670533 2591 {
metin.ozkan@analog.com 0:00d2a8670533 2592 int ret, capRaw;
Okan Sahin 1:40ef1dc30cb7 2593 reg_design_cap_t reg_design_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 2594
metin.ozkan@analog.com 0:00d2a8670533 2595 ret = read_fg_register(DesignCap, (uint8_t *)&(reg_design_cap));
metin.ozkan@analog.com 0:00d2a8670533 2596 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2597
metin.ozkan@analog.com 0:00d2a8670533 2598 //LSB unit is 0.1mAh. Min is 0.0mAh and Max is 6553.5mAh.
metin.ozkan@analog.com 0:00d2a8670533 2599 capRaw = (int)reg_design_cap.bits.design_cap;
metin.ozkan@analog.com 0:00d2a8670533 2600 *capacitymAh = (float)(capRaw * 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 2601
metin.ozkan@analog.com 0:00d2a8670533 2602 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2603 }
metin.ozkan@analog.com 0:00d2a8670533 2604
metin.ozkan@analog.com 0:00d2a8670533 2605 int MAX77658::set_fg_config(reg_bit_config_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 2606 {
metin.ozkan@analog.com 0:00d2a8670533 2607 int ret;
Okan Sahin 1:40ef1dc30cb7 2608 reg_config_t reg_config = {0};
metin.ozkan@analog.com 0:00d2a8670533 2609
metin.ozkan@analog.com 0:00d2a8670533 2610 ret = read_fg_register(Config, (uint8_t *)&(reg_config));
metin.ozkan@analog.com 0:00d2a8670533 2611 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2612
metin.ozkan@analog.com 0:00d2a8670533 2613 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2614 {
metin.ozkan@analog.com 0:00d2a8670533 2615 case Config_Ber:
metin.ozkan@analog.com 0:00d2a8670533 2616 reg_config.bits.ber = config;
metin.ozkan@analog.com 0:00d2a8670533 2617 break;
metin.ozkan@analog.com 0:00d2a8670533 2618 case Config_Bei:
metin.ozkan@analog.com 0:00d2a8670533 2619 reg_config.bits.bei = config;
metin.ozkan@analog.com 0:00d2a8670533 2620 break;
metin.ozkan@analog.com 0:00d2a8670533 2621 case Config_Aen:
metin.ozkan@analog.com 0:00d2a8670533 2622 reg_config.bits.aen = config;
metin.ozkan@analog.com 0:00d2a8670533 2623 break;
metin.ozkan@analog.com 0:00d2a8670533 2624 case Config_FTHRM:
metin.ozkan@analog.com 0:00d2a8670533 2625 reg_config.bits.fthrm = config;
metin.ozkan@analog.com 0:00d2a8670533 2626 break;
metin.ozkan@analog.com 0:00d2a8670533 2627 case Config_ETHRM:
metin.ozkan@analog.com 0:00d2a8670533 2628 reg_config.bits.ethrm = config;
metin.ozkan@analog.com 0:00d2a8670533 2629 break;
metin.ozkan@analog.com 0:00d2a8670533 2630 case Config_SPR_5:
metin.ozkan@analog.com 0:00d2a8670533 2631 reg_config.bits.spr_5 = config;
metin.ozkan@analog.com 0:00d2a8670533 2632 break;
metin.ozkan@analog.com 0:00d2a8670533 2633 case Config_I2CSH:
metin.ozkan@analog.com 0:00d2a8670533 2634 reg_config.bits.i2csh = config;
metin.ozkan@analog.com 0:00d2a8670533 2635 break;
metin.ozkan@analog.com 0:00d2a8670533 2636 case Config_SHDN:
metin.ozkan@analog.com 0:00d2a8670533 2637 reg_config.bits.shdn = config;
metin.ozkan@analog.com 0:00d2a8670533 2638 break;
metin.ozkan@analog.com 0:00d2a8670533 2639 case Config_Tex:
metin.ozkan@analog.com 0:00d2a8670533 2640 reg_config.bits.tex = config;
metin.ozkan@analog.com 0:00d2a8670533 2641 break;
metin.ozkan@analog.com 0:00d2a8670533 2642 case Config_Ten:
metin.ozkan@analog.com 0:00d2a8670533 2643 reg_config.bits.ten = config;
metin.ozkan@analog.com 0:00d2a8670533 2644 break;
metin.ozkan@analog.com 0:00d2a8670533 2645 case Config_AINSH:
metin.ozkan@analog.com 0:00d2a8670533 2646 reg_config.bits.ainsh = config;
metin.ozkan@analog.com 0:00d2a8670533 2647 break;
metin.ozkan@analog.com 0:00d2a8670533 2648 case Config_SPR_11:
metin.ozkan@analog.com 0:00d2a8670533 2649 reg_config.bits.spr_11 = config;
metin.ozkan@analog.com 0:00d2a8670533 2650 break;
metin.ozkan@analog.com 0:00d2a8670533 2651 case Config_Vs:
metin.ozkan@analog.com 0:00d2a8670533 2652 reg_config.bits.vs = config;
metin.ozkan@analog.com 0:00d2a8670533 2653 break;
metin.ozkan@analog.com 0:00d2a8670533 2654 case Config_Ts:
metin.ozkan@analog.com 0:00d2a8670533 2655 reg_config.bits.ts = config;
metin.ozkan@analog.com 0:00d2a8670533 2656 break;
metin.ozkan@analog.com 0:00d2a8670533 2657 case Config_Ss:
metin.ozkan@analog.com 0:00d2a8670533 2658 reg_config.bits.ss = config;
metin.ozkan@analog.com 0:00d2a8670533 2659 break;
metin.ozkan@analog.com 0:00d2a8670533 2660 case Config_SPR_15:
metin.ozkan@analog.com 0:00d2a8670533 2661 reg_config.bits.spr_15 = config;
metin.ozkan@analog.com 0:00d2a8670533 2662 break;
metin.ozkan@analog.com 0:00d2a8670533 2663 default:
metin.ozkan@analog.com 0:00d2a8670533 2664 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2665 break;
metin.ozkan@analog.com 0:00d2a8670533 2666 }
metin.ozkan@analog.com 0:00d2a8670533 2667
metin.ozkan@analog.com 0:00d2a8670533 2668 return write_fg_register(Config, (uint8_t *)&(reg_config));
metin.ozkan@analog.com 0:00d2a8670533 2669 }
metin.ozkan@analog.com 0:00d2a8670533 2670
metin.ozkan@analog.com 0:00d2a8670533 2671 int MAX77658::get_fg_config(reg_bit_config_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 2672 {
metin.ozkan@analog.com 0:00d2a8670533 2673 int ret;
Okan Sahin 1:40ef1dc30cb7 2674 reg_config_t reg_config = {0};
metin.ozkan@analog.com 0:00d2a8670533 2675
metin.ozkan@analog.com 0:00d2a8670533 2676 ret = read_fg_register(Config, (uint8_t *)&(reg_config));
metin.ozkan@analog.com 0:00d2a8670533 2677 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2678
metin.ozkan@analog.com 0:00d2a8670533 2679 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 2680 {
metin.ozkan@analog.com 0:00d2a8670533 2681 case Config_Ber:
metin.ozkan@analog.com 0:00d2a8670533 2682 *config = (uint8_t)reg_config.bits.ber;
metin.ozkan@analog.com 0:00d2a8670533 2683 break;
metin.ozkan@analog.com 0:00d2a8670533 2684 case Config_Bei:
metin.ozkan@analog.com 0:00d2a8670533 2685 *config = (uint8_t)reg_config.bits.bei;
metin.ozkan@analog.com 0:00d2a8670533 2686 break;
metin.ozkan@analog.com 0:00d2a8670533 2687 case Config_Aen:
metin.ozkan@analog.com 0:00d2a8670533 2688 *config = (uint8_t)reg_config.bits.aen;
metin.ozkan@analog.com 0:00d2a8670533 2689 break;
metin.ozkan@analog.com 0:00d2a8670533 2690 case Config_FTHRM:
metin.ozkan@analog.com 0:00d2a8670533 2691 *config = (uint8_t)reg_config.bits.fthrm;
metin.ozkan@analog.com 0:00d2a8670533 2692 break;
metin.ozkan@analog.com 0:00d2a8670533 2693 case Config_ETHRM:
metin.ozkan@analog.com 0:00d2a8670533 2694 *config = (uint8_t)reg_config.bits.ethrm;
metin.ozkan@analog.com 0:00d2a8670533 2695 break;
metin.ozkan@analog.com 0:00d2a8670533 2696 case Config_SPR_5:
metin.ozkan@analog.com 0:00d2a8670533 2697 *config = (uint8_t)reg_config.bits.spr_5;
metin.ozkan@analog.com 0:00d2a8670533 2698 break;
metin.ozkan@analog.com 0:00d2a8670533 2699 case Config_I2CSH:
metin.ozkan@analog.com 0:00d2a8670533 2700 *config = (uint8_t)reg_config.bits.i2csh;
metin.ozkan@analog.com 0:00d2a8670533 2701 break;
metin.ozkan@analog.com 0:00d2a8670533 2702 case Config_SHDN:
metin.ozkan@analog.com 0:00d2a8670533 2703 *config = (uint8_t)reg_config.bits.shdn;
metin.ozkan@analog.com 0:00d2a8670533 2704 break;
metin.ozkan@analog.com 0:00d2a8670533 2705 case Config_Tex:
metin.ozkan@analog.com 0:00d2a8670533 2706 *config = (uint8_t)reg_config.bits.tex;
metin.ozkan@analog.com 0:00d2a8670533 2707 break;
metin.ozkan@analog.com 0:00d2a8670533 2708 case Config_Ten:
metin.ozkan@analog.com 0:00d2a8670533 2709 *config = (uint8_t)reg_config.bits.ten;
metin.ozkan@analog.com 0:00d2a8670533 2710 break;
metin.ozkan@analog.com 0:00d2a8670533 2711 case Config_AINSH:
metin.ozkan@analog.com 0:00d2a8670533 2712 *config = (uint8_t)reg_config.bits.ainsh;
metin.ozkan@analog.com 0:00d2a8670533 2713 break;
metin.ozkan@analog.com 0:00d2a8670533 2714 case Config_SPR_11:
metin.ozkan@analog.com 0:00d2a8670533 2715 *config = (uint8_t)reg_config.bits.spr_11;
metin.ozkan@analog.com 0:00d2a8670533 2716 break;
metin.ozkan@analog.com 0:00d2a8670533 2717 case Config_Vs:
metin.ozkan@analog.com 0:00d2a8670533 2718 *config = (uint8_t)reg_config.bits.vs;
metin.ozkan@analog.com 0:00d2a8670533 2719 break;
metin.ozkan@analog.com 0:00d2a8670533 2720 case Config_Ts:
metin.ozkan@analog.com 0:00d2a8670533 2721 *config = (uint8_t)reg_config.bits.ts;
metin.ozkan@analog.com 0:00d2a8670533 2722 break;
metin.ozkan@analog.com 0:00d2a8670533 2723 case Config_Ss:
metin.ozkan@analog.com 0:00d2a8670533 2724 *config = (uint8_t)reg_config.bits.ss;
metin.ozkan@analog.com 0:00d2a8670533 2725 break;
metin.ozkan@analog.com 0:00d2a8670533 2726 case Config_SPR_15:
metin.ozkan@analog.com 0:00d2a8670533 2727 *config = (uint8_t)reg_config.bits.spr_15;
metin.ozkan@analog.com 0:00d2a8670533 2728 break;
metin.ozkan@analog.com 0:00d2a8670533 2729 default:
metin.ozkan@analog.com 0:00d2a8670533 2730 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 2731 break;
metin.ozkan@analog.com 0:00d2a8670533 2732 }
metin.ozkan@analog.com 0:00d2a8670533 2733
metin.ozkan@analog.com 0:00d2a8670533 2734 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2735 }
metin.ozkan@analog.com 0:00d2a8670533 2736
metin.ozkan@analog.com 0:00d2a8670533 2737 int MAX77658::set_fg_ichg_term(float currentA)
metin.ozkan@analog.com 0:00d2a8670533 2738 {
metin.ozkan@analog.com 0:00d2a8670533 2739 uint16_t currentRaw;
Okan Sahin 1:40ef1dc30cb7 2740 reg_ichg_term_t reg_ichg_term = {0};
metin.ozkan@analog.com 0:00d2a8670533 2741
metin.ozkan@analog.com 0:00d2a8670533 2742 //Register scale range of ± 5.12 A
metin.ozkan@analog.com 0:00d2a8670533 2743 if (currentA < -5.12f) currentA = -5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2744 else if (currentA > 5.12f) currentA = 5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2745
metin.ozkan@analog.com 0:00d2a8670533 2746 //LSB value of 156.25μA
metin.ozkan@analog.com 0:00d2a8670533 2747 currentRaw = (int)round(currentA * 1000000 / 156.25f) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 2748
metin.ozkan@analog.com 0:00d2a8670533 2749 SET_FG_BIT_FIELD(IChgTerm, reg_ichg_term, reg_ichg_term.bits.ichg_term, currentRaw);
metin.ozkan@analog.com 0:00d2a8670533 2750 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2751 }
metin.ozkan@analog.com 0:00d2a8670533 2752
metin.ozkan@analog.com 0:00d2a8670533 2753 int MAX77658::get_fg_ichg_term(float *currentA)
metin.ozkan@analog.com 0:00d2a8670533 2754 {
metin.ozkan@analog.com 0:00d2a8670533 2755 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2756 int16_t currentSigned;
Okan Sahin 1:40ef1dc30cb7 2757 reg_ichg_term_t reg_ichg_term = {0};
metin.ozkan@analog.com 0:00d2a8670533 2758
metin.ozkan@analog.com 0:00d2a8670533 2759 ret = read_fg_register(IChgTerm, (uint8_t *)&(reg_ichg_term));
metin.ozkan@analog.com 0:00d2a8670533 2760 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2761
metin.ozkan@analog.com 0:00d2a8670533 2762 //LSB value of 156.25μA
metin.ozkan@analog.com 0:00d2a8670533 2763 currentSigned = (int16_t)reg_ichg_term.bits.ichg_term;
metin.ozkan@analog.com 0:00d2a8670533 2764 *currentA = (float)(((int)currentSigned) * 156.25f / 1000000);
metin.ozkan@analog.com 0:00d2a8670533 2765
metin.ozkan@analog.com 0:00d2a8670533 2766 //Register scale range of ± 5.12 A
metin.ozkan@analog.com 0:00d2a8670533 2767 if (*currentA < -5.12f) *currentA = -5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2768 else if (*currentA > 5.12f) *currentA = 5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2769
metin.ozkan@analog.com 0:00d2a8670533 2770 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2771 }
metin.ozkan@analog.com 0:00d2a8670533 2772
metin.ozkan@analog.com 0:00d2a8670533 2773 int MAX77658::get_fg_dev_name(uint16_t *value)
metin.ozkan@analog.com 0:00d2a8670533 2774 {
metin.ozkan@analog.com 0:00d2a8670533 2775 int ret;
Okan Sahin 1:40ef1dc30cb7 2776 reg_dev_name_t reg_dev_name = {0};
metin.ozkan@analog.com 0:00d2a8670533 2777
metin.ozkan@analog.com 0:00d2a8670533 2778 ret = read_fg_register(DevName, (uint8_t *)&(reg_dev_name));
metin.ozkan@analog.com 0:00d2a8670533 2779 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2780
metin.ozkan@analog.com 0:00d2a8670533 2781 *value = (uint16_t)(reg_dev_name.bits.dev_name);
metin.ozkan@analog.com 0:00d2a8670533 2782
metin.ozkan@analog.com 0:00d2a8670533 2783 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2784 }
metin.ozkan@analog.com 0:00d2a8670533 2785
metin.ozkan@analog.com 0:00d2a8670533 2786 int MAX77658::set_fg_nempty(uint8_t nempty)
metin.ozkan@analog.com 0:00d2a8670533 2787 {
Okan Sahin 1:40ef1dc30cb7 2788 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2789
metin.ozkan@analog.com 0:00d2a8670533 2790 SET_FG_BIT_FIELD(FilterCfg, reg_filter_cfg, reg_filter_cfg.bits.nempty, nempty);
metin.ozkan@analog.com 0:00d2a8670533 2791 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2792 }
metin.ozkan@analog.com 0:00d2a8670533 2793
metin.ozkan@analog.com 0:00d2a8670533 2794 int MAX77658::get_fg_nempty(uint8_t *nempty)
metin.ozkan@analog.com 0:00d2a8670533 2795 {
metin.ozkan@analog.com 0:00d2a8670533 2796 int ret;
Okan Sahin 1:40ef1dc30cb7 2797 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2798
metin.ozkan@analog.com 0:00d2a8670533 2799 ret = read_fg_register(FilterCfg, (uint8_t *)&(reg_filter_cfg));
metin.ozkan@analog.com 0:00d2a8670533 2800 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2801
metin.ozkan@analog.com 0:00d2a8670533 2802 *nempty = (uint8_t)reg_filter_cfg.bits.nempty;
metin.ozkan@analog.com 0:00d2a8670533 2803
metin.ozkan@analog.com 0:00d2a8670533 2804 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2805 }
metin.ozkan@analog.com 0:00d2a8670533 2806
metin.ozkan@analog.com 0:00d2a8670533 2807 int MAX77658::set_fg_nmix(float second)
metin.ozkan@analog.com 0:00d2a8670533 2808 {
metin.ozkan@analog.com 0:00d2a8670533 2809 int nmixRaw;
Okan Sahin 1:40ef1dc30cb7 2810 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2811
metin.ozkan@analog.com 0:00d2a8670533 2812 //Mixing Period = 175.8ms × 2^(5+NMIX)
metin.ozkan@analog.com 0:00d2a8670533 2813 nmixRaw = (int)round((log2(second * 1000.0f / 175.8f)) - 5.0f);
metin.ozkan@analog.com 0:00d2a8670533 2814
metin.ozkan@analog.com 0:00d2a8670533 2815 SET_FG_BIT_FIELD(FilterCfg, reg_filter_cfg, reg_filter_cfg.bits.nmix, nmixRaw);
metin.ozkan@analog.com 0:00d2a8670533 2816 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2817 }
metin.ozkan@analog.com 0:00d2a8670533 2818
metin.ozkan@analog.com 0:00d2a8670533 2819 int MAX77658::get_fg_nmix(float *second)
metin.ozkan@analog.com 0:00d2a8670533 2820 {
metin.ozkan@analog.com 0:00d2a8670533 2821 int ret, nmixRaw;
Okan Sahin 1:40ef1dc30cb7 2822 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2823
metin.ozkan@analog.com 0:00d2a8670533 2824 ret = read_fg_register(FilterCfg, (uint8_t *)&(reg_filter_cfg));
metin.ozkan@analog.com 0:00d2a8670533 2825 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2826
metin.ozkan@analog.com 0:00d2a8670533 2827 //Mixing Period = 175.8ms × 2^(5+NMIX)
metin.ozkan@analog.com 0:00d2a8670533 2828 nmixRaw = (int)reg_filter_cfg.bits.nmix;
metin.ozkan@analog.com 0:00d2a8670533 2829 *second = (float)(175.8f * pow(2, (5 + nmixRaw)) / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 2830
metin.ozkan@analog.com 0:00d2a8670533 2831 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2832 }
metin.ozkan@analog.com 0:00d2a8670533 2833
metin.ozkan@analog.com 0:00d2a8670533 2834 int MAX77658::set_fg_navgcell(float second)
metin.ozkan@analog.com 0:00d2a8670533 2835 {
metin.ozkan@analog.com 0:00d2a8670533 2836 int navgcellRaw;
Okan Sahin 1:40ef1dc30cb7 2837 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2838
metin.ozkan@analog.com 0:00d2a8670533 2839 //AverageVCELL time constant = 175.8ms × 2^(6+NAVGVCELL)
metin.ozkan@analog.com 0:00d2a8670533 2840 navgcellRaw = (int)round((log2(second * 1000.0f / 175.8f)) - 6.0f);
metin.ozkan@analog.com 0:00d2a8670533 2841
metin.ozkan@analog.com 0:00d2a8670533 2842 SET_FG_BIT_FIELD(FilterCfg, reg_filter_cfg, reg_filter_cfg.bits.navgcell, navgcellRaw);
metin.ozkan@analog.com 0:00d2a8670533 2843 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2844 }
metin.ozkan@analog.com 0:00d2a8670533 2845
metin.ozkan@analog.com 0:00d2a8670533 2846 int MAX77658::get_fg_navgcell(float *second)
metin.ozkan@analog.com 0:00d2a8670533 2847 {
metin.ozkan@analog.com 0:00d2a8670533 2848 int ret, navgcellRaw;
Okan Sahin 1:40ef1dc30cb7 2849 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2850
metin.ozkan@analog.com 0:00d2a8670533 2851 ret = read_fg_register(FilterCfg, (uint8_t *)&(reg_filter_cfg));
metin.ozkan@analog.com 0:00d2a8670533 2852 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2853
metin.ozkan@analog.com 0:00d2a8670533 2854 //AverageVCELL time constant = 175.8ms × 2^(6+NAVGVCELL)
metin.ozkan@analog.com 0:00d2a8670533 2855 navgcellRaw = (int)reg_filter_cfg.bits.navgcell;
metin.ozkan@analog.com 0:00d2a8670533 2856 *second = (float)(175.8f * pow(2, (6 + navgcellRaw)) / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 2857
metin.ozkan@analog.com 0:00d2a8670533 2858 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2859 }
metin.ozkan@analog.com 0:00d2a8670533 2860
metin.ozkan@analog.com 0:00d2a8670533 2861 int MAX77658::set_fg_ncurr(float second)
metin.ozkan@analog.com 0:00d2a8670533 2862 {
metin.ozkan@analog.com 0:00d2a8670533 2863 int ncurrRaw;
Okan Sahin 1:40ef1dc30cb7 2864 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2865
metin.ozkan@analog.com 0:00d2a8670533 2866 //AverageVCELL time constant = 175.8ms × 2^(2+NCURR)
metin.ozkan@analog.com 0:00d2a8670533 2867 ncurrRaw = (int)round((log2(second * 1000.0f / 175.8f)) - 2.0f);
metin.ozkan@analog.com 0:00d2a8670533 2868
metin.ozkan@analog.com 0:00d2a8670533 2869 SET_FG_BIT_FIELD(FilterCfg, reg_filter_cfg, reg_filter_cfg.bits.navgcell, ncurrRaw);
metin.ozkan@analog.com 0:00d2a8670533 2870 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2871 }
metin.ozkan@analog.com 0:00d2a8670533 2872
metin.ozkan@analog.com 0:00d2a8670533 2873 int MAX77658::get_fg_ncurr(float *second)
metin.ozkan@analog.com 0:00d2a8670533 2874 {
metin.ozkan@analog.com 0:00d2a8670533 2875 int ret, ncurrRaw;
Okan Sahin 1:40ef1dc30cb7 2876 reg_filter_cfg_t reg_filter_cfg = {0};
metin.ozkan@analog.com 0:00d2a8670533 2877
metin.ozkan@analog.com 0:00d2a8670533 2878 ret = read_fg_register(FilterCfg, (uint8_t *)&(reg_filter_cfg));
metin.ozkan@analog.com 0:00d2a8670533 2879 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2880
metin.ozkan@analog.com 0:00d2a8670533 2881 //AverageVCELL time constant = 175.8ms × 2^(2+NCURR)
metin.ozkan@analog.com 0:00d2a8670533 2882 ncurrRaw = (int)reg_filter_cfg.bits.ncurr;
metin.ozkan@analog.com 0:00d2a8670533 2883 *second = (float)(175.8f * pow(2, (2 + ncurrRaw)) / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 2884
metin.ozkan@analog.com 0:00d2a8670533 2885 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2886 }
metin.ozkan@analog.com 0:00d2a8670533 2887
metin.ozkan@analog.com 0:00d2a8670533 2888 int MAX77658::set_fg_iavg_empty(float currentA)
metin.ozkan@analog.com 0:00d2a8670533 2889 {
metin.ozkan@analog.com 0:00d2a8670533 2890 uint16_t currentRaw;
Okan Sahin 1:40ef1dc30cb7 2891 reg_iavg_empty_t reg_iavg_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2892
metin.ozkan@analog.com 0:00d2a8670533 2893 //Register scale range of ± 5.12 A
metin.ozkan@analog.com 0:00d2a8670533 2894 if (currentA < -5.12f) currentA = -5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2895 else if (currentA > 5.12f) currentA = 5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2896
metin.ozkan@analog.com 0:00d2a8670533 2897 //LSB value of 156.25μA
metin.ozkan@analog.com 0:00d2a8670533 2898 currentRaw = (int)round(currentA * 1000000 / 156.25f) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 2899
metin.ozkan@analog.com 0:00d2a8670533 2900 SET_FG_BIT_FIELD(IAvgEmpty, reg_iavg_empty, reg_iavg_empty.bits.rsvd, currentRaw);
metin.ozkan@analog.com 0:00d2a8670533 2901 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2902 }
metin.ozkan@analog.com 0:00d2a8670533 2903
metin.ozkan@analog.com 0:00d2a8670533 2904 int MAX77658::get_fg_iavg_empty(float *currentA)
metin.ozkan@analog.com 0:00d2a8670533 2905 {
metin.ozkan@analog.com 0:00d2a8670533 2906 int ret;
metin.ozkan@analog.com 0:00d2a8670533 2907 int16_t currentSigned;
Okan Sahin 1:40ef1dc30cb7 2908 reg_iavg_empty_t reg_iavg_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2909
metin.ozkan@analog.com 0:00d2a8670533 2910 ret = read_fg_register(IAvgEmpty, (uint8_t *)&(reg_iavg_empty));
metin.ozkan@analog.com 0:00d2a8670533 2911 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2912
metin.ozkan@analog.com 0:00d2a8670533 2913 //LSB value of 156.25μA
metin.ozkan@analog.com 0:00d2a8670533 2914 currentSigned = (int16_t)reg_iavg_empty.bits.rsvd;
metin.ozkan@analog.com 0:00d2a8670533 2915 *currentA = (float)(((int)currentSigned) * 156.25f / 1000000);
metin.ozkan@analog.com 0:00d2a8670533 2916
metin.ozkan@analog.com 0:00d2a8670533 2917 //Register scale range of ± 5.12 A
metin.ozkan@analog.com 0:00d2a8670533 2918 if (*currentA < -5.12f) *currentA = -5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2919 else if (*currentA > 5.12f) *currentA = 5.12f;
metin.ozkan@analog.com 0:00d2a8670533 2920
metin.ozkan@analog.com 0:00d2a8670533 2921 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2922 }
metin.ozkan@analog.com 0:00d2a8670533 2923
metin.ozkan@analog.com 0:00d2a8670533 2924 int MAX77658::set_fg_v_empty(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 2925 {
metin.ozkan@analog.com 0:00d2a8670533 2926 int voltRaw;
Okan Sahin 1:40ef1dc30cb7 2927 reg_v_empty_t reg_v_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2928 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 2929
metin.ozkan@analog.com 0:00d2a8670533 2930 //A 10mV resolution gives a 0 to 5.11V range.
metin.ozkan@analog.com 0:00d2a8670533 2931 if (voltmV < 0) voltmV = 0;
metin.ozkan@analog.com 0:00d2a8670533 2932 else if (voltmV > 5110) voltmV = 5110;
metin.ozkan@analog.com 0:00d2a8670533 2933
metin.ozkan@analog.com 0:00d2a8670533 2934 voltRaw = (int)(voltmV / 10);
metin.ozkan@analog.com 0:00d2a8670533 2935
metin.ozkan@analog.com 0:00d2a8670533 2936 SET_FG_BIT_FIELD(VEmpty, reg_v_empty, reg_v_empty.bits.v_empty, voltRaw);
metin.ozkan@analog.com 0:00d2a8670533 2937 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2938 }
metin.ozkan@analog.com 0:00d2a8670533 2939
metin.ozkan@analog.com 0:00d2a8670533 2940 int MAX77658::get_fg_v_empty(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 2941 {
metin.ozkan@analog.com 0:00d2a8670533 2942 int ret, voltRaw;
Okan Sahin 1:40ef1dc30cb7 2943 reg_v_empty_t reg_v_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2944
metin.ozkan@analog.com 0:00d2a8670533 2945 ret = read_fg_register(VEmpty, (uint8_t *)&(reg_v_empty));
metin.ozkan@analog.com 0:00d2a8670533 2946 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2947
metin.ozkan@analog.com 0:00d2a8670533 2948 //A 10mV resolution gives a 0 to 5.11V range.
metin.ozkan@analog.com 0:00d2a8670533 2949 voltRaw = (int)reg_v_empty.bits.v_empty;
metin.ozkan@analog.com 0:00d2a8670533 2950 *voltV = ((float)voltRaw * 10.0f) / 1000.0f;
metin.ozkan@analog.com 0:00d2a8670533 2951
metin.ozkan@analog.com 0:00d2a8670533 2952 if (*voltV < 0) *voltV = 0;
metin.ozkan@analog.com 0:00d2a8670533 2953 else if (*voltV > 5.11f) *voltV = 5.11f;
metin.ozkan@analog.com 0:00d2a8670533 2954
metin.ozkan@analog.com 0:00d2a8670533 2955 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2956 }
metin.ozkan@analog.com 0:00d2a8670533 2957
metin.ozkan@analog.com 0:00d2a8670533 2958 int MAX77658::set_fg_v_recover(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 2959 {
metin.ozkan@analog.com 0:00d2a8670533 2960 int voltRaw;
Okan Sahin 1:40ef1dc30cb7 2961 reg_v_empty_t reg_v_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2962 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 2963
metin.ozkan@analog.com 0:00d2a8670533 2964 //A 40mV resolution gives a 0 to 5.08V range.
metin.ozkan@analog.com 0:00d2a8670533 2965 if (voltmV < 0) voltmV = 0;
metin.ozkan@analog.com 0:00d2a8670533 2966 else if (voltmV > 5080) voltmV = 5080;
metin.ozkan@analog.com 0:00d2a8670533 2967
metin.ozkan@analog.com 0:00d2a8670533 2968 voltRaw = (int)(voltmV / 40);
metin.ozkan@analog.com 0:00d2a8670533 2969
metin.ozkan@analog.com 0:00d2a8670533 2970 SET_FG_BIT_FIELD(VEmpty, reg_v_empty, reg_v_empty.bits.v_recover, voltRaw);
metin.ozkan@analog.com 0:00d2a8670533 2971 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2972 }
metin.ozkan@analog.com 0:00d2a8670533 2973
metin.ozkan@analog.com 0:00d2a8670533 2974 int MAX77658::get_fg_v_recover(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 2975 {
metin.ozkan@analog.com 0:00d2a8670533 2976 int ret, voltRaw;
Okan Sahin 1:40ef1dc30cb7 2977 reg_v_empty_t reg_v_empty = {0};
metin.ozkan@analog.com 0:00d2a8670533 2978
metin.ozkan@analog.com 0:00d2a8670533 2979 ret = read_fg_register(VEmpty, (uint8_t *)&(reg_v_empty));
metin.ozkan@analog.com 0:00d2a8670533 2980 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 2981
metin.ozkan@analog.com 0:00d2a8670533 2982 //A 40mV resolution gives a 0 to 5.08V range.
metin.ozkan@analog.com 0:00d2a8670533 2983 voltRaw = (int)reg_v_empty.bits.v_recover;
metin.ozkan@analog.com 0:00d2a8670533 2984 *voltV = ((float)voltRaw * 40.0f) / 1000.0f;
metin.ozkan@analog.com 0:00d2a8670533 2985
metin.ozkan@analog.com 0:00d2a8670533 2986
metin.ozkan@analog.com 0:00d2a8670533 2987 if (*voltV < 0) *voltV = 0;
metin.ozkan@analog.com 0:00d2a8670533 2988 else if (*voltV > 5.08f) *voltV = 5.08f;
metin.ozkan@analog.com 0:00d2a8670533 2989
metin.ozkan@analog.com 0:00d2a8670533 2990 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 2991 }
metin.ozkan@analog.com 0:00d2a8670533 2992
metin.ozkan@analog.com 0:00d2a8670533 2993 int MAX77658::set_fg_config2(reg_bit_config2_t bit_field, uint8_t config)
metin.ozkan@analog.com 0:00d2a8670533 2994 {
metin.ozkan@analog.com 0:00d2a8670533 2995 int ret;
Okan Sahin 1:40ef1dc30cb7 2996 reg_config2_t reg_config2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 2997
metin.ozkan@analog.com 0:00d2a8670533 2998 ret = read_fg_register(Config2, (uint8_t *)&(reg_config2));
metin.ozkan@analog.com 0:00d2a8670533 2999 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3000
metin.ozkan@analog.com 0:00d2a8670533 3001 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3002 {
metin.ozkan@analog.com 0:00d2a8670533 3003 case Config2_ISysNCurr:
metin.ozkan@analog.com 0:00d2a8670533 3004 reg_config2.bits.isys_ncurr = config;
metin.ozkan@analog.com 0:00d2a8670533 3005 break;
metin.ozkan@analog.com 0:00d2a8670533 3006 case Config2_OCVQen:
metin.ozkan@analog.com 0:00d2a8670533 3007 reg_config2.bits.qcvqen = config;
metin.ozkan@analog.com 0:00d2a8670533 3008 break;
metin.ozkan@analog.com 0:00d2a8670533 3009 case Config2_LdMdl:
metin.ozkan@analog.com 0:00d2a8670533 3010 reg_config2.bits.ldmdl = config;
metin.ozkan@analog.com 0:00d2a8670533 3011 break;
metin.ozkan@analog.com 0:00d2a8670533 3012 case Config2_TAlrtEn:
metin.ozkan@analog.com 0:00d2a8670533 3013 reg_config2.bits.tairt_en = config;
metin.ozkan@analog.com 0:00d2a8670533 3014 break;
metin.ozkan@analog.com 0:00d2a8670533 3015 case Config2_dSOCen:
metin.ozkan@analog.com 0:00d2a8670533 3016 reg_config2.bits.dsocen = config;
metin.ozkan@analog.com 0:00d2a8670533 3017 break;
metin.ozkan@analog.com 0:00d2a8670533 3018 case Config2_ThmHotAlrtEn:
metin.ozkan@analog.com 0:00d2a8670533 3019 reg_config2.bits.thm_hotairt_en = config;
metin.ozkan@analog.com 0:00d2a8670533 3020 break;
metin.ozkan@analog.com 0:00d2a8670533 3021 case Config2_ThmHotEn:
metin.ozkan@analog.com 0:00d2a8670533 3022 reg_config2.bits.thmhot_en = config;
metin.ozkan@analog.com 0:00d2a8670533 3023 break;
metin.ozkan@analog.com 0:00d2a8670533 3024 case Config2_FCThmHot:
metin.ozkan@analog.com 0:00d2a8670533 3025 reg_config2.bits.fc_thmhot = config;
metin.ozkan@analog.com 0:00d2a8670533 3026 break;
metin.ozkan@analog.com 0:00d2a8670533 3027 case Config2_SPR:
metin.ozkan@analog.com 0:00d2a8670533 3028 reg_config2.bits.spr = config;
metin.ozkan@analog.com 0:00d2a8670533 3029 break;
metin.ozkan@analog.com 0:00d2a8670533 3030 default:
metin.ozkan@analog.com 0:00d2a8670533 3031 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3032 break;
metin.ozkan@analog.com 0:00d2a8670533 3033 }
metin.ozkan@analog.com 0:00d2a8670533 3034
metin.ozkan@analog.com 0:00d2a8670533 3035 return write_fg_register(Config2, (uint8_t *)&(reg_config2));
metin.ozkan@analog.com 0:00d2a8670533 3036 }
metin.ozkan@analog.com 0:00d2a8670533 3037
metin.ozkan@analog.com 0:00d2a8670533 3038 int MAX77658::get_fg_config2(reg_bit_config2_t bit_field, uint8_t *config)
metin.ozkan@analog.com 0:00d2a8670533 3039 {
metin.ozkan@analog.com 0:00d2a8670533 3040 int ret;
Okan Sahin 1:40ef1dc30cb7 3041 reg_config2_t reg_config2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 3042
metin.ozkan@analog.com 0:00d2a8670533 3043 ret = read_fg_register(Config2, (uint8_t *)&(reg_config2));
metin.ozkan@analog.com 0:00d2a8670533 3044 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3045
metin.ozkan@analog.com 0:00d2a8670533 3046 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3047 {
metin.ozkan@analog.com 0:00d2a8670533 3048 case Config2_ISysNCurr:
metin.ozkan@analog.com 0:00d2a8670533 3049 *config = (uint8_t)reg_config2.bits.isys_ncurr;
metin.ozkan@analog.com 0:00d2a8670533 3050 break;
metin.ozkan@analog.com 0:00d2a8670533 3051 case Config2_OCVQen:
metin.ozkan@analog.com 0:00d2a8670533 3052 *config = (uint8_t)reg_config2.bits.qcvqen;
metin.ozkan@analog.com 0:00d2a8670533 3053 break;
metin.ozkan@analog.com 0:00d2a8670533 3054 case Config2_LdMdl:
metin.ozkan@analog.com 0:00d2a8670533 3055 *config = (uint8_t)reg_config2.bits.ldmdl;
metin.ozkan@analog.com 0:00d2a8670533 3056 break;
metin.ozkan@analog.com 0:00d2a8670533 3057 case Config2_TAlrtEn:
metin.ozkan@analog.com 0:00d2a8670533 3058 *config = (uint8_t)reg_config2.bits.tairt_en;
metin.ozkan@analog.com 0:00d2a8670533 3059 break;
metin.ozkan@analog.com 0:00d2a8670533 3060 case Config2_dSOCen:
metin.ozkan@analog.com 0:00d2a8670533 3061 *config = (uint8_t)reg_config2.bits.dsocen;
metin.ozkan@analog.com 0:00d2a8670533 3062 break;
metin.ozkan@analog.com 0:00d2a8670533 3063 case Config2_ThmHotAlrtEn:
metin.ozkan@analog.com 0:00d2a8670533 3064 *config = (uint8_t)reg_config2.bits.thm_hotairt_en;
metin.ozkan@analog.com 0:00d2a8670533 3065 break;
metin.ozkan@analog.com 0:00d2a8670533 3066 case Config2_ThmHotEn:
metin.ozkan@analog.com 0:00d2a8670533 3067 *config = (uint8_t)reg_config2.bits.thmhot_en;
metin.ozkan@analog.com 0:00d2a8670533 3068 break;
metin.ozkan@analog.com 0:00d2a8670533 3069 case Config2_FCThmHot:
metin.ozkan@analog.com 0:00d2a8670533 3070 *config = (uint8_t)reg_config2.bits.fc_thmhot;
metin.ozkan@analog.com 0:00d2a8670533 3071 break;
metin.ozkan@analog.com 0:00d2a8670533 3072 case Config2_SPR:
metin.ozkan@analog.com 0:00d2a8670533 3073 *config = (uint8_t)reg_config2.bits.spr;
metin.ozkan@analog.com 0:00d2a8670533 3074 break;
metin.ozkan@analog.com 0:00d2a8670533 3075 default:
metin.ozkan@analog.com 0:00d2a8670533 3076 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3077 break;
metin.ozkan@analog.com 0:00d2a8670533 3078 }
metin.ozkan@analog.com 0:00d2a8670533 3079
metin.ozkan@analog.com 0:00d2a8670533 3080 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3081 }
metin.ozkan@analog.com 0:00d2a8670533 3082
metin.ozkan@analog.com 0:00d2a8670533 3083 int MAX77658::set_fg_isys_ncurr(float second)
metin.ozkan@analog.com 0:00d2a8670533 3084 {
metin.ozkan@analog.com 0:00d2a8670533 3085 int secondRaw;
Okan Sahin 1:40ef1dc30cb7 3086 reg_config2_t reg_config2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 3087
metin.ozkan@analog.com 0:00d2a8670533 3088 //AvgISys time constant = 45s x 2^(ISysNCurr-7)
metin.ozkan@analog.com 0:00d2a8670533 3089 secondRaw = (int)round(log2(second * 1000 / 45000) + 7);
metin.ozkan@analog.com 0:00d2a8670533 3090
metin.ozkan@analog.com 0:00d2a8670533 3091 SET_FG_BIT_FIELD(Config2, reg_config2, reg_config2.bits.isys_ncurr, secondRaw);
metin.ozkan@analog.com 0:00d2a8670533 3092 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3093 }
metin.ozkan@analog.com 0:00d2a8670533 3094
metin.ozkan@analog.com 0:00d2a8670533 3095 int MAX77658::get_fg_isys_ncurr(float *second)
metin.ozkan@analog.com 0:00d2a8670533 3096 {
metin.ozkan@analog.com 0:00d2a8670533 3097 int ret, secondRaw;
Okan Sahin 1:40ef1dc30cb7 3098 reg_config2_t reg_config2 = {0};
metin.ozkan@analog.com 0:00d2a8670533 3099
metin.ozkan@analog.com 0:00d2a8670533 3100 ret = read_fg_register(Config2, (uint8_t *)&(reg_config2));
metin.ozkan@analog.com 0:00d2a8670533 3101 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3102
metin.ozkan@analog.com 0:00d2a8670533 3103 //AvgISys time constant = 45s x 2^(ISysNCurr-7)
metin.ozkan@analog.com 0:00d2a8670533 3104 secondRaw = (int)reg_config2.bits.isys_ncurr;
metin.ozkan@analog.com 0:00d2a8670533 3105 *second = (float)(45.0f * pow(2, secondRaw - 7));
metin.ozkan@analog.com 0:00d2a8670533 3106
metin.ozkan@analog.com 0:00d2a8670533 3107 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3108 }
metin.ozkan@analog.com 0:00d2a8670533 3109
metin.ozkan@analog.com 0:00d2a8670533 3110 int MAX77658::set_fg_temp(float tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3111 {
metin.ozkan@analog.com 0:00d2a8670533 3112 uint16_t tempRaw;
Okan Sahin 1:40ef1dc30cb7 3113 reg_temp_t reg_temp = {0};
metin.ozkan@analog.com 0:00d2a8670533 3114
metin.ozkan@analog.com 0:00d2a8670533 3115 //Min value is -128.0°C and Max value is 127.996°C.
metin.ozkan@analog.com 0:00d2a8670533 3116 if (tempDegC < -128) tempDegC = -128;
metin.ozkan@analog.com 0:00d2a8670533 3117 else if (tempDegC > 127.996f) tempDegC = 127.996f;
metin.ozkan@analog.com 0:00d2a8670533 3118
metin.ozkan@analog.com 0:00d2a8670533 3119 //LSB is 1/256°C = 0.0039˚C.
metin.ozkan@analog.com 0:00d2a8670533 3120 tempRaw = (int)round(tempDegC * 256) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3121
metin.ozkan@analog.com 0:00d2a8670533 3122 SET_FG_BIT_FIELD(Temp, reg_temp, reg_temp.bits.temp, tempRaw);
metin.ozkan@analog.com 0:00d2a8670533 3123 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3124 }
metin.ozkan@analog.com 0:00d2a8670533 3125
metin.ozkan@analog.com 0:00d2a8670533 3126 int MAX77658::get_fg_temp(float *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3127 {
metin.ozkan@analog.com 0:00d2a8670533 3128 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3129 int16_t tempSigned;
Okan Sahin 1:40ef1dc30cb7 3130 reg_temp_t reg_temp = {0};
metin.ozkan@analog.com 0:00d2a8670533 3131
metin.ozkan@analog.com 0:00d2a8670533 3132 ret = read_fg_register(Temp, (uint8_t *)&(reg_temp));
metin.ozkan@analog.com 0:00d2a8670533 3133 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3134
metin.ozkan@analog.com 0:00d2a8670533 3135 //LSB is 1/256°C = 0.0039˚C.
metin.ozkan@analog.com 0:00d2a8670533 3136 tempSigned = (int16_t)reg_temp.bits.temp;
metin.ozkan@analog.com 0:00d2a8670533 3137 *tempDegC = (float)(tempSigned / 256.0f);
metin.ozkan@analog.com 0:00d2a8670533 3138
metin.ozkan@analog.com 0:00d2a8670533 3139 //Min value is -128.0°C and Max value is 127.996°C.
metin.ozkan@analog.com 0:00d2a8670533 3140 if (*tempDegC < -128) *tempDegC = -128;
metin.ozkan@analog.com 0:00d2a8670533 3141 else if (*tempDegC > 127.996f) *tempDegC = 127.996f;
metin.ozkan@analog.com 0:00d2a8670533 3142
metin.ozkan@analog.com 0:00d2a8670533 3143 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3144 }
metin.ozkan@analog.com 0:00d2a8670533 3145
metin.ozkan@analog.com 0:00d2a8670533 3146 int MAX77658::set_fg_vcell(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 3147 {
metin.ozkan@analog.com 0:00d2a8670533 3148 uint16_t voltRaw;
Okan Sahin 1:40ef1dc30cb7 3149 reg_vcell_t reg_vcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3150 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3151
metin.ozkan@analog.com 0:00d2a8670533 3152 //Register scale range between 0V and 5.11992V. //LSB value of 1.25mV/16
metin.ozkan@analog.com 0:00d2a8670533 3153 if (voltmV < 0) voltmV = 0;
metin.ozkan@analog.com 0:00d2a8670533 3154 else if (voltmV > 5119.92f) voltmV = 5119.92f;
metin.ozkan@analog.com 0:00d2a8670533 3155
metin.ozkan@analog.com 0:00d2a8670533 3156 voltRaw = (int)round(voltmV / 1.25 * 16) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3157
metin.ozkan@analog.com 0:00d2a8670533 3158 SET_FG_BIT_FIELD(Vcell, reg_vcell, reg_vcell.bits.vcell, voltRaw);
metin.ozkan@analog.com 0:00d2a8670533 3159 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3160 }
metin.ozkan@analog.com 0:00d2a8670533 3161
metin.ozkan@analog.com 0:00d2a8670533 3162 int MAX77658::get_fg_vcell(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 3163 {
metin.ozkan@analog.com 0:00d2a8670533 3164 int ret, voltRaw;
Okan Sahin 1:40ef1dc30cb7 3165 reg_vcell_t reg_vcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3166
metin.ozkan@analog.com 0:00d2a8670533 3167 ret = read_fg_register(Vcell, (uint8_t *)&(reg_vcell));
metin.ozkan@analog.com 0:00d2a8670533 3168 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3169
metin.ozkan@analog.com 0:00d2a8670533 3170 //LSB value of 1.25mV/16
metin.ozkan@analog.com 0:00d2a8670533 3171 voltRaw = (int)reg_vcell.bits.vcell;
metin.ozkan@analog.com 0:00d2a8670533 3172 *voltV = (float)(voltRaw * 1.25f / 16 / 1000);
metin.ozkan@analog.com 0:00d2a8670533 3173
metin.ozkan@analog.com 0:00d2a8670533 3174 if (*voltV < 0) *voltV = 0;
metin.ozkan@analog.com 0:00d2a8670533 3175 else if (*voltV > 5.11992f) *voltV = 5.11992f;
metin.ozkan@analog.com 0:00d2a8670533 3176
metin.ozkan@analog.com 0:00d2a8670533 3177 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3178 }
metin.ozkan@analog.com 0:00d2a8670533 3179
metin.ozkan@analog.com 0:00d2a8670533 3180 int MAX77658::set_fg_current(float currentA)
metin.ozkan@analog.com 0:00d2a8670533 3181 {
metin.ozkan@analog.com 0:00d2a8670533 3182 uint16_t currentRaw;
Okan Sahin 1:40ef1dc30cb7 3183 reg_current_t reg_current = {0};
metin.ozkan@analog.com 0:00d2a8670533 3184 float currentmA = currentA * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3185
metin.ozkan@analog.com 0:00d2a8670533 3186 if (currentmA < -1024) currentmA = -1024;
metin.ozkan@analog.com 0:00d2a8670533 3187 else if (currentmA > 1024) currentmA = 1024;
metin.ozkan@analog.com 0:00d2a8670533 3188
metin.ozkan@analog.com 0:00d2a8670533 3189 //The current register has a LSB value of 31.25uA, a register scale of 1.024A
metin.ozkan@analog.com 0:00d2a8670533 3190 currentRaw = (int)round(currentmA * 1000 / 31.25f) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3191
metin.ozkan@analog.com 0:00d2a8670533 3192 SET_FG_BIT_FIELD(Current, reg_current, reg_current.bits.current, currentRaw);
metin.ozkan@analog.com 0:00d2a8670533 3193 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3194 }
metin.ozkan@analog.com 0:00d2a8670533 3195
metin.ozkan@analog.com 0:00d2a8670533 3196 int MAX77658::get_fg_current(float *currentA)
metin.ozkan@analog.com 0:00d2a8670533 3197 {
metin.ozkan@analog.com 0:00d2a8670533 3198 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3199 int16_t currentSigned;
Okan Sahin 1:40ef1dc30cb7 3200 reg_current_t reg_current = {0};
metin.ozkan@analog.com 0:00d2a8670533 3201
metin.ozkan@analog.com 0:00d2a8670533 3202 ret = read_fg_register(Current, (uint8_t *)&(reg_current));
metin.ozkan@analog.com 0:00d2a8670533 3203 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3204
metin.ozkan@analog.com 0:00d2a8670533 3205 //The current register has a LSB value of 31.25uA, a register scale of 1.024A
metin.ozkan@analog.com 0:00d2a8670533 3206 currentSigned = (int16_t)(reg_current.bits.current);
metin.ozkan@analog.com 0:00d2a8670533 3207 *currentA = (float)(currentSigned * 31.25f / 1000000);
metin.ozkan@analog.com 0:00d2a8670533 3208
metin.ozkan@analog.com 0:00d2a8670533 3209 if (*currentA < -1.024f) *currentA = -1.024f;
metin.ozkan@analog.com 0:00d2a8670533 3210 else if (*currentA > 1.024f) *currentA = 1.024f;
metin.ozkan@analog.com 0:00d2a8670533 3211
metin.ozkan@analog.com 0:00d2a8670533 3212 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3213 }
metin.ozkan@analog.com 0:00d2a8670533 3214
metin.ozkan@analog.com 0:00d2a8670533 3215 int MAX77658::set_fg_avg_current(float currentA)
metin.ozkan@analog.com 0:00d2a8670533 3216 {
metin.ozkan@analog.com 0:00d2a8670533 3217 uint16_t currentRaw;
Okan Sahin 1:40ef1dc30cb7 3218 reg_avg_current_t reg_avg_current = {0};
metin.ozkan@analog.com 0:00d2a8670533 3219 float currentmA = currentA * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3220
metin.ozkan@analog.com 0:00d2a8670533 3221 if (currentmA < -1024) currentmA = -1024;
metin.ozkan@analog.com 0:00d2a8670533 3222 else if (currentmA > 1024) currentmA = 1024;
metin.ozkan@analog.com 0:00d2a8670533 3223
metin.ozkan@analog.com 0:00d2a8670533 3224 //The current register has a LSB value of 31.25uA, a register scale of 1.024A
metin.ozkan@analog.com 0:00d2a8670533 3225 currentRaw = (int)round(currentmA * 1000 / 31.25f) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3226
metin.ozkan@analog.com 0:00d2a8670533 3227 SET_FG_BIT_FIELD(AvgCurrent, reg_avg_current, reg_avg_current.bits.avg_current, currentRaw);
metin.ozkan@analog.com 0:00d2a8670533 3228 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3229 }
metin.ozkan@analog.com 0:00d2a8670533 3230
metin.ozkan@analog.com 0:00d2a8670533 3231 int MAX77658::get_fg_avg_current(float *currentA)
metin.ozkan@analog.com 0:00d2a8670533 3232 {
metin.ozkan@analog.com 0:00d2a8670533 3233 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3234 int16_t currentSigned;
Okan Sahin 1:40ef1dc30cb7 3235 reg_avg_current_t reg_avg_current = {0};
metin.ozkan@analog.com 0:00d2a8670533 3236
metin.ozkan@analog.com 0:00d2a8670533 3237 ret = read_fg_register(AvgCurrent, (uint8_t *)&(reg_avg_current));
metin.ozkan@analog.com 0:00d2a8670533 3238 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3239
metin.ozkan@analog.com 0:00d2a8670533 3240 //The current register has a LSB value of 31.25uA, a register scale of 1.024A
metin.ozkan@analog.com 0:00d2a8670533 3241 currentSigned = (int16_t)(reg_avg_current.bits.avg_current);
metin.ozkan@analog.com 0:00d2a8670533 3242 *currentA = (float)(currentSigned * 31.25f / 1000000);
metin.ozkan@analog.com 0:00d2a8670533 3243
metin.ozkan@analog.com 0:00d2a8670533 3244 if (*currentA < -1.024f) *currentA = -1.024f;
metin.ozkan@analog.com 0:00d2a8670533 3245 else if (*currentA > 1.024f) *currentA = 1.024f;
metin.ozkan@analog.com 0:00d2a8670533 3246
metin.ozkan@analog.com 0:00d2a8670533 3247 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3248 }
metin.ozkan@analog.com 0:00d2a8670533 3249
metin.ozkan@analog.com 0:00d2a8670533 3250 int MAX77658::set_fg_avgta(float tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3251 {
metin.ozkan@analog.com 0:00d2a8670533 3252 uint16_t tempRaw;
Okan Sahin 1:40ef1dc30cb7 3253 reg_avg_ta_t reg_avg_ta = {0};
metin.ozkan@analog.com 0:00d2a8670533 3254
metin.ozkan@analog.com 0:00d2a8670533 3255 //Min value is -128.0°C and Max value is 127.996°C.
metin.ozkan@analog.com 0:00d2a8670533 3256 if (tempDegC < -128) tempDegC = -128;
metin.ozkan@analog.com 0:00d2a8670533 3257 else if (tempDegC > 127.996f) tempDegC = 127.996f;
metin.ozkan@analog.com 0:00d2a8670533 3258
metin.ozkan@analog.com 0:00d2a8670533 3259 //LSB is 1/256°C = 0.0039˚C.
metin.ozkan@analog.com 0:00d2a8670533 3260 tempRaw = (int)round(tempDegC * 256) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3261
metin.ozkan@analog.com 0:00d2a8670533 3262 SET_FG_BIT_FIELD(AvgTA, reg_avg_ta, reg_avg_ta.bits.avg_ta, tempRaw);
metin.ozkan@analog.com 0:00d2a8670533 3263 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3264 }
metin.ozkan@analog.com 0:00d2a8670533 3265
metin.ozkan@analog.com 0:00d2a8670533 3266 int MAX77658::get_fg_avgta(float *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3267 {
metin.ozkan@analog.com 0:00d2a8670533 3268 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3269 int16_t tempSigned;
Okan Sahin 1:40ef1dc30cb7 3270 reg_avg_ta_t reg_avg_ta = {0};
metin.ozkan@analog.com 0:00d2a8670533 3271
metin.ozkan@analog.com 0:00d2a8670533 3272 ret = read_fg_register(AvgTA, (uint8_t *)&(reg_avg_ta));
metin.ozkan@analog.com 0:00d2a8670533 3273 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3274
metin.ozkan@analog.com 0:00d2a8670533 3275 //LSB is 1/256°C = 0.0039˚C.
metin.ozkan@analog.com 0:00d2a8670533 3276 tempSigned = (int16_t)reg_avg_ta.bits.avg_ta;
metin.ozkan@analog.com 0:00d2a8670533 3277 *tempDegC = (float)(tempSigned / 256.0f);
metin.ozkan@analog.com 0:00d2a8670533 3278
metin.ozkan@analog.com 0:00d2a8670533 3279 //Min value is -128.0°C and Max value is 127.996°C.
metin.ozkan@analog.com 0:00d2a8670533 3280 if (*tempDegC < -128) *tempDegC = -128;
metin.ozkan@analog.com 0:00d2a8670533 3281 else if (*tempDegC > 127.996f) *tempDegC = 127.996f;
metin.ozkan@analog.com 0:00d2a8670533 3282
metin.ozkan@analog.com 0:00d2a8670533 3283 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3284 }
metin.ozkan@analog.com 0:00d2a8670533 3285
metin.ozkan@analog.com 0:00d2a8670533 3286 int MAX77658::set_fg_avgvcell(float voltV)
metin.ozkan@analog.com 0:00d2a8670533 3287 {
metin.ozkan@analog.com 0:00d2a8670533 3288 uint16_t voltRaw;
Okan Sahin 1:40ef1dc30cb7 3289 reg_avg_vcell_t reg_avg_vcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3290 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3291
metin.ozkan@analog.com 0:00d2a8670533 3292 //Register scale range between 0V and 5.11992V. //LSB value of 1.25mV/16
metin.ozkan@analog.com 0:00d2a8670533 3293 if (voltmV < 0) voltmV = 0;
metin.ozkan@analog.com 0:00d2a8670533 3294 else if (voltmV > 5119.92f) voltmV = 5119.92f;
metin.ozkan@analog.com 0:00d2a8670533 3295
metin.ozkan@analog.com 0:00d2a8670533 3296 voltRaw = (int)round(voltmV / 1.25 * 16) & TO_UINT16;
metin.ozkan@analog.com 0:00d2a8670533 3297
metin.ozkan@analog.com 0:00d2a8670533 3298 SET_FG_BIT_FIELD(AvgVCell, reg_avg_vcell, reg_avg_vcell.bits.avg_vcell, voltRaw);
metin.ozkan@analog.com 0:00d2a8670533 3299 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3300 }
metin.ozkan@analog.com 0:00d2a8670533 3301
metin.ozkan@analog.com 0:00d2a8670533 3302 int MAX77658::get_fg_avgvcell(float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 3303 {
metin.ozkan@analog.com 0:00d2a8670533 3304 int ret, voltRaw;
Okan Sahin 1:40ef1dc30cb7 3305 reg_avg_vcell_t reg_avg_vcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3306
metin.ozkan@analog.com 0:00d2a8670533 3307 ret = read_fg_register(AvgVCell, (uint8_t *)&(reg_avg_vcell));
metin.ozkan@analog.com 0:00d2a8670533 3308 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3309
metin.ozkan@analog.com 0:00d2a8670533 3310 //LSB value of 1.25mV/16
metin.ozkan@analog.com 0:00d2a8670533 3311 voltRaw = (int)reg_avg_vcell.bits.avg_vcell;
metin.ozkan@analog.com 0:00d2a8670533 3312 *voltV = (float)(voltRaw * 1.25f / 16 / 1000);
metin.ozkan@analog.com 0:00d2a8670533 3313
metin.ozkan@analog.com 0:00d2a8670533 3314 //Min value is 0.0V and Max value is 5.11992V.
metin.ozkan@analog.com 0:00d2a8670533 3315 if (*voltV < 0) *voltV = 0;
metin.ozkan@analog.com 0:00d2a8670533 3316 else if (*voltV > 5.11992f) *voltV = 5.11992f;
metin.ozkan@analog.com 0:00d2a8670533 3317
metin.ozkan@analog.com 0:00d2a8670533 3318 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3319 }
metin.ozkan@analog.com 0:00d2a8670533 3320
metin.ozkan@analog.com 0:00d2a8670533 3321 int MAX77658::set_fg_max_min_temp(reg_bit_max_min_temp_t bit_field, int tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3322 {
metin.ozkan@analog.com 0:00d2a8670533 3323 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3324 uint8_t tempRaw;
Okan Sahin 1:40ef1dc30cb7 3325 reg_max_min_temp_t reg_max_min_temp = {0};
metin.ozkan@analog.com 0:00d2a8670533 3326
metin.ozkan@analog.com 0:00d2a8670533 3327 ret = read_fg_register(MaxMinTemp, (uint8_t *)&(reg_max_min_temp));
metin.ozkan@analog.com 0:00d2a8670533 3328 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3329
metin.ozkan@analog.com 0:00d2a8670533 3330 tempRaw = tempDegC & TO_UINT8;
metin.ozkan@analog.com 0:00d2a8670533 3331
metin.ozkan@analog.com 0:00d2a8670533 3332 //1°C resolution
metin.ozkan@analog.com 0:00d2a8670533 3333 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3334 {
metin.ozkan@analog.com 0:00d2a8670533 3335 case MaxMinTemp_MinTemperature:
metin.ozkan@analog.com 0:00d2a8670533 3336 reg_max_min_temp.bits.min_temp = tempRaw;
metin.ozkan@analog.com 0:00d2a8670533 3337 break;
metin.ozkan@analog.com 0:00d2a8670533 3338 case MaxMinTemp_MaxTemperature:
metin.ozkan@analog.com 0:00d2a8670533 3339 reg_max_min_temp.bits.max_temp = tempRaw;
metin.ozkan@analog.com 0:00d2a8670533 3340 break;
metin.ozkan@analog.com 0:00d2a8670533 3341 default:
metin.ozkan@analog.com 0:00d2a8670533 3342 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3343 break;
metin.ozkan@analog.com 0:00d2a8670533 3344 }
metin.ozkan@analog.com 0:00d2a8670533 3345
metin.ozkan@analog.com 0:00d2a8670533 3346 return write_fg_register(MaxMinTemp, (uint8_t *)&(reg_max_min_temp));
metin.ozkan@analog.com 0:00d2a8670533 3347 }
metin.ozkan@analog.com 0:00d2a8670533 3348
metin.ozkan@analog.com 0:00d2a8670533 3349 int MAX77658::get_fg_max_min_temp(reg_bit_max_min_temp_t bit_field, int *tempDegC)
metin.ozkan@analog.com 0:00d2a8670533 3350 {
metin.ozkan@analog.com 0:00d2a8670533 3351 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3352 int8_t tempSigned;
Okan Sahin 1:40ef1dc30cb7 3353 reg_max_min_temp_t reg_max_min_temp = {0};
metin.ozkan@analog.com 0:00d2a8670533 3354
metin.ozkan@analog.com 0:00d2a8670533 3355 ret = read_fg_register(MaxMinTemp, (uint8_t *)&(reg_max_min_temp));
metin.ozkan@analog.com 0:00d2a8670533 3356 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3357
metin.ozkan@analog.com 0:00d2a8670533 3358 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3359 {
metin.ozkan@analog.com 0:00d2a8670533 3360 case MaxMinTemp_MinTemperature:
metin.ozkan@analog.com 0:00d2a8670533 3361 tempSigned = (int8_t)reg_max_min_temp.bits.min_temp;
metin.ozkan@analog.com 0:00d2a8670533 3362 break;
metin.ozkan@analog.com 0:00d2a8670533 3363 case MaxMinTemp_MaxTemperature:
metin.ozkan@analog.com 0:00d2a8670533 3364 tempSigned = (int8_t)reg_max_min_temp.bits.max_temp;
metin.ozkan@analog.com 0:00d2a8670533 3365 break;
metin.ozkan@analog.com 0:00d2a8670533 3366 default:
metin.ozkan@analog.com 0:00d2a8670533 3367 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3368 break;
metin.ozkan@analog.com 0:00d2a8670533 3369 }
metin.ozkan@analog.com 0:00d2a8670533 3370
metin.ozkan@analog.com 0:00d2a8670533 3371 //1°C resolution
metin.ozkan@analog.com 0:00d2a8670533 3372 *tempDegC = (int)tempSigned;
metin.ozkan@analog.com 0:00d2a8670533 3373
metin.ozkan@analog.com 0:00d2a8670533 3374 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3375 }
metin.ozkan@analog.com 0:00d2a8670533 3376
metin.ozkan@analog.com 0:00d2a8670533 3377 int MAX77658::set_fg_max_min_volt(reg_bit_max_min_volt_t bit_field, float voltV)
metin.ozkan@analog.com 0:00d2a8670533 3378 {
metin.ozkan@analog.com 0:00d2a8670533 3379 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3380 uint8_t voltRaw;
Okan Sahin 1:40ef1dc30cb7 3381 reg_max_min_volt_t reg_max_min_volt = {0};
metin.ozkan@analog.com 0:00d2a8670533 3382 float voltmV = voltV * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3383
metin.ozkan@analog.com 0:00d2a8670533 3384 ret = read_fg_register(MaxMinVolt, (uint8_t *)&(reg_max_min_volt));
metin.ozkan@analog.com 0:00d2a8670533 3385 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3386
metin.ozkan@analog.com 0:00d2a8670533 3387 //20mV resolution
metin.ozkan@analog.com 0:00d2a8670533 3388 voltRaw = (int)(voltmV / 20) & TO_UINT8;
metin.ozkan@analog.com 0:00d2a8670533 3389
metin.ozkan@analog.com 0:00d2a8670533 3390 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3391 {
metin.ozkan@analog.com 0:00d2a8670533 3392 case MaxMinVolt_MinVoltage:
metin.ozkan@analog.com 0:00d2a8670533 3393 reg_max_min_volt.bits.min_volt = voltRaw;
metin.ozkan@analog.com 0:00d2a8670533 3394 break;
metin.ozkan@analog.com 0:00d2a8670533 3395 case MaxMinVolt_MaxVoltage:
metin.ozkan@analog.com 0:00d2a8670533 3396 reg_max_min_volt.bits.max_volt = voltRaw;
metin.ozkan@analog.com 0:00d2a8670533 3397 break;
metin.ozkan@analog.com 0:00d2a8670533 3398 default:
metin.ozkan@analog.com 0:00d2a8670533 3399 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3400 break;
metin.ozkan@analog.com 0:00d2a8670533 3401 }
metin.ozkan@analog.com 0:00d2a8670533 3402
metin.ozkan@analog.com 0:00d2a8670533 3403 return write_fg_register(MaxMinVolt, (uint8_t *)&(reg_max_min_volt));
metin.ozkan@analog.com 0:00d2a8670533 3404 }
metin.ozkan@analog.com 0:00d2a8670533 3405
metin.ozkan@analog.com 0:00d2a8670533 3406 int MAX77658::get_fg_max_min_volt(reg_bit_max_min_volt_t bit_field, float *voltV)
metin.ozkan@analog.com 0:00d2a8670533 3407 {
metin.ozkan@analog.com 0:00d2a8670533 3408 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3409 int8_t voltSigned;
Okan Sahin 1:40ef1dc30cb7 3410 reg_max_min_volt_t reg_max_min_volt = {0};
metin.ozkan@analog.com 0:00d2a8670533 3411
metin.ozkan@analog.com 0:00d2a8670533 3412 ret = read_fg_register(MaxMinVolt, (uint8_t *)&(reg_max_min_volt));
metin.ozkan@analog.com 0:00d2a8670533 3413 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3414
metin.ozkan@analog.com 0:00d2a8670533 3415 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3416 {
metin.ozkan@analog.com 0:00d2a8670533 3417 case MaxMinVolt_MinVoltage:
metin.ozkan@analog.com 0:00d2a8670533 3418 voltSigned = (int8_t)reg_max_min_volt.bits.min_volt;
metin.ozkan@analog.com 0:00d2a8670533 3419 break;
metin.ozkan@analog.com 0:00d2a8670533 3420 case MaxMinVolt_MaxVoltage:
metin.ozkan@analog.com 0:00d2a8670533 3421 voltSigned = (int8_t)reg_max_min_volt.bits.max_volt;
metin.ozkan@analog.com 0:00d2a8670533 3422 break;
metin.ozkan@analog.com 0:00d2a8670533 3423 default:
metin.ozkan@analog.com 0:00d2a8670533 3424 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3425 break;
metin.ozkan@analog.com 0:00d2a8670533 3426 }
metin.ozkan@analog.com 0:00d2a8670533 3427
metin.ozkan@analog.com 0:00d2a8670533 3428 //20mV resolution
metin.ozkan@analog.com 0:00d2a8670533 3429 *voltV = (float)((voltSigned * 20.0f) / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 3430
metin.ozkan@analog.com 0:00d2a8670533 3431 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3432 }
metin.ozkan@analog.com 0:00d2a8670533 3433
metin.ozkan@analog.com 0:00d2a8670533 3434 int MAX77658::set_fg_max_min_curr(reg_bit_max_min_curr_t bit_field, float currentA)
metin.ozkan@analog.com 0:00d2a8670533 3435 {
metin.ozkan@analog.com 0:00d2a8670533 3436 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3437 uint8_t currentRaw;
Okan Sahin 1:40ef1dc30cb7 3438 reg_max_min_curr_t reg_max_min_curr = {0};
metin.ozkan@analog.com 0:00d2a8670533 3439 float currentmA = currentA * 1000;
metin.ozkan@analog.com 0:00d2a8670533 3440
metin.ozkan@analog.com 0:00d2a8670533 3441 ret = read_fg_register(MaxMinCurr, (uint8_t *)&(reg_max_min_curr));
metin.ozkan@analog.com 0:00d2a8670533 3442 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3443
metin.ozkan@analog.com 0:00d2a8670533 3444 //8mA resolution.
metin.ozkan@analog.com 0:00d2a8670533 3445 currentRaw = (int)round(currentmA / 8) & TO_UINT8;
metin.ozkan@analog.com 0:00d2a8670533 3446
metin.ozkan@analog.com 0:00d2a8670533 3447 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3448 {
metin.ozkan@analog.com 0:00d2a8670533 3449 case MaxMinCurr_MaxDisCurrent:
metin.ozkan@analog.com 0:00d2a8670533 3450 reg_max_min_curr.bits.min_charge_curr = currentRaw;
metin.ozkan@analog.com 0:00d2a8670533 3451 break;
metin.ozkan@analog.com 0:00d2a8670533 3452 case MaxMinCurr_MaxChargeCurrent:
metin.ozkan@analog.com 0:00d2a8670533 3453 reg_max_min_curr.bits.max_charge_curr = currentRaw;
metin.ozkan@analog.com 0:00d2a8670533 3454 break;
metin.ozkan@analog.com 0:00d2a8670533 3455 default:
metin.ozkan@analog.com 0:00d2a8670533 3456 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3457 break;
metin.ozkan@analog.com 0:00d2a8670533 3458 }
metin.ozkan@analog.com 0:00d2a8670533 3459
metin.ozkan@analog.com 0:00d2a8670533 3460 return write_fg_register(MaxMinCurr, (uint8_t *)&(reg_max_min_curr));
metin.ozkan@analog.com 0:00d2a8670533 3461 }
metin.ozkan@analog.com 0:00d2a8670533 3462
metin.ozkan@analog.com 0:00d2a8670533 3463 int MAX77658::get_fg_max_min_curr(reg_bit_max_min_curr_t bit_field, float *currentA)
metin.ozkan@analog.com 0:00d2a8670533 3464 {
metin.ozkan@analog.com 0:00d2a8670533 3465 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3466 int8_t currentSigned;
Okan Sahin 1:40ef1dc30cb7 3467 reg_max_min_curr_t reg_max_min_curr = {0};
metin.ozkan@analog.com 0:00d2a8670533 3468
metin.ozkan@analog.com 0:00d2a8670533 3469 ret = read_fg_register(MaxMinCurr, (uint8_t *)&(reg_max_min_curr));
metin.ozkan@analog.com 0:00d2a8670533 3470 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3471
metin.ozkan@analog.com 0:00d2a8670533 3472 switch (bit_field)
metin.ozkan@analog.com 0:00d2a8670533 3473 {
metin.ozkan@analog.com 0:00d2a8670533 3474 case MaxMinCurr_MaxDisCurrent:
metin.ozkan@analog.com 0:00d2a8670533 3475 currentSigned = (int8_t)reg_max_min_curr.bits.min_charge_curr;
metin.ozkan@analog.com 0:00d2a8670533 3476 break;
metin.ozkan@analog.com 0:00d2a8670533 3477 case MaxMinCurr_MaxChargeCurrent:
metin.ozkan@analog.com 0:00d2a8670533 3478 currentSigned = (int8_t)reg_max_min_curr.bits.max_charge_curr;
metin.ozkan@analog.com 0:00d2a8670533 3479 break;
metin.ozkan@analog.com 0:00d2a8670533 3480 default:
metin.ozkan@analog.com 0:00d2a8670533 3481 return MAX77658_INVALID_DATA;
metin.ozkan@analog.com 0:00d2a8670533 3482 break;
metin.ozkan@analog.com 0:00d2a8670533 3483 }
metin.ozkan@analog.com 0:00d2a8670533 3484
metin.ozkan@analog.com 0:00d2a8670533 3485 //8mA resolution
metin.ozkan@analog.com 0:00d2a8670533 3486 *currentA = (float)(currentSigned * 8.0f / 1000.0f);
metin.ozkan@analog.com 0:00d2a8670533 3487
metin.ozkan@analog.com 0:00d2a8670533 3488 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3489 }
metin.ozkan@analog.com 0:00d2a8670533 3490
metin.ozkan@analog.com 0:00d2a8670533 3491 int MAX77658::set_fg_ain0(float percent)
metin.ozkan@analog.com 0:00d2a8670533 3492 {
metin.ozkan@analog.com 0:00d2a8670533 3493 int percentRaw;
Okan Sahin 1:40ef1dc30cb7 3494 reg_ain0_t reg_ain0 = {0};
metin.ozkan@analog.com 0:00d2a8670533 3495
metin.ozkan@analog.com 0:00d2a8670533 3496 //LSB of 0.0122%
metin.ozkan@analog.com 0:00d2a8670533 3497 percentRaw = (int)round(percent / 0.0122f);
metin.ozkan@analog.com 0:00d2a8670533 3498
metin.ozkan@analog.com 0:00d2a8670533 3499 SET_FG_BIT_FIELD(AIN0, reg_ain0, reg_ain0.bits.ain0, percentRaw);
metin.ozkan@analog.com 0:00d2a8670533 3500 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3501 }
metin.ozkan@analog.com 0:00d2a8670533 3502
metin.ozkan@analog.com 0:00d2a8670533 3503 int MAX77658::get_fg_ain0(float *percent)
metin.ozkan@analog.com 0:00d2a8670533 3504 {
metin.ozkan@analog.com 0:00d2a8670533 3505 int ret, percentRaw;
Okan Sahin 1:40ef1dc30cb7 3506 reg_ain0_t reg_ain0 = {0};
metin.ozkan@analog.com 0:00d2a8670533 3507
metin.ozkan@analog.com 0:00d2a8670533 3508 ret = read_fg_register(AIN0, (uint8_t *)&(reg_ain0));
metin.ozkan@analog.com 0:00d2a8670533 3509 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3510
metin.ozkan@analog.com 0:00d2a8670533 3511 //LSB of 0.0122%
metin.ozkan@analog.com 0:00d2a8670533 3512 percentRaw = (int)reg_ain0.bits.ain0;
metin.ozkan@analog.com 0:00d2a8670533 3513 *percent = (float)(percentRaw * 0.0122f);
metin.ozkan@analog.com 0:00d2a8670533 3514
metin.ozkan@analog.com 0:00d2a8670533 3515 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3516 }
metin.ozkan@analog.com 0:00d2a8670533 3517
metin.ozkan@analog.com 0:00d2a8670533 3518 int MAX77658::set_fg_timer(float second)
metin.ozkan@analog.com 0:00d2a8670533 3519 {
metin.ozkan@analog.com 0:00d2a8670533 3520 int secondRaw;
Okan Sahin 1:40ef1dc30cb7 3521 reg_timer_t reg_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3522
metin.ozkan@analog.com 0:00d2a8670533 3523 //full-scale range of 0 to 3.2 hours= 11520 sec
metin.ozkan@analog.com 0:00d2a8670533 3524 if (second < 0) second = 0;
metin.ozkan@analog.com 0:00d2a8670533 3525 else if (second > 11520.0f) second = 11520.0f;
metin.ozkan@analog.com 0:00d2a8670533 3526
metin.ozkan@analog.com 0:00d2a8670533 3527 //LSB is 175.8ms
metin.ozkan@analog.com 0:00d2a8670533 3528 secondRaw = (int)round(second * 1000 / 175.8f);
metin.ozkan@analog.com 0:00d2a8670533 3529
metin.ozkan@analog.com 0:00d2a8670533 3530 SET_FG_BIT_FIELD(Timer, reg_timer, reg_timer.bits.timer, secondRaw);
metin.ozkan@analog.com 0:00d2a8670533 3531 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3532 }
metin.ozkan@analog.com 0:00d2a8670533 3533
metin.ozkan@analog.com 0:00d2a8670533 3534 int MAX77658::get_fg_timer(float *second)
metin.ozkan@analog.com 0:00d2a8670533 3535 {
metin.ozkan@analog.com 0:00d2a8670533 3536 int ret, secondRaw;
Okan Sahin 1:40ef1dc30cb7 3537 reg_timer_t reg_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3538
metin.ozkan@analog.com 0:00d2a8670533 3539 ret = read_fg_register(Timer, (uint8_t *)&(reg_timer));
metin.ozkan@analog.com 0:00d2a8670533 3540 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3541
metin.ozkan@analog.com 0:00d2a8670533 3542 //LSB is 175.8ms
metin.ozkan@analog.com 0:00d2a8670533 3543 secondRaw = (int)reg_timer.bits.timer;
metin.ozkan@analog.com 0:00d2a8670533 3544 *second = (float)((float)secondRaw * 175.8f / 1000);
metin.ozkan@analog.com 0:00d2a8670533 3545
metin.ozkan@analog.com 0:00d2a8670533 3546 //full-scale range of 0 to 3.2 hours
metin.ozkan@analog.com 0:00d2a8670533 3547 if (*second < 0) *second = 0;
metin.ozkan@analog.com 0:00d2a8670533 3548 else if (*second > 11520.0f) *second = 11520.0f;
metin.ozkan@analog.com 0:00d2a8670533 3549
metin.ozkan@analog.com 0:00d2a8670533 3550 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3551 }
metin.ozkan@analog.com 0:00d2a8670533 3552
metin.ozkan@analog.com 0:00d2a8670533 3553 int MAX77658::set_fg_shdnctr(float second)
metin.ozkan@analog.com 0:00d2a8670533 3554 {
metin.ozkan@analog.com 0:00d2a8670533 3555 int secondRaw;
Okan Sahin 1:40ef1dc30cb7 3556 reg_shdn_timer_t reg_shdn_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3557
metin.ozkan@analog.com 0:00d2a8670533 3558 //The counter LSB is 1.4s
metin.ozkan@analog.com 0:00d2a8670533 3559 secondRaw = (int)round(second / 1.4f);
metin.ozkan@analog.com 0:00d2a8670533 3560
metin.ozkan@analog.com 0:00d2a8670533 3561 SET_FG_BIT_FIELD(ShdnTimer, reg_shdn_timer, reg_shdn_timer.bits.shdnctr, secondRaw);
metin.ozkan@analog.com 0:00d2a8670533 3562 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3563 }
metin.ozkan@analog.com 0:00d2a8670533 3564
metin.ozkan@analog.com 0:00d2a8670533 3565 int MAX77658::get_fg_shdnctr(float *second)
metin.ozkan@analog.com 0:00d2a8670533 3566 {
metin.ozkan@analog.com 0:00d2a8670533 3567 int ret, secondRaw;
Okan Sahin 1:40ef1dc30cb7 3568 reg_shdn_timer_t reg_shdn_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3569
metin.ozkan@analog.com 0:00d2a8670533 3570 ret = read_fg_register(ShdnTimer, (uint8_t *)&(reg_shdn_timer));
metin.ozkan@analog.com 0:00d2a8670533 3571 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3572
metin.ozkan@analog.com 0:00d2a8670533 3573 //Period = 175.8ms × 2^(8+THR)
metin.ozkan@analog.com 0:00d2a8670533 3574 secondRaw = (int)reg_shdn_timer.bits.shdnctr;
metin.ozkan@analog.com 0:00d2a8670533 3575 *second = (float)(secondRaw * 1.4f);
metin.ozkan@analog.com 0:00d2a8670533 3576
metin.ozkan@analog.com 0:00d2a8670533 3577 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3578 }
metin.ozkan@analog.com 0:00d2a8670533 3579
metin.ozkan@analog.com 0:00d2a8670533 3580 int MAX77658::set_fg_shdn_thr(float second)
metin.ozkan@analog.com 0:00d2a8670533 3581 {
metin.ozkan@analog.com 0:00d2a8670533 3582 int secondRaw;
Okan Sahin 1:40ef1dc30cb7 3583 reg_shdn_timer_t reg_shdn_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3584
metin.ozkan@analog.com 0:00d2a8670533 3585 //minimum of 45s to a maximum of 1.6h=5760sec
metin.ozkan@analog.com 0:00d2a8670533 3586 if (second < 45) second = 45;
metin.ozkan@analog.com 0:00d2a8670533 3587 else if (second > 5760.0f) second = 5760.0f;
metin.ozkan@analog.com 0:00d2a8670533 3588
metin.ozkan@analog.com 0:00d2a8670533 3589 //Period = 175.8ms × 2^(8+THR)
metin.ozkan@analog.com 0:00d2a8670533 3590 secondRaw = (int)round(log2(second * 1000 / 175.8f) - 8);
metin.ozkan@analog.com 0:00d2a8670533 3591
metin.ozkan@analog.com 0:00d2a8670533 3592 SET_FG_BIT_FIELD(ShdnTimer, reg_shdn_timer, reg_shdn_timer.bits.shdn_thr, secondRaw);
metin.ozkan@analog.com 0:00d2a8670533 3593 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3594 }
metin.ozkan@analog.com 0:00d2a8670533 3595
metin.ozkan@analog.com 0:00d2a8670533 3596 int MAX77658::get_fg_shdn_thr(float *second)
metin.ozkan@analog.com 0:00d2a8670533 3597 {
metin.ozkan@analog.com 0:00d2a8670533 3598 int ret, secondRaw;
Okan Sahin 1:40ef1dc30cb7 3599 reg_shdn_timer_t reg_shdn_timer = {0};
metin.ozkan@analog.com 0:00d2a8670533 3600
metin.ozkan@analog.com 0:00d2a8670533 3601 ret = read_fg_register(ShdnTimer, (uint8_t *)&(reg_shdn_timer));
metin.ozkan@analog.com 0:00d2a8670533 3602 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3603
metin.ozkan@analog.com 0:00d2a8670533 3604 //Period = 175.8ms × 2^(8+THR)
metin.ozkan@analog.com 0:00d2a8670533 3605 secondRaw = (int)reg_shdn_timer.bits.shdn_thr;
metin.ozkan@analog.com 0:00d2a8670533 3606 *second = (float)(175.8f / 1000 * pow(2, secondRaw + 8));
metin.ozkan@analog.com 0:00d2a8670533 3607
metin.ozkan@analog.com 0:00d2a8670533 3608 //minimum of 45s to a maximum of 1.6h
metin.ozkan@analog.com 0:00d2a8670533 3609 if (*second < 45) *second = 45;
metin.ozkan@analog.com 0:00d2a8670533 3610 else if (*second > 5760.0f) *second = 5760.0f;
metin.ozkan@analog.com 0:00d2a8670533 3611
metin.ozkan@analog.com 0:00d2a8670533 3612 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3613 }
metin.ozkan@analog.com 0:00d2a8670533 3614
metin.ozkan@analog.com 0:00d2a8670533 3615 int MAX77658::set_fg_timerh(float hour)
metin.ozkan@analog.com 0:00d2a8670533 3616 {
metin.ozkan@analog.com 0:00d2a8670533 3617 int hourRaw;
Okan Sahin 1:40ef1dc30cb7 3618 reg_timerh_t reg_timerh = {0};
metin.ozkan@analog.com 0:00d2a8670533 3619
metin.ozkan@analog.com 0:00d2a8670533 3620 // Full-scale range up to 23.94 years = 209853.5577138 hr
metin.ozkan@analog.com 0:00d2a8670533 3621 if (hour > 209853.5577138f) hour = (209853.5577138f);
metin.ozkan@analog.com 0:00d2a8670533 3622
metin.ozkan@analog.com 0:00d2a8670533 3623 //A 3.2-hour LSB
metin.ozkan@analog.com 0:00d2a8670533 3624 hourRaw = (int)round(hour / 3.2f);
metin.ozkan@analog.com 0:00d2a8670533 3625
metin.ozkan@analog.com 0:00d2a8670533 3626 SET_FG_BIT_FIELD(TimerH, reg_timerh, reg_timerh.bits.timerh, hourRaw);
metin.ozkan@analog.com 0:00d2a8670533 3627 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3628 }
metin.ozkan@analog.com 0:00d2a8670533 3629
metin.ozkan@analog.com 0:00d2a8670533 3630 int MAX77658::get_fg_timerh(float *hour)
metin.ozkan@analog.com 0:00d2a8670533 3631 {
metin.ozkan@analog.com 0:00d2a8670533 3632 int ret, hourRaw;
Okan Sahin 1:40ef1dc30cb7 3633 reg_timerh_t reg_timerh = {0};
metin.ozkan@analog.com 0:00d2a8670533 3634
metin.ozkan@analog.com 0:00d2a8670533 3635 ret = read_fg_register(TimerH, (uint8_t *)&(reg_timerh));
metin.ozkan@analog.com 0:00d2a8670533 3636 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3637
metin.ozkan@analog.com 0:00d2a8670533 3638 //A 3.2-hour LSB
metin.ozkan@analog.com 0:00d2a8670533 3639 hourRaw = (int)reg_timerh.bits.timerh;
metin.ozkan@analog.com 0:00d2a8670533 3640 *hour = (float)(hourRaw * 3.2f);
metin.ozkan@analog.com 0:00d2a8670533 3641
metin.ozkan@analog.com 0:00d2a8670533 3642 // Full-scale range up to 23.94 years = 209853.5577138 hr
metin.ozkan@analog.com 0:00d2a8670533 3643 if (*hour > 209853.5577138f) *hour = 209853.5577138f;
metin.ozkan@analog.com 0:00d2a8670533 3644
metin.ozkan@analog.com 0:00d2a8670533 3645 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3646 }
metin.ozkan@analog.com 0:00d2a8670533 3647
metin.ozkan@analog.com 0:00d2a8670533 3648 int MAX77658::set_fg_rep_cap(float repCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3649 {
metin.ozkan@analog.com 0:00d2a8670533 3650 int repCapRaw;
Okan Sahin 1:40ef1dc30cb7 3651 reg_rep_cap_t reg_rep_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 3652
metin.ozkan@analog.com 0:00d2a8670533 3653 //Min value is 0.0mAh and Max value is 6553.5mAh
metin.ozkan@analog.com 0:00d2a8670533 3654 if (repCapmAh < 0) repCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3655 else if (repCapmAh > 6553.5f) repCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3656
metin.ozkan@analog.com 0:00d2a8670533 3657 //LSB is 0.1mAh.
metin.ozkan@analog.com 0:00d2a8670533 3658 repCapRaw = (int)round(repCapmAh / 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 3659
metin.ozkan@analog.com 0:00d2a8670533 3660 SET_FG_BIT_FIELD(RepCap, reg_rep_cap, reg_rep_cap.bits.rep_cap, repCapRaw);
metin.ozkan@analog.com 0:00d2a8670533 3661 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3662 }
metin.ozkan@analog.com 0:00d2a8670533 3663
metin.ozkan@analog.com 0:00d2a8670533 3664 int MAX77658::get_fg_rep_cap(float *repCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3665 {
metin.ozkan@analog.com 0:00d2a8670533 3666 int ret, repCapRaw;
Okan Sahin 1:40ef1dc30cb7 3667 reg_rep_cap_t reg_rep_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 3668
metin.ozkan@analog.com 0:00d2a8670533 3669 ret = read_fg_register(RepCap, (uint8_t *)&(reg_rep_cap));
metin.ozkan@analog.com 0:00d2a8670533 3670 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3671
metin.ozkan@analog.com 0:00d2a8670533 3672 //LSB is 0.1mAh.
metin.ozkan@analog.com 0:00d2a8670533 3673 repCapRaw = (int)reg_rep_cap.bits.rep_cap;
metin.ozkan@analog.com 0:00d2a8670533 3674 *repCapmAh = (float)(repCapRaw * 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 3675
metin.ozkan@analog.com 0:00d2a8670533 3676 //Min value is 0.0mAh and Max value is 6553.5mAh
metin.ozkan@analog.com 0:00d2a8670533 3677 if (*repCapmAh < 0) *repCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3678 else if (*repCapmAh > 6553.5f) *repCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3679
metin.ozkan@analog.com 0:00d2a8670533 3680 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3681 }
metin.ozkan@analog.com 0:00d2a8670533 3682
metin.ozkan@analog.com 0:00d2a8670533 3683 int MAX77658::set_fg_rep_soc(float percent)
metin.ozkan@analog.com 0:00d2a8670533 3684 {
metin.ozkan@analog.com 0:00d2a8670533 3685 int percentRaw;
Okan Sahin 1:40ef1dc30cb7 3686 reg_rep_soc_t reg_rep_soc = {0};
metin.ozkan@analog.com 0:00d2a8670533 3687
metin.ozkan@analog.com 0:00d2a8670533 3688 //Min value is 0.0% and Max value is 255.9961%
metin.ozkan@analog.com 0:00d2a8670533 3689 if (percent < 0) percent = 0;
metin.ozkan@analog.com 0:00d2a8670533 3690 else if (percent > 255.9961f) percent = 255.9961f;
metin.ozkan@analog.com 0:00d2a8670533 3691
metin.ozkan@analog.com 0:00d2a8670533 3692 //LSB is 1/256%
metin.ozkan@analog.com 0:00d2a8670533 3693 percentRaw = (int)round(percent * 256);
metin.ozkan@analog.com 0:00d2a8670533 3694
metin.ozkan@analog.com 0:00d2a8670533 3695 SET_FG_BIT_FIELD(RepSOC, reg_rep_soc, reg_rep_soc.bits.rep_soc, percentRaw);
metin.ozkan@analog.com 0:00d2a8670533 3696 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3697 }
metin.ozkan@analog.com 0:00d2a8670533 3698
metin.ozkan@analog.com 0:00d2a8670533 3699 int MAX77658::get_fg_rep_soc(float *percent)
metin.ozkan@analog.com 0:00d2a8670533 3700 {
metin.ozkan@analog.com 0:00d2a8670533 3701 int ret, percentRaw;
Okan Sahin 1:40ef1dc30cb7 3702 reg_rep_soc_t reg_rep_soc = {0};
metin.ozkan@analog.com 0:00d2a8670533 3703
metin.ozkan@analog.com 0:00d2a8670533 3704 ret = read_fg_register(RepSOC, (uint8_t *)&(reg_rep_soc));
metin.ozkan@analog.com 0:00d2a8670533 3705 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3706
metin.ozkan@analog.com 0:00d2a8670533 3707 //LSB is 1/256%
metin.ozkan@analog.com 0:00d2a8670533 3708 percentRaw = (int)reg_rep_soc.bits.rep_soc;
metin.ozkan@analog.com 0:00d2a8670533 3709 *percent = (float)((float)percentRaw / 256.0f);
metin.ozkan@analog.com 0:00d2a8670533 3710
metin.ozkan@analog.com 0:00d2a8670533 3711 //Min value is 0.0% and Max value is 255.9961%
metin.ozkan@analog.com 0:00d2a8670533 3712 if (*percent < 0) *percent = 0;
metin.ozkan@analog.com 0:00d2a8670533 3713 else if (*percent > 255.9961f) *percent = 255.9961f;
metin.ozkan@analog.com 0:00d2a8670533 3714
metin.ozkan@analog.com 0:00d2a8670533 3715 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3716 }
metin.ozkan@analog.com 0:00d2a8670533 3717
metin.ozkan@analog.com 0:00d2a8670533 3718 int MAX77658::set_fg_av_soc(float percent)
metin.ozkan@analog.com 0:00d2a8670533 3719 {
metin.ozkan@analog.com 0:00d2a8670533 3720 int percentRaw;
Okan Sahin 1:40ef1dc30cb7 3721 reg_av_soc_t reg_av_soc = {0};
metin.ozkan@analog.com 0:00d2a8670533 3722
metin.ozkan@analog.com 0:00d2a8670533 3723 //Min value is 0.0% and Max value is 255.9961%
metin.ozkan@analog.com 0:00d2a8670533 3724 if (percent < 0) percent = 0;
metin.ozkan@analog.com 0:00d2a8670533 3725 else if (percent > 255.9961f) percent = 255.9961f;
metin.ozkan@analog.com 0:00d2a8670533 3726
metin.ozkan@analog.com 0:00d2a8670533 3727 //LSB is 1/256%
metin.ozkan@analog.com 0:00d2a8670533 3728 percentRaw = (int)round(percent * 256);
metin.ozkan@analog.com 0:00d2a8670533 3729
metin.ozkan@analog.com 0:00d2a8670533 3730 SET_FG_BIT_FIELD(AvSOC, reg_av_soc, reg_av_soc.bits.av_soc, percentRaw);
metin.ozkan@analog.com 0:00d2a8670533 3731 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3732 }
metin.ozkan@analog.com 0:00d2a8670533 3733
metin.ozkan@analog.com 0:00d2a8670533 3734 int MAX77658::get_fg_av_soc(float *percent)
metin.ozkan@analog.com 0:00d2a8670533 3735 {
metin.ozkan@analog.com 0:00d2a8670533 3736 int ret, percentRaw;
Okan Sahin 1:40ef1dc30cb7 3737 reg_av_soc_t reg_av_soc = {0};
metin.ozkan@analog.com 0:00d2a8670533 3738
metin.ozkan@analog.com 0:00d2a8670533 3739 ret = read_fg_register(AvSOC, (uint8_t *)&(reg_av_soc));
metin.ozkan@analog.com 0:00d2a8670533 3740 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3741
metin.ozkan@analog.com 0:00d2a8670533 3742 //LSB is 1/256%
metin.ozkan@analog.com 0:00d2a8670533 3743 percentRaw = (int)reg_av_soc.bits.av_soc;
metin.ozkan@analog.com 0:00d2a8670533 3744 *percent = (float)(percentRaw / 256.0f);
metin.ozkan@analog.com 0:00d2a8670533 3745
metin.ozkan@analog.com 0:00d2a8670533 3746 //Min value is 0.0% and Max value is 255.9961%
metin.ozkan@analog.com 0:00d2a8670533 3747 if (*percent < 0) *percent = 0;
metin.ozkan@analog.com 0:00d2a8670533 3748 else if (*percent > 255.9961f) *percent = 255.9961f;
metin.ozkan@analog.com 0:00d2a8670533 3749
metin.ozkan@analog.com 0:00d2a8670533 3750 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3751 }
metin.ozkan@analog.com 0:00d2a8670533 3752
metin.ozkan@analog.com 0:00d2a8670533 3753 int MAX77658::set_fg_full_cap_reg(float repCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3754 {
metin.ozkan@analog.com 0:00d2a8670533 3755 int repCapRaw;
Okan Sahin 1:40ef1dc30cb7 3756 reg_full_cap_rep_t reg_full_cap_rep = {0};
metin.ozkan@analog.com 0:00d2a8670533 3757
metin.ozkan@analog.com 0:00d2a8670533 3758 //Min value is 0.0mAh and Max value is 6553.5mAh
metin.ozkan@analog.com 0:00d2a8670533 3759 if (repCapmAh < 0) repCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3760 else if (repCapmAh > 6553.5f) repCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3761
metin.ozkan@analog.com 0:00d2a8670533 3762 //LSB is 0.1mAh.
metin.ozkan@analog.com 0:00d2a8670533 3763 repCapRaw = (int)round(repCapmAh / 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 3764
metin.ozkan@analog.com 0:00d2a8670533 3765 SET_FG_BIT_FIELD(FullCapRep, reg_full_cap_rep, reg_full_cap_rep.bits.full_cap_rep, repCapRaw);
metin.ozkan@analog.com 0:00d2a8670533 3766 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3767 }
metin.ozkan@analog.com 0:00d2a8670533 3768
metin.ozkan@analog.com 0:00d2a8670533 3769 int MAX77658::get_fg_full_cap_reg(float *repCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3770 {
metin.ozkan@analog.com 0:00d2a8670533 3771 int ret, repCapRaw;
Okan Sahin 1:40ef1dc30cb7 3772 reg_full_cap_rep_t reg_full_cap_rep = {0};
metin.ozkan@analog.com 0:00d2a8670533 3773
metin.ozkan@analog.com 0:00d2a8670533 3774 ret = read_fg_register(FullCapRep, (uint8_t *)&(reg_full_cap_rep));
metin.ozkan@analog.com 0:00d2a8670533 3775 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3776
metin.ozkan@analog.com 0:00d2a8670533 3777 //LSB is 0.1mAh.
metin.ozkan@analog.com 0:00d2a8670533 3778 repCapRaw = (int)reg_full_cap_rep.bits.full_cap_rep;
metin.ozkan@analog.com 0:00d2a8670533 3779 *repCapmAh = (float)(repCapRaw * 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 3780
metin.ozkan@analog.com 0:00d2a8670533 3781 //Min value is 0.0mAh and Max value is 6553.5mAh
metin.ozkan@analog.com 0:00d2a8670533 3782 if (*repCapmAh < 0) *repCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3783 else if (*repCapmAh > 6553.5f) *repCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3784
metin.ozkan@analog.com 0:00d2a8670533 3785 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3786 }
metin.ozkan@analog.com 0:00d2a8670533 3787
metin.ozkan@analog.com 0:00d2a8670533 3788 int MAX77658::set_fg_tte(float minute)
metin.ozkan@analog.com 0:00d2a8670533 3789 {
metin.ozkan@analog.com 0:00d2a8670533 3790 int minuteRaw;
Okan Sahin 1:40ef1dc30cb7 3791 reg_tte_t reg_tte = {0};
metin.ozkan@analog.com 0:00d2a8670533 3792
metin.ozkan@analog.com 0:00d2a8670533 3793 //Min value is 0.0s and Max value is 102.3984h = 6143.904min.
metin.ozkan@analog.com 0:00d2a8670533 3794 //LSB is 5.625s.
metin.ozkan@analog.com 0:00d2a8670533 3795 minuteRaw = (int)round((float)minute * 60 / 5.625f);
metin.ozkan@analog.com 0:00d2a8670533 3796
metin.ozkan@analog.com 0:00d2a8670533 3797 SET_FG_BIT_FIELD(TTE, reg_tte, reg_tte.bits.tte, minuteRaw);
metin.ozkan@analog.com 0:00d2a8670533 3798 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3799 }
metin.ozkan@analog.com 0:00d2a8670533 3800
metin.ozkan@analog.com 0:00d2a8670533 3801 int MAX77658::get_fg_tte(float *minute)
metin.ozkan@analog.com 0:00d2a8670533 3802 {
metin.ozkan@analog.com 0:00d2a8670533 3803 int ret, minuteRaw;
Okan Sahin 1:40ef1dc30cb7 3804 reg_tte_t reg_tte = {0};
metin.ozkan@analog.com 0:00d2a8670533 3805
metin.ozkan@analog.com 0:00d2a8670533 3806 ret = read_fg_register(TTE, (uint8_t *)&(reg_tte));
metin.ozkan@analog.com 0:00d2a8670533 3807 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3808
metin.ozkan@analog.com 0:00d2a8670533 3809 //LSB is 5.625s.
metin.ozkan@analog.com 0:00d2a8670533 3810 minuteRaw = (int)reg_tte.bits.tte;
metin.ozkan@analog.com 0:00d2a8670533 3811 *minute = (float)((float)minuteRaw * 5.625f / 60);
metin.ozkan@analog.com 0:00d2a8670533 3812
metin.ozkan@analog.com 0:00d2a8670533 3813 //Min value is 0.0s and Max value is 102.3984h = = 6143.904 min.min.
metin.ozkan@analog.com 0:00d2a8670533 3814 if (*minute < 0) *minute = 0;
metin.ozkan@analog.com 0:00d2a8670533 3815 else if (*minute > 6143.904f) *minute = 6143.904f;
metin.ozkan@analog.com 0:00d2a8670533 3816
metin.ozkan@analog.com 0:00d2a8670533 3817 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3818 }
metin.ozkan@analog.com 0:00d2a8670533 3819
metin.ozkan@analog.com 0:00d2a8670533 3820 int MAX77658::set_fg_rcell(float resOhm)
metin.ozkan@analog.com 0:00d2a8670533 3821 {
metin.ozkan@analog.com 0:00d2a8670533 3822 int resistanceRaw;
Okan Sahin 1:40ef1dc30cb7 3823 reg_rcell_t reg_rcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3824
metin.ozkan@analog.com 0:00d2a8670533 3825 //Min value is 0.0Ohm and Max value is 15.99976Ohm.
metin.ozkan@analog.com 0:00d2a8670533 3826 if (resOhm < 0) resOhm = 0;
metin.ozkan@analog.com 0:00d2a8670533 3827 else if (resOhm > 15.99976f) resOhm = 15.99976f;
metin.ozkan@analog.com 0:00d2a8670533 3828
metin.ozkan@analog.com 0:00d2a8670533 3829 //LSB is 1/4096Ohm
metin.ozkan@analog.com 0:00d2a8670533 3830 resistanceRaw = (int)round(resOhm * 4096);
metin.ozkan@analog.com 0:00d2a8670533 3831
metin.ozkan@analog.com 0:00d2a8670533 3832 SET_FG_BIT_FIELD(RCell, reg_rcell, reg_rcell.bits.rcell, resistanceRaw);
metin.ozkan@analog.com 0:00d2a8670533 3833 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3834 }
metin.ozkan@analog.com 0:00d2a8670533 3835
metin.ozkan@analog.com 0:00d2a8670533 3836 int MAX77658::get_fg_rcell(float *resOhm)
metin.ozkan@analog.com 0:00d2a8670533 3837 {
metin.ozkan@analog.com 0:00d2a8670533 3838 int ret, resistanceRaw;
Okan Sahin 1:40ef1dc30cb7 3839 reg_rcell_t reg_rcell = {0};
metin.ozkan@analog.com 0:00d2a8670533 3840
metin.ozkan@analog.com 0:00d2a8670533 3841 ret = read_fg_register(RCell, (uint8_t *)&(reg_rcell));
metin.ozkan@analog.com 0:00d2a8670533 3842 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3843
metin.ozkan@analog.com 0:00d2a8670533 3844 //LSB is 1/4096Ohm
metin.ozkan@analog.com 0:00d2a8670533 3845 resistanceRaw = (int)reg_rcell.bits.rcell;
metin.ozkan@analog.com 0:00d2a8670533 3846 *resOhm = (float)(resistanceRaw / 4096.0f);
metin.ozkan@analog.com 0:00d2a8670533 3847
metin.ozkan@analog.com 0:00d2a8670533 3848 //Min value is 0.0Ohm and Max value is 15.99976Ohm.
metin.ozkan@analog.com 0:00d2a8670533 3849 if (*resOhm < 0) *resOhm = 0;
metin.ozkan@analog.com 0:00d2a8670533 3850 else if (*resOhm > 15.99976f) *resOhm = 15.99976f;
metin.ozkan@analog.com 0:00d2a8670533 3851
metin.ozkan@analog.com 0:00d2a8670533 3852 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3853 }
metin.ozkan@analog.com 0:00d2a8670533 3854
metin.ozkan@analog.com 0:00d2a8670533 3855 int MAX77658::set_fg_cycles(uint16_t percent)
metin.ozkan@analog.com 0:00d2a8670533 3856 {
Okan Sahin 1:40ef1dc30cb7 3857 reg_cycles_t reg_cycles = {0};
metin.ozkan@analog.com 0:00d2a8670533 3858
metin.ozkan@analog.com 0:00d2a8670533 3859 //The LSB indicates 1%.
metin.ozkan@analog.com 0:00d2a8670533 3860 SET_FG_BIT_FIELD(Cycles, reg_cycles, reg_cycles.bits.cycles, percent);
metin.ozkan@analog.com 0:00d2a8670533 3861 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3862 }
metin.ozkan@analog.com 0:00d2a8670533 3863
metin.ozkan@analog.com 0:00d2a8670533 3864 int MAX77658::get_fg_cycles(uint16_t *percent)
metin.ozkan@analog.com 0:00d2a8670533 3865 {
metin.ozkan@analog.com 0:00d2a8670533 3866 int ret;
Okan Sahin 1:40ef1dc30cb7 3867 reg_cycles_t reg_cycles = {0};
metin.ozkan@analog.com 0:00d2a8670533 3868
metin.ozkan@analog.com 0:00d2a8670533 3869 ret = read_fg_register(Cycles, (uint8_t *)&(reg_cycles));
metin.ozkan@analog.com 0:00d2a8670533 3870 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3871
metin.ozkan@analog.com 0:00d2a8670533 3872 //The LSB indicates 1%.
metin.ozkan@analog.com 0:00d2a8670533 3873 *percent = (uint16_t)(reg_cycles.bits.cycles);
metin.ozkan@analog.com 0:00d2a8670533 3874 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3875 }
metin.ozkan@analog.com 0:00d2a8670533 3876
metin.ozkan@analog.com 0:00d2a8670533 3877 int MAX77658::set_fg_av_cap(float avCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3878 {
metin.ozkan@analog.com 0:00d2a8670533 3879 int avCapRaw;
Okan Sahin 1:40ef1dc30cb7 3880 reg_av_cap_t reg_av_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 3881
metin.ozkan@analog.com 0:00d2a8670533 3882 //LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh.
metin.ozkan@analog.com 0:00d2a8670533 3883 if (avCapmAh < 0) avCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3884 else if (avCapmAh > 6553.5f) avCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3885
metin.ozkan@analog.com 0:00d2a8670533 3886 avCapRaw = (int)round(avCapmAh / 0.5f);
metin.ozkan@analog.com 0:00d2a8670533 3887
metin.ozkan@analog.com 0:00d2a8670533 3888 SET_FG_BIT_FIELD(AvCap, reg_av_cap, reg_av_cap.bits.av_cap, avCapRaw);
metin.ozkan@analog.com 0:00d2a8670533 3889 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3890 }
metin.ozkan@analog.com 0:00d2a8670533 3891
metin.ozkan@analog.com 0:00d2a8670533 3892 int MAX77658::get_fg_av_cap(float *avCapmAh)
metin.ozkan@analog.com 0:00d2a8670533 3893 {
metin.ozkan@analog.com 0:00d2a8670533 3894 int ret, avCapRaw;
Okan Sahin 1:40ef1dc30cb7 3895 reg_av_cap_t reg_av_cap = {0};
metin.ozkan@analog.com 0:00d2a8670533 3896
metin.ozkan@analog.com 0:00d2a8670533 3897 ret = read_fg_register(AvCap, (uint8_t *)&(reg_av_cap));
metin.ozkan@analog.com 0:00d2a8670533 3898 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3899
metin.ozkan@analog.com 0:00d2a8670533 3900 //LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh.
metin.ozkan@analog.com 0:00d2a8670533 3901 avCapRaw = (int)reg_av_cap.bits.av_cap;
metin.ozkan@analog.com 0:00d2a8670533 3902 *avCapmAh = (float)((float)avCapRaw * 0.1f);
metin.ozkan@analog.com 0:00d2a8670533 3903
metin.ozkan@analog.com 0:00d2a8670533 3904 if (*avCapmAh < 0) *avCapmAh = 0;
metin.ozkan@analog.com 0:00d2a8670533 3905 else if (*avCapmAh > 6553.5f) *avCapmAh = 6553.5f;
metin.ozkan@analog.com 0:00d2a8670533 3906
metin.ozkan@analog.com 0:00d2a8670533 3907 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3908 }
metin.ozkan@analog.com 0:00d2a8670533 3909
metin.ozkan@analog.com 0:00d2a8670533 3910 int MAX77658::set_fg_ttf(float minute)
metin.ozkan@analog.com 0:00d2a8670533 3911 {
metin.ozkan@analog.com 0:00d2a8670533 3912 int minuteRaw;
Okan Sahin 1:40ef1dc30cb7 3913 reg_ttf_t reg_ttf = {0};
metin.ozkan@analog.com 0:00d2a8670533 3914
metin.ozkan@analog.com 0:00d2a8670533 3915 //Min value is 0.0s and Max value is 102.3984h = = 6143.904 min.min.
metin.ozkan@analog.com 0:00d2a8670533 3916 if (minute < 0) minute = 0;
metin.ozkan@analog.com 0:00d2a8670533 3917 else if (minute > 6143.904f) minute = 6143.904f;
metin.ozkan@analog.com 0:00d2a8670533 3918
metin.ozkan@analog.com 0:00d2a8670533 3919 //LSB is 5.625s.
metin.ozkan@analog.com 0:00d2a8670533 3920 minuteRaw = (int)round((float)minute * 60 / 5.625f);
metin.ozkan@analog.com 0:00d2a8670533 3921
metin.ozkan@analog.com 0:00d2a8670533 3922 SET_FG_BIT_FIELD(TTF, reg_ttf, reg_ttf.bits.ttf, minuteRaw);
metin.ozkan@analog.com 0:00d2a8670533 3923 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3924 }
metin.ozkan@analog.com 0:00d2a8670533 3925
metin.ozkan@analog.com 0:00d2a8670533 3926 int MAX77658::get_fg_ttf(float *minute)
metin.ozkan@analog.com 0:00d2a8670533 3927 {
metin.ozkan@analog.com 0:00d2a8670533 3928 int ret, minuteRaw;
Okan Sahin 1:40ef1dc30cb7 3929 reg_ttf_t reg_ttf = {0};
metin.ozkan@analog.com 0:00d2a8670533 3930
metin.ozkan@analog.com 0:00d2a8670533 3931 ret = read_fg_register(TTF, (uint8_t *)&(reg_ttf));
metin.ozkan@analog.com 0:00d2a8670533 3932 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3933
metin.ozkan@analog.com 0:00d2a8670533 3934 minuteRaw = (int)reg_ttf.bits.ttf;
metin.ozkan@analog.com 0:00d2a8670533 3935 *minute = (float)((float)minuteRaw * 5.625f / 60);
metin.ozkan@analog.com 0:00d2a8670533 3936
metin.ozkan@analog.com 0:00d2a8670533 3937 //Min value is 0.0s and Max value is 102.3984h = = 6143.904 min.min.
metin.ozkan@analog.com 0:00d2a8670533 3938 if (*minute < 0) *minute = 0;
metin.ozkan@analog.com 0:00d2a8670533 3939 else if (*minute > 6143.904f) *minute = 6143.904f;
metin.ozkan@analog.com 0:00d2a8670533 3940
metin.ozkan@analog.com 0:00d2a8670533 3941 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3942 }
metin.ozkan@analog.com 0:00d2a8670533 3943
metin.ozkan@analog.com 0:00d2a8670533 3944 int MAX77658::irq_disable_all()
metin.ozkan@analog.com 0:00d2a8670533 3945 {
metin.ozkan@analog.com 0:00d2a8670533 3946 int ret;
metin.ozkan@analog.com 0:00d2a8670533 3947 uint8_t reg = 0;
metin.ozkan@analog.com 0:00d2a8670533 3948 uint8_t status = 0;
metin.ozkan@analog.com 0:00d2a8670533 3949
metin.ozkan@analog.com 0:00d2a8670533 3950 //Disable Masks in INTM_GLBL1
metin.ozkan@analog.com 0:00d2a8670533 3951 ret = write_register(INTM_GLBL1, &reg);
metin.ozkan@analog.com 0:00d2a8670533 3952 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3953
metin.ozkan@analog.com 0:00d2a8670533 3954 //Disable Masks in INTM_GLBL0
metin.ozkan@analog.com 0:00d2a8670533 3955 ret = write_register(INTM_GLBL0, &reg);
metin.ozkan@analog.com 0:00d2a8670533 3956 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3957
metin.ozkan@analog.com 0:00d2a8670533 3958 //Disable Masks in INT_M_CHG
metin.ozkan@analog.com 0:00d2a8670533 3959 ret = write_register(INT_M_CHG, &reg);
metin.ozkan@analog.com 0:00d2a8670533 3960 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3961
metin.ozkan@analog.com 0:00d2a8670533 3962 // Clear Interrupt Flags in INT_GLBL1
metin.ozkan@analog.com 0:00d2a8670533 3963 ret = read_register(INT_GLBL1, &status);
metin.ozkan@analog.com 0:00d2a8670533 3964 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3965
metin.ozkan@analog.com 0:00d2a8670533 3966 // Clear Interrupt Flags in INT_GLBL0
metin.ozkan@analog.com 0:00d2a8670533 3967 ret = read_register(INT_GLBL0, &status);
metin.ozkan@analog.com 0:00d2a8670533 3968 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3969
metin.ozkan@analog.com 0:00d2a8670533 3970 // Clear Interrupt Flags in INT_CHG
metin.ozkan@analog.com 0:00d2a8670533 3971 ret = read_register(INT_CHG, &status);
metin.ozkan@analog.com 0:00d2a8670533 3972 if (ret != MAX77658_NO_ERROR) return ret;
metin.ozkan@analog.com 0:00d2a8670533 3973
metin.ozkan@analog.com 0:00d2a8670533 3974 return MAX77658_NO_ERROR;
metin.ozkan@analog.com 0:00d2a8670533 3975 }
metin.ozkan@analog.com 0:00d2a8670533 3976
metin.ozkan@analog.com 0:00d2a8670533 3977 void MAX77658::set_interrupt_handler(reg_bit_int_glbl_t id, interrupt_handler_function func, void *cb)
metin.ozkan@analog.com 0:00d2a8670533 3978 {
metin.ozkan@analog.com 0:00d2a8670533 3979 interrupt_handler_list[id].func = func;
metin.ozkan@analog.com 0:00d2a8670533 3980 interrupt_handler_list[id].cb = cb;
metin.ozkan@analog.com 0:00d2a8670533 3981 }
metin.ozkan@analog.com 0:00d2a8670533 3982
metin.ozkan@analog.com 0:00d2a8670533 3983 void MAX77658::post_interrupt_work()
metin.ozkan@analog.com 0:00d2a8670533 3984 {
metin.ozkan@analog.com 0:00d2a8670533 3985 int ret;
Okan Sahin 1:40ef1dc30cb7 3986 uint8_t reg = 0, inten = 0, not_inten = 0, mask = 0;
metin.ozkan@analog.com 0:00d2a8670533 3987
metin.ozkan@analog.com 0:00d2a8670533 3988 while (true) {
metin.ozkan@analog.com 0:00d2a8670533 3989
metin.ozkan@analog.com 0:00d2a8670533 3990 ThisThread::flags_wait_any(POST_INTR_WORK_SIGNAL_ID);
metin.ozkan@analog.com 0:00d2a8670533 3991
metin.ozkan@analog.com 0:00d2a8670533 3992 // Check Interrupt Flags in INT_GLBL0
metin.ozkan@analog.com 0:00d2a8670533 3993 ret = read_register(INT_GLBL0, &reg);
metin.ozkan@analog.com 0:00d2a8670533 3994 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 3995
metin.ozkan@analog.com 0:00d2a8670533 3996 ret = read_register(INTM_GLBL0, &inten);
metin.ozkan@analog.com 0:00d2a8670533 3997 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 3998
metin.ozkan@analog.com 0:00d2a8670533 3999 not_inten = ~inten; // 0 means unmasked.
metin.ozkan@analog.com 0:00d2a8670533 4000
metin.ozkan@analog.com 0:00d2a8670533 4001 for (int i = 0; i < INT_GLBL1_GPI1_F; i++) {
metin.ozkan@analog.com 0:00d2a8670533 4002 mask = (1 << i);
metin.ozkan@analog.com 0:00d2a8670533 4003 if ((reg & mask) && (not_inten & mask)) {
metin.ozkan@analog.com 0:00d2a8670533 4004 if (interrupt_handler_list[i].func != NULL) {
metin.ozkan@analog.com 0:00d2a8670533 4005 interrupt_handler_list[i]
metin.ozkan@analog.com 0:00d2a8670533 4006 .func(interrupt_handler_list[i].cb);
metin.ozkan@analog.com 0:00d2a8670533 4007 }
metin.ozkan@analog.com 0:00d2a8670533 4008 }
metin.ozkan@analog.com 0:00d2a8670533 4009 }
metin.ozkan@analog.com 0:00d2a8670533 4010
metin.ozkan@analog.com 0:00d2a8670533 4011 // Check Interrupt Flags in INT_GLBL1
metin.ozkan@analog.com 0:00d2a8670533 4012 ret = read_register(INT_GLBL1, &reg);
metin.ozkan@analog.com 0:00d2a8670533 4013 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 4014
metin.ozkan@analog.com 0:00d2a8670533 4015 ret = read_register(INTM_GLBL1, &inten);
metin.ozkan@analog.com 0:00d2a8670533 4016 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 4017
metin.ozkan@analog.com 0:00d2a8670533 4018 not_inten = ~inten; // 0 means unmasked.
metin.ozkan@analog.com 0:00d2a8670533 4019
metin.ozkan@analog.com 0:00d2a8670533 4020 for (int i = INT_GLBL1_GPI1_F; i < INT_CHG_THM_I; i++) {
metin.ozkan@analog.com 0:00d2a8670533 4021 mask = (1 << (i - INT_GLBL1_GPI1_F));
metin.ozkan@analog.com 0:00d2a8670533 4022 if ((reg & mask) && (not_inten & mask)) {
metin.ozkan@analog.com 0:00d2a8670533 4023 if (interrupt_handler_list[i].func != NULL) {
metin.ozkan@analog.com 0:00d2a8670533 4024 interrupt_handler_list[i]
metin.ozkan@analog.com 0:00d2a8670533 4025 .func(interrupt_handler_list[i].cb);
metin.ozkan@analog.com 0:00d2a8670533 4026 }
metin.ozkan@analog.com 0:00d2a8670533 4027 }
metin.ozkan@analog.com 0:00d2a8670533 4028 }
metin.ozkan@analog.com 0:00d2a8670533 4029
metin.ozkan@analog.com 0:00d2a8670533 4030 // Check Interrupt Flags in INT_CHG
metin.ozkan@analog.com 0:00d2a8670533 4031 ret = read_register(INT_CHG, &reg);
metin.ozkan@analog.com 0:00d2a8670533 4032 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 4033
metin.ozkan@analog.com 0:00d2a8670533 4034 ret = read_register(INT_M_CHG, &inten);
metin.ozkan@analog.com 0:00d2a8670533 4035 if (ret != MAX77658_NO_ERROR) return;
metin.ozkan@analog.com 0:00d2a8670533 4036
metin.ozkan@analog.com 0:00d2a8670533 4037 not_inten = ~inten; // 0 means unmasked.
metin.ozkan@analog.com 0:00d2a8670533 4038
metin.ozkan@analog.com 0:00d2a8670533 4039 for (int i = INT_CHG_THM_I; i < INT_CHG_END; i++) {
metin.ozkan@analog.com 0:00d2a8670533 4040 mask = (1 << (i - INT_CHG_THM_I));
metin.ozkan@analog.com 0:00d2a8670533 4041 if ((reg & mask) && (not_inten & mask)) {
metin.ozkan@analog.com 0:00d2a8670533 4042 if (interrupt_handler_list[i].func != NULL) {
metin.ozkan@analog.com 0:00d2a8670533 4043 interrupt_handler_list[i]
metin.ozkan@analog.com 0:00d2a8670533 4044 .func(interrupt_handler_list[i].cb);
metin.ozkan@analog.com 0:00d2a8670533 4045 }
metin.ozkan@analog.com 0:00d2a8670533 4046 }
metin.ozkan@analog.com 0:00d2a8670533 4047 }
metin.ozkan@analog.com 0:00d2a8670533 4048 }
metin.ozkan@analog.com 0:00d2a8670533 4049 }
metin.ozkan@analog.com 0:00d2a8670533 4050
metin.ozkan@analog.com 0:00d2a8670533 4051 void MAX77658::interrupt_handler()
metin.ozkan@analog.com 0:00d2a8670533 4052 {
metin.ozkan@analog.com 0:00d2a8670533 4053 post_intr_work_thread->flags_set(POST_INTR_WORK_SIGNAL_ID);
metin.ozkan@analog.com 0:00d2a8670533 4054 }
metin.ozkan@analog.com 0:00d2a8670533 4055