linux/include/linux/power/max17042_battery.h
<<
>>
Prefs
   1/*
   2 * Fuel gauge driver for Maxim 17042 / 8966 / 8997
   3 *  Note that Maxim 8966 and 8997 are mfd and this is its subdevice.
   4 *
   5 * Copyright (C) 2011 Samsung Electronics
   6 * MyungJoo Ham <myungjoo.ham@samsung.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21 */
  22
  23#ifndef __MAX17042_BATTERY_H_
  24#define __MAX17042_BATTERY_H_
  25
  26#define MAX17042_STATUS_BattAbsent      (1 << 3)
  27#define MAX17042_BATTERY_FULL   (100)
  28#define MAX17042_DEFAULT_SNS_RESISTOR   (10000)
  29
  30#define MAX17042_CHARACTERIZATION_DATA_SIZE 48
  31
  32enum max17042_register {
  33        MAX17042_STATUS         = 0x00,
  34        MAX17042_VALRT_Th       = 0x01,
  35        MAX17042_TALRT_Th       = 0x02,
  36        MAX17042_SALRT_Th       = 0x03,
  37        MAX17042_AtRate         = 0x04,
  38        MAX17042_RepCap         = 0x05,
  39        MAX17042_RepSOC         = 0x06,
  40        MAX17042_Age            = 0x07,
  41        MAX17042_TEMP           = 0x08,
  42        MAX17042_VCELL          = 0x09,
  43        MAX17042_Current        = 0x0A,
  44        MAX17042_AvgCurrent     = 0x0B,
  45
  46        MAX17042_SOC            = 0x0D,
  47        MAX17042_AvSOC          = 0x0E,
  48        MAX17042_RemCap         = 0x0F,
  49        MAX17042_FullCAP        = 0x10,
  50        MAX17042_TTE            = 0x11,
  51        MAX17042_V_empty        = 0x12,
  52
  53        MAX17042_RSLOW          = 0x14,
  54
  55        MAX17042_AvgTA          = 0x16,
  56        MAX17042_Cycles         = 0x17,
  57        MAX17042_DesignCap      = 0x18,
  58        MAX17042_AvgVCELL       = 0x19,
  59        MAX17042_MinMaxTemp     = 0x1A,
  60        MAX17042_MinMaxVolt     = 0x1B,
  61        MAX17042_MinMaxCurr     = 0x1C,
  62        MAX17042_CONFIG         = 0x1D,
  63        MAX17042_ICHGTerm       = 0x1E,
  64        MAX17042_AvCap          = 0x1F,
  65        MAX17042_ManName        = 0x20,
  66        MAX17042_DevName        = 0x21,
  67
  68        MAX17042_FullCAPNom     = 0x23,
  69        MAX17042_TempNom        = 0x24,
  70        MAX17042_TempLim        = 0x25,
  71        MAX17042_TempHot        = 0x26,
  72        MAX17042_AIN            = 0x27,
  73        MAX17042_LearnCFG       = 0x28,
  74        MAX17042_FilterCFG      = 0x29,
  75        MAX17042_RelaxCFG       = 0x2A,
  76        MAX17042_MiscCFG        = 0x2B,
  77        MAX17042_TGAIN          = 0x2C,
  78        MAx17042_TOFF           = 0x2D,
  79        MAX17042_CGAIN          = 0x2E,
  80        MAX17042_COFF           = 0x2F,
  81
  82        MAX17042_MaskSOC        = 0x32,
  83        MAX17042_SOC_empty      = 0x33,
  84        MAX17042_T_empty        = 0x34,
  85
  86        MAX17042_FullCAP0       = 0x35,
  87        MAX17042_LAvg_empty     = 0x36,
  88        MAX17042_FCTC           = 0x37,
  89        MAX17042_RCOMP0         = 0x38,
  90        MAX17042_TempCo         = 0x39,
  91        MAX17042_EmptyTempCo    = 0x3A,
  92        MAX17042_K_empty0       = 0x3B,
  93        MAX17042_TaskPeriod     = 0x3C,
  94        MAX17042_FSTAT          = 0x3D,
  95
  96        MAX17042_SHDNTIMER      = 0x3F,
  97
  98        MAX17042_dQacc          = 0x45,
  99        MAX17042_dPacc          = 0x46,
 100
 101        MAX17042_VFSOC0         = 0x48,
 102
 103        MAX17042_QH             = 0x4D,
 104        MAX17042_QL             = 0x4E,
 105
 106        MAX17042_VFSOC0Enable   = 0x60,
 107        MAX17042_MLOCKReg1      = 0x62,
 108        MAX17042_MLOCKReg2      = 0x63,
 109
 110        MAX17042_MODELChrTbl    = 0x80,
 111
 112        MAX17042_OCV            = 0xEE,
 113
 114        MAX17042_OCVInternal    = 0xFB,
 115
 116        MAX17042_VFSOC          = 0xFF,
 117};
 118
 119/* Registers specific to max17047/50 */
 120enum max17047_register {
 121        MAX17047_QRTbl00        = 0x12,
 122        MAX17047_FullSOCThr     = 0x13,
 123        MAX17047_QRTbl10        = 0x22,
 124        MAX17047_QRTbl20        = 0x32,
 125        MAX17047_V_empty        = 0x3A,
 126        MAX17047_QRTbl30        = 0x42,
 127};
 128
 129enum max170xx_chip_type {
 130        MAXIM_DEVICE_TYPE_UNKNOWN       = 0,
 131        MAXIM_DEVICE_TYPE_MAX17042,
 132        MAXIM_DEVICE_TYPE_MAX17047,
 133        MAXIM_DEVICE_TYPE_MAX17050,
 134
 135        MAXIM_DEVICE_TYPE_NUM
 136};
 137
 138/*
 139 * used for setting a register to a desired value
 140 * addr : address for a register
 141 * data : setting value for the register
 142 */
 143struct max17042_reg_data {
 144        u8 addr;
 145        u16 data;
 146};
 147
 148struct max17042_config_data {
 149        /* External current sense resistor value in milli-ohms */
 150        u32     cur_sense_val;
 151
 152        /* A/D measurement */
 153        u16     tgain;          /* 0x2C */
 154        u16     toff;           /* 0x2D */
 155        u16     cgain;          /* 0x2E */
 156        u16     coff;           /* 0x2F */
 157
 158        /* Alert / Status */
 159        u16     valrt_thresh;   /* 0x01 */
 160        u16     talrt_thresh;   /* 0x02 */
 161        u16     soc_alrt_thresh;        /* 0x03 */
 162        u16     config;         /* 0x01D */
 163        u16     shdntimer;      /* 0x03F */
 164
 165        /* App data */
 166        u16     full_soc_thresh;        /* 0x13 */
 167        u16     design_cap;     /* 0x18 */
 168        u16     ichgt_term;     /* 0x1E */
 169
 170        /* MG3 config */
 171        u16     at_rate;        /* 0x04 */
 172        u16     learn_cfg;      /* 0x28 */
 173        u16     filter_cfg;     /* 0x29 */
 174        u16     relax_cfg;      /* 0x2A */
 175        u16     misc_cfg;       /* 0x2B */
 176        u16     masksoc;        /* 0x32 */
 177
 178        /* MG3 save and restore */
 179        u16     fullcap;        /* 0x10 */
 180        u16     fullcapnom;     /* 0x23 */
 181        u16     socempty;       /* 0x33 */
 182        u16     lavg_empty;     /* 0x36 */
 183        u16     dqacc;          /* 0x45 */
 184        u16     dpacc;          /* 0x46 */
 185        u16     qrtbl00;        /* 0x12 */
 186        u16     qrtbl10;        /* 0x22 */
 187        u16     qrtbl20;        /* 0x32 */
 188        u16     qrtbl30;        /* 0x42 */
 189
 190        /* Cell technology from power_supply.h */
 191        u16     cell_technology;
 192
 193        /* Cell Data */
 194        u16     vempty;         /* 0x12 */
 195        u16     temp_nom;       /* 0x24 */
 196        u16     temp_lim;       /* 0x25 */
 197        u16     fctc;           /* 0x37 */
 198        u16     rcomp0;         /* 0x38 */
 199        u16     tcompc0;        /* 0x39 */
 200        u16     empty_tempco;   /* 0x3A */
 201        u16     kempty0;        /* 0x3B */
 202        u16     cell_char_tbl[MAX17042_CHARACTERIZATION_DATA_SIZE];
 203} __packed;
 204
 205struct max17042_platform_data {
 206        struct max17042_reg_data *init_data;
 207        struct max17042_config_data *config_data;
 208        int num_init_data; /* Number of enties in init_data array */
 209        bool enable_current_sense;
 210        bool enable_por_init; /* Use POR init from Maxim appnote */
 211
 212        /*
 213         * R_sns in micro-ohms.
 214         * default 10000 (if r_sns = 0) as it is the recommended value by
 215         * the datasheet although it can be changed by board designers.
 216         */
 217        unsigned int r_sns;
 218        int         vmin;       /* in millivolts */
 219        int         vmax;       /* in millivolts */
 220        int         temp_min;   /* in tenths of degree Celsius */
 221        int         temp_max;   /* in tenths of degree Celsius */
 222};
 223
 224#endif /* __MAX17042_BATTERY_H_ */
 225