The major goal is to hide the contents of struct phy from consumer
drivers.

The idea with "phy-props.h" is that both consumers and providers make
use of some data types. So both headers include "phy-props.h".

Two slight points of contention.

1. phy_set_bus_width(): Vinod explains that despite the current caller
   situation (9 providers, 1 consumer), it is a consumer API function.

   The use case is that the controller (for example UFS) may have
   limitations and should set the expected lanes to be used and width on
   those lanes. A number of Generic PHYs can support multiple lanes and
   multiple width so this is way for controller telling I am using this
   configuration.

2. phy-provider.h should go to include/linux/phy/ or to drivers/phy/?
   We do have 3 PHY providers outside of drivers/phy/:

   drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_dphy.c
   drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
   drivers/pinctrl/tegra/pinctrl-tegra-xusb.c

   but the practice is not encouraged, and with time, these should be
   moved to the subsystem. This is not something that I can do now.

For temporary compatibility, keep including the provider header. This
will be removed when abuses are all gotten rid of.

Signed-off-by: Vladimir Oltean <[email protected]>
---
 drivers/phy/phy-core.c        |  34 +++
 drivers/phy/phy-provider.h    | 256 +++++++++++++++++
 include/linux/phy/phy-props.h |  75 +++++
 include/linux/phy/phy.h       | 499 +++++++---------------------------
 4 files changed, 458 insertions(+), 406 deletions(-)
 create mode 100644 drivers/phy/phy-provider.h
 create mode 100644 include/linux/phy/phy-props.h

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 21aaf2f76e53..a1aff00fba7c 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -20,6 +20,22 @@
 #include <linux/pm_runtime.h>
 #include <linux/regulator/consumer.h>
 
+#define        to_phy(a)       (container_of((a), struct phy, dev))
+
+/**
+ * struct phy_lookup - PHY association in list of phys managed by the phy 
driver
+ * @node: list node
+ * @dev_id: the device of the association
+ * @con_id: connection ID string on device
+ * @phy: the phy of the association
+ */
+struct phy_lookup {
+       struct list_head node;
+       const char *dev_id;
+       const char *con_id;
+       struct phy *phy;
+};
+
 static void phy_release(struct device *dev);
 static const struct class phy_class = {
        .name = "phy",
@@ -606,6 +622,24 @@ int phy_validate(struct phy *phy, enum phy_mode mode, int 
submode,
 }
 EXPORT_SYMBOL_GPL(phy_validate);
 
+enum phy_mode phy_get_mode(struct phy *phy)
+{
+       return phy->attrs.mode;
+}
+EXPORT_SYMBOL_GPL(phy_get_mode);
+
+int phy_get_bus_width(struct phy *phy)
+{
+       return phy->attrs.bus_width;
+}
+EXPORT_SYMBOL_GPL(phy_get_bus_width);
+
+void phy_set_bus_width(struct phy *phy, int bus_width)
+{
+       phy->attrs.bus_width = bus_width;
+}
+EXPORT_SYMBOL_GPL(phy_set_bus_width);
+
 /**
  * _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/drivers/phy/phy-provider.h b/drivers/phy/phy-provider.h
new file mode 100644
index 000000000000..0637278a2d8d
--- /dev/null
+++ b/drivers/phy/phy-provider.h
@@ -0,0 +1,256 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * phy-provider.h -- Generic PHY provider API
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Kishon Vijay Abraham I <[email protected]>
+ */
+#ifndef __PHY_PROVIDER_H
+#define __PHY_PROVIDER_H
+
+#include <linux/err.h>
+#include <linux/of.h>
+#include <linux/device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/phy/phy-props.h>
+
+struct phy;
+
+/**
+ * struct phy_ops - set of function pointers for performing phy operations
+ * @init: operation to be performed for initializing phy
+ * @exit: operation to be performed while exiting
+ * @power_on: powering on the phy
+ * @power_off: powering off the phy
+ * @set_mode: set the mode of the phy
+ * @set_media: set the media type of the phy (optional)
+ * @set_speed: set the speed of the phy (optional)
+ * @reset: resetting the phy
+ * @calibrate: calibrate the phy
+ * @notify_phystate: notify and configure the phy for a particular state
+ * @release: ops to be performed while the consumer relinquishes the PHY
+ * @owner: the module owner containing the ops
+ */
+struct phy_ops {
+       int     (*init)(struct phy *phy);
+       int     (*exit)(struct phy *phy);
+       int     (*power_on)(struct phy *phy);
+       int     (*power_off)(struct phy *phy);
+       int     (*set_mode)(struct phy *phy, enum phy_mode mode, int submode);
+       int     (*set_media)(struct phy *phy, enum phy_media media);
+       int     (*set_speed)(struct phy *phy, int speed);
+
+       /**
+        * @configure:
+        *
+        * Optional.
+        *
+        * Used to change the PHY parameters. phy_init() must have
+        * been called on the phy.
+        *
+        * Returns: 0 if successful, an negative error code otherwise
+        */
+       int     (*configure)(struct phy *phy, union phy_configure_opts *opts);
+
+       /**
+        * @validate:
+        *
+        * Optional.
+        *
+        * Used to check that the current set of parameters can be
+        * handled by the phy. Implementations are free to tune the
+        * parameters passed as arguments if needed by some
+        * implementation detail or constraints. It must not change
+        * any actual configuration of the PHY, so calling it as many
+        * times as deemed fit by the consumer must have no side
+        * effect.
+        *
+        * Returns: 0 if the configuration can be applied, an negative
+        * error code otherwise
+        */
+       int     (*validate)(struct phy *phy, enum phy_mode mode, int submode,
+                           union phy_configure_opts *opts);
+       int     (*reset)(struct phy *phy);
+       int     (*calibrate)(struct phy *phy);
+
+       /* notify phy connect status change */
+       int     (*connect)(struct phy *phy, int port);
+       int     (*disconnect)(struct phy *phy, int port);
+
+       int     (*notify_phystate)(struct phy *phy, union phy_notify state);
+       void    (*release)(struct phy *phy);
+       struct module *owner;
+};
+
+/**
+ * struct phy_attrs - represents phy attributes
+ * @bus_width: Data path width implemented by PHY
+ * @max_link_rate: Maximum link rate supported by PHY (units to be decided by 
producer and consumer)
+ * @mode: PHY mode
+ */
+struct phy_attrs {
+       u32                     bus_width;
+       u32                     max_link_rate;
+       enum phy_mode           mode;
+};
+
+/**
+ * struct phy - represents the phy device
+ * @dev: phy device
+ * @id: id of the phy device
+ * @ops: function pointers for performing phy operations
+ * @mutex: mutex to protect phy_ops
+ * @lockdep_key: lockdep information for this mutex
+ * @init_count: used to protect when the PHY is used by multiple consumers
+ * @power_count: used to protect when the PHY is used by multiple consumers
+ * @attrs: used to specify PHY specific attributes
+ * @pwr: power regulator associated with the phy
+ * @debugfs: debugfs directory
+ */
+struct phy {
+       struct device           dev;
+       int                     id;
+       const struct phy_ops    *ops;
+       struct mutex            mutex;
+       struct lock_class_key   lockdep_key;
+       int                     init_count;
+       int                     power_count;
+       struct phy_attrs        attrs;
+       struct regulator        *pwr;
+       struct dentry           *debugfs;
+};
+
+/**
+ * struct phy_provider - represents the phy provider
+ * @dev: phy provider device
+ * @children: can be used to override the default (dev->of_node) child node
+ * @owner: the module owner having of_xlate
+ * @list: to maintain a linked list of PHY providers
+ * @of_xlate: function pointer to obtain phy instance from phy pointer
+ */
+struct phy_provider {
+       struct device           *dev;
+       struct device_node      *children;
+       struct module           *owner;
+       struct list_head        list;
+       struct phy *(*of_xlate)(struct device *dev,
+                               const struct of_phandle_args *args);
+};
+
+#define        of_phy_provider_register(dev, xlate)    \
+       __of_phy_provider_register((dev), NULL, THIS_MODULE, (xlate))
+
+#define        devm_of_phy_provider_register(dev, xlate)       \
+       __devm_of_phy_provider_register((dev), NULL, THIS_MODULE, (xlate))
+
+#define of_phy_provider_register_full(dev, children, xlate) \
+       __of_phy_provider_register(dev, children, THIS_MODULE, xlate)
+
+#define devm_of_phy_provider_register_full(dev, children, xlate) \
+       __devm_of_phy_provider_register(dev, children, THIS_MODULE, xlate)
+
+static inline void phy_set_drvdata(struct phy *phy, void *data)
+{
+       dev_set_drvdata(&phy->dev, data);
+}
+
+static inline void *phy_get_drvdata(struct phy *phy)
+{
+       return dev_get_drvdata(&phy->dev);
+}
+
+#if IS_ENABLED(CONFIG_GENERIC_PHY)
+struct phy *phy_create(struct device *dev, struct device_node *node,
+                      const struct phy_ops *ops);
+struct phy *devm_phy_create(struct device *dev, struct device_node *node,
+                           const struct phy_ops *ops);
+void phy_destroy(struct phy *phy);
+void devm_phy_destroy(struct device *dev, struct phy *phy);
+
+struct phy_provider *
+__of_phy_provider_register(struct device *dev, struct device_node *children,
+                          struct module *owner,
+                          struct phy *(*of_xlate)(struct device *dev,
+                                                  const struct of_phandle_args 
*args));
+struct phy_provider *
+__devm_of_phy_provider_register(struct device *dev, struct device_node 
*children,
+                               struct module *owner,
+                               struct phy *(*of_xlate)(struct device *dev,
+                                                       const struct 
of_phandle_args *args));
+void of_phy_provider_unregister(struct phy_provider *phy_provider);
+void devm_of_phy_provider_unregister(struct device *dev,
+                                    struct phy_provider *phy_provider);
+int phy_create_lookup(struct phy *phy, const char *con_id, const char *dev_id);
+void phy_remove_lookup(struct phy *phy, const char *con_id, const char 
*dev_id);
+struct phy *of_phy_simple_xlate(struct device *dev,
+                               const struct of_phandle_args *args);
+#else
+static inline struct phy *phy_create(struct device *dev,
+                                    struct device_node *node,
+                                    const struct phy_ops *ops)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline struct phy *devm_phy_create(struct device *dev,
+                                         struct device_node *node,
+                                         const struct phy_ops *ops)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline void phy_destroy(struct phy *phy)
+{
+}
+
+static inline void devm_phy_destroy(struct device *dev, struct phy *phy)
+{
+}
+
+static inline struct phy_provider *
+__of_phy_provider_register(struct device *dev, struct device_node *children,
+                          struct module *owner,
+                          struct phy *(*of_xlate)(struct device *dev,
+                                                  const struct of_phandle_args 
*args))
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline struct phy_provider *
+__devm_of_phy_provider_register(struct device *dev, struct device_node 
*children,
+                               struct module *owner,
+                               struct phy *(*of_xlate)(struct device *dev,
+                                                       const struct 
of_phandle_args *args))
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline void of_phy_provider_unregister(struct phy_provider 
*phy_provider)
+{
+}
+
+static inline void devm_of_phy_provider_unregister(struct device *dev,
+                                                  struct phy_provider 
*phy_provider)
+{
+}
+
+static inline int phy_create_lookup(struct phy *phy, const char *con_id,
+                                   const char *dev_id)
+{
+       return 0;
+}
+
+static inline void phy_remove_lookup(struct phy *phy, const char *con_id,
+                                    const char *dev_id)
+{
+}
+
+static inline struct phy *of_phy_simple_xlate(struct device *dev,
+                                             const struct of_phandle_args 
*args)
+{
+       return ERR_PTR(-ENOSYS);
+}
+#endif /* IS_ENABLED(CONFIG_GENERIC_PHY) */
+
+#endif /* __PHY_PROVIDER_H */
diff --git a/include/linux/phy/phy-props.h b/include/linux/phy/phy-props.h
new file mode 100644
index 000000000000..11f36738165f
--- /dev/null
+++ b/include/linux/phy/phy-props.h
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * phy-provider.h -- Generic PHY properties
+ *
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Kishon Vijay Abraham I <[email protected]>
+ */
+#ifndef __PHY_PROPS_H
+#define __PHY_PROPS_H
+
+#include <linux/phy/phy-dp.h>
+#include <linux/phy/phy-hdmi.h>
+#include <linux/phy/phy-lvds.h>
+#include <linux/phy/phy-mipi-dphy.h>
+
+enum phy_mode {
+       PHY_MODE_INVALID,
+       PHY_MODE_USB_HOST,
+       PHY_MODE_USB_HOST_LS,
+       PHY_MODE_USB_HOST_FS,
+       PHY_MODE_USB_HOST_HS,
+       PHY_MODE_USB_HOST_SS,
+       PHY_MODE_USB_DEVICE,
+       PHY_MODE_USB_DEVICE_LS,
+       PHY_MODE_USB_DEVICE_FS,
+       PHY_MODE_USB_DEVICE_HS,
+       PHY_MODE_USB_DEVICE_SS,
+       PHY_MODE_USB_OTG,
+       PHY_MODE_UFS_HS_A,
+       PHY_MODE_UFS_HS_B,
+       PHY_MODE_PCIE,
+       PHY_MODE_ETHERNET,
+       PHY_MODE_MIPI_DPHY,
+       PHY_MODE_SATA,
+       PHY_MODE_LVDS,
+       PHY_MODE_DP,
+       PHY_MODE_HDMI,
+};
+
+enum phy_media {
+       PHY_MEDIA_DEFAULT,
+       PHY_MEDIA_SR,
+       PHY_MEDIA_DAC,
+};
+
+enum phy_ufs_state {
+       PHY_UFS_HIBERN8_ENTER,
+       PHY_UFS_HIBERN8_EXIT,
+};
+
+union phy_notify {
+       enum phy_ufs_state ufs_state;
+};
+
+/**
+ * union phy_configure_opts - Opaque generic phy configuration
+ *
+ * @mipi_dphy: Configuration set applicable for phys supporting
+ *             the MIPI_DPHY phy mode.
+ * @dp:                Configuration set applicable for phys supporting
+ *             the DisplayPort protocol.
+ * @lvds:      Configuration set applicable for phys supporting
+ *             the LVDS phy mode.
+ * @hdmi:      Configuration set applicable for phys supporting
+ *             the HDMI phy mode.
+ */
+union phy_configure_opts {
+       struct phy_configure_opts_mipi_dphy     mipi_dphy;
+       struct phy_configure_opts_dp            dp;
+       struct phy_configure_opts_lvds          lvds;
+       struct phy_configure_opts_hdmi          hdmi;
+};
+
+#endif /* __PHY_PROPS_H */
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index ea47975e288a..36307e47760d 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -1,246 +1,38 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 /*
- * phy.h -- generic phy header file
+ * phy.h -- Generic PHY consumer API
  *
  * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
  *
  * Author: Kishon Vijay Abraham I <[email protected]>
  */
 
-#ifndef __DRIVERS_PHY_H
-#define __DRIVERS_PHY_H
+#ifndef __PHY_CONSUMER_H
+#define __PHY_CONSUMER_H
 
-#include <linux/err.h>
-#include <linux/of.h>
-#include <linux/device.h>
-#include <linux/pm_runtime.h>
-#include <linux/regulator/consumer.h>
+#include <linux/phy/phy-props.h>
 
-#include <linux/phy/phy-dp.h>
-#include <linux/phy/phy-hdmi.h>
-#include <linux/phy/phy-lvds.h>
-#include <linux/phy/phy-mipi-dphy.h>
+#include "../../drivers/phy/phy-provider.h"
 
+struct device;
+struct device_node;
 struct phy;
 
-enum phy_mode {
-       PHY_MODE_INVALID,
-       PHY_MODE_USB_HOST,
-       PHY_MODE_USB_HOST_LS,
-       PHY_MODE_USB_HOST_FS,
-       PHY_MODE_USB_HOST_HS,
-       PHY_MODE_USB_HOST_SS,
-       PHY_MODE_USB_DEVICE,
-       PHY_MODE_USB_DEVICE_LS,
-       PHY_MODE_USB_DEVICE_FS,
-       PHY_MODE_USB_DEVICE_HS,
-       PHY_MODE_USB_DEVICE_SS,
-       PHY_MODE_USB_OTG,
-       PHY_MODE_UFS_HS_A,
-       PHY_MODE_UFS_HS_B,
-       PHY_MODE_PCIE,
-       PHY_MODE_ETHERNET,
-       PHY_MODE_MIPI_DPHY,
-       PHY_MODE_SATA,
-       PHY_MODE_LVDS,
-       PHY_MODE_DP,
-       PHY_MODE_HDMI,
-};
-
-enum phy_media {
-       PHY_MEDIA_DEFAULT,
-       PHY_MEDIA_SR,
-       PHY_MEDIA_DAC,
-};
-
-enum phy_ufs_state {
-       PHY_UFS_HIBERN8_ENTER,
-       PHY_UFS_HIBERN8_EXIT,
-};
-
-union phy_notify {
-       enum phy_ufs_state ufs_state;
-};
-
-/**
- * union phy_configure_opts - Opaque generic phy configuration
- *
- * @mipi_dphy: Configuration set applicable for phys supporting
- *             the MIPI_DPHY phy mode.
- * @dp:                Configuration set applicable for phys supporting
- *             the DisplayPort protocol.
- * @lvds:      Configuration set applicable for phys supporting
- *             the LVDS phy mode.
- * @hdmi:      Configuration set applicable for phys supporting
- *             the HDMI phy mode.
- */
-union phy_configure_opts {
-       struct phy_configure_opts_mipi_dphy     mipi_dphy;
-       struct phy_configure_opts_dp            dp;
-       struct phy_configure_opts_lvds          lvds;
-       struct phy_configure_opts_hdmi          hdmi;
-};
-
-/**
- * struct phy_ops - set of function pointers for performing phy operations
- * @init: operation to be performed for initializing phy
- * @exit: operation to be performed while exiting
- * @power_on: powering on the phy
- * @power_off: powering off the phy
- * @set_mode: set the mode of the phy
- * @set_media: set the media type of the phy (optional)
- * @set_speed: set the speed of the phy (optional)
- * @reset: resetting the phy
- * @calibrate: calibrate the phy
- * @notify_phystate: notify and configure the phy for a particular state
- * @release: ops to be performed while the consumer relinquishes the PHY
- * @owner: the module owner containing the ops
- */
-struct phy_ops {
-       int     (*init)(struct phy *phy);
-       int     (*exit)(struct phy *phy);
-       int     (*power_on)(struct phy *phy);
-       int     (*power_off)(struct phy *phy);
-       int     (*set_mode)(struct phy *phy, enum phy_mode mode, int submode);
-       int     (*set_media)(struct phy *phy, enum phy_media media);
-       int     (*set_speed)(struct phy *phy, int speed);
-
-       /**
-        * @configure:
-        *
-        * Optional.
-        *
-        * Used to change the PHY parameters. phy_init() must have
-        * been called on the phy.
-        *
-        * Returns: 0 if successful, an negative error code otherwise
-        */
-       int     (*configure)(struct phy *phy, union phy_configure_opts *opts);
-
-       /**
-        * @validate:
-        *
-        * Optional.
-        *
-        * Used to check that the current set of parameters can be
-        * handled by the phy. Implementations are free to tune the
-        * parameters passed as arguments if needed by some
-        * implementation detail or constraints. It must not change
-        * any actual configuration of the PHY, so calling it as many
-        * times as deemed fit by the consumer must have no side
-        * effect.
-        *
-        * Returns: 0 if the configuration can be applied, an negative
-        * error code otherwise
-        */
-       int     (*validate)(struct phy *phy, enum phy_mode mode, int submode,
-                           union phy_configure_opts *opts);
-       int     (*reset)(struct phy *phy);
-       int     (*calibrate)(struct phy *phy);
-
-       /* notify phy connect status change */
-       int     (*connect)(struct phy *phy, int port);
-       int     (*disconnect)(struct phy *phy, int port);
-
-       int     (*notify_phystate)(struct phy *phy, union phy_notify state);
-       void    (*release)(struct phy *phy);
-       struct module *owner;
-};
-
-/**
- * struct phy_attrs - represents phy attributes
- * @bus_width: Data path width implemented by PHY
- * @max_link_rate: Maximum link rate supported by PHY (units to be decided by 
producer and consumer)
- * @mode: PHY mode
- */
-struct phy_attrs {
-       u32                     bus_width;
-       u32                     max_link_rate;
-       enum phy_mode           mode;
-};
-
-/**
- * struct phy - represents the phy device
- * @dev: phy device
- * @id: id of the phy device
- * @ops: function pointers for performing phy operations
- * @mutex: mutex to protect phy_ops
- * @lockdep_key: lockdep information for this mutex
- * @init_count: used to protect when the PHY is used by multiple consumers
- * @power_count: used to protect when the PHY is used by multiple consumers
- * @attrs: used to specify PHY specific attributes
- * @pwr: power regulator associated with the phy
- * @debugfs: debugfs directory
- */
-struct phy {
-       struct device           dev;
-       int                     id;
-       const struct phy_ops    *ops;
-       struct mutex            mutex;
-       struct lock_class_key   lockdep_key;
-       int                     init_count;
-       int                     power_count;
-       struct phy_attrs        attrs;
-       struct regulator        *pwr;
-       struct dentry           *debugfs;
-};
-
-/**
- * struct phy_provider - represents the phy provider
- * @dev: phy provider device
- * @children: can be used to override the default (dev->of_node) child node
- * @owner: the module owner having of_xlate
- * @list: to maintain a linked list of PHY providers
- * @of_xlate: function pointer to obtain phy instance from phy pointer
- */
-struct phy_provider {
-       struct device           *dev;
-       struct device_node      *children;
-       struct module           *owner;
-       struct list_head        list;
-       struct phy * (*of_xlate)(struct device *dev,
-                                const struct of_phandle_args *args);
-};
-
-/**
- * struct phy_lookup - PHY association in list of phys managed by the phy 
driver
- * @node: list node
- * @dev_id: the device of the association
- * @con_id: connection ID string on device
- * @phy: the phy of the association
- */
-struct phy_lookup {
-       struct list_head node;
-       const char *dev_id;
-       const char *con_id;
-       struct phy *phy;
-};
-
-#define        to_phy(a)       (container_of((a), struct phy, dev))
-
-#define        of_phy_provider_register(dev, xlate)    \
-       __of_phy_provider_register((dev), NULL, THIS_MODULE, (xlate))
-
-#define        devm_of_phy_provider_register(dev, xlate)       \
-       __devm_of_phy_provider_register((dev), NULL, THIS_MODULE, (xlate))
-
-#define of_phy_provider_register_full(dev, children, xlate) \
-       __of_phy_provider_register(dev, children, THIS_MODULE, xlate)
-
-#define devm_of_phy_provider_register_full(dev, children, xlate) \
-       __devm_of_phy_provider_register(dev, children, THIS_MODULE, xlate)
-
-static inline void phy_set_drvdata(struct phy *phy, void *data)
-{
-       dev_set_drvdata(&phy->dev, data);
-}
-
-static inline void *phy_get_drvdata(struct phy *phy)
-{
-       return dev_get_drvdata(&phy->dev);
-}
-
 #if IS_ENABLED(CONFIG_GENERIC_PHY)
+struct phy *phy_get(struct device *dev, const char *string);
+struct phy *devm_phy_get(struct device *dev, const char *string);
+struct phy *devm_phy_optional_get(struct device *dev, const char *string);
+struct phy *devm_of_phy_get(struct device *dev, struct device_node *np,
+                           const char *con_id);
+struct phy *devm_of_phy_optional_get(struct device *dev, struct device_node 
*np,
+                                    const char *con_id);
+struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node 
*np,
+                                    int index);
+void of_phy_put(struct phy *phy);
+void phy_put(struct device *dev, struct phy *phy);
+void devm_phy_put(struct device *dev, struct phy *phy);
+struct phy *of_phy_get(struct device_node *np, const char *con_id);
+
 int phy_pm_runtime_get(struct phy *phy);
 int phy_pm_runtime_get_sync(struct phy *phy);
 void phy_pm_runtime_put(struct phy *phy);
@@ -257,59 +49,69 @@ int phy_set_speed(struct phy *phy, int speed);
 int phy_configure(struct phy *phy, union phy_configure_opts *opts);
 int phy_validate(struct phy *phy, enum phy_mode mode, int submode,
                 union phy_configure_opts *opts);
-
-static inline enum phy_mode phy_get_mode(struct phy *phy)
-{
-       return phy->attrs.mode;
-}
+enum phy_mode phy_get_mode(struct phy *phy);
 int phy_reset(struct phy *phy);
 int phy_calibrate(struct phy *phy);
 int phy_notify_connect(struct phy *phy, int port);
 int phy_notify_disconnect(struct phy *phy, int port);
 int phy_notify_state(struct phy *phy, union phy_notify state);
-static inline int phy_get_bus_width(struct phy *phy)
+int phy_get_bus_width(struct phy *phy);
+void phy_set_bus_width(struct phy *phy, int bus_width);
+#else
+static inline struct phy *phy_get(struct device *dev, const char *string)
 {
-       return phy->attrs.bus_width;
+       return ERR_PTR(-ENOSYS);
 }
-static inline void phy_set_bus_width(struct phy *phy, int bus_width)
+
+static inline struct phy *devm_phy_get(struct device *dev, const char *string)
 {
-       phy->attrs.bus_width = bus_width;
+       return ERR_PTR(-ENOSYS);
 }
-struct phy *phy_get(struct device *dev, const char *string);
-struct phy *devm_phy_get(struct device *dev, const char *string);
-struct phy *devm_phy_optional_get(struct device *dev, const char *string);
-struct phy *devm_of_phy_get(struct device *dev, struct device_node *np,
-                           const char *con_id);
-struct phy *devm_of_phy_optional_get(struct device *dev, struct device_node 
*np,
-                                    const char *con_id);
-struct phy *devm_of_phy_get_by_index(struct device *dev, struct device_node 
*np,
-                                    int index);
-void of_phy_put(struct phy *phy);
-void phy_put(struct device *dev, struct phy *phy);
-void devm_phy_put(struct device *dev, struct phy *phy);
-struct phy *of_phy_get(struct device_node *np, const char *con_id);
-struct phy *of_phy_simple_xlate(struct device *dev,
-                               const struct of_phandle_args *args);
-struct phy *phy_create(struct device *dev, struct device_node *node,
-                      const struct phy_ops *ops);
-struct phy *devm_phy_create(struct device *dev, struct device_node *node,
-                           const struct phy_ops *ops);
-void phy_destroy(struct phy *phy);
-void devm_phy_destroy(struct device *dev, struct phy *phy);
-struct phy_provider *__of_phy_provider_register(struct device *dev,
-       struct device_node *children, struct module *owner,
-       struct phy * (*of_xlate)(struct device *dev,
-                                const struct of_phandle_args *args));
-struct phy_provider *__devm_of_phy_provider_register(struct device *dev,
-       struct device_node *children, struct module *owner,
-       struct phy * (*of_xlate)(struct device *dev,
-                                const struct of_phandle_args *args));
-void of_phy_provider_unregister(struct phy_provider *phy_provider);
-void devm_of_phy_provider_unregister(struct device *dev,
-       struct phy_provider *phy_provider);
-int phy_create_lookup(struct phy *phy, const char *con_id, const char *dev_id);
-void phy_remove_lookup(struct phy *phy, const char *con_id, const char 
*dev_id);
-#else
+
+static inline struct phy *devm_phy_optional_get(struct device *dev,
+                                               const char *string)
+{
+       return NULL;
+}
+
+static inline struct phy *devm_of_phy_get(struct device *dev,
+                                         struct device_node *np,
+                                         const char *con_id)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline struct phy *devm_of_phy_optional_get(struct device *dev,
+                                                  struct device_node *np,
+                                                  const char *con_id)
+{
+       return NULL;
+}
+
+static inline struct phy *devm_of_phy_get_by_index(struct device *dev,
+                                                  struct device_node *np,
+                                                  int index)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
+static inline void of_phy_put(struct phy *phy)
+{
+}
+
+static inline void phy_put(struct device *dev, struct phy *phy)
+{
+}
+
+static inline void devm_phy_put(struct device *dev, struct phy *phy)
+{
+}
+
+static inline struct phy *of_phy_get(struct device_node *np, const char 
*con_id)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
 static inline int phy_pm_runtime_get(struct phy *phy)
 {
        if (!phy)
@@ -388,61 +190,61 @@ static inline int phy_set_speed(struct phy *phy, int 
speed)
        return -ENODEV;
 }
 
-static inline enum phy_mode phy_get_mode(struct phy *phy)
-{
-       return PHY_MODE_INVALID;
-}
-
-static inline int phy_reset(struct phy *phy)
+static inline int phy_configure(struct phy *phy,
+                               union phy_configure_opts *opts)
 {
        if (!phy)
                return 0;
+
        return -ENOSYS;
 }
 
-static inline int phy_calibrate(struct phy *phy)
+static inline int phy_validate(struct phy *phy, enum phy_mode mode, int 
submode,
+                              union phy_configure_opts *opts)
 {
        if (!phy)
                return 0;
+
        return -ENOSYS;
 }
 
-static inline int phy_notify_connect(struct phy *phy, int index)
+static inline enum phy_mode phy_get_mode(struct phy *phy)
+{
+       return PHY_MODE_INVALID;
+}
+
+static inline int phy_reset(struct phy *phy)
 {
        if (!phy)
                return 0;
        return -ENOSYS;
 }
 
-static inline int phy_notify_disconnect(struct phy *phy, int index)
+static inline int phy_calibrate(struct phy *phy)
 {
        if (!phy)
                return 0;
        return -ENOSYS;
 }
 
-static inline int phy_notify_state(struct phy *phy, union phy_notify state)
+static inline int phy_notify_connect(struct phy *phy, int index)
 {
        if (!phy)
                return 0;
        return -ENOSYS;
 }
 
-static inline int phy_configure(struct phy *phy,
-                               union phy_configure_opts *opts)
+static inline int phy_notify_disconnect(struct phy *phy, int index)
 {
        if (!phy)
                return 0;
-
        return -ENOSYS;
 }
 
-static inline int phy_validate(struct phy *phy, enum phy_mode mode, int 
submode,
-                              union phy_configure_opts *opts)
+static inline int phy_notify_state(struct phy *phy, union phy_notify state)
 {
        if (!phy)
                return 0;
-
        return -ENOSYS;
 }
 
@@ -453,122 +255,7 @@ static inline int phy_get_bus_width(struct phy *phy)
 
 static inline void phy_set_bus_width(struct phy *phy, int bus_width)
 {
-       return;
-}
-
-static inline struct phy *phy_get(struct device *dev, const char *string)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *devm_phy_get(struct device *dev, const char *string)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *devm_phy_optional_get(struct device *dev,
-                                               const char *string)
-{
-       return NULL;
-}
-
-static inline struct phy *devm_of_phy_get(struct device *dev,
-                                         struct device_node *np,
-                                         const char *con_id)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *devm_of_phy_optional_get(struct device *dev,
-                                                  struct device_node *np,
-                                                  const char *con_id)
-{
-       return NULL;
-}
-
-static inline struct phy *devm_of_phy_get_by_index(struct device *dev,
-                                                  struct device_node *np,
-                                                  int index)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline void of_phy_put(struct phy *phy)
-{
-}
-
-static inline void phy_put(struct device *dev, struct phy *phy)
-{
-}
-
-static inline void devm_phy_put(struct device *dev, struct phy *phy)
-{
-}
-
-static inline struct phy *of_phy_get(struct device_node *np, const char 
*con_id)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *of_phy_simple_xlate(struct device *dev,
-                                             const struct of_phandle_args 
*args)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *phy_create(struct device *dev,
-                                    struct device_node *node,
-                                    const struct phy_ops *ops)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy *devm_phy_create(struct device *dev,
-                                         struct device_node *node,
-                                         const struct phy_ops *ops)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline void phy_destroy(struct phy *phy)
-{
-}
-
-static inline void devm_phy_destroy(struct device *dev, struct phy *phy)
-{
-}
-
-static inline struct phy_provider *__of_phy_provider_register(
-       struct device *dev, struct device_node *children, struct module *owner,
-       struct phy * (*of_xlate)(struct device *dev,
-                                const struct of_phandle_args *args))
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline struct phy_provider *__devm_of_phy_provider_register(struct 
device
-       *dev, struct device_node *children, struct module *owner,
-       struct phy * (*of_xlate)(struct device *dev,
-                                const struct of_phandle_args *args))
-{
-       return ERR_PTR(-ENOSYS);
-}
-
-static inline void of_phy_provider_unregister(struct phy_provider 
*phy_provider)
-{
-}
-
-static inline void devm_of_phy_provider_unregister(struct device *dev,
-       struct phy_provider *phy_provider)
-{
-}
-static inline int
-phy_create_lookup(struct phy *phy, const char *con_id, const char *dev_id)
-{
-       return 0;
 }
-static inline void phy_remove_lookup(struct phy *phy, const char *con_id,
-                                    const char *dev_id) { }
-#endif
+#endif /* IS_ENABLED(CONFIG_GENERIC_PHY) */
 
-#endif /* __DRIVERS_PHY_H */
+#endif /* __PHY_CONSUMER_H */
-- 
2.43.0


Reply via email to