/* Write len bytes to fifo, pad till 32-bit boundary */ static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len) { u8 *dp = (u8 *) buf; u16 *dp2 = (u16 *) buf; u16 w; int quot = len % 4; /* buffer is already in 'usb data order', which is LE. */ /* When reading buffer as u16, we have to take care byte order */ /* doesn't get mixed up */ if ((unsigned long)dp2 & 1) { /* not aligned */ for (; len > 1; len -= 2) { w = *dp++; w |= *dp++ << 8; isp116x_raw_write_data16(isp116x, w); } if (len) isp116x_write_data16(isp116x, (u16) * dp); } else { /* aligned */ for (; len > 1; len -= 2) { /* Keep byte order ! */ isp116x_raw_write_data16(isp116x, cpu_to_le16(*dp2++)); } if (len) isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2)); } if (quot == 1 || quot == 2) isp116x_raw_write_data16(isp116x, 0); }
/* Write len bytes to fifo, pad till 32-bit boundary */ static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len) { u8 *dp = (u8 *) buf; u16 *dp2 = (u16 *) buf; u16 w; int quot = len % 4; if ((unsigned long)dp2 & 1) { /* not aligned */ for (; len > 1; len -= 2) { w = *dp++; w |= *dp++ << 8; isp116x_raw_write_data16(isp116x, w); } if (len) isp116x_write_data16(isp116x, (u16) * dp); } else { /* aligned */ for (; len > 1; len -= 2) isp116x_raw_write_data16(isp116x, *dp2++); if (len) isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2)); } if (quot == 1 || quot == 2) isp116x_raw_write_data16(isp116x, 0); }