mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 19:53:59 +08:00
usb: phy: phy-msm-usb: Fix usage of devm_regulator_bulk_get()
The regulator_bulk_data pointer passed to devm_regulator_bulk_get() is used to store the client handles for the regulators, which is later used by devm_regulator_bulk_release() to free the regulators. Passing a local array as is done here means the memory used to store the handles is freed causing the handles to be corrupted, resulting in a crash when devm_regulator_bulk_release() tries to free them. Fix this my moving the array inside of the msm_otg structure. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
aca5b9ebd0
commit
5a8141bd41
@ -197,6 +197,7 @@ struct msm_otg {
|
||||
struct regulator *v3p3;
|
||||
struct regulator *v1p8;
|
||||
struct regulator *vddcx;
|
||||
struct regulator_bulk_data supplies[3];
|
||||
|
||||
struct reset_control *phy_rst;
|
||||
struct reset_control *link_rst;
|
||||
@ -1731,7 +1732,6 @@ static int msm_otg_reboot_notify(struct notifier_block *this,
|
||||
|
||||
static int msm_otg_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct regulator_bulk_data regs[3];
|
||||
int ret = 0;
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct msm_otg_platform_data *pdata;
|
||||
@ -1817,17 +1817,18 @@ static int msm_otg_probe(struct platform_device *pdev)
|
||||
return motg->irq;
|
||||
}
|
||||
|
||||
regs[0].supply = "vddcx";
|
||||
regs[1].supply = "v3p3";
|
||||
regs[2].supply = "v1p8";
|
||||
motg->supplies[0].supply = "vddcx";
|
||||
motg->supplies[1].supply = "v3p3";
|
||||
motg->supplies[2].supply = "v1p8";
|
||||
|
||||
ret = devm_regulator_bulk_get(motg->phy.dev, ARRAY_SIZE(regs), regs);
|
||||
ret = devm_regulator_bulk_get(motg->phy.dev, ARRAY_SIZE(motg->supplies),
|
||||
motg->supplies);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
motg->vddcx = regs[0].consumer;
|
||||
motg->v3p3 = regs[1].consumer;
|
||||
motg->v1p8 = regs[2].consumer;
|
||||
motg->vddcx = motg->supplies[0].consumer;
|
||||
motg->v3p3 = motg->supplies[1].consumer;
|
||||
motg->v1p8 = motg->supplies[2].consumer;
|
||||
|
||||
clk_set_rate(motg->clk, 60000000);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user