kernel: b53: drop support for old location of bcm47xx_nvram.h
[openwrt/openwrt.git] / target / linux / generic / files / drivers / net / phy / b53 / b53_priv.h
index 53da4064072b7829e4dd285a13513a6c64480f41..0c0358206ddaf1ea76a1079dedd9894b3373e6b8 100644 (file)
@@ -36,6 +36,8 @@ struct b53_io_ops {
        int (*write32)(struct b53_device *dev, u8 page, u8 reg, u32 value);
        int (*write48)(struct b53_device *dev, u8 page, u8 reg, u64 value);
        int (*write64)(struct b53_device *dev, u8 page, u8 reg, u64 value);
+       int (*phy_read16)(struct b53_device *dev, int addr, u8 reg, u16 *value);
+       int (*phy_write16)(struct b53_device *dev, int addr, u8 reg, u16 value);
 };
 
 enum {
@@ -46,7 +48,13 @@ enum {
        BCM5398_DEVICE_ID = 0x98,
        BCM53115_DEVICE_ID = 0x53115,
        BCM53125_DEVICE_ID = 0x53125,
+       BCM53128_DEVICE_ID = 0x53128,
        BCM63XX_DEVICE_ID = 0x6300,
+       BCM53010_DEVICE_ID = 0x53010,
+       BCM53011_DEVICE_ID = 0x53011,
+       BCM53012_DEVICE_ID = 0x53012,
+       BCM53018_DEVICE_ID = 0x53018,
+       BCM53019_DEVICE_ID = 0x53019,
 };
 
 #define B53_N_PORTS    9
@@ -122,10 +130,18 @@ static inline int is5397_98(struct b53_device *dev)
                dev->chip_id == BCM5398_DEVICE_ID;
 }
 
+static inline int is539x(struct b53_device *dev)
+{
+       return dev->chip_id == BCM5395_DEVICE_ID ||
+               dev->chip_id == BCM5397_DEVICE_ID ||
+               dev->chip_id == BCM5398_DEVICE_ID;
+}
+
 static inline int is531x5(struct b53_device *dev)
 {
        return dev->chip_id == BCM53115_DEVICE_ID ||
-               dev->chip_id == BCM53125_DEVICE_ID;
+               dev->chip_id == BCM53125_DEVICE_ID ||
+               dev->chip_id == BCM53128_DEVICE_ID;
 }
 
 static inline int is63xx(struct b53_device *dev)
@@ -137,6 +153,15 @@ static inline int is63xx(struct b53_device *dev)
 #endif
 }
 
+static inline int is5301x(struct b53_device *dev)
+{
+       return dev->chip_id == BCM53010_DEVICE_ID ||
+               dev->chip_id == BCM53011_DEVICE_ID ||
+               dev->chip_id == BCM53012_DEVICE_ID ||
+               dev->chip_id == BCM53018_DEVICE_ID ||
+               dev->chip_id == BCM53019_DEVICE_ID;
+}
+
 #define B53_CPU_PORT_25        5
 #define B53_CPU_PORT   8
 
@@ -145,6 +170,14 @@ static inline int is_cpu_port(struct b53_device *dev, int port)
        return dev->sw_dev.cpu_port == port;
 }
 
+static inline int is_imp_port(struct b53_device *dev, int port)
+{
+       if (is5325(dev) || is5365(dev))
+               return port == B53_CPU_PORT_25;
+       else
+               return port == B53_CPU_PORT;
+}
+
 static inline struct b53_device *sw_to_b53(struct switch_dev *sw)
 {
        return container_of(sw, struct b53_device, sw_dev);
@@ -277,16 +310,28 @@ static inline int b53_write64(struct b53_device *dev, u8 page, u8 reg,
 }
 
 #ifdef CONFIG_BCM47XX
+#include <bcm47xx_board.h>
 
-#include <bcm47xx_nvram.h>
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
+#include <linux/bcm47xx_nvram.h>
+#endif
 static inline int b53_switch_get_reset_gpio(struct b53_device *dev)
 {
-       return bcm47xx_nvram_gpio_pin("robo_reset");
+       enum bcm47xx_board board = bcm47xx_board_get();
+
+       switch (board) {
+       case BCM47XX_BOARD_LINKSYS_WRT300NV11:
+       case BCM47XX_BOARD_LINKSYS_WRT310NV1:
+               return 8;
+       default:
+               return bcm47xx_nvram_gpio_pin("robo_reset");
+       }
 }
 #else
 static inline int b53_switch_get_reset_gpio(struct b53_device *dev)
 {
-       return -ENOENT;
+       return -ENOENT;
 }
 #endif
 #endif