Hi Tristram, > diff --git a/drivers/net/dsa/microchip/ksz9477_i2c.c > b/drivers/net/dsa/microchip/ksz9477_i2c.c > new file mode 100644 > index 0000000..29511e9 > --- /dev/null > +++ b/drivers/net/dsa/microchip/ksz9477_i2c.c .. > +static int ksz_i2c_read24(struct ksz_device *dev, u32 reg, u32 *val) > +{ > + int ret; > + > + *val = 0; > + ret = ksz_i2c_read(dev, reg, (u8 *)val, 3); > + if (!ret) { > + *val = be32_to_cpu(*val); > + /* convert to 24bit */ > + *val >>= 8; > + } > + > + return ret; > +} > + > +static int ksz_i2c_write24(struct ksz_device *dev, u32 reg, u32 value) > +{ > + /* make it to big endian 24bit from MSB */ > + value <<= 8; > + value = cpu_to_be32(value); > + return ksz_i2c_write(dev, reg, &value, 3); > +}
Is there any specific reason that ksz_i2c_read24 & ksz_i2c_write24 in ksz9477_i2c.c but, other functions are in ksz_i2c.h? > + > +static const struct ksz_io_ops ksz9477_i2c_ops = { > + .read8 = ksz_i2c_read8, > + .read16 = ksz_i2c_read16, > + .read24 = ksz_i2c_read24, > + .read32 = ksz_i2c_read32, > + .write8 = ksz_i2c_write8, > + .write16 = ksz_i2c_write16, > + .write24 = ksz_i2c_write24, > + .write32 = ksz_i2c_write32, > + .get = ksz_i2c_get, > + .set = ksz_i2c_set, > +}; Thanks. Woojung