After a recent change in the PHY core, we get a build error when
CONFIG_OF is disabled:

drivers/phy/phy-core.c: In function '__of_phy_provider_register':
drivers/phy/phy-core.c:848:13: error: implicit declaration of function 
'of_get_next_parent' [-Werror=implicit-function-declaration]

It would not be hard to avoid this error by adding a declaration
for of_get_next_parent, but I'm taking a different approach here
and remove all the unused DT handling from the PHY core in
configurations with CONFIG_OF, which avoids the build error and
reduces the object code size.

Signed-off-by: Arnd Bergmann <a...@arndb.de>
Fixes: 2f7600bc981c ("phy: core: Allow children node to be overridden")
---
 drivers/phy/phy-core.c  |  20 ++++++++--
 include/linux/phy/phy.h | 101 +++++++++++++++++++++++++-----------------------
 2 files changed, 69 insertions(+), 52 deletions(-)

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 4e905a4313c0..bb03fcc65497 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -36,12 +36,14 @@ static void devm_phy_release(struct device *dev, void *res)
        phy_put(phy);
 }
 
+#ifdef CONFIG_OF
 static void devm_phy_provider_release(struct device *dev, void *res)
 {
        struct phy_provider *phy_provider = *(struct phy_provider **)res;
 
        of_phy_provider_unregister(phy_provider);
 }
+#endif
 
 static void devm_phy_consume(struct device *dev, void *res)
 {
@@ -132,6 +134,7 @@ static struct phy *phy_find(struct device *dev, const char 
*con_id)
        return pl ? pl->phy : ERR_PTR(-ENODEV);
 }
 
+#ifdef CONFIG_OF
 static struct phy_provider *of_phy_provider_lookup(struct device_node *node)
 {
        struct phy_provider *phy_provider;
@@ -148,6 +151,7 @@ static struct phy_provider *of_phy_provider_lookup(struct 
device_node *node)
 
        return ERR_PTR(-EPROBE_DEFER);
 }
+#endif
 
 int phy_pm_runtime_get(struct phy *phy)
 {
@@ -342,6 +346,7 @@ int phy_power_off(struct phy *phy)
 }
 EXPORT_SYMBOL_GPL(phy_power_off);
 
+#ifdef CONFIG_OF
 /**
  * _of_phy_get() - lookup and obtain a reference to a phy by phandle
  * @np: device_node for which to get the phy
@@ -419,6 +424,7 @@ struct phy *of_phy_get(struct device_node *np, const char 
*con_id)
        return phy;
 }
 EXPORT_SYMBOL_GPL(of_phy_get);
+#endif
 
 /**
  * phy_put() - release the PHY
@@ -456,6 +462,7 @@ void devm_phy_put(struct device *dev, struct phy *phy)
 }
 EXPORT_SYMBOL_GPL(devm_phy_put);
 
+#ifdef CONFIG_OF
 /**
  * of_phy_simple_xlate() - returns the phy instance from phy provider
  * @dev: the PHY provider device
@@ -486,6 +493,7 @@ struct phy *of_phy_simple_xlate(struct device *dev, struct 
of_phandle_args
        return ERR_PTR(-ENODEV);
 }
 EXPORT_SYMBOL_GPL(of_phy_simple_xlate);
+#endif
 
 /**
  * phy_get() - lookup and obtain a reference to a phy.
@@ -499,21 +507,21 @@ EXPORT_SYMBOL_GPL(of_phy_simple_xlate);
  */
 struct phy *phy_get(struct device *dev, const char *string)
 {
-       int index = 0;
        struct phy *phy;
 
        if (string == NULL) {
                dev_WARN(dev, "missing string\n");
                return ERR_PTR(-EINVAL);
        }
-
+#ifdef CONFIG_OF
        if (dev->of_node) {
+               int index;
                index = of_property_match_string(dev->of_node, "phy-names",
                        string);
                phy = _of_phy_get(dev->of_node, index);
-       } else {
+       } else
+#endif
                phy = phy_find(dev, string);
-       }
        if (IS_ERR(phy))
                return phy;
 
@@ -601,6 +609,7 @@ struct phy *devm_phy_optional_get(struct device *dev, const 
char *string)
 }
 EXPORT_SYMBOL_GPL(devm_phy_optional_get);
 
+#ifdef CONFIG_OF
 /**
  * devm_of_phy_get() - lookup and obtain a reference to a phy.
  * @dev: device that requests this phy
@@ -672,6 +681,7 @@ struct phy *devm_of_phy_get_by_index(struct device *dev, 
struct device_node *np,
        return phy;
 }
 EXPORT_SYMBOL_GPL(devm_of_phy_get_by_index);
+#endif
 
 /**
  * phy_create() - create a new phy
@@ -808,6 +818,7 @@ void devm_phy_destroy(struct device *dev, struct phy *phy)
 }
 EXPORT_SYMBOL_GPL(devm_phy_destroy);
 
+#ifdef CONFIG_OF
 /**
  * __of_phy_provider_register() - create/register phy provider with the 
framework
  * @dev: struct device of the phy provider
@@ -945,6 +956,7 @@ void devm_of_phy_provider_unregister(struct device *dev,
        dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n");
 }
 EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister);
+#endif
 
 /**
  * phy_release() - release the phy
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index a810f2a18842..184a61167ff6 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -138,32 +138,14 @@ struct phy *phy_get(struct device *dev, const char 
*string);
 struct phy *phy_optional_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_get_by_index(struct device *dev, struct device_node 
*np,
-                                    int index);
 void phy_put(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,
-       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,
-                                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,
-                                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
@@ -265,20 +247,6 @@ static inline struct phy *devm_phy_optional_get(struct 
device *dev,
        return ERR_PTR(-ENOSYS);
 }
 
-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_get_by_index(struct device *dev,
-                                                  struct device_node *np,
-                                                  int index)
-{
-       return ERR_PTR(-ENOSYS);
-}
-
 static inline void phy_put(struct phy *phy)
 {
 }
@@ -287,17 +255,6 @@ 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,
-       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)
@@ -320,6 +277,35 @@ static inline void devm_phy_destroy(struct device *dev, 
struct phy *phy)
 {
 }
 
+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
+
+#if defined(CONFIG_GENERIC_PHY) && defined(CONFIG_OF)
+struct phy_provider *__of_phy_provider_register(struct device *dev,
+       struct device_node *children, struct module *owner,
+       struct phy * (*of_xlate)(struct device *dev,
+                                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,
+                                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);
+struct phy *devm_of_phy_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);
+struct phy *of_phy_get(struct device_node *np, const char *con_id);
+struct phy *of_phy_simple_xlate(struct device *dev,
+       struct of_phandle_args *args);
+#else
 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,
@@ -344,13 +330,32 @@ 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)
+
+static inline struct phy *devm_of_phy_get(struct device *dev,
+                                         struct device_node *np,
+                                         const char *con_id)
 {
-       return 0;
+       return ERR_PTR(-ENOSYS);
 }
-static inline void phy_remove_lookup(struct phy *phy, const char *con_id,
-                                    const char *dev_id) { }
+
+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 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,
+       struct of_phandle_args *args)
+{
+       return ERR_PTR(-ENOSYS);
+}
+
 #endif
 
 #endif /* __DRIVERS_PHY_H */
-- 
2.7.0

Reply via email to