static int s5h1420_recv_slave_reply (struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply) 
static int s5h1420_recv_slave_reply (struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply) 
static int s5h1420_recv_slave_reply (struct dvb_frontend* fe, struct dvb_diseqc_slave_reply* reply){	struct s5h1420_state* state = fe->demodulator_priv;	u8 val;	int i;	int length;	unsigned long timeout;	int result = 0;	/* setup for DISEQC recieve */	val = s5h1420_readreg(state, 0x3b);	s5h1420_writereg(state, 0x3b, 0x82); /* FIXME: guess - do we need to set DIS_RDY(0x08) in receive mode? */	msleep(15);	/* wait for reception to complete */	timeout = jiffies + ((reply->timeout*HZ) / 1000);	while(time_before(jiffies, timeout)) {		if (!(s5h1420_readreg(state, 0x3b) & 0x80)) /* FIXME: do we test DIS_RDY(0x08) or RCV_EN(0x80)? */			break;		msleep(5);	}	if (time_after(jiffies, timeout)) {		result = -ETIMEDOUT;		goto exit;	}	/* check error flag - FIXME: not sure what this does - docs do not describe	 * beyond "error flag for diseqc receive data :( */	if (s5h1420_readreg(state, 0x49)) {		result = -EIO;		goto exit;	}	/* check length */	length = (s5h1420_readreg(state, 0x3b) & 0x70) >> 4;	if (length > sizeof(reply->msg)) {		result = -EOVERFLOW;		goto exit;	}	reply->msg_len = length;	/* extract data */	for(i=0; i< length; i++) {		reply->msg[i] = s5h1420_readreg(state, 0x3c + i);	}exit:	/* restore original settings */	s5h1420_writereg(state, 0x3b, val);	msleep(15);	return result;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a9d6a80b41c04e8ff4c7442cc35f5df610863841/s5h1420.c/buggy/drivers/media/dvb/frontends/s5h1420.c