diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-26 14:48:20 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-26 14:48:19 -0700 |
| commit | cf174274e9be36b284dec2666118e4436662601a (patch) | |
| tree | 2a6ca02b1b510ced0ddcff7e8efb8480dae862e9 /drivers/power | |
| parent | 7ab2fa74f1dd8567219d6f9b27b59aa2e760652f (diff) | |
| parent | 4d1e66e5e5a143aecfe5b1b75e578c567bf0a15f (diff) | |
Merge "qcom-charger: expand data structure smb_chg_param"
Diffstat (limited to 'drivers/power')
| -rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 22 | ||||
| -rw-r--r-- | drivers/power/qcom-charger/smb-lib.h | 5 |
2 files changed, 21 insertions, 6 deletions
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index 18b02fbde5a6..eae00d4e1a1b 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -134,7 +134,10 @@ int smblib_get_charge_param(struct smb_charger *chg, return rc; } - *val_u = val_raw * param->step_u + param->min_u; + if (param->get_proc) + *val_u = param->get_proc(param, val_raw); + else + *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); @@ -216,13 +219,20 @@ int smblib_set_charge_param(struct smb_charger *chg, int rc = 0; u8 val_raw; - if (val_u > param->max_u || val_u < param->min_u) { - dev_err(chg->dev, "%s: %d is out of range [%d, %d]\n", - param->name, val_u, param->min_u, param->max_u); - return -EINVAL; + if (param->set_proc) { + rc = param->set_proc(param, val_u, &val_raw); + if (rc < 0) + return -EINVAL; + } else { + if (val_u > param->max_u || val_u < param->min_u) { + dev_err(chg->dev, "%s: %d is out of range [%d, %d]\n", + param->name, val_u, param->min_u, param->max_u); + return -EINVAL; + } + + val_raw = (val_u - param->min_u) / param->step_u; } - val_raw = (val_u - param->min_u) / param->step_u; rc = smblib_write(chg, param->reg, val_raw); if (rc < 0) { dev_err(chg->dev, "%s: Couldn't write 0x%02x to 0x%04x rc=%d\n", diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h index 47839074b724..12074fb5ce9d 100644 --- a/drivers/power/qcom-charger/smb-lib.h +++ b/drivers/power/qcom-charger/smb-lib.h @@ -56,6 +56,11 @@ struct smb_chg_param { int min_u; int max_u; int step_u; + int (*get_proc)(struct smb_chg_param *param, + u8 val_raw); + int (*set_proc)(struct smb_chg_param *param, + int val_u, + u8 *val_raw); }; struct smb_params { |
