media: rc: mceusb: allow the timeout to be configurable
authorSean Young <sean@mess.org>
Sun, 8 Apr 2018 15:06:49 +0000 (11:06 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 20 Apr 2018 13:22:14 +0000 (09:22 -0400)
mceusb devices have a default timeout of 100ms, but this can be changed.

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

index a1c21903b96c9af07828abc5fb991fd2332b86ce..5c0bf61fae268a8131b332f687ce2756677ead78 100644 (file)
@@ -982,6 +982,25 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier)
        return 0;
 }
 
+static int mceusb_set_timeout(struct rc_dev *dev, unsigned int timeout)
+{
+       u8 cmdbuf[4] = { MCE_CMD_PORT_IR, MCE_CMD_SETIRTIMEOUT, 0, 0 };
+       struct mceusb_dev *ir = dev->priv;
+       unsigned int units;
+
+       units = DIV_ROUND_CLOSEST(timeout, US_TO_NS(MCE_TIME_UNIT));
+
+       cmdbuf[2] = units >> 8;
+       cmdbuf[3] = units;
+
+       mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
+
+       /* get receiver timeout value */
+       mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
+
+       return 0;
+}
+
 /*
  * Select or deselect the 2nd receiver port.
  * Second receiver is learning mode, wide-band, short-range receiver.
@@ -1420,7 +1439,10 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir)
        rc->dev.parent = dev;
        rc->priv = ir;
        rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER;
+       rc->min_timeout = US_TO_NS(MCE_TIME_UNIT);
        rc->timeout = MS_TO_NS(100);
+       rc->max_timeout = 10 * IR_DEFAULT_TIMEOUT;
+       rc->s_timeout = mceusb_set_timeout;
        if (!ir->flags.no_tx) {
                rc->s_tx_mask = mceusb_set_tx_mask;
                rc->s_tx_carrier = mceusb_set_tx_carrier;