diff options
author | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2020-03-26 12:44:27 +0200 |
---|---|---|
committer | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2020-03-26 12:46:50 +0200 |
commit | 87d308708712ff6075c4dd54b0519b47fdad8816 (patch) | |
tree | 2fb6458b1db7dd21be2648f42412dd2485846c76 /backport-include/linux/phy.h |
Backports v5.4.27
Backports generated by toradex backports f6e8852f1ef28e6d3c9bae8400eb6a87a6b0c3e7
against mainline kernel tag v5.4.27
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Diffstat (limited to 'backport-include/linux/phy.h')
-rw-r--r-- | backport-include/linux/phy.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/backport-include/linux/phy.h b/backport-include/linux/phy.h new file mode 100644 index 0000000..f331428 --- /dev/null +++ b/backport-include/linux/phy.h @@ -0,0 +1,75 @@ +#ifndef __BACKPORT_LINUX_PHY_H +#define __BACKPORT_LINUX_PHY_H +#include_next <linux/phy.h> +#include <linux/compiler.h> +#include <linux/version.h> + +#if LINUX_VERSION_IS_LESS(3,9,0) +#define phy_connect(dev, bus_id, handler, interface) \ + phy_connect(dev, bus_id, handler, 0, interface) +#endif + +#if LINUX_VERSION_IS_LESS(4,5,0) +#define phydev_name LINUX_BACKPORT(phydev_name) +static inline const char *phydev_name(const struct phy_device *phydev) +{ + return dev_name(&phydev->dev); +} + +#define mdiobus_is_registered_device LINUX_BACKPORT(mdiobus_is_registered_device) +static inline bool mdiobus_is_registered_device(struct mii_bus *bus, int addr) +{ + return bus->phy_map[addr]; +} + +#define phy_attached_print LINUX_BACKPORT(phy_attached_print) +void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) + __printf(2, 3); +#define phy_attached_info LINUX_BACKPORT(phy_attached_info) +void phy_attached_info(struct phy_device *phydev); + +static inline int backport_mdiobus_register(struct mii_bus *bus) +{ + bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); + if (!bus->irq) { + pr_err("mii_bus irq allocation failed\n"); + return -ENOMEM; + } + + memset(bus->irq, PHY_POLL, sizeof(int) * PHY_MAX_ADDR); + +/* in kernel 4.3 a #define for mdiobus_register is added to the kernel. */ +#ifndef mdiobus_register + return mdiobus_register(bus); +#else + return __mdiobus_register(bus, THIS_MODULE); +#endif +} +#ifdef mdiobus_register +#undef mdiobus_register +#endif +#define mdiobus_register LINUX_BACKPORT(mdiobus_register) + +static inline void backport_mdiobus_unregister(struct mii_bus *bus) +{ + kfree(bus->irq); + mdiobus_unregister(bus); +} +#define mdiobus_unregister LINUX_BACKPORT(mdiobus_unregister) +#endif /* < 4.5 */ + +#if LINUX_VERSION_IS_LESS(4,5,0) +#define phydev_get_addr LINUX_BACKPORT(phydev_get_addr) +static inline int phydev_get_addr(struct phy_device *phydev) +{ + return phydev->addr; +} +#else +#define phydev_get_addr LINUX_BACKPORT(phydev_get_addr) +static inline int phydev_get_addr(struct phy_device *phydev) +{ + return phydev->mdio.addr; +} +#endif + +#endif /* __BACKPORT_LINUX_PHY_H */ |