Files
operating-system/buildroot-external/board/hardkernel/odroid-xu4/patches/linux/0001-ODROID-XU4-regulator-s2mps11-add-ethernet-power-rese.patch
Stefan Agner 25c672a27f Linux: Update kernel 6.1.12 for non-Raspberry Pi systems (#2358)
* Linux: Update kernel 6.1.12

* Update generic_raw_uart to build with Linux 6.1

* Update Realtek rtl8821cu/rtl88x2bu to build with Linux 6.1

* Bump buildroot

* buildroot 43f82f01b9...90aa1a6daa (1):
  > rtl8812au-aircrack-ng: bump to latest rev d98018

* Fix eq3_char_loop to build with Linux 6.1

* rtl8821cu: make sure -Werror is disabled for the kernel build

* generic_raw_uart: make sure -Werror is disabled for the kernel build
2023-02-16 14:53:38 +01:00

95 lines
2.9 KiB
Diff

From e7d59e0444170873e945a0675ed1565a65c99e17 Mon Sep 17 00:00:00 2001
Message-Id: <e7d59e0444170873e945a0675ed1565a65c99e17.1676489173.git.stefan@agner.ch>
From: memeka <mihailescu2m@gmail.com>
Date: Fri, 18 Jan 2019 14:36:21 +1030
Subject: [PATCH] ODROID-XU4: regulator: s2mps11: add ethernet power reset in
shutdown function
Ethernet device cannot be detected on warm boot sometimes. This patch is
to add the power reset routines for ethernet device using PMIC. Then
ethernet device can be reset hardware-wise.
Change-Id: Iffbe2966da7e4679f63b91ab79241167391792df
Signed-off-by: Brian Kim <brian.kim@hardkernel.com>
Signed-off-by: Marian Mihailescu <mihailescu2m@gmail.com>
---
drivers/regulator/s2mps11.c | 55 +++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index ebc67e3ddd4f..51f128076db9 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -1117,6 +1117,57 @@ static const struct regulator_desc s2mpu02_regulators[] = {
regulator_desc_s2mpu02_buck7(7),
};
+static int s2mps11_pmic_ethonoff(struct platform_device *pdev, bool onoff)
+{
+ struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
+ unsigned int reg_val = 0;
+ int ret = 0;
+
+ ret = regmap_read(iodev->regmap_pmic, S2MPS11_REG_L15CTRL, &reg_val);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to read S2MPS11_REG_L15CTRL value\n");
+ return ret;
+ }
+
+ ret = regmap_read(iodev->regmap_pmic, S2MPS11_REG_L17CTRL, &reg_val);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to read S2MPS11_REG_L17CTRL value\n");
+ return ret;
+ }
+
+ if (onoff) {
+ /* ETH VDD0 ON */
+ ret = regmap_update_bits(iodev->regmap_pmic, S2MPS11_REG_L15CTRL, 0xFF, 0x72);
+ if (ret) {
+ dev_err(&pdev->dev, "cannot update S2MPS11 LDO CTRL15 register\n");
+ return ret;
+ }
+
+ /* ETH VDD1 ON */
+ ret = regmap_update_bits(iodev->regmap_pmic, S2MPS11_REG_L17CTRL, 0xFF, 0x72);
+ if (ret) {
+ dev_err(&pdev->dev, "cannot update S2MPS11 LDO CTRL17 register\n");
+ return ret;
+ }
+ } else {
+ /* ETH VDD0 OFF */
+ ret = regmap_update_bits(iodev->regmap_pmic, S2MPS11_REG_L15CTRL, 0x3F, 0x00);
+ if (ret) {
+ dev_err(&pdev->dev, "cannot update S2MPS11 LDO CTRL15 register\n");
+ return ret;
+ }
+
+ /* ETH VDD1 OFF */
+ ret = regmap_update_bits(iodev->regmap_pmic, S2MPS11_REG_L17CTRL, 0x3F, 0x00);
+ if (ret) {
+ dev_err(&pdev->dev, "cannot update S2MPS11 LDO CTRL17 register\n");
+ return ret;
+ }
+ }
+
+ return ret;
+}
+
static int s2mps11_pmic_probe(struct platform_device *pdev)
{
struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
@@ -1219,6 +1270,10 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
}
}
+ dev_info(&pdev->dev, "Resetting Ethernet\n");
+ s2mps11_pmic_ethonoff(pdev, false);
+ mdelay(10);
+ s2mps11_pmic_ethonoff(pdev, true);
out:
kfree(rdata);
--
2.39.1