Thread (22 messages) 22 messages, 2 authors, 2022-06-07

[PATCH v2 3/6] phy: samsung: ufs: support secondary ufs phy

flat view
STALE1598d SUPERSEDED

From: Chanho Park <hidden>
Date: 2022-06-02 05:33:50
Also in: linux-devicetree, linux-phy, linux-samsung-soc
Subsystem: generic phy framework, the rest · Maintainers: Vinod Koul, Linus Torvalds

Revision v2 of 4 in this series.

Revisions (4)
  1. v1 [diff vs current]
  2. v2 current
  3. v3 [diff vs current]
  4. v4 [diff vs current]
To support secondary ufs phy device, we need to get an offset for phy
isolation from the syscon DT node. If the first index argument of the
node is existing, we can read the offset value and set it as isol->offset.
To allow this assignment, we need to change the field so the isol data
needs to be allocated and copied from drvdata.

Signed-off-by: Chanho Park <redacted>
---
 drivers/phy/samsung/phy-samsung-ufs.c | 14 +++++++++++++-
 drivers/phy/samsung/phy-samsung-ufs.h |  2 +-
 2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/phy/samsung/phy-samsung-ufs.c b/drivers/phy/samsung/phy-samsung-ufs.c
index b7ddb91a02be..7716b6dc955b 100644
--- a/drivers/phy/samsung/phy-samsung-ufs.c
+++ b/drivers/phy/samsung/phy-samsung-ufs.c
@@ -288,6 +288,7 @@ static int samsung_ufs_phy_probe(struct platform_device *pdev)
 	struct phy *gen_phy;
 	struct phy_provider *phy_provider;
 	const struct samsung_ufs_phy_drvdata *drvdata;
+	u32 isol_offset;
 	int err = 0;
 
 	match = of_match_node(samsung_ufs_phy_match, dev->of_node);
@@ -324,11 +325,22 @@ static int samsung_ufs_phy_probe(struct platform_device *pdev)
 		goto out;
 	}
 
+	phy->isol = devm_kzalloc(dev, sizeof(struct pmu_isol), GFP_KERNEL);
+	if (!phy->isol) {
+		err = -ENOMEM;
+		goto out;
+	}
+
 	drvdata = match->data;
 	phy->dev = dev;
 	phy->drvdata = drvdata;
 	phy->cfg = drvdata->cfg;
-	phy->isol = &drvdata->isol;
+	memcpy(phy->isol, &drvdata->isol, sizeof(struct pmu_isol));
+
+	if (!of_property_read_u32_index(dev->of_node, "samsung,pmu-syscon", 1,
+					&isol_offset))
+		phy->isol->offset = isol_offset;
+
 	phy->lane_cnt = PHY_DEF_LANE_CNT;
 
 	phy_set_drvdata(gen_phy, phy);
diff --git a/drivers/phy/samsung/phy-samsung-ufs.h b/drivers/phy/samsung/phy-samsung-ufs.h
index 8c3696b3c5ec..d3e1c2016b27 100644
--- a/drivers/phy/samsung/phy-samsung-ufs.h
+++ b/drivers/phy/samsung/phy-samsung-ufs.h
@@ -122,7 +122,7 @@ struct samsung_ufs_phy {
 	struct clk *rx1_symbol_clk;
 	const struct samsung_ufs_phy_drvdata *drvdata;
 	const struct samsung_ufs_phy_cfg **cfg;
-	const struct pmu_isol *isol;
+	struct pmu_isol *isol;
 	u8 lane_cnt;
 	int ufs_phy_state;
 	enum phy_mode mode;
-- 
2.36.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help