2024-04-28 06:49:01 -07:00
|
|
|
/*
|
|
|
|
* sec_cisd.h
|
|
|
|
* Samsung Mobile Charger Header
|
|
|
|
*
|
|
|
|
* Copyright (C) 2015 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_CISD_H
|
|
|
|
#define __SEC_CISD_H __FILE__
|
|
|
|
|
|
|
|
#define CISD_STATE_NONE 0x00
|
|
|
|
#define CISD_STATE_OVER_VOLTAGE 0x01
|
|
|
|
|
|
|
|
#define is_cisd_check_type(cable_type) ( \
|
|
|
|
cable_type == SEC_BATTERY_CABLE_TA || \
|
|
|
|
cable_type == SEC_BATTERY_CABLE_9V_TA || \
|
|
|
|
cable_type == SEC_BATTERY_CABLE_9V_UNKNOWN || \
|
|
|
|
cable_type == SEC_BATTERY_CABLE_9V_ERR || \
|
|
|
|
cable_type == SEC_BATTERY_CABLE_PDIC)
|
|
|
|
|
|
|
|
enum cisd_data {
|
|
|
|
CISD_DATA_RESET_ALG = 0,
|
|
|
|
|
|
|
|
CISD_DATA_ALG_INDEX,
|
|
|
|
CISD_DATA_FULL_COUNT,
|
|
|
|
CISD_DATA_CAP_MAX,
|
|
|
|
CISD_DATA_CAP_MIN,
|
|
|
|
CISD_DATA_RECHARGING_COUNT,
|
|
|
|
CISD_DATA_VALERT_COUNT,
|
|
|
|
CISD_DATA_CYCLE,
|
|
|
|
CISD_DATA_WIRE_COUNT,
|
|
|
|
CISD_DATA_WIRELESS_COUNT,
|
|
|
|
CISD_DATA_HIGH_TEMP_SWELLING,
|
|
|
|
|
|
|
|
CISD_DATA_LOW_TEMP_SWELLING,
|
|
|
|
CISD_DATA_WC_HIGH_TEMP_SWELLING,
|
|
|
|
CISD_DATA_SWELLING_FULL_CNT,
|
|
|
|
CISD_DATA_SWELLING_RECOVERY_CNT,
|
|
|
|
CISD_DATA_AICL_COUNT,
|
|
|
|
CISD_DATA_BATT_TEMP_MAX,
|
|
|
|
CISD_DATA_BATT_TEMP_MIN,
|
|
|
|
CISD_DATA_CHG_TEMP_MAX,
|
|
|
|
CISD_DATA_CHG_TEMP_MIN,
|
|
|
|
CISD_DATA_WPC_TEMP_MAX,
|
|
|
|
|
|
|
|
CISD_DATA_WPC_TEMP_MIN,
|
|
|
|
CISD_DATA_USB_TEMP_MAX,
|
|
|
|
CISD_DATA_USB_TEMP_MIN,
|
|
|
|
CISD_DATA_CHG_BATT_TEMP_MAX,
|
|
|
|
CISD_DATA_CHG_BATT_TEMP_MIN,
|
|
|
|
CISD_DATA_CHG_CHG_TEMP_MAX,
|
|
|
|
CISD_DATA_CHG_CHG_TEMP_MIN,
|
|
|
|
CISD_DATA_CHG_WPC_TEMP_MAX,
|
|
|
|
CISD_DATA_CHG_WPC_TEMP_MIN,
|
|
|
|
CISD_DATA_CHG_USB_TEMP_MAX,
|
|
|
|
|
|
|
|
CISD_DATA_CHG_USB_TEMP_MIN,
|
|
|
|
CISD_DATA_USB_OVERHEAT_CHARGING, /* 32 */
|
|
|
|
CISD_DATA_UNSAFETY_VOLTAGE,
|
|
|
|
CISD_DATA_UNSAFETY_TEMPERATURE,
|
|
|
|
CISD_DATA_SAFETY_TIMER,
|
|
|
|
CISD_DATA_VSYS_OVP,
|
|
|
|
CISD_DATA_VBAT_OVP,
|
|
|
|
CISD_DATA_USB_OVERHEAT_RAPID_CHANGE,
|
|
|
|
CISD_DATA_ASOC,
|
|
|
|
CISD_DATA_USB_OVERHEAT_ALONE,
|
|
|
|
|
|
|
|
CISD_DATA_CAP_NOM,
|
|
|
|
CISD_DATA_RC0,
|
|
|
|
|
|
|
|
CISD_DATA_MAX,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum cisd_data_per_day {
|
|
|
|
CISD_DATA_FULL_COUNT_PER_DAY = CISD_DATA_MAX,
|
|
|
|
|
|
|
|
CISD_DATA_CAP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CAP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_RECHARGING_COUNT_PER_DAY,
|
|
|
|
CISD_DATA_VALERT_COUNT_PER_DAY,
|
|
|
|
CISD_DATA_WIRE_COUNT_PER_DAY,
|
|
|
|
CISD_DATA_WIRELESS_COUNT_PER_DAY,
|
|
|
|
CISD_DATA_HIGH_TEMP_SWELLING_PER_DAY,
|
|
|
|
CISD_DATA_LOW_TEMP_SWELLING_PER_DAY,
|
|
|
|
CISD_DATA_WC_HIGH_TEMP_SWELLING_PER_DAY,
|
|
|
|
CISD_DATA_SWELLING_FULL_CNT_PER_DAY,
|
|
|
|
|
|
|
|
CISD_DATA_SWELLING_RECOVERY_CNT_PER_DAY,
|
|
|
|
CISD_DATA_AICL_COUNT_PER_DAY,
|
|
|
|
CISD_DATA_BATT_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_BATT_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_SUB_BATT_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_SUB_BATT_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_CHG_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CHG_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_USB_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_USB_TEMP_MIN_PER_DAY,
|
|
|
|
|
|
|
|
CISD_DATA_CHG_BATT_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CHG_BATT_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_CHG_SUB_BATT_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CHG_SUB_BATT_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_CHG_CHG_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CHG_CHG_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_CHG_USB_TEMP_MAX_PER_DAY,
|
|
|
|
CISD_DATA_CHG_USB_TEMP_MIN_PER_DAY,
|
|
|
|
CISD_DATA_USB_OVERHEAT_CHARGING_PER_DAY,
|
|
|
|
CISD_DATA_UNSAFE_VOLTAGE_PER_DAY,
|
|
|
|
|
|
|
|
CISD_DATA_UNSAFE_TEMPERATURE_PER_DAY,
|
|
|
|
CISD_DATA_SAFETY_TIMER_PER_DAY, /* 32 */
|
|
|
|
CISD_DATA_VSYS_OVP_PER_DAY,
|
|
|
|
CISD_DATA_VBAT_OVP_PER_DAY,
|
|
|
|
CISD_DATA_USB_OVERHEAT_RAPID_CHANGE_PER_DAY,
|
|
|
|
CISD_DATA_BUCK_OFF_PER_DAY,
|
|
|
|
CISD_DATA_USB_OVERHEAT_ALONE_PER_DAY,
|
|
|
|
CISD_DATA_DROP_VALUE_PER_DAY,
|
|
|
|
CISD_DATA_CHG_RETENTION_TIME_PER_DAY,
|
|
|
|
CISD_DATA_TOTAL_CHG_RETENTION_TIME_PER_DAY,
|
|
|
|
|
|
|
|
CISD_DATA_MAX_PER_DAY,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
CISD_CABLE_TA = 0,
|
|
|
|
CISD_CABLE_AFC,
|
|
|
|
CISD_CABLE_AFC_FAIL,
|
|
|
|
CISD_CABLE_QC,
|
|
|
|
CISD_CABLE_QC_FAIL,
|
|
|
|
CISD_CABLE_PD,
|
|
|
|
CISD_CABLE_PD_HIGH,
|
|
|
|
CISD_CABLE_HV_WC_20,
|
2024-04-28 06:51:13 -07:00
|
|
|
CISD_CABLE_FPDO_DC,
|
2024-04-28 06:49:01 -07:00
|
|
|
|
|
|
|
CISD_CABLE_TYPE_MAX,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
TX_ON = 0,
|
|
|
|
TX_OTHER,
|
|
|
|
TX_GEAR,
|
|
|
|
TX_PHONE,
|
|
|
|
TX_BUDS,
|
|
|
|
TX_DATA_MAX,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
EVENT_DC_ERR = 0,
|
|
|
|
EVENT_TA_OCP_DET,
|
|
|
|
EVENT_TA_OCP_ON,
|
|
|
|
EVENT_OVP_POWER,
|
|
|
|
EVENT_OVP_SIGNAL,
|
|
|
|
EVENT_OTG,
|
|
|
|
EVENT_D2D,
|
|
|
|
#if IS_ENABLED(CONFIG_DUAL_BATTERY)
|
|
|
|
EVENT_MAIN_BAT_ERR,
|
|
|
|
EVENT_SUB_BAT_ERR,
|
|
|
|
EVENT_BAT_WA_ERR,
|
|
|
|
#endif
|
|
|
|
EVENT_DATA_MAX,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char *cisd_data_str[];
|
|
|
|
extern const char *cisd_data_str_d[];
|
|
|
|
extern const char *cisd_cable_data_str[];
|
|
|
|
extern const char *cisd_tx_data_str[];
|
|
|
|
extern const char *cisd_event_data_str[];
|
|
|
|
|
|
|
|
#define PAD_INDEX_STRING "INDEX"
|
|
|
|
#define PAD_JSON_STRING "PAD_0x"
|
|
|
|
#define MAX_PAD_ID 0xFF
|
|
|
|
#define MAX_CHARGER_POWER 100
|
|
|
|
#define POWER_JSON_STRING "POWER_"
|
|
|
|
#define POWER_COUNT_JSON_STRING "COUNT"
|
|
|
|
#define SS_PD_VID 0x04E8
|
|
|
|
#define MIN_SS_PD_PID 0x3000
|
|
|
|
#define MAX_SS_PD_PID 0x30FF
|
|
|
|
#define PD_JSON_STRING "PID_0x"
|
|
|
|
#define PD_COUNT_JSON_STRING "PID"
|
|
|
|
|
|
|
|
struct pad_data {
|
|
|
|
unsigned int id;
|
|
|
|
unsigned int count;
|
|
|
|
|
|
|
|
struct pad_data* prev;
|
|
|
|
struct pad_data* next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct power_data {
|
|
|
|
unsigned int power;
|
|
|
|
unsigned int count;
|
|
|
|
|
|
|
|
struct power_data* prev;
|
|
|
|
struct power_data* next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct pd_data {
|
|
|
|
unsigned short pid;
|
|
|
|
unsigned int count;
|
|
|
|
|
|
|
|
struct pd_data *prev;
|
|
|
|
struct pd_data *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct cisd {
|
|
|
|
unsigned int cisd_alg_index;
|
|
|
|
unsigned int state;
|
|
|
|
|
|
|
|
unsigned int ab_vbat_max_count;
|
|
|
|
unsigned int ab_vbat_check_count;
|
|
|
|
int max_voltage_thr;
|
|
|
|
|
|
|
|
unsigned int gpio_ovp_power;
|
|
|
|
unsigned int irq_ovp_power;
|
|
|
|
unsigned int gpio_ovp_signal;
|
|
|
|
unsigned int irq_ovp_signal;
|
|
|
|
|
|
|
|
/* Big Data Field */
|
|
|
|
int data[CISD_DATA_MAX_PER_DAY];
|
|
|
|
int cable_data[CISD_CABLE_TYPE_MAX];
|
|
|
|
unsigned int tx_data[TX_DATA_MAX];
|
|
|
|
unsigned int event_data[EVENT_DATA_MAX];
|
|
|
|
|
|
|
|
struct mutex padlock;
|
|
|
|
struct mutex powerlock;
|
|
|
|
struct mutex pdlock;
|
|
|
|
struct pad_data* pad_array;
|
|
|
|
struct power_data* power_array;
|
|
|
|
struct pd_data *pd_array;
|
|
|
|
unsigned int pad_count;
|
|
|
|
unsigned int power_count;
|
|
|
|
unsigned int pd_count;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern struct cisd *gcisd;
|
|
|
|
static inline void set_cisd_data(int type, int value)
|
|
|
|
{
|
|
|
|
if (gcisd && (type >= CISD_DATA_RESET_ALG && type < CISD_DATA_MAX_PER_DAY))
|
|
|
|
gcisd->data[type] = value;
|
|
|
|
}
|
|
|
|
static inline int get_cisd_data(int type)
|
|
|
|
{
|
|
|
|
if (!gcisd || (type < CISD_DATA_RESET_ALG || type >= CISD_DATA_MAX_PER_DAY))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
return gcisd->data[type];
|
|
|
|
}
|
|
|
|
static inline void increase_cisd_count(int type)
|
|
|
|
{
|
|
|
|
if (gcisd && (type >= CISD_DATA_RESET_ALG && type < CISD_DATA_MAX_PER_DAY))
|
|
|
|
gcisd->data[type]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void init_cisd_pad_data(struct cisd *cisd);
|
|
|
|
void count_cisd_pad_data(struct cisd *cisd, unsigned int pad_id);
|
|
|
|
|
|
|
|
void init_cisd_power_data(struct cisd* cisd);
|
|
|
|
void count_cisd_power_data(struct cisd* cisd, int power);
|
|
|
|
|
|
|
|
void init_cisd_pd_data(struct cisd *cisd);
|
|
|
|
void count_cisd_pd_data(unsigned short vid, unsigned short pid);
|
|
|
|
#endif /* __SEC_CISD_H */
|