msm: mhl: sii8334: Fix null pointer dereference at power off
Check for null pointer before disabling the regulators. During cable connect/disconnect and suspend/resume check for previous power state of mhl to avoid enabling/disabling gpio's and regulators twice. Change-Id: I44dc51122da4630974147b829236cb39c1ad54b0 Signed-off-by: Raghavendra Ambadas <rambad@codeaurora.org>
This commit is contained in:
parent
6810e00992
commit
8f9568b4a0
1 changed files with 22 additions and 15 deletions
|
@ -399,7 +399,7 @@ static int mhl_sii_config(struct mhl_tx_ctrl *mhl_ctrl, bool on)
|
||||||
|
|
||||||
client = mhl_ctrl->i2c_handle;
|
client = mhl_ctrl->i2c_handle;
|
||||||
|
|
||||||
if (on) {
|
if (on && !mhl_ctrl->irq_req_done) {
|
||||||
rc = mhl_vreg_config(mhl_ctrl, 1);
|
rc = mhl_vreg_config(mhl_ctrl, 1);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
pr_err("%s: vreg init failed [%d]\n",
|
pr_err("%s: vreg init failed [%d]\n",
|
||||||
|
@ -424,7 +424,7 @@ static int mhl_sii_config(struct mhl_tx_ctrl *mhl_ctrl, bool on)
|
||||||
} else {
|
} else {
|
||||||
mhl_ctrl->irq_req_done = true;
|
mhl_ctrl->irq_req_done = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!on && mhl_ctrl->irq_req_done) {
|
||||||
free_irq(mhl_ctrl->i2c_handle->irq, mhl_ctrl);
|
free_irq(mhl_ctrl->i2c_handle->irq, mhl_ctrl);
|
||||||
mhl_gpio_config(mhl_ctrl, 0);
|
mhl_gpio_config(mhl_ctrl, 0);
|
||||||
mhl_vreg_config(mhl_ctrl, 0);
|
mhl_vreg_config(mhl_ctrl, 0);
|
||||||
|
@ -1533,22 +1533,29 @@ static int mhl_sii_reg_config(struct i2c_client *client, bool enable)
|
||||||
pr_debug("%s\n", __func__);
|
pr_debug("%s\n", __func__);
|
||||||
|
|
||||||
if (!enable) {
|
if (!enable) {
|
||||||
|
if (reg_8941_vdda) {
|
||||||
regulator_disable(reg_8941_vdda);
|
regulator_disable(reg_8941_vdda);
|
||||||
regulator_put(reg_8941_vdda);
|
regulator_put(reg_8941_vdda);
|
||||||
reg_8941_vdda = NULL;
|
reg_8941_vdda = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg_8941_smps3a) {
|
||||||
regulator_disable(reg_8941_smps3a);
|
regulator_disable(reg_8941_smps3a);
|
||||||
regulator_put(reg_8941_smps3a);
|
regulator_put(reg_8941_smps3a);
|
||||||
reg_8941_smps3a = NULL;
|
reg_8941_smps3a = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg_8941_l02) {
|
||||||
regulator_disable(reg_8941_l02);
|
regulator_disable(reg_8941_l02);
|
||||||
regulator_put(reg_8941_l02);
|
regulator_put(reg_8941_l02);
|
||||||
reg_8941_l02 = NULL;
|
reg_8941_l02 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg_8941_l24) {
|
||||||
regulator_disable(reg_8941_l24);
|
regulator_disable(reg_8941_l24);
|
||||||
regulator_put(reg_8941_l24);
|
regulator_put(reg_8941_l24);
|
||||||
reg_8941_l24 = NULL;
|
reg_8941_l24 = NULL;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue