On Fri, Nov 30, 2018 at 02:31:21PM +0800, Jackychou wrote: > From: JackyChou <jackychou@xxxxxxxxxxx> > > In the read/write function, set port 2 independently in the 2-port case. > > When setting the offset of port registers, the offset between port 1 and > other ports is different, so port 1 is set independently. > Then in the rest of ports, the port 2 between 2-ports case and 4-ports case > is different, so port 2 in 2-ports case is set independently. > > Signed-off-by: JackyChou <jackychou@xxxxxxxxxxx> > --- Thanks for the update. > + } else { > + u8 port_offset; > + > + if ((mos7840_port->port_num == 2) && (serial->num_ports == 2)) > + port_offset = 1; > + else > + port_offset = mos7840_port->port_num - 2; > + mos7840_port->SpRegOffset = 0x8 + (2 * port_offset); > + mos7840_port->ControlRegOffset = 0x9 + (2 * port_offset); > + mos7840_port->DcrRegOffset = 0x16 + (3 * port_offset); I simplified this further as: } else { u8 phy_num = mos7840_port->port_num; /* Port 2 in the 2-port case uses registers of port 3 */ if (serial->num_ports == 2) phy_num = 3; mos7840_port->SpRegOffset = 0x8 + 2 * (phy_num - 2); mos7840_port->ControlRegOffset = 0x9 + 2 * (phy_num - 2); mos7840_port->DcrRegOffset = 0x16 + 3 * (phy_num - 2); before applying. Johan