mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/3] phy: some updates
@ 2024-10-25  8:48 Sascha Hauer
  2024-10-25  8:48 ` [PATCH 1/3] phy: make of_phandle_args constant Sascha Hauer
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-10-25  8:48 UTC (permalink / raw)
  To: open list:BAREBOX

Collect all phy devices in their own class and implement
of_phy_simple_xlate().

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
Sascha Hauer (3):
      phy: make of_phandle_args constant
      phy: put phy devices in class
      phy: add of_phy_simple_xlate()

 drivers/phy/freescale/phy-fsl-imx8mq-usb.c         |  2 +-
 drivers/phy/phy-core.c                             | 34 ++++++++++++++++++++--
 drivers/phy/phy-stm32-usbphyc.c                    |  2 +-
 drivers/phy/rockchip/phy-rockchip-inno-usb2.c      |  2 +-
 drivers/phy/rockchip/phy-rockchip-naneng-combphy.c |  2 +-
 drivers/phy/rockchip/phy-rockchip-snps-pcie3.c     |  2 +-
 drivers/phy/usb-nop-xceiv.c                        |  2 +-
 drivers/pinctrl/pinctrl-tegra-xusb.c               |  2 +-
 drivers/usb/imx/imx-usb-phy.c                      |  2 +-
 include/linux/phy/phy.h                            |  7 +++--
 10 files changed, 44 insertions(+), 13 deletions(-)
---
base-commit: e55e492573e33823f25935ee00fe7fa7bf2c5c90
change-id: 20241025-phy-class-8918df8448e1

Best regards,
-- 
Sascha Hauer <s.hauer@pengutronix.de>




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] phy: make of_phandle_args constant
  2024-10-25  8:48 [PATCH 0/3] phy: some updates Sascha Hauer
@ 2024-10-25  8:48 ` Sascha Hauer
  2024-10-25  8:49 ` [PATCH 2/3] phy: put phy devices in class Sascha Hauer
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-10-25  8:48 UTC (permalink / raw)
  To: open list:BAREBOX

Like done in Linux the of_xlate() args argument should be constant.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/phy/freescale/phy-fsl-imx8mq-usb.c         | 2 +-
 drivers/phy/phy-core.c                             | 2 +-
 drivers/phy/phy-stm32-usbphyc.c                    | 2 +-
 drivers/phy/rockchip/phy-rockchip-inno-usb2.c      | 2 +-
 drivers/phy/rockchip/phy-rockchip-naneng-combphy.c | 2 +-
 drivers/phy/rockchip/phy-rockchip-snps-pcie3.c     | 2 +-
 drivers/phy/usb-nop-xceiv.c                        | 2 +-
 drivers/pinctrl/pinctrl-tegra-xusb.c               | 2 +-
 drivers/usb/imx/imx-usb-phy.c                      | 2 +-
 include/linux/phy/phy.h                            | 4 ++--
 10 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
index b9f9fad1fd..1349ca922c 100644
--- a/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
+++ b/drivers/phy/freescale/phy-fsl-imx8mq-usb.c
@@ -144,7 +144,7 @@ static const struct of_device_id imx8mq_usb_phy_of_match[] = {
 MODULE_DEVICE_TABLE(of, imx8mq_usb_phy_of_match);
 
 static struct phy *imx8mq_usb_phy_xlate(struct device *dev,
-					struct of_phandle_args *args)
+					const struct of_phandle_args *args)
 {
 	struct imx8mq_usb_phy *imx_phy = dev->priv;
 
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 0a2f1b0d11..c289e75c78 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -81,7 +81,7 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
  */
 struct phy_provider *__of_phy_provider_register(struct device *dev,
 						struct phy * (*of_xlate)(struct device *dev,
-									 struct of_phandle_args *args))
+							const struct of_phandle_args *args))
 {
 	struct phy_provider *phy_provider;
 
diff --git a/drivers/phy/phy-stm32-usbphyc.c b/drivers/phy/phy-stm32-usbphyc.c
index 6bac5e1e59..815d9c8f7b 100644
--- a/drivers/phy/phy-stm32-usbphyc.c
+++ b/drivers/phy/phy-stm32-usbphyc.c
@@ -567,7 +567,7 @@ static void stm32_usbphyc_switch_setup(struct stm32_usbphyc *usbphyc,
 }
 
 static struct phy *stm32_usbphyc_of_xlate(struct device *dev,
-					  struct of_phandle_args *args)
+					  const struct of_phandle_args *args)
 {
 	struct stm32_usbphyc *usbphyc = dev->priv;
 	struct stm32_usbphyc_phy *usbphyc_phy = NULL;
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 34abbd85db..e46624111d 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -257,7 +257,7 @@ static int rockchip_usb2phy_power_off(struct phy *phy)
 }
 
 static struct phy *rockchip_usb2phy_of_xlate(struct device *dev,
-					     struct of_phandle_args *args)
+					     const struct of_phandle_args *args)
 {
 	struct rockchip_usb2phy *rphy = dev->priv;
 	struct device_node *phynode = args->np;
diff --git a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
index b864ecb76e..b334ced811 100644
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
@@ -270,7 +270,7 @@ static const struct phy_ops rochchip_combphy_ops = {
 };
 
 static struct phy *rockchip_combphy_xlate(struct device *dev,
-					  struct of_phandle_args *args)
+					  const struct of_phandle_args *args)
 {
 	struct rockchip_combphy_priv *priv = dev->priv;
 
diff --git a/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c b/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
index 7f39b261ca..e533b77ac1 100644
--- a/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
+++ b/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
@@ -209,7 +209,7 @@ static const struct phy_ops rochchip_p3phy_ops = {
 };
 
 static struct phy *rockchip_p3phy_xlate(struct device *dev,
-					struct of_phandle_args *args)
+					const struct of_phandle_args *args)
 {
 	struct rockchip_p3phy_priv *priv = dev->priv;
 
diff --git a/drivers/phy/usb-nop-xceiv.c b/drivers/phy/usb-nop-xceiv.c
index 9a0acf9e7f..5434ba58c7 100644
--- a/drivers/phy/usb-nop-xceiv.c
+++ b/drivers/phy/usb-nop-xceiv.c
@@ -25,7 +25,7 @@ struct nop_usbphy {
 };
 
 static struct phy *nop_usbphy_xlate(struct device *dev,
-				    struct of_phandle_args *args)
+				    const struct of_phandle_args *args)
 {
 	struct nop_usbphy *nopphy = dev->priv;
 
diff --git a/drivers/pinctrl/pinctrl-tegra-xusb.c b/drivers/pinctrl/pinctrl-tegra-xusb.c
index f3a9a0203f..ed48fabc5b 100644
--- a/drivers/pinctrl/pinctrl-tegra-xusb.c
+++ b/drivers/pinctrl/pinctrl-tegra-xusb.c
@@ -269,7 +269,7 @@ static const struct phy_ops sata_phy_ops = {
 };
 
 static struct phy *tegra_xusb_padctl_xlate(struct device *dev,
-					   struct of_phandle_args *args)
+					   const struct of_phandle_args *args)
 {
 	struct tegra_xusb_padctl *padctl = dev->priv;
 	unsigned int index = args->args[0];
diff --git a/drivers/usb/imx/imx-usb-phy.c b/drivers/usb/imx/imx-usb-phy.c
index 70bf292f80..3dcaa1e1f4 100644
--- a/drivers/usb/imx/imx-usb-phy.c
+++ b/drivers/usb/imx/imx-usb-phy.c
@@ -109,7 +109,7 @@ static int imx_usbphy_notify_disconnect(struct usb_phy *phy,
 }
 
 static struct phy *imx_usbphy_xlate(struct device *dev,
-				    struct of_phandle_args *args)
+				    const struct of_phandle_args *args)
 {
 	struct imx_usbphy *imxphy = dev->priv;
 
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index 9f01bc3e9f..e861e50f76 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -102,7 +102,7 @@ struct phy_provider {
 	struct device		*dev;
 	struct list_head	list;
 	struct phy * (*of_xlate)(struct device *dev,
-				 struct of_phandle_args *args);
+				 const struct of_phandle_args *args);
 };
 
 /**
@@ -174,7 +174,7 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
 void phy_destroy(struct phy *phy);
 struct phy_provider *__of_phy_provider_register(struct device *dev,
 						struct phy * (*of_xlate)(struct device *dev,
-									 struct of_phandle_args *args));
+								const struct of_phandle_args *args));
 void of_phy_provider_unregister(struct phy_provider *phy_provider);
 struct usb_phy *phy_to_usbphy(struct phy *phy);
 struct phy *phy_get_by_index(struct device *dev, int index);

-- 
2.39.5




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/3] phy: put phy devices in class
  2024-10-25  8:48 [PATCH 0/3] phy: some updates Sascha Hauer
  2024-10-25  8:48 ` [PATCH 1/3] phy: make of_phandle_args constant Sascha Hauer
@ 2024-10-25  8:49 ` Sascha Hauer
  2024-10-25  8:49 ` [PATCH 3/3] phy: add of_phy_simple_xlate() Sascha Hauer
  2024-10-28 12:12 ` [PATCH 0/3] phy: some updates Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-10-25  8:49 UTC (permalink / raw)
  To: open list:BAREBOX

Collect all phy devices in their own class. Let's us list the phy
devices in the class command and gives us an iterator over phy devices
for free.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/phy/phy-core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index c289e75c78..cd9b59f1fd 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -16,6 +16,10 @@
 static LIST_HEAD(phy_provider_list);
 static int phy_ida;
 
+#define for_each_phy(p) list_for_each_entry(p, &phy_class.devices, dev.class_list)
+
+DEFINE_DEV_CLASS(phy_class, "phy");
+
 /**
  * phy_create() - create a new phy
  * @dev: device that is creating the new phy
@@ -40,7 +44,6 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
 
 	id = phy_ida++;
 
-	dev_set_name(&phy->dev, "phy");
 	phy->dev.id = id;
 	phy->dev.parent = dev;
 	phy->dev.of_node = node ?: dev->of_node;
@@ -57,7 +60,7 @@ struct phy *phy_create(struct device *dev, struct device_node *node,
 		phy->pwr = NULL;
 	}
 
-	ret = register_device(&phy->dev);
+	ret = class_register_device(&phy_class, &phy->dev, "phy");
 	if (ret)
 		goto free_ida;
 

-- 
2.39.5




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/3] phy: add of_phy_simple_xlate()
  2024-10-25  8:48 [PATCH 0/3] phy: some updates Sascha Hauer
  2024-10-25  8:48 ` [PATCH 1/3] phy: make of_phandle_args constant Sascha Hauer
  2024-10-25  8:49 ` [PATCH 2/3] phy: put phy devices in class Sascha Hauer
@ 2024-10-25  8:49 ` Sascha Hauer
  2024-10-28 12:12 ` [PATCH 0/3] phy: some updates Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-10-25  8:49 UTC (permalink / raw)
  To: open list:BAREBOX

of_phy_provider_register() needs a of_xlate function. For simple
one-phy-per-device-node type phys of_phy_simple_xlate() can be used.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/phy/phy-core.c  | 25 +++++++++++++++++++++++++
 include/linux/phy/phy.h |  3 +++
 2 files changed, 28 insertions(+)

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index cd9b59f1fd..f876dc2dea 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -254,6 +254,31 @@ static struct phy_provider *of_phy_provider_lookup(struct device_node *node)
 	return ERR_PTR(-EPROBE_DEFER);
 }
 
+/**
+ * of_phy_simple_xlate() - returns the phy instance from phy provider
+ * @dev: the PHY provider device
+ * @args: of_phandle_args (not used here)
+ *
+ * Intended to be used by phy provider for the common case where #phy-cells is
+ * 0. For other cases where #phy-cells is greater than '0', the phy provider
+ * should provide a custom of_xlate function that reads the *args* and returns
+ * the appropriate phy.
+ */
+struct phy *of_phy_simple_xlate(struct device *dev,
+				const struct of_phandle_args *args)
+{
+	struct phy *phy;
+
+	for_each_phy(phy) {
+		if (args->np != phy->dev.of_node)
+			continue;
+
+		return phy;
+	}
+
+	return ERR_PTR(-ENODEV);
+}
+
 /**
  * _of_phy_get() - lookup and obtain a reference to a phy by phandle
  * @np: device_node for which to get the phy
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index e861e50f76..dd28c6eeef 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -147,6 +147,9 @@ static inline void *phy_get_drvdata(struct phy *phy)
 	return phy->dev.priv;
 }
 
+struct phy *of_phy_simple_xlate(struct device *dev,
+				const struct of_phandle_args *args);
+
 #if IS_ENABLED(CONFIG_GENERIC_PHY)
 int phy_init(struct phy *phy);
 int phy_exit(struct phy *phy);

-- 
2.39.5




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] phy: some updates
  2024-10-25  8:48 [PATCH 0/3] phy: some updates Sascha Hauer
                   ` (2 preceding siblings ...)
  2024-10-25  8:49 ` [PATCH 3/3] phy: add of_phy_simple_xlate() Sascha Hauer
@ 2024-10-28 12:12 ` Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-10-28 12:12 UTC (permalink / raw)
  To: open list:BAREBOX, Sascha Hauer


On Fri, 25 Oct 2024 10:48:58 +0200, Sascha Hauer wrote:
> Collect all phy devices in their own class and implement
> of_phy_simple_xlate().
> 
> 

Applied, thanks!

[1/3] phy: make of_phandle_args constant
      https://git.pengutronix.de/cgit/barebox/commit/?id=b3d258e440d5 (link may not be stable)
[2/3] phy: put phy devices in class
      https://git.pengutronix.de/cgit/barebox/commit/?id=a55e60429963 (link may not be stable)
[3/3] phy: add of_phy_simple_xlate()
      https://git.pengutronix.de/cgit/barebox/commit/?id=1c393f5556a3 (link may not be stable)

Best regards,
-- 
Sascha Hauer <s.hauer@pengutronix.de>




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-10-28 12:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-25  8:48 [PATCH 0/3] phy: some updates Sascha Hauer
2024-10-25  8:48 ` [PATCH 1/3] phy: make of_phandle_args constant Sascha Hauer
2024-10-25  8:49 ` [PATCH 2/3] phy: put phy devices in class Sascha Hauer
2024-10-25  8:49 ` [PATCH 3/3] phy: add of_phy_simple_xlate() Sascha Hauer
2024-10-28 12:12 ` [PATCH 0/3] phy: some updates Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox