MAX77658 Ultra-Low Power PMIC Mbed Driver

Committer:
Okan Sahin
Date:
Fri Aug 26 15:03:09 2022 +0300
Revision:
2:70a11f46a913
Parent:
1:40ef1dc30cb7
fix interrupt_handler_list

use number of interrupts as a size of array.
initialize with NULL.

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