media: radio: Critical interrupt bugfix for si470x over i2c
authorDouglas Fischer <fischerdouglasc@gmail.com>
Fri, 2 Mar 2018 15:25:43 +0000 (10:25 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 21 Mar 2018 16:00:02 +0000 (12:00 -0400)
Fixed si470x_start() disabling the interrupt signal, causing tune
operations to never complete. This does not affect USB radios
because they poll the registers instead of using the IRQ line.

Signed-off-by: Douglas Fischer <fischerdouglasc@gmail.com>
[hans.verkuil@cisco.com: fixed 80 column checkpatch warning]
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/radio/si470x/radio-si470x-common.c
drivers/media/radio/si470x/radio-si470x.h

index 6f0bf43..b94d66e 100644 (file)
@@ -386,8 +386,12 @@ int si470x_start(struct si470x_device *radio)
                goto done;
 
        /* sysconfig 1 */
-       radio->registers[SYSCONFIG1] =
-               (de << 11) & SYSCONFIG1_DE;             /* DE*/
+       radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN | SYSCONFIG1_STCIEN |
+                                       SYSCONFIG1_RDS;
+       radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2;
+       radio->registers[SYSCONFIG1] |= SYSCONFIG1_GPIO2_INT;
+       if (de)
+               radio->registers[SYSCONFIG1] |= SYSCONFIG1_DE;
        retval = si470x_set_register(radio, SYSCONFIG1);
        if (retval < 0)
                goto done;
index eb7b834..0202f8e 100644 (file)
@@ -79,6 +79,8 @@
 #define SYSCONFIG1_BLNDADJ     0x00c0  /* bits 07..06: Stereo/Mono Blend Level Adjustment */
 #define SYSCONFIG1_GPIO3       0x0030  /* bits 05..04: General Purpose I/O 3 */
 #define SYSCONFIG1_GPIO2       0x000c  /* bits 03..02: General Purpose I/O 2 */
+#define SYSCONFIG1_GPIO2_DIS   0x0000  /* Disable GPIO 2 interrupt */
+#define SYSCONFIG1_GPIO2_INT   0x0004  /* Enable STC/RDS interrupt */
 #define SYSCONFIG1_GPIO1       0x0003  /* bits 01..00: General Purpose I/O 1 */
 
 #define SYSCONFIG2             5       /* System Configuration 2 */