[media] rc: make s_tx_mask consistent
authorSean Young <sean@mess.org>
Sun, 10 Jul 2016 16:34:32 +0000 (13:34 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 15 Jul 2016 14:46:55 +0000 (11:46 -0300)
When s_tx_mask is given an invalid bitmask, the number of transmitters
should be returned. See the LIRC_SET_TRANSMITTER_MASK lirc ioctl
documentation.

Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/rc/mceusb.c
drivers/media/rc/winbond-cir.c

index 5cf2e74..2d1585d 100644 (file)
@@ -887,6 +887,12 @@ static int mceusb_set_tx_mask(struct rc_dev *dev, u32 mask)
 {
        struct mceusb_dev *ir = dev->priv;
 
+       /* return number of transmitters */
+       int emitters = ir->num_txports ? ir->num_txports : 2;
+
+       if (mask >= (1 << emitters))
+               return emitters;
+
        if (ir->flags.tx_mask_normal)
                ir->tx_mask = mask;
        else
index d839f73..95ae60e 100644 (file)
@@ -615,6 +615,10 @@ wbcir_txmask(struct rc_dev *dev, u32 mask)
        unsigned long flags;
        u8 val;
 
+       /* return the number of transmitters */
+       if (mask > 15)
+               return 4;
+
        /* Four outputs, only one output can be enabled at a time */
        switch (mask) {
        case 0x1: