media: mtk-cir: reduce message end to fix nec repeats
authorSean Young <sean@mess.org>
Fri, 14 Jan 2022 14:24:27 +0000 (15:24 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 24 Jan 2022 00:38:32 +0000 (01:38 +0100)
The ir receiver generates an interrupt with the IR data, once a space of
at least ok_count is has been seen. Currently this is about 110ms; when
holding down a button on a nec remote, no such space is seen until the
button is released. This means nothing happens until you release the
button.

The sample rate is fixed at 46us, so the maximum space that can be
encoded is about 12ms. So, the set ok_count above that at 23ms.

Cc: Sean Wang <sean.wang@mediatek.com>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/rc/mtk-cir.c

index 840e7ae..746d43f 100644 (file)
@@ -24,7 +24,8 @@
  * Register to setting ok count whose unit based on hardware sampling period
  * indicating IR receiving completion and then making IRQ fires
  */
-#define MTK_OK_COUNT(x)                  (((x) & GENMASK(23, 16)) << 16)
+#define MTK_OK_COUNT_MASK        (GENMASK(22, 16))
+#define MTK_OK_COUNT(x)                  ((x) << 16)
 
 /* Bit to enable IR hardware function */
 #define MTK_IR_EN                BIT(0)
@@ -268,7 +269,7 @@ static irqreturn_t mtk_ir_irq(int irqno, void *dev_id)
 static const struct mtk_ir_data mt7623_data = {
        .regs = mt7623_regs,
        .fields = mt7623_fields,
-       .ok_count = 0xf,
+       .ok_count = 3,
        .hw_period = 0xff,
        .div    = 4,
 };
@@ -276,7 +277,7 @@ static const struct mtk_ir_data mt7623_data = {
 static const struct mtk_ir_data mt7622_data = {
        .regs = mt7622_regs,
        .fields = mt7622_fields,
-       .ok_count = 0xf,
+       .ok_count = 3,
        .hw_period = 0xffff,
        .div    = 32,
 };
@@ -400,7 +401,7 @@ static int mtk_ir_probe(struct platform_device *pdev)
        mtk_w32_mask(ir, MTK_DG_CNT(1), MTK_DG_CNT_MASK, MTK_IRTHD);
 
        /* Enable IR and PWM */
-       val = mtk_r32(ir, MTK_CONFIG_HIGH_REG);
+       val = mtk_r32(ir, MTK_CONFIG_HIGH_REG) & ~MTK_OK_COUNT_MASK;
        val |= MTK_OK_COUNT(ir->data->ok_count) |  MTK_PWM_EN | MTK_IR_EN;
        mtk_w32(ir, val, MTK_CONFIG_HIGH_REG);