From fdedc16d10bee28480c4012c400e4dd25c8c71b0 Mon Sep 17 00:00:00 2001 From: wanggc6 Date: Thu, 17 Mar 2022 16:13:14 +0800 Subject: [PATCH] charger:cps4019 fix build errors Modify some code formatting and fix some build errors. If your kernel include has , you can define CONFIG_HAS_WAKELOCK. Change-Id: I6371653581334ac8d63d41112b50ac9ea2919dc0 Signed-off-by: wanggc6 Reviewed-on: https://gerrit.mot.com/2218913 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/power/cps4019_wls_charger/Makefile | 11 +- .../cps4019_wls_charger/cps4019_wls_charger.c | 1623 +++++++++-------- .../cps4019_wls_charger/cps4019_wls_charger.h | 61 - 3 files changed, 882 insertions(+), 813 deletions(-) diff --git a/drivers/power/cps4019_wls_charger/Makefile b/drivers/power/cps4019_wls_charger/Makefile index 3cc6caaec3df..4191dea22679 100644 --- a/drivers/power/cps4019_wls_charger/Makefile +++ b/drivers/power/cps4019_wls_charger/Makefile @@ -1 +1,10 @@ -obj-$(CONFIG_CPS_WLS_CHARGER) += cps_wls_charger.o +KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build + +all: + $(MAKE) -C $(KERNEL_SRC) M=$(shell pwd) modules $(KBUILD_OPTIONS) + +modules_install: + $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(shell pwd) modules_install + +clean: + $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean diff --git a/drivers/power/cps4019_wls_charger/cps4019_wls_charger.c b/drivers/power/cps4019_wls_charger/cps4019_wls_charger.c index a2381d59483b..0e587788bb84 100644 --- a/drivers/power/cps4019_wls_charger/cps4019_wls_charger.c +++ b/drivers/power/cps4019_wls_charger/cps4019_wls_charger.c @@ -26,90 +26,165 @@ #include #include #include - #include #include #include - #include -#include +#include #include -#include #include #include #include +#include +#include +#include +#include +#ifdef CONFIG_HAS_WAKELOCK +#include +#else +#include +#include +#endif + +#include "cps4019_wls_charger.h" + +//namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver; -#include #define BOOTLOADER_FILE_NAME "/data/misc/cps/bootloader.hex" #define FIRMWARE_FILE_NAME "/data/misc/cps/firmware.hex" #define CPS_WLS_CHRG_DRV_NAME "cps-wls-charger" #define CPS_WLS_CHRG_PSY_NAME "wireless" + +/***************************************************************************** + * Log + ****************************************************************************/ +#define CPS_LOG_NONE 0 +#define CPS_LOG_ERR 1 +#define CPS_LOG_DEBG 2 +#define CPS_LOG_FULL 3 + +#define ENABLE_CPS_LOG CPS_LOG_FULL + +#define cps_wls_log(num, fmt, args...) \ + do { \ + if (ENABLE_CPS_LOG >= (int)num) \ + pr_err(fmt, ##args); \ + } while (0) + +/*-------------------------------------------------------------------*/ +struct cps_wls_chrg_chip { + struct i2c_client *client; + struct device *dev; + struct regmap *regmap; + char *name; + struct power_supply *wl_psy; + struct power_supply *batt_psy; + struct power_supply *usb_psy; + struct power_supply *dc_psy; + struct power_supply_desc wl_psd; + struct power_supply_config wl_psc; + struct power_supply_desc batt_psd; + struct power_supply_desc usb_psd; + struct power_supply_desc dc_psd; + struct pinctrl *cps_pinctrl; + struct pinctrl_state *cps_gpio_active; + struct pinctrl_state *cps_gpio_suspend; + + #ifdef CONFIG_HAS_WAKELOCK + struct wake_lock cps_wls_wake_lock; + #else + struct wakeup_source *cps_wls_wake_lock; + #endif + + struct mutex irq_lock; + struct mutex i2c_lock; + int state; + int wls_charge_int; + int cps_wls_irq; + int reg_addr; + int reg_data; + int rx_ovp; + int rx_ocp; + int rx_opp; + int rx_ht_thl; + int rx_vout_target; + int rx_ept_rsn; + int rx_iout; + int rx_vrect; + int rx_vout; + int rx_die_temp; + int rx_ntc; + int rx_neg_power; + int rx_neg_protocol; + int command_flag; +}; + struct cps_wls_chrg_chip *chip = NULL; /*define cps rx reg enum*/ typedef enum { - CPS_REG_CHIP_ID, - CPS_REG_FW_MAJOR_REV, - CPS_REG_FW_MINOR_REV, - CPS_REG_INT, - CPS_REG_INT_ENABLE, - CPS_REG_INT_CLEAR, - CPS_REG_VOUT_SET, - CPS_REG_ILIM_SET, - CPS_REG_ADC_VOUT, - CPS_REG_ADC_VRECT, - CPS_REG_ADC_IOUT, - CPS_REG_ADC_DIE_TEMP, - CPS_REG_MAX + CPS_REG_CHIP_ID, + CPS_REG_FW_MAJOR_REV, + CPS_REG_FW_MINOR_REV, + CPS_REG_INT, + CPS_REG_INT_ENABLE, + CPS_REG_INT_CLEAR, + CPS_REG_VOUT_SET, + CPS_REG_ILIM_SET, + CPS_REG_ADC_VOUT, + CPS_REG_ADC_VRECT, + CPS_REG_ADC_IOUT, + CPS_REG_ADC_DIE_TEMP, + CPS_REG_MAX }cps_reg_e; typedef struct { - uint16_t reg_name; - uint16_t reg_bytes_len; - uint32_t reg_addr; + uint16_t reg_name; + uint16_t reg_bytes_len; + uint32_t reg_addr; }cps_reg_s; cps_reg_s cps_reg_cfg[CPS_REG_MAX] = { - /* reg name bytes number reg address */ - {CPS_REG_CHIP_ID, 2, 0x0000}, - {CPS_REG_FW_MAJOR_REV, 2, 0x0004}, - {CPS_REG_FW_MINOR_REV, 2, 0x0006}, - {CPS_REG_INT, 2, 0x0022}, - {CPS_REG_INT_ENABLE, 2, 0x0024}, - {CPS_REG_INT_CLEAR, 2, 0x0026}, - {CPS_REG_VOUT_SET, 2, 0x0030}, - {CPS_REG_ILIM_SET, 1, 0x0033}, - {CPS_REG_ADC_VOUT, 2, 0x0034}, - {CPS_REG_ADC_VRECT, 2, 0x0036}, - {CPS_REG_ADC_IOUT, 2, 0x0038}, - {CPS_REG_ADC_DIE_TEMP, 2, 0x003C} + /* reg name bytes number reg address */ + {CPS_REG_CHIP_ID, 2, 0x0000}, + {CPS_REG_FW_MAJOR_REV, 2, 0x0004}, + {CPS_REG_FW_MINOR_REV, 2, 0x0006}, + {CPS_REG_INT, 2, 0x0022}, + {CPS_REG_INT_ENABLE, 2, 0x0024}, + {CPS_REG_INT_CLEAR, 2, 0x0026}, + {CPS_REG_VOUT_SET, 2, 0x0030}, + {CPS_REG_ILIM_SET, 1, 0x0033}, + {CPS_REG_ADC_VOUT, 2, 0x0034}, + {CPS_REG_ADC_VRECT, 2, 0x0036}, + {CPS_REG_ADC_IOUT, 2, 0x0038}, + {CPS_REG_ADC_DIE_TEMP, 2, 0x003C} }; //-------------------I2C APT start-------------------- static const struct regmap_config cps4019_regmap_config = { - .reg_bits = 16, - .val_bits = 8, + .reg_bits = 16, + .val_bits = 8, }; static int cps_wls_write(int reg, int value) { - int ret; - - mutex_lock(&chip->i2c_lock); - ret = regmap_write(chip->regmap, reg, value); - mutex_unlock(&chip->i2c_lock); + int ret; - if (ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); - return CPS_WLS_FAIL; - } + mutex_lock(&chip->i2c_lock); + ret = regmap_write(chip->regmap, reg, value); + mutex_unlock(&chip->i2c_lock); - return CPS_WLS_SUCCESS; + if (ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); + return CPS_WLS_FAIL; + } + + return CPS_WLS_SUCCESS; } /* @@ -117,18 +192,18 @@ return -1 means fail, 0 means success */ static int cps_wls_read(int reg) { - int ret; - int value; - - mutex_lock(&chip->i2c_lock); - ret = regmap_read(chip->regmap, reg, &value); - mutex_unlock(&chip->i2c_lock); - - if (ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] i2c read error!\n", __func__); - return CPS_WLS_FAIL; - } - return value; + int ret; + int value; + + mutex_lock(&chip->i2c_lock); + ret = regmap_read(chip->regmap, reg, &value); + mutex_unlock(&chip->i2c_lock); + + if (ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] i2c read error!\n", __func__); + return CPS_WLS_FAIL; + } + return value; } /* @@ -136,16 +211,17 @@ return -1 means fail, 0 means success */ static int cps_wls_write_reg(int reg, int value, int byte_len) { - int i=0, tmp=0; - for(i = 0; i < byte_len; i++) - { - tmp = (value >> (i*8))&0xff; - if(cps_wls_write((reg&0xffff) + i, tmp) == CPS_WLS_FAIL) goto write_fail; - } - return CPS_WLS_SUCCESS; + int i=0, tmp=0; + for(i = 0; i < byte_len; i++) + { + tmp = (value >> (i * 8)) & 0xff; + if(cps_wls_write((reg & 0xffff) + i, tmp) == CPS_WLS_FAIL) + goto write_fail; + } + return CPS_WLS_SUCCESS; write_fail: - return CPS_WLS_FAIL; + return CPS_WLS_FAIL; } /* @@ -153,18 +229,19 @@ return -1 means fail, 0 means success */ static int cps_wls_read_reg(int reg, int byte_len) { - int i=0,tmp=0,read_date=0; - for(i = 0; i < byte_len; i++) - { - tmp = cps_wls_read((reg&0xffff) + i); - if(tmp == CPS_WLS_FAIL) goto read_fail; - read_date |= (tmp << (8*i)); - } - return read_date; - - + int i=0,tmp=0,read_data=0; + for(i = 0; i < byte_len; i++) + { + tmp = cps_wls_read((reg & 0xffff) + i); + if(tmp == CPS_WLS_FAIL) + goto read_fail; + read_data |= (tmp << (8 * i)); + } + return read_data; + + read_fail: - return CPS_WLS_FAIL; + return CPS_WLS_FAIL; } /* @@ -174,1029 +251,1068 @@ read_fail: */ int big_little_endian_convert(int dat) { - char *p; - char tmp[4]; - - p = (char *)(&dat); - tmp[0] = p[3]; - tmp[1] = p[2]; - tmp[2] = p[1]; - tmp[3] = p[0]; - return *(int *)(tmp); + char *p; + char tmp[4]; + + p = (char *)(&dat); + tmp[0] = p[3]; + tmp[1] = p[2]; + tmp[2] = p[1]; + tmp[3] = p[0]; + return *(int *)(tmp); } //*****************************for program************************ -static int cps_wls_program_sram(int addr, u8 *date, int len) +static int cps_wls_program_sram(int addr, u8 *data, int len) { - int ret; + int ret; - mutex_lock(&chip->i2c_lock); - ret = regmap_raw_write(chip->regmap, addr, date, len); - mutex_unlock(&chip->i2c_lock); - - if (ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); - return CPS_WLS_FAIL; - } - return CPS_WLS_SUCCESS; + mutex_lock(&chip->i2c_lock); + ret = regmap_raw_write(chip->regmap, addr, data, len); + mutex_unlock(&chip->i2c_lock); + + if (ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); + return CPS_WLS_FAIL; + } + return CPS_WLS_SUCCESS; } static int cps_wls_write_word(int addr, int value) { - int ret; - u8 write_date[4]; + int ret; + u8 write_data[4]; - write_date[0] = value & 0xff; - write_date[1] = (value >> 8) & 0xff; - write_date[2] = (value >> 16) & 0xff; - write_date[3] = (value >> 24) & 0xff; + write_data[0] = value & 0xff; + write_data[1] = (value >> 8) & 0xff; + write_data[2] = (value >> 16) & 0xff; + write_data[3] = (value >> 24) & 0xff; - mutex_lock(&chip->i2c_lock); - ret = regmap_raw_write(chip->regmap, addr, write_date, 4); - mutex_unlock(&chip->i2c_lock); + mutex_lock(&chip->i2c_lock); + ret = regmap_raw_write(chip->regmap, addr, write_data, 4); + mutex_unlock(&chip->i2c_lock); - if (ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); - return CPS_WLS_FAIL; - } - return CPS_WLS_SUCCESS; + if (ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] i2c write error!\n", __func__); + return CPS_WLS_FAIL; + } + return CPS_WLS_SUCCESS; } static int cps_wls_read_word(int addr) { - int ret; - u8 read_date[4]; - - mutex_lock(&chip->i2c_lock); - ret = regmap_raw_read(chip->regmap, addr, read_date, 4); - mutex_unlock(&chip->i2c_lock); - - if (ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] i2c read error!\n", __func__); - return CPS_WLS_FAIL; - } - return *(int *)read_date; + int ret; + u8 read_data[4]; + + mutex_lock(&chip->i2c_lock); + ret = regmap_raw_read(chip->regmap, addr, read_data, 4); + mutex_unlock(&chip->i2c_lock); + + if (ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] i2c read error!\n", __func__); + return CPS_WLS_FAIL; + } + return *(int *)read_data; } static int cps_wls_program_cmd_send(int cmd) { - return cps_wls_write_word(ADDR_CMD, big_little_endian_convert(cmd)); + return cps_wls_write_word(ADDR_CMD, big_little_endian_convert(cmd)); } static int cps_wls_program_wait_cmd_done(void) { - int ret; - int wait_time_out = 50;//ms - while(1) - { - ret = cps_wls_read_word(ADDR_FLAG); - if(ret == CPS_WLS_FAIL) return CPS_WLS_FAIL; - wait_time_out--; - msleep(1); - if((big_little_endian_convert(ret) & 0xff) == PASS) - { - break; - } - if(wait_time_out < 0) return CPS_WLS_FAIL; - } + int ret; + int wait_time_out = 50;//ms + while(1) + { + ret = cps_wls_read_word(ADDR_FLAG); + if(ret == CPS_WLS_FAIL) + return CPS_WLS_FAIL; + wait_time_out--; + msleep(1); + if((big_little_endian_convert(ret) & 0xff) == PASS) { + break; + } + if(wait_time_out < 0) + return CPS_WLS_FAIL; + } - return CPS_WLS_SUCCESS; + return CPS_WLS_SUCCESS; } static int fp_size(struct file *f) { - int error = -EBADF; - struct kstat stat; + int error = -EBADF; + struct kstat stat; - error = vfs_getattr(&f->f_path, &stat); + //error = vfs_getattr(&f->f_path, &stat); + error = vfs_getattr(&f->f_path, &stat, STATX_SIZE, KSTAT_QUERY_FLAGS ); - if (error == 0) - { - return stat.size; - } - else - { - pr_err("get file file stat error\n"); - return error; - } + if (error == 0) { + return stat.size; + } + else { + pr_err("get file file stat error\n"); + return error; + } } static int cps_file_read(char *filename, char **buf) { - struct file *fp; - mm_segment_t fs; - int size = 0; - loff_t pos = 0; + struct file *fp; + //mm_segment_t fs; + int size = 0; + loff_t pos = 0; - fp = filp_open(filename, O_RDONLY, 0); - if (IS_ERR(fp)) - { - pr_err("open %s file error\n", filename); - goto end; - } + fp = filp_open(filename, O_RDONLY, 0); + if (IS_ERR(fp)) { + pr_err("open %s file error\n", filename); + goto end; + } - fs = get_fs(); - set_fs(KERNEL_DS); - size = fp_size(fp); - if (size <= 0) - { - pr_err("load file:%s error\n", filename); - goto error; - } + size = fp_size(fp); + if (size <= 0) { + pr_err("load file:%s error\n", filename); + goto error; + } - *buf = kzalloc(size + 1, GFP_KERNEL); - vfs_read(fp, *buf, size, &pos); + *buf = kzalloc(size + 1, GFP_KERNEL); + if( *buf != NULL ) { + pr_err("kzalloc error\n"); + goto error; + } + //fs = get_fs(); + //set_fs(KERNEL_DS); + //vfs_read(fp, *buf, size, &pos);//it's not EXPORT_SYMBOL + + size = kernel_read(fp, *buf, size, &pos); error: - filp_close(fp, NULL); - set_fs(fs); + filp_close(fp, NULL); + //set_fs(fs); end: - return size; + return size; } static unsigned char chartoBcd(char iChar) { - unsigned char mBCD = 0; + unsigned char mBCD = 0; - if (iChar >= '0' && iChar <= '9') mBCD = iChar - '0'; - else if (iChar >= 'A' && iChar <= 'F') mBCD = iChar - 'A' + 0x0a; - else if (iChar >= 'a' && iChar <= 'f') mBCD = iChar - 'a' + 0x0a; + if (iChar >= '0' && iChar <= '9') + mBCD = iChar - '0'; + else if (iChar >= 'A' && iChar <= 'F') + mBCD = iChar - 'A' + 0x0a; + else if (iChar >= 'a' && iChar <= 'f') + mBCD = iChar - 'a' + 0x0a; - return mBCD; + return mBCD; } static unsigned char* file_parse(char *buf, int size, - unsigned char *file, int *file_length) + unsigned char *file, int *file_length) { - int i = 0, j = 0; - int file_index = 0; - char temp; + int i = 0, j = 0; + int file_index = 0; + char temp; - if (!buf || !file) - return NULL; - for(i = 0; i < size; i++){ - if(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\r') { - file_index = 0; - continue; - } else{ - if (file_index == 1) { - file_index++; - file[j++] = (unsigned char)((chartoBcd(temp) << 4) + chartoBcd(buf[i])); - } else if (file_index == 0) { - file_index++; - temp = buf[i]; - } - } - - } - // file[j] = '\0'; - *file_length = j; - - return file; + if (!buf || !file) + return NULL; + for(i = 0; i < size; i++) { + if(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\r') { + file_index = 0; + continue; + } else{ + if (file_index == 1) { + file_index++; + file[j++] = (unsigned char)((chartoBcd(temp) << 4) + chartoBcd(buf[i])); + } else if (file_index == 0) { + file_index++; + temp = buf[i]; + } + } + } + // file[j] = '\0'; + *file_length = j; + return file; } static int bootloader_load(unsigned char *bootloader, int *bootloader_length) { - char *buf = NULL; - int size = 0; + char *buf = NULL; + int size = 0; - size = cps_file_read(BOOTLOADER_FILE_NAME, &buf); - if (size > 0){ + size = cps_file_read(BOOTLOADER_FILE_NAME, &buf); + if (size > 0) { + if (bootloader == NULL) { + kfree(buf); + pr_err("file alloc error.\n"); + return -EINVAL; + } - if (bootloader == NULL){ - kfree(buf); - pr_err("file alloc error.\n"); - return -EINVAL; - } + if(file_parse(buf, size, bootloader, bootloader_length) == NULL) { + kfree(buf); + pr_err("file parse error\n"); + return -EINVAL; + } + kfree(buf); + } - if(file_parse(buf, size, bootloader, bootloader_length) == NULL){ - kfree(buf); - pr_err("file parse error\n"); - return -EINVAL; - } - kfree(buf); - } - - return 0; + return 0; } static int firmware_load(unsigned char *firmeware, int *firmeware_length) { - char *buf = NULL; - int size = 0; + char *buf = NULL; + int size = 0; - size = cps_file_read(FIRMWARE_FILE_NAME, &buf); - if (size > 0){ + size = cps_file_read(FIRMWARE_FILE_NAME, &buf); + if (size > 0) { + if (firmeware == NULL) { + kfree(buf); + pr_err("file alloc error.\n"); + return -EINVAL; + } + if(file_parse(buf, size, firmeware, firmeware_length) == NULL) { + kfree(buf); + pr_err("file parse error\n"); + return -EINVAL; + } + kfree(buf); + } - if (firmeware == NULL){ - kfree(buf); - pr_err("file alloc error.\n"); - return -EINVAL; - } - - if(file_parse(buf, size, firmeware, firmeware_length) == NULL){ - kfree(buf); - pr_err("file parse error\n"); - return -EINVAL; - } - kfree(buf); - } - - return 0; + return 0; } static int update_firmware(void) { - int ret, write_count, k; - int bootloader_length, firmware_length; - int buff0_flag = 0, buff1_flag = 0; - unsigned char *bootloader_buf; - unsigned char *firmware_buf; - unsigned char *p; - //unsigned short int chip_id; - int result; - int *p_convert; - - bootloader_buf = kzalloc(0x800, GFP_KERNEL); // 2K buffer - firmware_buf = kzalloc(0x4000, GFP_KERNEL); // 16K buffer + int ret, write_count, k; + int bootloader_length, firmware_length; + int buff0_flag = 0, buff1_flag = 0; + unsigned char *bootloader_buf; + unsigned char *firmware_buf; + unsigned char *p; + //unsigned short int chip_id; + int result; + int *p_convert; + + bootloader_buf = kzalloc(0x800, GFP_KERNEL);// 2K buffer + firmware_buf = kzalloc(0x4000, GFP_KERNEL);// 16K buffer /*************************************************************************************** * Step1, load to sram * ***************************************************************************************/ - ret = bootloader_load(bootloader_buf, &bootloader_length);//load bootloader - if (ret != 0) { - cps_wls_log(CPS_LOG_DEBG, "[%s] ---- bootloader get error %d\n", __func__, ret); - goto update_fail; - } - - if(CPS_WLS_FAIL == cps_wls_write_word(0xFFFFFF00, big_little_endian_convert(0x0E000000))) goto update_fail; /*enable 32bit i2c*/ - if(CPS_WLS_FAIL == cps_wls_write_word(0x40040070, big_little_endian_convert(0x0000A061))) goto update_fail; /*write password*/ - if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000008))) goto update_fail; /*reset and halt mcu*/ + ret = bootloader_load(bootloader_buf, &bootloader_length);//load bootloader + if (ret != 0) { + cps_wls_log(CPS_LOG_DEBG, "[%s] ---- bootloader get error %d\n", __func__, ret); + goto update_fail; + } - if(CPS_WLS_FAIL == cps_wls_program_sram(0x20000000, bootloader_buf, bootloader_length)) goto update_fail;//program sram + if(CPS_WLS_FAIL == cps_wls_write_word(0xFFFFFF00, big_little_endian_convert(0x0E000000))) + goto update_fail; /*enable 32bit i2c*/ - if(CPS_WLS_FAIL == cps_wls_write_word(0x40040010, big_little_endian_convert(0x00000001))) goto update_fail; /*triming load function is disabled*/ - if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000066))) goto update_fail; /*enable remap function and reset the mcu*/ + if(CPS_WLS_FAIL == cps_wls_write_word(0x40040070, big_little_endian_convert(0x0000A061))) + goto update_fail; /*write password*/ - cps_wls_log(CPS_LOG_DEBG, "[%s] ---- system restart\n", __func__); + if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000008))) + goto update_fail; /*reset and halt mcu*/ - msleep(10); - if(CPS_WLS_FAIL == cps_wls_write_word(0xFFFFFF00, big_little_endian_convert(0x0E000000))) goto update_fail; /*enable 32bit i2c*/ - msleep(10); + if(CPS_WLS_FAIL == cps_wls_program_sram(0x20000000, bootloader_buf, bootloader_length)) + goto update_fail;//program sram + + if(CPS_WLS_FAIL == cps_wls_write_word(0x40040010, big_little_endian_convert(0x00000001))) + goto update_fail; /*triming load function is disabled*/ + + if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000066))) + goto update_fail; /*enable remap function and reset the mcu*/ + + cps_wls_log(CPS_LOG_DEBG, "[%s] ---- system restart\n", __func__); + + msleep(10); + if(CPS_WLS_FAIL == cps_wls_write_word(0xFFFFFF00, big_little_endian_convert(0x0E000000))) + goto update_fail; /*enable 32bit i2c*/ + msleep(10); /*************************************************************************************** * Step2, bootloader crc check * ***************************************************************************************/ - cps_wls_program_cmd_send(CACL_CRC_TEST); - result = cps_wls_program_wait_cmd_done(); + cps_wls_program_cmd_send(CACL_CRC_TEST); + result = cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- bootloader crc fail\n", __func__); - goto update_fail; - } - cps_wls_log(CPS_LOG_DEBG, "[%s] ---- load bootloader successful\n", __func__); + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- bootloader crc fail\n", __func__); + goto update_fail; + } + cps_wls_log(CPS_LOG_DEBG, "[%s] ---- load bootloader successful\n", __func__); /*************************************************************************************** * Step3, load firmware to MTP * ***************************************************************************************/ - memset(firmware_buf, 0, 0x4000); - ret = firmware_load(firmware_buf, &firmware_length);//load bootloader - if (ret != 0) { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- firmware get error %d\n", __func__, ret); - goto update_fail; - } + memset(firmware_buf, 0, 0x4000); + ret = firmware_load(firmware_buf, &firmware_length);//load bootloader + if (ret != 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- firmware get error %d\n", __func__, ret); + goto update_fail; + } - //set write buffer size defalt 64 word - cps_wls_write_word(ADDR_BUF_SIZE, big_little_endian_convert(CPS_PROGRAM_BUFFER_SIZE)); - write_count = 0; - - p_convert = (int*)firmware_buf; - for(k = 0; k < 16 * 1024 / 4; k++) - { - p_convert[k] = big_little_endian_convert(p_convert[k]); - } + //set write buffer size defalt 64 word + cps_wls_write_word(ADDR_BUF_SIZE, big_little_endian_convert(CPS_PROGRAM_BUFFER_SIZE)); + write_count = 0; - start_write_app_code: + p_convert = (int*)firmware_buf; + for(k = 0; k < 16 * 1024 / 4; k++) { + p_convert[k] = big_little_endian_convert(p_convert[k]); + } - cps_wls_program_cmd_send(PGM_ERASER_0); - result = cps_wls_program_wait_cmd_done(); +start_write_app_code: - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- bootloader crc fail\n", __func__); - goto update_fail; - } - p = (unsigned char*)p_convert; - write_count++; + cps_wls_program_cmd_send(PGM_ERASER_0); + result = cps_wls_program_wait_cmd_done(); - for (k = 0; k < (16 * 1024 / 4) / CPS_PROGRAM_BUFFER_SIZE; k++) - { - if (buff0_flag == 0) - { - //write buf0 - cps_wls_program_sram(ADDR_BUFFER0, p, CPS_PROGRAM_BUFFER_SIZE*4); - p = p + CPS_PROGRAM_BUFFER_SIZE*4; - if (buff1_flag == 1) - { - //wait finish - cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer1 program fail\n", __func__); - goto update_fail; - } - buff1_flag = 0; - } + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- bootloader crc fail\n", __func__); + goto update_fail; + } + p = (unsigned char*)p_convert; + write_count++; - //write buff 0 CMD - cps_wls_program_cmd_send(PGM_BUFFER0); - buff0_flag = 1; - continue; - } - if (buff1_flag == 0) - { - //write buf1 - cps_wls_program_sram(ADDR_BUFFER1, p, CPS_PROGRAM_BUFFER_SIZE*4); - p = p + CPS_PROGRAM_BUFFER_SIZE*4; - if (buff0_flag == 1) - { - //wait finish - cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer0 program fail\n", __func__); - goto update_fail; - } - buff0_flag = 0; - - } + for (k = 0; k < (16 * 1024 / 4) / CPS_PROGRAM_BUFFER_SIZE; k++) + { + if (buff0_flag == 0) { + //write buf0 + cps_wls_program_sram(ADDR_BUFFER0, p, CPS_PROGRAM_BUFFER_SIZE*4); + p = p + CPS_PROGRAM_BUFFER_SIZE*4; + if (buff1_flag == 1) { + //wait finish + cps_wls_program_wait_cmd_done(); + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer1 program fail\n", __func__); + goto update_fail; + } + buff1_flag = 0; + } + //write buff 0 CMD + cps_wls_program_cmd_send(PGM_BUFFER0); + buff0_flag = 1; + continue; + } + if (buff1_flag == 0) { + //write buf1 + cps_wls_program_sram(ADDR_BUFFER1, p, CPS_PROGRAM_BUFFER_SIZE*4); + p = p + CPS_PROGRAM_BUFFER_SIZE*4; + if (buff0_flag == 1) { + //wait finish + cps_wls_program_wait_cmd_done(); + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer0 program fail\n", __func__); + goto update_fail; + } + buff0_flag = 0; + } + //write buff 0 CMD + cps_wls_program_cmd_send(PGM_BUFFER1); + buff1_flag = 1; + continue; + } + } + if (buff0_flag == 1) + { + //wait finish + cps_wls_program_wait_cmd_done(); + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer0 program fail\n", __func__); + goto update_fail; + } + buff0_flag = 0; + } - //write buff 0 CMD - cps_wls_program_cmd_send(PGM_BUFFER1); - buff1_flag = 1; - continue; - } - } - if (buff0_flag == 1) - { - //wait finish - cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer0 program fail\n", __func__); - goto update_fail; - } - buff0_flag = 0; - } + if (buff1_flag == 1) + { + //wait finish + cps_wls_program_wait_cmd_done(); + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer1 program fail\n", __func__); + goto update_fail; + } + buff1_flag = 0; + } - if (buff1_flag == 1) - { - //wait finish - cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- buffer1 program fail\n", __func__); - goto update_fail; - } - buff1_flag = 0; - } - /*************************************************************************************** * Step4, check app CRC * ***************************************************************************************/ - cps_wls_program_cmd_send(CACL_CRC_APP); - result = cps_wls_program_wait_cmd_done(); + cps_wls_program_cmd_send(CACL_CRC_APP); + result = cps_wls_program_wait_cmd_done(); - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- TEST APP CRC fail", __func__); - if(write_count < 3) goto start_write_app_code; - else goto update_fail; - } + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- TEST APP CRC fail", __func__); + if(write_count < 3) goto start_write_app_code; + else goto update_fail; + } /*************************************************************************************** * Step5, write mcu start flag * ***************************************************************************************/ - cps_wls_program_cmd_send(PGM_WR_FLAG); - result = cps_wls_program_wait_cmd_done(); - - if(result != CPS_WLS_SUCCESS) - { - cps_wls_log(CPS_LOG_ERR, "[%s] ---- WRITE MCU START FLAG fail", __func__); - goto update_fail; - } - - if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000001))) goto update_fail; /*reset all system*/ - msleep(100); + cps_wls_program_cmd_send(PGM_WR_FLAG); + result = cps_wls_program_wait_cmd_done(); + + if(result != CPS_WLS_SUCCESS) { + cps_wls_log(CPS_LOG_ERR, "[%s] ---- WRITE MCU START FLAG fail", __func__); + goto update_fail; + } + + if(CPS_WLS_FAIL == cps_wls_write_word(0x40040004, big_little_endian_convert(0x00000001))) + goto update_fail; /*reset all system*/ + msleep(100); /*************************************************************************************** * Step6, check chip id * ***************************************************************************************/ - //chip_id = cps_wls_read(0x0000); - //if(chip_id != 0x4019) - //{ - //cps_wls_log(CPS_LOG_DEBG, "[%s] ---- CHECK CHIP ID fail = %x\n", __func__, chip_id); - //goto update_fail; - //} + //chip_id = cps_wls_read(0x0000); + //if(chip_id != 0x4019) + //{ + //cps_wls_log(CPS_LOG_DEBG, "[%s] ---- CHECK CHIP ID fail = %x\n", __func__, chip_id); + //goto update_fail; + //} - cps_wls_log(CPS_LOG_DEBG, "[%s] ---- Program successful\n", __func__); + cps_wls_log(CPS_LOG_DEBG, "[%s] ---- Program successful\n", __func__); - return CPS_WLS_SUCCESS; + return CPS_WLS_SUCCESS; update_fail: - cps_wls_log(CPS_LOG_ERR, "[%s] ---- update fail\n", __func__); - return CPS_WLS_FAIL; -} + cps_wls_log(CPS_LOG_ERR, "[%s] ---- update fail\n", __func__); + return CPS_WLS_FAIL; +} //-------------------CPS4019 system interface------------------- static int cps_wls_get_int_flag(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT]); - return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT]); + return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_set_int_clr(int value) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT_CLEAR]); - return cps_wls_write_reg(cps_reg->reg_addr, value, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT_CLEAR]); + return cps_wls_write_reg(cps_reg->reg_addr, value, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_chip_id(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_CHIP_ID]); - return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_CHIP_ID]); + return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_sys_fw_major_version(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_FW_MAJOR_REV]); - return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_FW_MAJOR_REV]); + return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_sys_fw_minor_version(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_FW_MINOR_REV]); - return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_FW_MINOR_REV]); + return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_vrect(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_VRECT]); - return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_VRECT]); + return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_iout(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_IOUT]); - return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_IOUT]); + return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_vout(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_VOUT]); - return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_VOUT]); + return cps_wls_read_reg((int)cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_get_die_tmp(void) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_DIE_TEMP]); - return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ADC_DIE_TEMP]); + return cps_wls_read_reg(cps_reg->reg_addr, (int)cps_reg->reg_bytes_len); } static int cps_wls_set_rx_vout_target(int value) { - cps_reg_s *cps_reg; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_VOUT_SET]); - return cps_wls_write_reg(cps_reg->reg_addr, value, (int)cps_reg->reg_bytes_len); + cps_reg_s *cps_reg; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_VOUT_SET]); + return cps_wls_write_reg(cps_reg->reg_addr, value, (int)cps_reg->reg_bytes_len); } static int cps_wls_set_rx_ocp_threshold(int value) { - int value_temp; - cps_reg_s *cps_reg; - if(value < 100 || value > 1100) return CPS_WLS_FAIL; + int value_temp; + cps_reg_s *cps_reg; + if(value < 100 || value > 1100) + return CPS_WLS_FAIL; - value_temp = value / 50; /*1LSB 50mA*/ - - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ILIM_SET]); - return cps_wls_write_reg(cps_reg->reg_addr, value_temp, (int)cps_reg->reg_bytes_len); + value_temp = value / 50; /*1LSB 50mA*/ + + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_ILIM_SET]); + return cps_wls_write_reg(cps_reg->reg_addr, value_temp, (int)cps_reg->reg_bytes_len); } //------------------------------IRQ Handler----------------------------------- static int cps_wls_set_int_enable(void) { - uint16_t int_en; - cps_reg_s *cps_reg; - - int_en = 0xFFFF; - cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT_ENABLE]); - - if(CPS_WLS_FAIL == cps_wls_write_reg((int)cps_reg->reg_addr, int_en, (int)cps_reg->reg_bytes_len)) goto set_int_fail; - return CPS_WLS_SUCCESS; + uint16_t int_en; + cps_reg_s *cps_reg; + + int_en = 0xFFFF; + cps_reg = (cps_reg_s*)(&cps_reg_cfg[CPS_REG_INT_ENABLE]); + + if(CPS_WLS_FAIL == cps_wls_write_reg((int)cps_reg->reg_addr, int_en, (int)cps_reg->reg_bytes_len)) + goto set_int_fail; + return CPS_WLS_SUCCESS; set_int_fail: - return CPS_WLS_FAIL; + return CPS_WLS_FAIL; } static int cps_wls_irq_process(int int_flag) { - int rc = 0; + int rc = 0; - if (int_flag & INT_TX_DATA_RECEIVED) - { - //todo - } - - if(int_flag & INT_UV) - { - //todo - } - - if(int_flag & INT_OT){} - if(int_flag & INT_OC){} - if(int_flag & INT_OV){} - if(int_flag & INT_OPERATION_MODE){} - if(int_flag & INT_STAT_VRECT) - { - cps_wls_set_int_enable(); - } - if(int_flag & INT_STAT_VOUT){} - if(int_flag & INT_DATA_STORE){} - if(int_flag & INT_AC_MIS_DET){} + if ( int_flag & INT_TX_DATA_RECEIVED ) { + //todo + } - return rc; + if( int_flag & INT_UV ) { + //todo + } + + if(int_flag & INT_OT) { + } + + if(int_flag & INT_OC) { + } + + if(int_flag & INT_OV) { + } + + if(int_flag & INT_OPERATION_MODE) { + } + + if(int_flag & INT_STAT_VRECT) { + cps_wls_set_int_enable(); + } + + if(int_flag & INT_STAT_VOUT) { + } + + if(int_flag & INT_DATA_STORE) { + } + + if(int_flag & INT_AC_MIS_DET) { + } + + return rc; } static irqreturn_t cps_wls_irq_handler(int irq, void *dev_id) { - int int_flag; - int int_clr; - cps_wls_log(CPS_LOG_DEBG, "[%s] IRQ triggered\n", __func__); - mutex_lock(&chip->irq_lock); + int int_flag; + int int_clr; + cps_wls_log(CPS_LOG_DEBG, "[%s] IRQ triggered\n", __func__); + mutex_lock(&chip->irq_lock); - int_flag = cps_wls_get_int_flag(); - cps_wls_log(CPS_LOG_DEBG, ">>>>>int_flag = %x\n", int_flag); - if(int_flag == CPS_WLS_FAIL) - { - cps_wls_log(CPS_LOG_ERR, "[%s] read wls irq reg failed\n", __func__); - mutex_unlock(&chip->irq_lock); - return IRQ_HANDLED; - } - - int_clr = int_flag; - cps_wls_set_int_clr(int_flag); - mutex_unlock(&chip->irq_lock); + int_flag = cps_wls_get_int_flag(); + cps_wls_log(CPS_LOG_DEBG, ">>>>>int_flag = %x\n", int_flag); + if(int_flag == CPS_WLS_FAIL) + { + cps_wls_log(CPS_LOG_ERR, "[%s] read wls irq reg failed\n", __func__); + mutex_unlock(&chip->irq_lock); + return IRQ_HANDLED; + } - cps_wls_irq_process(int_flag); + int_clr = int_flag; + cps_wls_set_int_clr(int_flag); + mutex_unlock(&chip->irq_lock); - return IRQ_HANDLED; + cps_wls_irq_process(int_flag); + + return IRQ_HANDLED; } static enum power_supply_property cps_wls_chrg_props[] = { - POWER_SUPPLY_PROP_CURRENT_MAX, - POWER_SUPPLY_PROP_CHARGING_ENABLED, - POWER_SUPPLY_PROP_PRESENT, - POWER_SUPPLY_PROP_ONLINE, - POWER_SUPPLY_PROP_VOUT_NOW, - POWER_SUPPLY_PROP_VRECT, - POWER_SUPPLY_PROP_IOUT, + POWER_SUPPLY_PROP_CURRENT_MAX, + //POWER_SUPPLY_PROP_CHARGING_ENABLED, + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_ONLINE, + //POWER_SUPPLY_PROP_VOUT_NOW, + //POWER_SUPPLY_PROP_VRECT, + //POWER_SUPPLY_PROP_IOUT, }; static int cps_wls_chrg_property_is_writeable(struct power_supply *psy, - enum power_supply_property psp) + enum power_supply_property psp) { - switch (psp){ - case POWER_SUPPLY_PROP_CURRENT_MAX: - case POWER_SUPPLY_PROP_CHARGING_ENABLED: - return 1; + switch (psp) { + case POWER_SUPPLY_PROP_CURRENT_MAX: + //case POWER_SUPPLY_PROP_CHARGING_ENABLED: + return 1; - default: - break; - } + default: + break; + } - return 0; + return 0; } static int cps_wls_chrg_get_property(struct power_supply *psy, - enum power_supply_property psp, - union power_supply_propval *val) + enum power_supply_property psp, + union power_supply_propval *val) { - int ret ; - switch(psp){ - case POWER_SUPPLY_PROP_ONLINE: - val->intval = 0; - break; - - case POWER_SUPPLY_PROP_VRECT: - ret = cps_wls_get_vrect(); - if(ret != CPS_WLS_FAIL) - { - chip->rx_vrect = ret; - } - val->intval = chip->rx_vrect; - break; - - case POWER_SUPPLY_PROP_IOUT: - ret = cps_wls_get_iout(); - if(ret != CPS_WLS_FAIL) - { - chip->rx_iout = ret; - } - val->intval = chip->rx_iout; - break; + int ret = 0; + switch(psp) { + case POWER_SUPPLY_PROP_ONLINE: + val->intval = 0; + break; +/* + case POWER_SUPPLY_PROP_VRECT: + ret = cps_wls_get_vrect(); + if(ret != CPS_WLS_FAIL) { + chip->rx_vrect = ret; + } + val->intval = chip->rx_vrect; + break; - default: - return -EINVAL; - break; - } + case POWER_SUPPLY_PROP_IOUT: + ret = cps_wls_get_iout(); + if(ret != CPS_WLS_FAIL) { + chip->rx_iout = ret; + } + val->intval = chip->rx_iout; + break; +*/ + default: + return -EINVAL; + break; + } - return 0; + return ret; } static int cps_wls_chrg_set_property(struct power_supply *psy, - enum power_supply_property psp, - const union power_supply_propval *val) + enum power_supply_property psp, + const union power_supply_propval *val) { - int ret = 0; - struct cps_wls_chrg_chip *chip = power_supply_get_drvdata(psy); - cps_wls_log(CPS_LOG_DEBG, "[%s] psp = %d.\n", __func__, psp); - chip->state = 1; - return ret; + int ret = 0; + struct cps_wls_chrg_chip *chip = power_supply_get_drvdata(psy); + cps_wls_log(CPS_LOG_DEBG, "[%s] psp = %d.\n", __func__, psp); + chip->state = 1; + return ret; } static void cps_wls_charger_external_power_changed(struct power_supply *psy) { - ; + ; } //-----------------------------reg addr---------------------------------- static ssize_t show_reg_addr(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "reg addr 0x%08x\n", chip->reg_addr); + return sprintf(buf, "reg addr 0x%08x\n", chip->reg_addr); } -static ssize_t store_reg_addr(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_reg_addr(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) { - int tmp; + int tmp; - tmp = simple_strtoul(buf, NULL, 0); - chip->reg_addr = tmp; - - return count; + tmp = simple_strtoul(buf, NULL, 0); + chip->reg_addr = tmp; + + return count; } static DEVICE_ATTR(reg_addr, 0664, show_reg_addr, store_reg_addr); //-----------------------------reg data---------------------------------- static ssize_t show_reg_data(struct device *dev, struct device_attribute *attr, char *buf) { - chip->reg_data = cps_wls_read_reg(chip->reg_addr, 4); - return sprintf(buf, "reg addr 0x%08x -> 0x%08x\n", chip->reg_addr, chip->reg_data); + chip->reg_data = cps_wls_read_reg(chip->reg_addr, 4); + return sprintf(buf, "reg addr 0x%08x -> 0x%08x\n", chip->reg_addr, chip->reg_data); } -static ssize_t store_reg_data(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_reg_data(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) { - int tmp; + int tmp; - tmp = simple_strtoul(buf, NULL, 0); - chip->reg_data = tmp; - cps_wls_write_reg(chip->reg_addr, chip->reg_data, 4); - - return count; + tmp = simple_strtoul(buf, NULL, 0); + chip->reg_data = tmp; + cps_wls_write_reg(chip->reg_addr, chip->reg_data, 4); + + return count; } static DEVICE_ATTR(reg_data, 0664, show_reg_data, store_reg_data); -static ssize_t store_update_fw(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_update_fw(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) { - int tmp; - tmp = simple_strtoul(buf, NULL, 0); - - if(tmp != 0) - { - cps_wls_log(CPS_LOG_DEBG, "[%s] -------start update fw\n", __func__); - update_firmware(); - } - - return count; + int tmp; + + tmp = simple_strtoul(buf, NULL, 0); + if(tmp != 0) { + cps_wls_log(CPS_LOG_DEBG, "[%s] -------start update fw\n", __func__); + update_firmware(); + } + + return count; } static DEVICE_ATTR(update_fw, 0664, NULL, store_update_fw); + static ssize_t show_iout(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "iout = %dmA\n", cps_wls_get_iout()); + return sprintf(buf, "iout = %dmA\n", cps_wls_get_iout()); } static DEVICE_ATTR(get_iout, 0444, show_iout, NULL); static ssize_t show_vrect(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "vrect = %dmV\n", cps_wls_get_vrect()); + return sprintf(buf, "vrect = %dmV\n", cps_wls_get_vrect()); } static DEVICE_ATTR(get_vrect, 0444, show_vrect, NULL); static ssize_t show_vout(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "vout = %dmV\n", cps_wls_get_vout()); + return sprintf(buf, "vout = %dmV\n", cps_wls_get_vout()); } static DEVICE_ATTR(get_vout, 0444, show_vout, NULL); static ssize_t show_chip_id(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "chip id = %x\n", cps_wls_get_chip_id()); + return sprintf(buf, "chip id = %x\n", cps_wls_get_chip_id()); } static DEVICE_ATTR(get_chip_id, 0444, show_chip_id, NULL); static ssize_t show_fw_major_ver(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "fw major version = 0x%x\n", cps_wls_get_sys_fw_major_version()); + return sprintf(buf, "fw major version = 0x%x\n", cps_wls_get_sys_fw_major_version()); } static DEVICE_ATTR(get_fw_major_ver, 0444, show_fw_major_ver, NULL); static ssize_t show_fw_minor_ver(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "fw minor version = 0x%x\n", cps_wls_get_sys_fw_minor_version()); + return sprintf(buf, "fw minor version = 0x%x\n", cps_wls_get_sys_fw_minor_version()); } static DEVICE_ATTR(get_fw_minor_ver, 0444, show_fw_minor_ver, NULL); static ssize_t show_die_temp(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "die temp = %d\n", cps_wls_get_die_tmp()); + return sprintf(buf, "die temp = %d\n", cps_wls_get_die_tmp()); } static DEVICE_ATTR(get_die_temp, 0444, show_die_temp, NULL); -static ssize_t store_vout_target(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_vout_target(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) { - int tmp; - tmp = simple_strtoul(buf, NULL, 0); - - cps_wls_log(CPS_LOG_DEBG, "[%s] -------set vout target = %dmV\n", __func__ , tmp); - cps_wls_set_rx_vout_target(tmp); - - return count; + int tmp; + + tmp = simple_strtoul(buf, NULL, 0); + cps_wls_log(CPS_LOG_DEBG, "[%s] -------set vout target = %dmV\n", __func__ , tmp); + cps_wls_set_rx_vout_target(tmp); + + return count; } static DEVICE_ATTR(set_vout_target, 0664, NULL, store_vout_target); -static ssize_t store_ocp_thres(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_ocp_thres(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t count) { - int tmp; - tmp = simple_strtoul(buf, NULL, 0); - - cps_wls_log(CPS_LOG_DEBG, "[%s] -------set ocp threshold = %dmA\n", __func__ , tmp); - cps_wls_set_rx_ocp_threshold(tmp); - - return count; + int tmp; + + tmp = simple_strtoul(buf, NULL, 0); + cps_wls_log(CPS_LOG_DEBG, "[%s] -------set ocp threshold = %dmA\n", __func__ , tmp); + cps_wls_set_rx_ocp_threshold(tmp); + + return count; } static DEVICE_ATTR(set_ocp_thres, 0664, NULL, store_ocp_thres); static void cps_wls_create_device_node(struct device *dev) { - device_create_file(dev, &dev_attr_reg_addr); - device_create_file(dev, &dev_attr_reg_data); + device_create_file(dev, &dev_attr_reg_addr); + device_create_file(dev, &dev_attr_reg_data); //-----------------------program--------------------- - device_create_file(dev, &dev_attr_update_fw); + device_create_file(dev, &dev_attr_update_fw); //-----------------------RX-------------------------- - device_create_file(dev, &dev_attr_get_iout); - device_create_file(dev, &dev_attr_get_vrect); - device_create_file(dev, &dev_attr_get_vout); - device_create_file(dev, &dev_attr_get_chip_id); - - device_create_file(dev, &dev_attr_get_fw_major_ver); - device_create_file(dev, &dev_attr_get_fw_minor_ver); - device_create_file(dev, &dev_attr_get_die_temp); - - device_create_file(dev, &dev_attr_set_vout_target); - device_create_file(dev, &dev_attr_set_ocp_thres); + device_create_file(dev, &dev_attr_get_iout); + device_create_file(dev, &dev_attr_get_vrect); + device_create_file(dev, &dev_attr_get_vout); + device_create_file(dev, &dev_attr_get_chip_id); + + device_create_file(dev, &dev_attr_get_fw_major_ver); + device_create_file(dev, &dev_attr_get_fw_minor_ver); + device_create_file(dev, &dev_attr_get_die_temp); + + device_create_file(dev, &dev_attr_set_vout_target); + device_create_file(dev, &dev_attr_set_ocp_thres); } static int cps_wls_parse_dt(struct cps_wls_chrg_chip *chip) { - struct device_node *node = chip->dev->of_node; + struct device_node *node = chip->dev->of_node; - if(!node){ - cps_wls_log(CPS_LOG_ERR, "devices tree node missing \n"); - return -EINVAL; - } + if(!node) { + cps_wls_log(CPS_LOG_ERR, "devices tree node missing \n"); + return -EINVAL; + } - chip->wls_charge_int = of_get_named_gpio(node, "cps_wls_int", 0); - if(!gpio_is_valid(chip->wls_charge_int)) - return -EINVAL; - return 0; + chip->wls_charge_int = of_get_named_gpio(node, "cps_wls_int", 0); + if(!gpio_is_valid(chip->wls_charge_int)) + return -EINVAL; + return 0; } static int cps_wls_gpio_request(struct cps_wls_chrg_chip *chip) { - int ret =0; - int irqn = 0; + int ret =0; + int irqn = 0; - if(gpio_is_valid(chip->wls_charge_int)){ - ret = gpio_request_one(chip->wls_charge_int, GPIOF_DIR_IN, "cps4019_ap_int"); - if(ret){ - cps_wls_log(CPS_LOG_ERR, "[%s] int gpio request failed\n", __func__); - goto err_irq_gpio; - } - irqn = gpio_to_irq(chip->wls_charge_int); - if(irqn < 0){ - ret = irqn; - cps_wls_log(CPS_LOG_ERR, "[%s] failed to gpio to irq\n", __func__); - goto err_irq_gpio; - } - chip->cps_wls_irq = irqn; - }else{ - cps_wls_log(CPS_LOG_ERR, "[%s] reset gpio not provided\n", __func__); - goto err_irq_gpio; - } + if(gpio_is_valid(chip->wls_charge_int)) { + ret = gpio_request_one(chip->wls_charge_int, GPIOF_DIR_IN, "cps4019_ap_int"); + if(ret) { + cps_wls_log(CPS_LOG_ERR, "[%s] int gpio request failed\n", __func__); + goto err_irq_gpio; + } + irqn = gpio_to_irq(chip->wls_charge_int); + if(irqn < 0) { + ret = irqn; + cps_wls_log(CPS_LOG_ERR, "[%s] failed to gpio to irq\n", __func__); + goto err_irq_gpio; + } + chip->cps_wls_irq = irqn; + } else { + cps_wls_log(CPS_LOG_ERR, "[%s] reset gpio not provided\n", __func__); + goto err_irq_gpio; + } err_irq_gpio: - gpio_free(chip->wls_charge_int); + gpio_free(chip->wls_charge_int); - return ret; + return ret; } static void cps_wls_lock_work_init(struct cps_wls_chrg_chip *chip) { - mutex_init(&chip->irq_lock); - mutex_init(&chip->i2c_lock); - wake_lock_init(&chip->cps_wls_wake_lock, WAKE_LOCK_SUSPEND, "cps_wls_wake_lock"); - //INIT_DELAYED_WORK(&chip->cps_wls_monitor_work, cps_wls_monitor_work_func); + mutex_init(&chip->irq_lock); + mutex_init(&chip->i2c_lock); + //wake_lock_init(&chip->cps_wls_wake_lock, WAKE_LOCK_SUSPEND, "cps_wls_wake_lock"); + chip->cps_wls_wake_lock = wakeup_source_create( "cps_wls_wake_lock" ); + +#ifdef CONFIG_HAS_WAKELOCK + wake_lock_init(&chip->cps_wls_wake_lock, WAKE_LOCK_SUSPEND, "cps_wls_wake_lock"); +#else + PM_WAKEUP_REGISTER(chip->dev, chip->cps_wls_wake_lock, "pen_suspend_blocker"); + if(!chip->cps_wls_wake_lock) { + dev_err(chip->dev,"%s: Failed to allocate wakeup source\n",__func__); + //goto fail_wakeup_init; + } +#endif + //INIT_DELAYED_WORK(&chip->cps_wls_monitor_work, cps_wls_monitor_work_func); } static void cps_wls_lock_destroy(struct cps_wls_chrg_chip *chip) { - mutex_destroy(&chip->irq_lock); - mutex_destroy(&chip->i2c_lock); - wake_lock_destroy(&chip->cps_wls_wake_lock); - //cancel_delayed_work_sync(&chip->cps_wls_monitor_work); + mutex_destroy(&chip->irq_lock); + mutex_destroy(&chip->i2c_lock); + //wake_lock_destroy(&chip->cps_wls_wake_lock); + //wakeup_source_destroy(chip->cps_wls_wake_lock); +#ifdef CONFIG_HAS_WAKELOCK + wake_lock_destroy(&chip->cps_wls_wake_lock); +#else + PM_WAKEUP_UNREGISTER(chip->cps_wls_wake_lock); +#endif + //cancel_delayed_work_sync(&chip->cps_wls_monitor_work); } static void cps_wls_free_gpio(struct cps_wls_chrg_chip *chip) { - if(gpio_is_valid(chip->wls_charge_int)) - gpio_free(chip->wls_charge_int); + if(gpio_is_valid(chip->wls_charge_int)) + gpio_free(chip->wls_charge_int); } static int cps_wls_register_psy(struct cps_wls_chrg_chip *chip) { - struct power_supply_config cps_wls_psy_cfg = {}; + struct power_supply_config cps_wls_psy_cfg = {}; - chip->wl_psd.name = CPS_WLS_CHRG_PSY_NAME; - chip->wl_psd.type = POWER_SUPPLY_TYPE_UNKNOWN; - chip->wl_psd.properties = cps_wls_chrg_props; - chip->wl_psd.num_properties = ARRAY_SIZE(cps_wls_chrg_props); - chip->wl_psd.get_property = cps_wls_chrg_get_property; - chip->wl_psd.set_property = cps_wls_chrg_set_property; - chip->wl_psd.property_is_writeable= cps_wls_chrg_property_is_writeable; - chip->wl_psd.external_power_changed = cps_wls_charger_external_power_changed; + chip->wl_psd.name = CPS_WLS_CHRG_PSY_NAME; + chip->wl_psd.type = POWER_SUPPLY_TYPE_UNKNOWN; + chip->wl_psd.properties = cps_wls_chrg_props; + chip->wl_psd.num_properties = ARRAY_SIZE(cps_wls_chrg_props); + chip->wl_psd.get_property = cps_wls_chrg_get_property; + chip->wl_psd.set_property = cps_wls_chrg_set_property; + chip->wl_psd.property_is_writeable= cps_wls_chrg_property_is_writeable; + chip->wl_psd.external_power_changed = cps_wls_charger_external_power_changed; - cps_wls_psy_cfg.drv_data = chip; - cps_wls_psy_cfg.of_node = chip->dev->of_node; - chip->wl_psy = power_supply_register(chip->dev, - &chip->wl_psd, - &cps_wls_psy_cfg); - if(IS_ERR(chip->wl_psy)){ - return PTR_ERR(chip->wl_psy); - } - return CPS_WLS_SUCCESS; + cps_wls_psy_cfg.drv_data = chip; + cps_wls_psy_cfg.of_node = chip->dev->of_node; + chip->wl_psy = power_supply_register(chip->dev, &chip->wl_psd, &cps_wls_psy_cfg); + if(IS_ERR(chip->wl_psy)) { + return PTR_ERR(chip->wl_psy); + } + + return CPS_WLS_SUCCESS; } static int cps_wls_chrg_probe(struct i2c_client *client, - const struct i2c_device_id *id) + const struct i2c_device_id *id) { - int ret=0; - cps_wls_log(CPS_LOG_ERR, "[%s] ---->start\n", __func__); - chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); - if (!chip) { - cps_wls_log(CPS_LOG_ERR,"[%s] cps_debug: Unable to allocate memory\n", __func__); - return -ENOMEM; - } - chip->client = client; - chip->dev = &client->dev; - chip->name = "cps_wls"; - chip->regmap = devm_regmap_init_i2c(client, &cps4019_regmap_config); - if (IS_ERR(chip->regmap)) { - cps_wls_log(CPS_LOG_ERR, "[%s] Failed to allocate regmap!\n", __func__); - devm_kfree(&client->dev, chip); - return PTR_ERR(chip->regmap); - } - i2c_set_clientdata(client, chip); - dev_set_drvdata(&(client->dev), chip); + int ret=0; + cps_wls_log(CPS_LOG_ERR, "[%s] ---->start\n", __func__); + chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); + if (!chip) { + cps_wls_log(CPS_LOG_ERR,"[%s] cps_debug: Unable to allocate memory\n", __func__); + return -ENOMEM; + } + chip->client = client; + chip->dev = &client->dev; + chip->name = "cps_wls"; + chip->regmap = devm_regmap_init_i2c(client, &cps4019_regmap_config); + if (IS_ERR(chip->regmap)) { + cps_wls_log(CPS_LOG_ERR, "[%s] Failed to allocate regmap!\n", __func__); + devm_kfree(&client->dev, chip); + return PTR_ERR(chip->regmap); + } + i2c_set_clientdata(client, chip); + dev_set_drvdata(&(client->dev), chip); - ret = cps_wls_parse_dt(chip); - if(ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] Couldn't parse DT nodes ret = %d\n", __func__, ret); - goto free_source; - } + ret = cps_wls_parse_dt(chip); + if(ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] Couldn't parse DT nodes ret = %d\n", __func__, ret); + goto free_source; + } - ret = cps_wls_gpio_request(chip); - if(ret < 0){ - cps_wls_log(CPS_LOG_ERR, "[%s] gpio request failed ret = %d\n", __func__, ret); - goto free_source; - } + ret = cps_wls_gpio_request(chip); + if(ret < 0) { + cps_wls_log(CPS_LOG_ERR, "[%s] gpio request failed ret = %d\n", __func__, ret); + goto free_source; + } - if(chip->cps_wls_irq){ - ret = devm_request_threaded_irq(&client->dev, chip->cps_wls_irq, NULL, - cps_wls_irq_handler, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "cps_wls_irq", chip); - if(ret){ - cps_wls_log(CPS_LOG_ERR, "[%s] request cps_wls_int irq failed ret = %d\n", __func__, ret); - goto free_source; - } - enable_irq_wake(chip->cps_wls_irq); - } - cps_wls_lock_work_init(chip); + if(chip->cps_wls_irq) { + ret = devm_request_threaded_irq(&client->dev, chip->cps_wls_irq, NULL, + cps_wls_irq_handler, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "cps_wls_irq", chip); + if(ret) { + cps_wls_log(CPS_LOG_ERR, "[%s] request cps_wls_int irq failed ret = %d\n", __func__, ret); + goto free_source; + } + enable_irq_wake(chip->cps_wls_irq); + } + cps_wls_lock_work_init(chip); - cps_wls_create_device_node(&(client->dev)); + cps_wls_create_device_node(&(client->dev)); - ret = cps_wls_register_psy(chip); - if(IS_ERR(chip->wl_psy)){ - cps_wls_log(CPS_LOG_ERR, "[%s] power_supply_register wireless failed , ret = %d\n", __func__, ret); - goto free_source; - } + ret = cps_wls_register_psy(chip); + if(IS_ERR(chip->wl_psy)) { + cps_wls_log(CPS_LOG_ERR, "[%s] power_supply_register wireless failed , ret = %d\n", __func__, ret); + goto free_source; + } - wake_lock(&chip->cps_wls_wake_lock); + //wake_lock(&chip->cps_wls_wake_lock); - cps_wls_log(CPS_LOG_DEBG, "[%s] wireless charger addr low probe successful!\n", __func__); - return ret; + cps_wls_log(CPS_LOG_DEBG, "[%s] wireless charger addr low probe successful!\n", __func__); + return ret; free_source: - cps_wls_free_gpio(chip); - cps_wls_lock_destroy(chip); - cps_wls_log(CPS_LOG_ERR, "[%s] error: free resource.\n", __func__); + cps_wls_free_gpio(chip); + cps_wls_lock_destroy(chip); + cps_wls_log(CPS_LOG_ERR, "[%s] error: free resource.\n", __func__); - return ret; + return ret; } static void not_called_api(void) { - /*int rc; - rc = cps_wls_get_rx_ss_pkt_value(); - rc = cps_wls_get_rx_ce_pkt_value(); - rc = cps_wls_get_rx_rp_pkt_value(); - rc = cps_wls_get_rx_fop_value(); - rc = cps_wls_get_rx_ept_code(); - rc = cps_wls_get_rx_neg_power(); - rc = cps_wls_get_rx_neg_pro(); - rc = cps_wls_get_rx_vrect(); - rc = cps_wls_get_rx_iout(); - rc = cps_wls_get_rx_vout(); - rc = cps_wls_get_rx_die_tmp(); - rc = cps_wls_set_rx_vout_target(5000); - rc = cps_wls_set_rx_neg_power(20); - rc = cps_wls_get_tx_ce_value(); - rc = cps_wls_get_tx_rp_value();*/ - return; + /*int rc; + rc = cps_wls_get_rx_ss_pkt_value(); + rc = cps_wls_get_rx_ce_pkt_value(); + rc = cps_wls_get_rx_rp_pkt_value(); + rc = cps_wls_get_rx_fop_value(); + rc = cps_wls_get_rx_ept_code(); + rc = cps_wls_get_rx_neg_power(); + rc = cps_wls_get_rx_neg_pro(); + rc = cps_wls_get_rx_vrect(); + rc = cps_wls_get_rx_iout(); + rc = cps_wls_get_rx_vout(); + rc = cps_wls_get_rx_die_tmp(); + rc = cps_wls_set_rx_vout_target(5000); + rc = cps_wls_set_rx_neg_power(20); + rc = cps_wls_get_tx_ce_value(); + rc = cps_wls_get_tx_rp_value();*/ + return; } static int cps_wls_chrg_remove(struct i2c_client *client) { - not_called_api(); - //cps_wls_lock_destroy(chip); - kfree(chip); - return 0; + not_called_api(); + //cps_wls_lock_destroy(chip); + kfree(chip); + return 0; } static const struct i2c_device_id cps_wls_charger_id[] = { - {"cps-wls-charger", 0}, - {}, + {"cps-wls-charger", 0}, + {}, }; static const struct of_device_id cps_wls_chrg_of_tbl[] = { - { .compatible = "cps,wls-charger-cps4019", .data = NULL}, - {}, + { .compatible = "cps,wls-charger-cps4019", .data = NULL}, + {}, }; MODULE_DEVICE_TABLE(i2c, cps_wls_charger_id); static struct i2c_driver cps_wls_charger_driver = { - .driver = { - .name = CPS_WLS_CHRG_DRV_NAME, - .owner = THIS_MODULE, - .of_match_table = cps_wls_chrg_of_tbl, - }, - .probe = cps_wls_chrg_probe, - .remove = cps_wls_chrg_remove, - .id_table = cps_wls_charger_id, + .driver = { + .name = CPS_WLS_CHRG_DRV_NAME, + .owner = THIS_MODULE, + .of_match_table = cps_wls_chrg_of_tbl, + }, + .probe = cps_wls_chrg_probe, + .remove = cps_wls_chrg_remove, + .id_table = cps_wls_charger_id, }; static int __init cps_wls_driver_init(void) { - return i2c_add_driver(&cps_wls_charger_driver); + return i2c_add_driver(&cps_wls_charger_driver); } late_initcall(cps_wls_driver_init); static void __exit cps_wls_driver_exit(void) { - i2c_del_driver(&cps_wls_charger_driver); + i2c_del_driver(&cps_wls_charger_driver); } module_exit(cps_wls_driver_exit); @@ -1206,3 +1322,8 @@ MODULE_AUTHOR("jian.deng@convenientpower.com"); MODULE_DESCRIPTION("cps_wls_charger driver"); MODULE_ALIAS("i2c:cps_wls_charger"); +/*WARNING: module cps4019_wls_charger uses symbol vfs_getattr from + namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver, +but does not import it. +*/ +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); diff --git a/drivers/power/cps4019_wls_charger/cps4019_wls_charger.h b/drivers/power/cps4019_wls_charger/cps4019_wls_charger.h index 11d7a1f0ec6e..f7a81119722d 100644 --- a/drivers/power/cps4019_wls_charger/cps4019_wls_charger.h +++ b/drivers/power/cps4019_wls_charger/cps4019_wls_charger.h @@ -10,7 +10,6 @@ #ifndef __CPS_WLS_CHARGER_H__ #define __CPS_WLS_CHARGER_H__ - #define CPS_WLS_FAIL -1 #define CPS_WLS_SUCCESS 0 @@ -70,64 +69,4 @@ #define ILLEGAL 0x40 #define CPS_PROGRAM_BUFFER_SIZE 64 - -/***************************************************************************** - * Log - ****************************************************************************/ -#define CPS_LOG_NONE 0 -#define CPS_LOG_ERR 1 -#define CPS_LOG_DEBG 2 -#define CPS_LOG_FULL 3 - -#define ENABLE_CPS_LOG CPS_LOG_FULL - -#define cps_wls_log(num, fmt, args...) \ - do { \ - if (ENABLE_CPS_LOG >= (int)num) \ - pr_err(fmt, ##args); \ - } while (0) - -/*-------------------------------------------------------------------*/ -struct cps_wls_chrg_chip { - struct i2c_client *client; - struct device *dev; - struct regmap *regmap; - char *name; - struct power_supply *wl_psy; - struct power_supply *batt_psy; - struct power_supply *usb_psy; - struct power_supply *dc_psy; - struct power_supply_desc wl_psd; - struct power_supply_config wl_psc; - struct power_supply_desc batt_psd; - struct power_supply_desc usb_psd; - struct power_supply_desc dc_psd; - struct pinctrl *cps_pinctrl; - struct pinctrl_state *cps_gpio_active; - struct pinctrl_state *cps_gpio_suspend; - - struct wake_lock cps_wls_wake_lock; - struct mutex irq_lock; - struct mutex i2c_lock; - int state; - int wls_charge_int; - int cps_wls_irq; - int reg_addr; - int reg_data; - int rx_ovp; - int rx_ocp; - int rx_opp; - int rx_ht_thl; - int rx_vout_target; - int rx_ept_rsn; - int rx_iout; - int rx_vrect; - int rx_vout; - int rx_die_temp; - int rx_ntc; - int rx_neg_power; - int rx_neg_protocol; - int command_flag; -}; - #endif