MAX77658 Ultra-Low Power PMIC Mbed Driver

Committer:
metin.ozkan@analog.com
Date:
Thu Jun 30 12:15:15 2022 +0300
Revision:
0:00d2a8670533
Child:
1:40ef1dc30cb7
Initial Commit

Who changed what in which revision?

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