On Sat Jan 11 09:55:14 2025 +0000, Ricardo Ribalda wrote:
> The datasheet recommends 55MHz frequency sampling, with a max of 69 MHz.
> (Kudos to Kosta Stefanov for the calculations).
> 
> Replace z with a 32 bit uint, and make the range of the variable
> explicit.
> 
> Found by cocci:
> drivers/media/dvb-frontends/tda10048.c:345:1-7: WARNING: do_div() does a 
> 64-by-32 division, please consider using div64_u64 instead.
> 
> Reviewed-by: Kosta Stefanov <costa.stephan...@gmail.com>
> Signed-off-by: Ricardo Ribalda <riba...@chromium.org>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/dvb-frontends/tda10048.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/dvb-frontends/tda10048.c 
b/drivers/media/dvb-frontends/tda10048.c
index 3e725cdcc66b..1f87eb0dcf2a 100644
--- a/drivers/media/dvb-frontends/tda10048.c
+++ b/drivers/media/dvb-frontends/tda10048.c
@@ -328,7 +328,8 @@ static int tda10048_set_wref(struct dvb_frontend *fe, u32 
sample_freq_hz,
                             u32 bw)
 {
        struct tda10048_state *state = fe->demodulator_priv;
-       u64 t, z;
+       u64 t;
+       u32 z;
 
        dprintk(1, "%s()\n", __func__);
 
@@ -341,6 +342,11 @@ static int tda10048_set_wref(struct dvb_frontend *fe, u32 
sample_freq_hz,
        /* t *= 2147483648 on 32bit platforms */
        t *= (2048 * 1024);
        t *= 1024;
+
+       /*
+        * Sample frequency is typically 55 MHz, with a theoretical maximum of
+        * 69 MHz. With a 32 bit z we have enough accuracy for up to 613 MHz.
+        */
        z = 7 * sample_freq_hz;
        do_div(t, z);
        t += 5;

Reply via email to