/* Read a word from the NV E2PROM device  */
static u16 initio_se2_rd(unsigned long base, u8 addr)
/* Read a word from the NV E2PROM device  */
static u16 initio_se2_rd(unsigned long base, u8 addr)
{
	u8 instr, rb;
	u16 val = 0;
	int i;
	instr = (u8) (addr | 0x80);
	initio_se2_instr(base, instr);
	for (i = 15; i >= 0; i--) {
		outb(SE2CS | SE2CLK, base + TUL_NVRAM);
		udelay(30);
		outb(SE2CS, base + TUL_NVRAM);
		rb = inb(base + TUL_NVRAM);
		rb &= SE2DI;
		val += (rb << i);
		udelay(30);
	}
	outb(0, base + TUL_NVRAM);
	udelay(30);
	return val;
}