On 6/12/20 5:50 AM, Hayes Wang wrote: > Marek Vasut [mailto:ma...@denx.de] >> Sent: Friday, June 12, 2020 8:05 AM > [...] >>> The real data (16-bit) would be inserted a dummy bit, >>> and store the 17-bit to efuse offset 0x7d. Therefore, when >>> reading the 17-bit data from efuse, we have to remove the >>> dummy to get the real data. >> >> Ah, hmm, then let's use u32 type and be done with it. That solves the >> typecasts and is safe. Would that work ? > > The unit of PHY data is 2-byte, so I think I have to convert it. > > void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data);
Try this: ocp_data = r8152_efuse_read(tp, 0x7d); ocp_data = (ocp_data & 0x1fff0) >> 1) | (ocp_data & 0x7); if (data != 0xffff) ocp_reg_write(tp, OCP_ADC_IOFFSET, data); That should work, no ? Or does it generate compiler warnings ? There should be some way to remove that cast I hope, the rest of the patch is OK.