> +struct at8031_data { > + bool is_fiber; > + bool is_1000basex; > + struct regulator_dev *vddio_rdev; > + struct regulator_dev *vddh_rdev; > +}; > + > struct at803x_priv { > int flags; > u16 clk_25m_reg; > u16 clk_25m_mask; > u8 smarteee_lpi_tw_1g; > u8 smarteee_lpi_tw_100m; > - bool is_fiber; > - bool is_1000basex; > - struct regulator_dev *vddio_rdev; > - struct regulator_dev *vddh_rdev; > + > + /* Specific data for at8031 PHYs */ > + void *data; > }; I don't really like this void * Go through at803x_priv and find out what is common to them all, and keep that in one structure. Add per family private structures which include the common as a member. By having real types everywhere you get the compiler doing checks for you. As Russell pointed out, this patch series is going to be too big. So break it up. We can move fast on patches which are simple and obviously correct. Andrew