Permalink
Browse files

fixed can not send diseqc problem which signal come from the multiswi…

…tch system on the multisw mode
  • Loading branch information...
1 parent 00e8d0c commit 5c21ed51b3b110dcad6671a522a9bef1b9d2c904 @Davin622 Davin622 committed Dec 8, 2016
Showing with 38 additions and 4 deletions.
  1. +38 −4 drivers/media/dvb-frontends/mxl5xx.c
@@ -86,6 +86,8 @@ struct mxl {
struct dvb_frontend fe;
u32 demod;
u32 rf_in;
+ bool diseqcsign; //
+ MXL_HYDRA_DISEQC_TX_MSG_T diseqcMsg;
};
static void convert_endian(u8 flag, u32 size, u8 *d)
@@ -350,8 +352,6 @@ static int send_master_cmd(struct dvb_frontend *fe,
u8 cmdBuff[MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN];
int i = 0,ret = 0;
-// if (!mode)
-// return 0;
diseqcMsgPtr.diseqcId = state->rf_in;
diseqcMsgPtr.nbyte = cmd->msg_len;
@@ -360,6 +360,13 @@ static int send_master_cmd(struct dvb_frontend *fe,
for( i =0;i < cmd->msg_len;i++)
diseqcMsgPtr.bufMsg[i] = cmd->msg[i];
+ if(!mode){
+ state->diseqcsign= true;
+ memcpy(&state->diseqcMsg,&diseqcMsgPtr,sizeof(MXL_HYDRA_DISEQC_TX_MSG_T));
+ return 0;
+
+ }
+
BUILD_HYDRA_CMD(MXL_HYDRA_DISEQC_MSG_CMD, MXL_CMD_WRITE, cmdSize, &diseqcMsgPtr, cmdBuff);
mutex_lock(&state->base->status_lock);
ret=send_command(state, cmdSize + MXL_HYDRA_CMD_HEADER_SIZE, &cmdBuff[0]);
@@ -377,13 +384,18 @@ static int send_burst(struct dvb_frontend *fe,
u8 cmdBuff[MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN];
int i = 0,ret = 0;
-// if (!mode)
-// return 0;
diseqcMsgPtr.diseqcId = state->rf_in;
diseqcMsgPtr.nbyte = 0;
diseqcMsgPtr.toneBurst = burst == SEC_MINI_B ? MXL_HYDRA_DISEQC_TONE_SB : MXL_HYDRA_DISEQC_TONE_SA;
+ if(!mode){
+ state->diseqcsign= true;
+ memcpy(&state->diseqcMsg,&diseqcMsgPtr,sizeof(MXL_HYDRA_DISEQC_TX_MSG_T));
+ return 0;
+
+ }
+
BUILD_HYDRA_CMD(MXL_HYDRA_DISEQC_MSG_CMD, MXL_CMD_WRITE, cmdSize, &diseqcMsgPtr, cmdBuff);
mutex_lock(&state->base->status_lock);
ret=send_command(state, cmdSize + MXL_HYDRA_CMD_HEADER_SIZE, &cmdBuff[0]);
@@ -392,6 +404,25 @@ static int send_burst(struct dvb_frontend *fe,
return ret;
}
+static void senddiseqcAbortTune(struct dvb_frontend *fe)
+{
+ struct mxl *state = fe->demodulator_priv;
+ u8 cmdSize = sizeof(MXL_HYDRA_DISEQC_TX_MSG_T);
+ u8 cmdBuff[MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN];
+
+ if(state->diseqcsign){
+ state->diseqcMsg.diseqcId = state->rf_in;
+ state->diseqcMsg.bufMsg[0] = 0xe0;
+ BUILD_HYDRA_CMD(MXL_HYDRA_DISEQC_MSG_CMD, MXL_CMD_WRITE, cmdSize, &state->diseqcMsg, cmdBuff);
+ mutex_lock(&state->base->status_lock);
+ send_command(state, cmdSize + MXL_HYDRA_CMD_HEADER_SIZE, &cmdBuff[0]);
+ mutex_unlock(&state->base->status_lock);
+
+ state->diseqcsign = false;
+ }
+ msleep(100);
+}
+
static int set_parameters(struct dvb_frontend *fe)
{
struct mxl *state = fe->demodulator_priv;
@@ -415,6 +446,9 @@ static int set_parameters(struct dvb_frontend *fe)
if (p->symbol_rate < 1000000 || p->symbol_rate > 45000000)
return -EINVAL;
+ if(!mode)
+ senddiseqcAbortTune(fe);
+
//CfgDemodAbortTune(state);
switch (p->delivery_system) {

0 comments on commit 5c21ed5

Please sign in to comment.