static void pmic_fg_init_config_regs(struct pmic_fg_info *info) { int ret; /* * check if the config data is already * programmed and if so just return. */ ret = pmic_fg_reg_readb(info, DC_FG_CNTL_REG); if (ret < 0) { dev_warn(&info->pdev->dev, "FG CNTL reg read err!!\n"); } else if ((ret & FG_CNTL_OCV_ADJ_EN) && (ret & FG_CNTL_CAP_ADJ_EN)) { dev_info(&info->pdev->dev, "FG data except the OCV curve is initialized\n"); /* * ocv curve will be set to default values * at every boot, so it is needed to explicitly write * the ocv curve data for each boot */ ret = pmic_fg_program_ocv_curve(info); if (ret < 0) dev_err(&info->pdev->dev, "set ocv curve fail:%d\n", ret); /* comment the following for FW may have touched the regsiters */ /*info->fg_init_done = true;*/ /*pmic_fg_dump_init_regs(info);*/ /*return;*/ } else { dev_info(&info->pdev->dev, "FG data need to be initialized\n"); } ret = pmic_fg_program_ocv_curve(info); if (ret < 0) dev_err(&info->pdev->dev, "set ocv curve fail:%d\n", ret); ret = pmic_fg_program_rdc_vals(info); if (ret < 0) dev_err(&info->pdev->dev, "set rdc fail:%d\n", ret); ret = pmic_fg_program_design_cap(info); if (ret < 0) dev_err(&info->pdev->dev, "set design cap fail:%d\n", ret); ret = pmic_fg_program_vbatt_full(info); if (ret < 0) dev_err(&info->pdev->dev, "set vbatt full fail:%d\n", ret); ret = pmic_fg_set_lowbatt_thresholds(info); if (ret < 0) dev_err(&info->pdev->dev, "lowbatt thr set fail:%d\n", ret); ret = pmic_fg_reg_writeb(info, DC_FG_CNTL_REG, 0xff); if (ret < 0) dev_err(&info->pdev->dev, "gauge cntl set fail:%d\n", ret); info->fg_init_done = true; pmic_fg_dump_init_regs(info); }
static void pmic_fg_init_config_regs(struct pmic_fg_info *info) { int ret; /* * check if the config data is already * programmed and if so just return. */ ret = pmic_fg_reg_readb(info, DC_FG_CNTL_REG); if (ret < 0) { dev_warn(&info->pdev->dev, "FG CNTL reg read err!!\n"); } else if ((ret & FG_CNTL_OCV_ADJ_EN) && (ret & FG_CNTL_CAP_ADJ_EN)) { dev_dbg(&info->pdev->dev, "FG data is already initialized\n"); /* comment the following for FW may have touched the regsiters */ /* info->fg_init_done = true; */ /* pmic_fg_dump_init_regs(info); */ /* return; */ } else { dev_dbg(&info->pdev->dev, "FG data need to be initialized\n"); } ret = pmic_fg_program_ocv_curve(info); if (ret < 0) dev_err(&info->pdev->dev, "set ocv curve fail:%d\n", ret); ret = pmic_fg_program_rdc_vals(info); if (ret < 0) dev_err(&info->pdev->dev, "set rdc fail:%d\n", ret); ret = pmic_fg_program_design_cap(info); if (ret < 0) dev_err(&info->pdev->dev, "set design cap fail:%d\n", ret); ret = pmic_fg_program_vbatt_full(info); if (ret < 0) dev_err(&info->pdev->dev, "set vbatt full fail:%d\n", ret); ret = pmic_fg_set_lowbatt_thresholds(info); if (ret < 0) dev_err(&info->pdev->dev, "lowbatt thr set fail:%d\n", ret); ret = pmic_fg_reg_writeb(info, DC_FG_CNTL_REG, 0xf7); if (ret < 0) dev_err(&info->pdev->dev, "gauge cntl set fail:%d\n", ret); info->fg_init_done = true; /* no need to dump registers except in debug cases pmic_fg_dump_init_regs(info); */ }