diff options
author | Dominik Sliwa <dominik.sliwa@toradex.com> | 2017-11-21 12:59:41 +0000 |
---|---|---|
committer | Dominik Sliwa <dominik.sliwa@toradex.com> | 2017-12-22 09:40:23 +0000 |
commit | e34cb44ac7c08783b98a16eec70125e205e6eb12 (patch) | |
tree | 1101d23f1a73e5627ae187b07c7a0cf8826e10d1 /backport-include/linux/phy.h |
initial commit
Generated againts 4.14 kernel source with
git backports 1d8cc151d365582b42be00af776270b834a7a37d
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 */ |