In order to prepare the introduction of alternative busses, add a default mv88e6xxx_bus_ops pointer to the mv88e6xxx_chip structure.
A bus may set the default operations if they aren't already set. Signed-off-by: Vivien Didelot <vivien.dide...@gmail.com> --- drivers/net/dsa/mv88e6xxx/chip.c | 10 ++++++++-- drivers/net/dsa/mv88e6xxx/chip.h | 3 +++ drivers/net/dsa/mv88e6xxx/smi.c | 3 +++ drivers/net/dsa/mv88e6xxx/smi.h | 18 ------------------ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 28414db979b0..96e1886e05f0 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -59,7 +59,10 @@ int mv88e6xxx_read(struct mv88e6xxx_chip *chip, int addr, int reg, u16 *val) assert_reg_lock(chip); - err = mv88e6xxx_smi_read(chip, addr, reg, val); + if (unlikely(!(chip->ops && chip->ops->read))) + return -EOPNOTSUPP; + + err = chip->ops->read(chip, addr, reg, val); if (err) return err; @@ -75,7 +78,10 @@ int mv88e6xxx_write(struct mv88e6xxx_chip *chip, int addr, int reg, u16 val) assert_reg_lock(chip); - err = mv88e6xxx_smi_write(chip, addr, reg, val); + if (unlikely(!(chip->ops && chip->ops->write))) + return -EOPNOTSUPP; + + err = chip->ops->write(chip, addr, reg, val); if (err) return err; diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h index faa3fa889f19..860816ebb7ee 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.h +++ b/drivers/net/dsa/mv88e6xxx/chip.h @@ -204,6 +204,9 @@ struct mv88e6xxx_chip { /* This mutex protects the access to the switch registers */ struct mutex reg_lock; + /* The default registered bus operations */ + const struct mv88e6xxx_bus_ops *ops; + /* The MII bus and the address on the bus that is used to * communication with the switch */ diff --git a/drivers/net/dsa/mv88e6xxx/smi.c b/drivers/net/dsa/mv88e6xxx/smi.c index 96f7d2685bdc..77c40596b678 100644 --- a/drivers/net/dsa/mv88e6xxx/smi.c +++ b/drivers/net/dsa/mv88e6xxx/smi.c @@ -154,5 +154,8 @@ int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip, chip->bus = bus; chip->sw_addr = sw_addr; + if (!chip->ops) + chip->ops = chip->smi_ops; + return 0; } diff --git a/drivers/net/dsa/mv88e6xxx/smi.h b/drivers/net/dsa/mv88e6xxx/smi.h index 35e6403b65dc..566bfa174354 100644 --- a/drivers/net/dsa/mv88e6xxx/smi.h +++ b/drivers/net/dsa/mv88e6xxx/smi.h @@ -38,22 +38,4 @@ int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip, struct mii_bus *bus, int sw_addr); -static inline int mv88e6xxx_smi_read(struct mv88e6xxx_chip *chip, - int dev, int reg, u16 *data) -{ - if (chip->smi_ops && chip->smi_ops->read) - return chip->smi_ops->read(chip, dev, reg, data); - - return -EOPNOTSUPP; -} - -static inline int mv88e6xxx_smi_write(struct mv88e6xxx_chip *chip, - int dev, int reg, u16 data) -{ - if (chip->smi_ops && chip->smi_ops->write) - return chip->smi_ops->write(chip, dev, reg, data); - - return -EOPNOTSUPP; -} - #endif /* _MV88E6XXX_SMI_H */ -- 2.21.0