V4L/DVB (4185): Conditionally enable 5 byte diseqc commands
authorYeasah Pell <yeasah@schwide.net>
Wed, 21 Jun 2006 21:28:13 +0000 (18:28 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 25 Jun 2006 05:05:20 +0000 (02:05 -0300)
Signed-off-by: Yeasah Pell <yeasah@schwide.net>
Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/bt8xx/dst.c

index c538d272cf802b9cd64c5de4c68758facda5721f..d687a14ec0a7aa6b3b72d9fd322d9508cab8c2da 100644 (file)
@@ -1466,9 +1466,12 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd
 
        if (state->dst_type != DST_TYPE_IS_SAT)
                return 0;
-       if (cmd->msg_len == 0 || cmd->msg_len > 4)
+       if (cmd->msg_len > 0 && cmd->msg_len < 5)
+               memcpy(&paket[3], cmd->msg, cmd->msg_len);
+       else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5)
+               memcpy(&paket[2], cmd->msg, cmd->msg_len);
+       else
                return -EINVAL;
-       memcpy(&paket[3], cmd->msg, cmd->msg_len);
        paket[7] = dst_check_sum(&paket[0], 7);
        dst_command(state, paket, 8);
        return 0;