]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
media: cxd2841er: ensure that status will always be available
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 1 Nov 2017 21:05:59 +0000 (17:05 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 11 Dec 2017 18:04:57 +0000 (13:04 -0500)
The loop with read status use a dynamic timeout value, calculated
from symbol rate. It should run the loop at least one time for
the status to be handled after the loop.

While this should, in practice, happen every time, it doesn't
hurt to change the logic to make it explicit.

This solves a smatch warning:
drivers/media/dvb-frontends/cxd2841er.c:3350 cxd2841er_set_frontend_s() error: uninitialized symbol 'status'.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/dvb-frontends/cxd2841er.c

index 2cb97a3130be7b68ea6fb014b8149687f0c04685..17e4db7900e5b1a51f491f7d756efe5b64f8f1da 100644 (file)
@@ -3339,13 +3339,17 @@ static int cxd2841er_set_frontend_s(struct dvb_frontend *fe)
 
        cxd2841er_tune_done(priv);
        timeout = ((3000000 + (symbol_rate - 1)) / symbol_rate) + 150;
-       for (i = 0; i < timeout / CXD2841ER_DVBS_POLLING_INVL; i++) {
+
+       i = 0;
+       do {
                usleep_range(CXD2841ER_DVBS_POLLING_INVL*1000,
                        (CXD2841ER_DVBS_POLLING_INVL + 2) * 1000);
                cxd2841er_read_status_s(fe, &status);
                if (status & FE_HAS_LOCK)
                        break;
-       }
+               i++;
+       } while (i < timeout / CXD2841ER_DVBS_POLLING_INVL);
+
        if (status & FE_HAS_LOCK) {
                if (cxd2841er_get_carrier_offset_s_s2(
                                priv, &carr_offset)) {