summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-08-23 11:54:12 -0700
committerAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-08-23 12:04:13 -0700
commitaecb04a1c3eb82994feb9a1ef43256075f19985c (patch)
treeecd1e6d024576a44f8615b48ce61ba7106ab8c82
parentc605e110ab18604981481a7b502da54640b620bc (diff)
smb138x: fix WD bite
Commit 85635da429d67f9fdf1e ("qcom-charger: smb138x: fix buck damage on v1.1 hardware") introduced wa_flags as the first member in the struct. However there are implict assumptions in the driver that the first member is the library structure. This causes memory corruption and an eventual watch dog bite reset. Fix it by ensuring that the library struct is explicitly initialized from the parent struct. CRs-Fixed: 1055113 Change-Id: I38474a228ec7b245dc330b4a37847c9f1bf29c2a Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
-rw-r--r--drivers/power/qcom-charger/smb138x-charger.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/power/qcom-charger/smb138x-charger.c b/drivers/power/qcom-charger/smb138x-charger.c
index 329ee7210c1f..54cd5c158411 100644
--- a/drivers/power/qcom-charger/smb138x-charger.c
+++ b/drivers/power/qcom-charger/smb138x-charger.c
@@ -77,10 +77,10 @@ struct smb_dt_props {
};
struct smb138x {
- u32 wa_flags;
struct smb_charger chg;
struct smb_dt_props dt;
struct power_supply *parallel_psy;
+ u32 wa_flags;
};
static int __debug_mask;
@@ -269,7 +269,8 @@ static int smb138x_batt_get_prop(struct power_supply *psy,
enum power_supply_property prop,
union power_supply_propval *val)
{
- struct smb_charger *chg = power_supply_get_drvdata(psy);
+ struct smb138x *chip = power_supply_get_drvdata(psy);
+ struct smb_charger *chg = &chip->chg;
int rc = 0;
switch (prop) {
@@ -304,7 +305,8 @@ static int smb138x_batt_set_prop(struct power_supply *psy,
enum power_supply_property prop,
const union power_supply_propval *val)
{
- struct smb_charger *chg = power_supply_get_drvdata(psy);
+ struct smb138x *chip = power_supply_get_drvdata(psy);
+ struct smb_charger *chg = &chip->chg;
int rc = 0;
switch (prop) {
@@ -378,7 +380,8 @@ static int smb138x_parallel_get_prop(struct power_supply *psy,
enum power_supply_property prop,
union power_supply_propval *val)
{
- struct smb_charger *chg = power_supply_get_drvdata(psy);
+ struct smb138x *chip = power_supply_get_drvdata(psy);
+ struct smb_charger *chg = &chip->chg;
int rc = 0;
u8 temp;
@@ -418,7 +421,8 @@ static int smb138x_parallel_set_prop(struct power_supply *psy,
enum power_supply_property prop,
const union power_supply_propval *val)
{
- struct smb_charger *chg = power_supply_get_drvdata(psy);
+ struct smb138x *chip = power_supply_get_drvdata(psy);
+ struct smb_charger *chg = &chip->chg;
int rc = 0;
switch (prop) {