mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
ata: ahci_brcm: Add back regulators management
[ Upstream commit10340f8d7b] While reworking the resources management and departing from using ahci_platform_enable_resources() which did not allow a proper step separation like we need, we unfortunately lost the ability to control AHCI regulators. This broke some Broadcom STB systems that do expect regulators to be turned on to link up with attached hard drives. Fixes:c0cdf2ac4b("ata: ahci_brcm: Fix AHCI resources management") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
61a1f0ad45
commit
9e61730083
@@ -377,6 +377,10 @@ static int __maybe_unused brcm_ahci_resume(struct device *dev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = ahci_platform_enable_regulators(hpriv);
|
||||||
|
if (ret)
|
||||||
|
goto out_disable_clks;
|
||||||
|
|
||||||
brcm_sata_init(priv);
|
brcm_sata_init(priv);
|
||||||
brcm_sata_phys_enable(priv);
|
brcm_sata_phys_enable(priv);
|
||||||
brcm_sata_alpm_init(hpriv);
|
brcm_sata_alpm_init(hpriv);
|
||||||
@@ -406,6 +410,8 @@ out_disable_platform_phys:
|
|||||||
ahci_platform_disable_phys(hpriv);
|
ahci_platform_disable_phys(hpriv);
|
||||||
out_disable_phys:
|
out_disable_phys:
|
||||||
brcm_sata_phys_disable(priv);
|
brcm_sata_phys_disable(priv);
|
||||||
|
ahci_platform_disable_regulators(hpriv);
|
||||||
|
out_disable_clks:
|
||||||
ahci_platform_disable_clks(hpriv);
|
ahci_platform_disable_clks(hpriv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -490,6 +496,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out_reset;
|
goto out_reset;
|
||||||
|
|
||||||
|
ret = ahci_platform_enable_regulators(hpriv);
|
||||||
|
if (ret)
|
||||||
|
goto out_disable_clks;
|
||||||
|
|
||||||
/* Must be first so as to configure endianness including that
|
/* Must be first so as to configure endianness including that
|
||||||
* of the standard AHCI register space.
|
* of the standard AHCI register space.
|
||||||
*/
|
*/
|
||||||
@@ -499,7 +509,7 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||||||
priv->port_mask = brcm_ahci_get_portmask(hpriv, priv);
|
priv->port_mask = brcm_ahci_get_portmask(hpriv, priv);
|
||||||
if (!priv->port_mask) {
|
if (!priv->port_mask) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out_disable_clks;
|
goto out_disable_regulators;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must be done before ahci_platform_enable_phys() */
|
/* Must be done before ahci_platform_enable_phys() */
|
||||||
@@ -524,6 +534,8 @@ out_disable_platform_phys:
|
|||||||
ahci_platform_disable_phys(hpriv);
|
ahci_platform_disable_phys(hpriv);
|
||||||
out_disable_phys:
|
out_disable_phys:
|
||||||
brcm_sata_phys_disable(priv);
|
brcm_sata_phys_disable(priv);
|
||||||
|
out_disable_regulators:
|
||||||
|
ahci_platform_disable_regulators(hpriv);
|
||||||
out_disable_clks:
|
out_disable_clks:
|
||||||
ahci_platform_disable_clks(hpriv);
|
ahci_platform_disable_clks(hpriv);
|
||||||
out_reset:
|
out_reset:
|
||||||
|
|||||||
Reference in New Issue
Block a user