123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654 |
- /*
- * sec_charging_common.h
- * Samsung Mobile Charging Common Header
- *
- * Copyright (C) 2012 Samsung Electronics, Inc.
- *
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- */
- #ifndef __SEC_CHARGING_COMMON_H
- #define __SEC_CHARGING_COMMON_H __FILE__
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/err.h>
- #include <linux/delay.h>
- #include <linux/gpio.h>
- #include <linux/irq.h>
- #include <linux/interrupt.h>
- #include <linux/i2c.h>
- #include <linux/power_supply.h>
- #include <linux/slab.h>
- #include <linux/device.h>
- /* definitions */
- #define SEC_SIZEOF_POWER_SUPPLY_TYPE POWER_SUPPLY_TYPE_MAX
- enum sec_battery_voltage_mode {
- /* average voltage */
- SEC_BATTEY_VOLTAGE_AVERAGE = 0,
- /* open circuit voltage */
- SEC_BATTEY_VOLTAGE_OCV,
- };
- enum sec_battery_current_mode {
- /* uA */
- SEC_BATTEY_CURRENT_UA = 0,
- /* mA */
- SEC_BATTEY_CURRENT_MA,
- };
- enum sec_battery_capacity_mode {
- /* designed capacity */
- SEC_BATTEY_CAPACITY_DESIGNED = 0,
- /* absolute capacity by fuel gauge */
- SEC_BATTEY_CAPACITY_ABSOLUTE,
- /* temperary capacity in the time */
- SEC_BATTEY_CAPACITY_TEMPERARY,
- /* current capacity now */
- SEC_BATTEY_CAPACITY_CURRENT,
- };
- /* ADC type */
- enum sec_battery_adc_type {
- /* NOT using this ADC channel */
- SEC_BATTERY_ADC_TYPE_NONE = 0,
- /* ADC in AP */
- SEC_BATTERY_ADC_TYPE_AP,
- /* ADC by additional IC */
- SEC_BATTERY_ADC_TYPE_IC,
- SEC_BATTERY_ADC_TYPE_NUM
- };
- enum sec_battery_adc_channel {
- SEC_BAT_ADC_CHANNEL_CABLE_CHECK = 0,
- SEC_BAT_ADC_CHANNEL_BAT_CHECK,
- SEC_BAT_ADC_CHANNEL_TEMP,
- SEC_BAT_ADC_CHANNEL_TEMP_AMBIENT,
- SEC_BAT_ADC_CHANNEL_CHG_TEMP,
- SEC_BAT_ADC_CHANNEL_FULL_CHECK,
- SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW,
- SEC_BAT_ADC_CHANNEL_INBAT_VOLTAGE,
- SEC_BAT_ADC_CHANNEL_NUM
- };
- /* charging mode */
- enum sec_battery_charging_mode {
- /* no charging */
- SEC_BATTERY_CHARGING_NONE = 0,
- /* 1st charging */
- SEC_BATTERY_CHARGING_1ST,
- /* 2nd charging */
- SEC_BATTERY_CHARGING_2ND,
- /* recharging */
- SEC_BATTERY_CHARGING_RECHARGING,
- };
- struct sec_bat_adc_api {
- bool (*init)(struct platform_device *);
- bool (*exit)(void);
- int (*read)(unsigned int);
- };
- #define sec_bat_adc_api_t struct sec_bat_adc_api
- /* monitor activation */
- enum sec_battery_polling_time_type {
- /* same order with power supply status */
- SEC_BATTERY_POLLING_TIME_BASIC = 0,
- SEC_BATTERY_POLLING_TIME_CHARGING,
- SEC_BATTERY_POLLING_TIME_DISCHARGING,
- SEC_BATTERY_POLLING_TIME_NOT_CHARGING,
- SEC_BATTERY_POLLING_TIME_SLEEP,
- };
- enum sec_battery_monitor_polling {
- /* polling work queue */
- SEC_BATTERY_MONITOR_WORKQUEUE,
- /* alarm polling */
- SEC_BATTERY_MONITOR_ALARM,
- /* timer polling (NOT USE) */
- SEC_BATTERY_MONITOR_TIMER,
- };
- #define sec_battery_monitor_polling_t \
- enum sec_battery_monitor_polling
- /* full charged check : POWER_SUPPLY_PROP_STATUS */
- enum sec_battery_full_charged {
- SEC_BATTERY_FULLCHARGED_NONE = 0,
- /* current check by ADC */
- SEC_BATTERY_FULLCHARGED_ADC,
- /* fuel gauge current check */
- SEC_BATTERY_FULLCHARGED_FG_CURRENT,
- /* time check */
- SEC_BATTERY_FULLCHARGED_TIME,
- /* SOC check */
- SEC_BATTERY_FULLCHARGED_SOC,
- /* charger GPIO, NO additional full condition */
- SEC_BATTERY_FULLCHARGED_CHGGPIO,
- /* charger interrupt, NO additional full condition */
- SEC_BATTERY_FULLCHARGED_CHGINT,
- /* charger power supply property, NO additional full condition */
- SEC_BATTERY_FULLCHARGED_CHGPSY,
- };
- #define sec_battery_full_charged_t \
- enum sec_battery_full_charged
- /* full check condition type (can be used overlapped) */
- #define sec_battery_full_condition_t unsigned int
- /* SEC_BATTERY_FULL_CONDITION_NOTIMEFULL
- * full-charged by absolute-timer only in high voltage
- */
- #define SEC_BATTERY_FULL_CONDITION_NOTIMEFULL 1
- /* SEC_BATTERY_FULL_CONDITION_NOSLEEPINFULL
- * do not set polling time as sleep polling time in full-charged
- */
- #define SEC_BATTERY_FULL_CONDITION_NOSLEEPINFULL 2
- /* SEC_BATTERY_FULL_CONDITION_SOC
- * use capacity for full-charged check
- */
- #define SEC_BATTERY_FULL_CONDITION_SOC 4
- /* SEC_BATTERY_FULL_CONDITION_VCELL
- * use VCELL for full-charged check
- */
- #define SEC_BATTERY_FULL_CONDITION_VCELL 8
- /* SEC_BATTERY_FULL_CONDITION_AVGVCELL
- * use average VCELL for full-charged check
- */
- #define SEC_BATTERY_FULL_CONDITION_AVGVCELL 16
- /* SEC_BATTERY_FULL_CONDITION_OCV
- * use OCV for full-charged check
- */
- #define SEC_BATTERY_FULL_CONDITION_OCV 32
- /* recharge check condition type (can be used overlapped) */
- #define sec_battery_recharge_condition_t unsigned int
- /* SEC_BATTERY_RECHARGE_CONDITION_SOC
- * use capacity for recharging check
- */
- #define SEC_BATTERY_RECHARGE_CONDITION_SOC 1
- /* SEC_BATTERY_RECHARGE_CONDITION_AVGVCELL
- * use average VCELL for recharging check
- */
- #define SEC_BATTERY_RECHARGE_CONDITION_AVGVCELL 2
- /* SEC_BATTERY_RECHARGE_CONDITION_VCELL
- * use VCELL for recharging check
- */
- #define SEC_BATTERY_RECHARGE_CONDITION_VCELL 4
- /* battery check : POWER_SUPPLY_PROP_PRESENT */
- enum sec_battery_check {
- /* No Check for internal battery */
- SEC_BATTERY_CHECK_NONE,
- /* by ADC */
- SEC_BATTERY_CHECK_ADC,
- /* by callback function (battery certification by 1 wired)*/
- SEC_BATTERY_CHECK_CALLBACK,
- /* by PMIC */
- SEC_BATTERY_CHECK_PMIC,
- /* by fuel gauge */
- SEC_BATTERY_CHECK_FUELGAUGE,
- /* by charger */
- SEC_BATTERY_CHECK_CHARGER,
- /* by interrupt (use check_battery_callback() to check battery) */
- SEC_BATTERY_CHECK_INT,
- };
- #define sec_battery_check_t \
- enum sec_battery_check
- /* OVP, UVLO check : POWER_SUPPLY_PROP_HEALTH */
- enum sec_battery_ovp_uvlo {
- /* by callback function */
- SEC_BATTERY_OVP_UVLO_CALLBACK,
- /* by PMIC polling */
- SEC_BATTERY_OVP_UVLO_PMICPOLLING,
- /* by PMIC interrupt */
- SEC_BATTERY_OVP_UVLO_PMICINT,
- /* by charger polling */
- SEC_BATTERY_OVP_UVLO_CHGPOLLING,
- /* by charger interrupt */
- SEC_BATTERY_OVP_UVLO_CHGINT,
- };
- #define sec_battery_ovp_uvlo_t \
- enum sec_battery_ovp_uvlo
- /* thermal source */
- enum sec_battery_thermal_source {
- /* by fuel gauge */
- SEC_BATTERY_THERMAL_SOURCE_FG,
- /* by external source */
- SEC_BATTERY_THERMAL_SOURCE_CALLBACK,
- /* by ADC */
- SEC_BATTERY_THERMAL_SOURCE_ADC,
- };
- #define sec_battery_thermal_source_t \
- enum sec_battery_thermal_source
- /* temperature check type */
- enum sec_battery_temp_check {
- SEC_BATTERY_TEMP_CHECK_NONE = 0, /* no temperature check */
- SEC_BATTERY_TEMP_CHECK_ADC, /* by ADC value */
- SEC_BATTERY_TEMP_CHECK_TEMP, /* by temperature */
- };
- #define sec_battery_temp_check_t \
- enum sec_battery_temp_check
- /* cable check (can be used overlapped) */
- #define sec_battery_cable_check_t unsigned int
- /* SEC_BATTERY_CABLE_CHECK_NOUSBCHARGE
- * for USB cable in tablet model,
- * status is stuck into discharging,
- * but internal charging logic is working
- */
- #define SEC_BATTERY_CABLE_CHECK_NOUSBCHARGE 1
- /* SEC_BATTERY_CABLE_CHECK_NOINCOMPATIBLECHARGE
- * for incompatible charger
- * (Not compliant to USB specification,
- * cable type is POWER_SUPPLY_TYPE_UNKNOWN),
- * do NOT charge and show message to user
- * (only for VZW)
- */
- #define SEC_BATTERY_CABLE_CHECK_NOINCOMPATIBLECHARGE 2
- /* SEC_BATTERY_CABLE_CHECK_PSY
- * check cable by power supply set_property
- */
- #define SEC_BATTERY_CABLE_CHECK_PSY 4
- /* SEC_BATTERY_CABLE_CHECK_INT
- * check cable by interrupt
- */
- #define SEC_BATTERY_CABLE_CHECK_INT 8
- /* SEC_BATTERY_CABLE_CHECK_CHGINT
- * check cable by charger interrupt
- */
- #define SEC_BATTERY_CABLE_CHECK_CHGINT 16
- /* SEC_BATTERY_CABLE_CHECK_POLLING
- * check cable by GPIO polling
- */
- #define SEC_BATTERY_CABLE_CHECK_POLLING 32
- /* check cable source (can be used overlapped) */
- #define sec_battery_cable_source_t unsigned int
- /* SEC_BATTERY_CABLE_SOURCE_EXTERNAL
- * already given by external argument
- */
- #define SEC_BATTERY_CABLE_SOURCE_EXTERNAL 1
- /* SEC_BATTERY_CABLE_SOURCE_CALLBACK
- * by callback (MUIC, USB switch)
- */
- #define SEC_BATTERY_CABLE_SOURCE_CALLBACK 2
- /* SEC_BATTERY_CABLE_SOURCE_ADC
- * by ADC
- */
- #define SEC_BATTERY_CABLE_SOURCE_ADC 4
- /* SEC_BATTERY_CABLE_SOURCE_EXTENDED
- * use extended cable type
- */
- #define SEC_BATTERY_CABLE_SOURCE_EXTENDED 8
- /* capacity calculation type (can be used overlapped) */
- #define sec_fuelgauge_capacity_type_t int
- /* SEC_FUELGAUGE_CAPACITY_TYPE_RESET
- * use capacity information to reset fuel gauge
- * (only for driver algorithm, can NOT be set by user)
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_RESET (-1)
- /* SEC_FUELGAUGE_CAPACITY_TYPE_RAW
- * use capacity information from fuel gauge directly
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_RAW 1
- /* SEC_FUELGAUGE_CAPACITY_TYPE_SCALE
- * rescale capacity by scaling, need min and max value for scaling
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_SCALE 2
- /* SEC_FUELGAUGE_CAPACITY_TYPE_DYNAMIC_SCALE
- * change only maximum capacity dynamically
- * to keep time for every SOC unit
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_DYNAMIC_SCALE 4
- /* SEC_FUELGAUGE_CAPACITY_TYPE_ATOMIC
- * change capacity value by only -1 or +1
- * no sudden change of capacity
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_ATOMIC 8
- /* SEC_FUELGAUGE_CAPACITY_TYPE_SKIP_ABNORMAL
- * skip current capacity value
- * if it is abnormal value
- */
- #define SEC_FUELGAUGE_CAPACITY_TYPE_SKIP_ABNORMAL 16
- /* charger function settings (can be used overlapped) */
- #define sec_charger_functions_t unsigned int
- /* SEC_CHARGER_NO_GRADUAL_CHARGING_CURRENT
- * disable gradual charging current setting
- * SUMMIT:AICL, MAXIM:regulation loop
- */
- #define SEC_CHARGER_NO_GRADUAL_CHARGING_CURRENT 1
- /* SEC_CHARGER_MINIMUM_SIOP_CHARGING_CURRENT
- * charging current should be over than USB charging current
- */
- #define SEC_CHARGER_MINIMUM_SIOP_CHARGING_CURRENT 2
- /**
- * struct sec_bat_adc_table_data - adc to temperature table for sec battery
- * driver
- * @adc: adc value
- * @temperature: temperature(C) * 10
- */
- struct sec_bat_adc_table_data {
- int adc;
- int data;
- };
- #define sec_bat_adc_table_data_t \
- struct sec_bat_adc_table_data
- struct sec_bat_adc_region {
- int min;
- int max;
- };
- #define sec_bat_adc_region_t \
- struct sec_bat_adc_region
- struct sec_charging_current {
- int input_current_limit;
- int fast_charging_current;
- int full_check_current_1st;
- int full_check_current_2nd;
- };
- #define sec_charging_current_t \
- struct sec_charging_current
- struct sec_battery_platform_data {
- /* NO NEED TO BE CHANGED */
- /* callback functions */
- void (*monitor_additional_check)(void);
- bool (*bat_gpio_init)(void);
- bool (*fg_gpio_init)(void);
- bool (*chg_gpio_init)(void);
- bool (*is_lpm)(void);
- bool (*check_jig_status)(void);
- bool (*is_interrupt_cable_check_possible)(int);
- int (*check_cable_callback)(void);
- int (*get_cable_from_extended_cable_type)(int);
- bool (*cable_switch_check)(void);
- bool (*cable_switch_normal)(void);
- bool (*check_cable_result_callback)(int);
- bool (*check_battery_callback)(void);
- bool (*check_battery_result_callback)(void);
- int (*ovp_uvlo_callback)(void);
- bool (*ovp_uvlo_result_callback)(int);
- bool (*fuelalert_process)(bool);
- bool (*get_temperature_callback)(
- enum power_supply_property,
- union power_supply_propval*);
- void (*check_batt_id)(void);
- /* ADC API for each ADC type */
- sec_bat_adc_api_t adc_api[SEC_BATTERY_ADC_TYPE_NUM];
- /* ADC region by power supply type
- * ADC region should be exclusive
- */
- sec_bat_adc_region_t *cable_adc_value;
- /* charging current for type (0: not use) */
- sec_charging_current_t *charging_current;
- #ifdef CONFIG_OF
- char *chip_vendor;
- unsigned int temp_adc_type;
- #endif
- int *polling_time;
- /* NO NEED TO BE CHANGED */
- char *pmic_name;
- /* battery */
- char *vendor;
- int technology;
- int battery_type;
- void *battery_data;
- int bat_gpio_ta_nconnected;
- /* 1 : active high, 0 : active low */
- int bat_polarity_ta_nconnected;
- int ta_irq;
- int ta_irq_gpio; /* TA_INT(Vbus detecting) */
- unsigned long ta_irq_attr;
- int bat_irq;
- int bat_irq_gpio; /* BATT_INT(BAT_ID detecting) */
- unsigned long bat_irq_attr;
- int jig_irq;
- unsigned long jig_irq_attr;
- sec_battery_cable_check_t cable_check_type;
- sec_battery_cable_source_t cable_source_type;
- bool use_LED; /* use charging LED */
- bool event_check;
- bool use_wireless_to_pogo;
- bool chg_temp_check;
- unsigned int chg_high_temp;
- unsigned int chg_high_temp_recovery;
- unsigned int chg_charging_limit_current;
- /* sustaining event after deactivated (second) */
- unsigned int event_waiting_time;
- #if defined(CONFIG_BATTERY_SWELLING)
- /* battery swelling */
- int swelling_high_temp_block;
- int swelling_high_temp_recov;
- int swelling_low_temp_block;
- int swelling_low_temp_recov;
- unsigned int swelling_high_chg_current;
- unsigned int swelling_low_chg_current;
- unsigned int swelling_normal_float_voltage;
- unsigned int swelling_drop_float_voltage;
- unsigned int swelling_high_rechg_voltage;
- unsigned int swelling_low_rechg_voltage;
- #endif
- /* Monitor setting */
- sec_battery_monitor_polling_t polling_type;
- /* for initial check */
- unsigned int monitor_initial_count;
- /* Battery check */
- sec_battery_check_t battery_check_type;
- /* how many times do we need to check battery */
- unsigned int check_count;
- /* ADC */
- /* battery check ADC maximum value */
- unsigned int check_adc_max;
- /* battery check ADC minimum value */
- unsigned int check_adc_min;
- /* OVP/UVLO check */
- sec_battery_ovp_uvlo_t ovp_uvlo_check_type;
- sec_battery_thermal_source_t thermal_source;
- #ifdef CONFIG_OF
- sec_bat_adc_table_data_t *temp_adc_table;
- sec_bat_adc_table_data_t *temp_amb_adc_table;
- sec_bat_adc_table_data_t *chg_temp_adc_table;
- sec_bat_adc_table_data_t *inbat_adc_table;
- #else
- const sec_bat_adc_table_data_t *temp_adc_table;
- const sec_bat_adc_table_data_t *temp_amb_adc_table;
- #endif
- unsigned int temp_adc_table_size;
- unsigned int temp_amb_adc_table_size;
- unsigned int chg_temp_adc_table_size;
- unsigned int inbat_adc_table_size;
- sec_battery_temp_check_t temp_check_type;
- unsigned int temp_check_count;
- unsigned int inbat_voltage;
- /*
- * limit can be ADC value or Temperature
- * depending on temp_check_type
- * temperature should be temp x 10 (0.1 degree)
- */
- int temp_highlimit_threshold_event;
- int temp_highlimit_recovery_event;
- int temp_high_threshold_event;
- int temp_high_recovery_event;
- int temp_low_threshold_event;
- int temp_low_recovery_event;
- int temp_highlimit_threshold_normal;
- int temp_highlimit_recovery_normal;
- int temp_high_threshold_normal;
- int temp_high_recovery_normal;
- int temp_low_threshold_normal;
- int temp_low_recovery_normal;
- int temp_highlimit_threshold_lpm;
- int temp_highlimit_recovery_lpm;
- int temp_high_threshold_lpm;
- int temp_high_recovery_lpm;
- int temp_low_threshold_lpm;
- int temp_low_recovery_lpm;
- /* If these is NOT full check type or NONE full check type,
- * it is skipped
- */
- /* 1st full check */
- sec_battery_full_charged_t full_check_type;
- /* 2nd full check */
- sec_battery_full_charged_t full_check_type_2nd;
- unsigned int full_check_count;
- int chg_gpio_full_check;
- /* 1 : active high, 0 : active low */
- int chg_polarity_full_check;
- sec_battery_full_condition_t full_condition_type;
- unsigned int full_condition_soc;
- unsigned int full_condition_vcell;
- unsigned int full_condition_avgvcell;
- unsigned int full_condition_ocv;
- unsigned int recharge_check_count;
- sec_battery_recharge_condition_t recharge_condition_type;
- unsigned int recharge_condition_soc;
- unsigned int recharge_condition_avgvcell;
- unsigned int recharge_condition_vcell;
- /* for absolute timer (second) */
- unsigned long charging_total_time;
- /* for recharging timer (second) */
- unsigned long recharging_total_time;
- /* reset charging for abnormal malfunction (0: not use) */
- unsigned long charging_reset_time;
- /* fuel gauge */
- char *fuelgauge_name;
- int fg_irq;
- unsigned long fg_irq_attr;
- /* fuel alert SOC (-1: not use) */
- int fuel_alert_soc;
- /* fuel alert can be repeated */
- bool repeated_fuelalert;
- sec_fuelgauge_capacity_type_t capacity_calculation_type;
- /* soc should be soc x 10 (0.1% degree)
- * only for scaling
- */
- int capacity_max;
- int capacity_max_hv;
- int capacity_max_margin;
- int capacity_min;
- int rcomp0;
- int rcomp_charging;
- /* charger */
- char *charger_name;
- int vbus_ctrl_gpio;
- int chg_gpio_en;
- /* 1 : active high, 0 : active low */
- int chg_polarity_en;
- int chg_gpio_curr_adj;
- /* 1 : active high, 0 : active low */
- int chg_polarity_curr_adj;
- int chg_gpio_status;
- /* 1 : active high, 0 : active low */
- int chg_polarity_status;
- int chg_irq;
- unsigned long chg_irq_attr;
- /* float voltage (mV) */
- int chg_float_voltage;
- int chg_min_system_voltage;
- sec_charger_functions_t chg_functions_setting;
- int siop_level;
- bool siop_activated;
- /* ADC setting */
- unsigned int adc_check_count;
- /* ADC type for each channel */
- unsigned int adc_type[];
- };
- #define sec_battery_platform_data_t \
- struct sec_battery_platform_data
- static inline struct power_supply *get_power_supply_by_name(char *name)
- {
- if (!name)
- return (struct power_supply *)NULL;
- else
- return power_supply_get_by_name(name);
- }
- #define psy_do_property(name, function, property, value) \
- { \
- struct power_supply *psy; \
- int ret; \
- psy = get_power_supply_by_name((name)); \
- if (!psy) { \
- pr_err("%s: Fail to "#function" psy (%s)\n", \
- __func__, (name)); \
- value.intval = 0; \
- } else { \
- if (psy->function##_property != NULL) { \
- ret = psy->function##_property(psy, (property), &(value)); \
- if (ret < 0) { \
- pr_err("%s: Fail to %s "#function" (%d=>%d)\n", \
- __func__, name, (property), ret); \
- value.intval = 0; \
- } \
- } \
- } \
- }
- #ifndef CONFIG_OF
- #define adc_init(pdev, pdata, channel) \
- (((pdata)->adc_api)[((((pdata)->adc_type[(channel)]) < \
- SEC_BATTERY_ADC_TYPE_NUM) ? ((pdata)->adc_type[(channel)]) : \
- SEC_BATTERY_ADC_TYPE_NONE)].init((pdev)))
- #define adc_exit(pdata, channel) \
- (((pdata)->adc_api)[((pdata)->adc_type[(channel)])].exit())
- #define adc_read(pdata, channel) \
- (((pdata)->adc_api)[((pdata)->adc_type[(channel)])].read((channel)))
- #endif
- #define get_battery_data(driver) \
- (((struct battery_data_t *)(driver)->pdata->battery_data) \
- [(driver)->pdata->battery_type])
- #define GET_MAIN_CABLE_TYPE(extended) \
- ((extended >> ONLINE_TYPE_MAIN_SHIFT)&0xf)
- #define GET_SUB_CABLE_TYPE(extended) \
- ((extended >> ONLINE_TYPE_SUB_SHIFT)&0xf)
- #define GET_POWER_CABLE_TYPE(extended) \
- ((extended >> ONLINE_TYPE_PWR_SHIFT)&0xf)
- #endif /* __SEC_CHARGING_COMMON_H */
|