From 2480c73944b4f7e9d25a37b4f3df90981d59c4d1 Mon Sep 17 00:00:00 2001 From: Nicholas Troast Date: Thu, 12 May 2016 17:56:35 -0700 Subject: [PATCH] qcom-charger: smb-lib: add get charge param and usb suspend The parallel charger does not use voting, therefore register getter and setter functions need to be created or exposed. CRs-Fixed: 1023141 Change-Id: I96a4877196be78c0eeecc3fc08419e8990572aaa Signed-off-by: Nicholas Troast --- drivers/power/qcom-charger/smb-lib.c | 43 +++++++++++++++++++++++++--- drivers/power/qcom-charger/smb-lib.h | 8 ++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index aea697417bda..83d7f5b0ab0e 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -86,6 +86,41 @@ unlock: * REGISTER GETTERS * ********************/ +int smblib_get_charge_param(struct smb_charger *chg, + struct smb_chg_param *param, int *val_u) +{ + int rc = 0; + u8 val_raw; + + rc = smblib_read(chg, param->reg, &val_raw); + if (rc < 0) { + dev_err(chg->dev, "%s: Couldn't read from 0x%04x rc=%d\n", + param->name, param->reg, rc); + return rc; + } + + *val_u = val_raw * param->step_u + param->min_u; + smblib_dbg(chg, PR_REGISTER, "%s = %d (0x%02x)\n", + param->name, *val_u, val_raw); + + return rc; +} + +int smblib_get_usb_suspend(struct smb_charger *chg, int *suspend) +{ + int rc = 0; + u8 temp; + + rc = smblib_read(chg, USBIN_CMD_IL_REG, &temp); + if (rc < 0) { + dev_err(chg->dev, "Couldn't read USBIN_CMD_IL rc=%d\n", rc); + return rc; + } + *suspend = temp & USBIN_SUSPEND_BIT; + + return rc; +} + struct apsd_result { const char * const name; const u8 bit; @@ -156,8 +191,8 @@ int smblib_enable_charging(struct smb_charger *chg, bool enable) return rc; } -static int smblib_set_charge_param(struct smb_charger *chg, - struct smb_chg_param *param, int val_u) +int smblib_set_charge_param(struct smb_charger *chg, + struct smb_chg_param *param, int val_u) { int rc = 0; u8 val_raw; @@ -182,7 +217,7 @@ static int smblib_set_charge_param(struct smb_charger *chg, return rc; } -static int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend) +int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend) { int rc = 0; @@ -195,7 +230,7 @@ static int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend) return rc; } -static int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend) +int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend) { int rc = 0; diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h index af3d29cc2d20..23639ba181c8 100644 --- a/drivers/power/qcom-charger/smb-lib.h +++ b/drivers/power/qcom-charger/smb-lib.h @@ -96,7 +96,15 @@ int smblib_read(struct smb_charger *chg, u16 addr, u8 *val); int smblib_masked_write(struct smb_charger *chg, u16 addr, u8 mask, u8 val); int smblib_write(struct smb_charger *chg, u16 addr, u8 val); +int smblib_get_charge_param(struct smb_charger *chg, + struct smb_chg_param *param, int *val_u); +int smblib_get_usb_suspend(struct smb_charger *chg, int *suspend); + int smblib_enable_charging(struct smb_charger *chg, bool enable); +int smblib_set_charge_param(struct smb_charger *chg, + struct smb_chg_param *param, int val_u); +int smblib_set_usb_suspend(struct smb_charger *chg, bool suspend); +int smblib_set_dc_suspend(struct smb_charger *chg, bool suspend); int smblib_vbus_regulator_enable(struct regulator_dev *rdev); int smblib_vbus_regulator_disable(struct regulator_dev *rdev);