summaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/mtk-cir.c
diff options
context:
space:
mode:
authorSean Young <sean@mess.org>2020-11-29 18:01:26 +0100
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2020-12-01 16:00:51 +0100
commitd904eb0b351fe5545d9ba5b85844342f49025923 (patch)
treeb3412a6ca6b59a2d98ded7b334b92586dc0b1de1 /drivers/media/rc/mtk-cir.c
parentmedia: vidtv.rst: add kernel-doc markups (diff)
downloadlinux-d904eb0b351fe5545d9ba5b85844342f49025923.tar.xz
linux-d904eb0b351fe5545d9ba5b85844342f49025923.zip
media: mtk-cir: fix calculation of chk period
Since commit 528222d853f9 ("media: rc: harmonize infrared durations to microseconds"), the calculation of the chk period is wrong. As a result, all reported IR will have incorrect timings. Now that the calculations are done in microseconds rather than nanoseconds, we can fold the calculations in a simpler form with less rounding error. Tested-by: Frank Wunderlich <frank-w@public-files.de> Fixes: 528222d853f9 ("media: rc: harmonize infrared durations to microseconds") Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Diffstat (limited to 'drivers/media/rc/mtk-cir.c')
-rw-r--r--drivers/media/rc/mtk-cir.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/media/rc/mtk-cir.c b/drivers/media/rc/mtk-cir.c
index 5051a5e5244b..65a136c0fac2 100644
--- a/drivers/media/rc/mtk-cir.c
+++ b/drivers/media/rc/mtk-cir.c
@@ -151,15 +151,12 @@ static inline u32 mtk_chk_period(struct mtk_ir *ir)
{
u32 val;
- /* Period of raw software sampling in ns */
- val = DIV_ROUND_CLOSEST(1000000000ul,
- clk_get_rate(ir->bus) / ir->data->div);
-
/*
* Period for software decoder used in the
* unit of raw software sampling
*/
- val = DIV_ROUND_CLOSEST(MTK_IR_SAMPLE, val);
+ val = DIV_ROUND_CLOSEST(clk_get_rate(ir->bus),
+ USEC_PER_SEC * ir->data->div / MTK_IR_SAMPLE);
dev_dbg(ir->dev, "@pwm clk = \t%lu\n",
clk_get_rate(ir->bus) / ir->data->div);
@@ -412,7 +409,7 @@ static int mtk_ir_probe(struct platform_device *pdev)
mtk_irq_enable(ir, MTK_IRINT_EN);
dev_info(dev, "Initialized MT7623 IR driver, sample period = %dus\n",
- DIV_ROUND_CLOSEST(MTK_IR_SAMPLE, 1000));
+ MTK_IR_SAMPLE);
return 0;