Loading drivers/power/qcom-charger/smb-lib.c +46 −0 Original line number Diff line number Diff line Loading @@ -2032,6 +2032,52 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, return rc; } int smblib_reg_block_update(struct smb_charger *chg, struct reg_info *entry) { int rc = 0; while (entry && entry->reg) { rc = smblib_read(chg, entry->reg, &entry->bak); if (rc < 0) { dev_err(chg->dev, "Error in reading %s rc=%d\n", entry->desc, rc); break; } entry->bak &= entry->mask; rc = smblib_masked_write(chg, entry->reg, entry->mask, entry->val); if (rc < 0) { dev_err(chg->dev, "Error in writing %s rc=%d\n", entry->desc, rc); break; } entry++; } return rc; } int smblib_reg_block_restore(struct smb_charger *chg, struct reg_info *entry) { int rc = 0; while (entry && entry->reg) { rc = smblib_masked_write(chg, entry->reg, entry->mask, entry->bak); if (rc < 0) { dev_err(chg->dev, "Error in writing %s rc=%d\n", entry->desc, rc); break; } entry++; } return rc; } int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg, const union power_supply_propval *val) { Loading drivers/power/qcom-charger/smb-lib.h +8 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,14 @@ struct smb_iio { struct iio_channel *batt_i_chan; }; struct reg_info { u16 reg; u8 mask; u8 val; u8 bak; const char *desc; }; struct smb_charger { struct device *dev; char *name; Loading Loading
drivers/power/qcom-charger/smb-lib.c +46 −0 Original line number Diff line number Diff line Loading @@ -2032,6 +2032,52 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, return rc; } int smblib_reg_block_update(struct smb_charger *chg, struct reg_info *entry) { int rc = 0; while (entry && entry->reg) { rc = smblib_read(chg, entry->reg, &entry->bak); if (rc < 0) { dev_err(chg->dev, "Error in reading %s rc=%d\n", entry->desc, rc); break; } entry->bak &= entry->mask; rc = smblib_masked_write(chg, entry->reg, entry->mask, entry->val); if (rc < 0) { dev_err(chg->dev, "Error in writing %s rc=%d\n", entry->desc, rc); break; } entry++; } return rc; } int smblib_reg_block_restore(struct smb_charger *chg, struct reg_info *entry) { int rc = 0; while (entry && entry->reg) { rc = smblib_masked_write(chg, entry->reg, entry->mask, entry->bak); if (rc < 0) { dev_err(chg->dev, "Error in writing %s rc=%d\n", entry->desc, rc); break; } entry++; } return rc; } int smblib_set_prop_pd_in_hard_reset(struct smb_charger *chg, const union power_supply_propval *val) { Loading
drivers/power/qcom-charger/smb-lib.h +8 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,14 @@ struct smb_iio { struct iio_channel *batt_i_chan; }; struct reg_info { u16 reg; u8 mask; u8 val; u8 bak; const char *desc; }; struct smb_charger { struct device *dev; char *name; Loading