struct v4l2_tuner *tuner)
 {
        struct si470x_device *radio = video_drvdata(file);
-       int retval;
+       int retval = 0;
 
        if (tuner->index != 0)
                return -EINVAL;
 
-       retval = si470x_get_register(radio, STATUSRSSI);
-       if (retval < 0)
-               return retval;
+       if (!radio->status_rssi_auto_update) {
+               retval = si470x_get_register(radio, STATUSRSSI);
+               if (retval < 0)
+                       return retval;
+       }
 
        /* driver constants */
        strcpy(tuner->name, "FM");
 
                }
        }
 
-       if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
+       /* Sometimes the device returns len 0 packets */
+       if (urb->actual_length != RDS_REPORT_SIZE)
                goto resubmit;
 
-       if (urb->actual_length > 0) {
+       radio->registers[STATUSRSSI] =
+               get_unaligned_be16(&radio->int_in_buffer[1]);
+
+       if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS)) {
                /* Update RDS registers with URB data */
-               for (regnr = 0; regnr < RDS_REGISTER_NUM; regnr++)
+               for (regnr = 1; regnr < RDS_REGISTER_NUM; regnr++)
                        radio->registers[STATUSRSSI + regnr] =
                            get_unaligned_be16(&radio->int_in_buffer[
                                regnr * RADIO_REGISTER_SIZE + 1]);
                        radio->int_in_running = 0;
                }
        }
+       radio->status_rssi_auto_update = radio->int_in_running;
 }
 
 
                                "submitting int urb failed (%d)\n", retval);
                radio->int_in_running = 0;
        }
+       radio->status_rssi_auto_update = radio->int_in_running;
        return retval;
 }
 
 
 
        struct completion completion;
        bool stci_enabled;              /* Seek/Tune Complete Interrupt */
+       bool status_rssi_auto_update;   /* Does RSSI get updated automatic? */
 
 #if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
        /* reference to USB and video device */