diff -Nru a/drivers/media/dvb/frontends/cx24110.c b/drivers/media/dvb/frontends/cx24110.c *** /drivers/media/dvb/frontends/cx24110.c Sat Feb 26 19:42:12 2005 --- /drivers/media/dvb/frontends/cx24110.c Sat Feb 26 19:42:12 2005 @@ -403,6 +403,26 @@ }; } +static int cx24110_diseqc_send_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t burst) +{ + int rv, bit, i; + struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; + + if(burst==SEC_MINI_A) {bit=0x00;} + else if(burst==SEC_MINI_B) {bit=0x08;} + else return -EINVAL; + + rv = cx24110_readreg(state, 0x77); + cx24110_writereg(state, 0x77, rv|0x04); + + rv = cx24110_readreg(state, 0x76); + cx24110_writereg(state, 0x76, ((rv & 0x90) | 0x40 | bit)); + for (i=500; i-- > 0 && !(cx24110_readreg(state,0x76)&0x40);) + ; /* wait for LNB ready */ + + return 0; +} + static int cx24110_send_diseqc_msg(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd *cmd) { @@ -412,6 +432,9 @@ for (i = 0; i < cmd->msg_len; i++) cx24110_writereg(state, 0x79 + i, cmd->msg[i]); + rv = cx24110_readreg(state, 0x77); + cx24110_writereg(state, 0x77, rv|0x04); + rv = cx24110_readreg(state, 0x76); cx24110_writereg(state, 0x76, ((rv & 0x90) | 0x40) | ((cmd->msg_len-3) & 3)); @@ -634,7 +657,8 @@ .diseqc_send_master_cmd = cx24110_send_diseqc_msg, .set_tone = cx24110_set_tone, .set_voltage = cx24110_set_voltage, + .diseqc_send_burst = cx24110_diseqc_send_burst, }; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");