* [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