case XC2028_WAITING_FIRMWARE:
                return -EAGAIN;
        case XC2028_ACTIVE:
+               return 1;
        case XC2028_SLEEP:
                return 0;
        case XC2028_NODEV:
        if (rc < 0)
                return rc;
 
+       /* If the device is sleeping, no channel is tuned */
+       if (!rc) {
+               *strength = 0;
+               return 0;
+       }
+
        mutex_lock(&priv->lock);
 
        /* Sync Lock Indicator */
        if (rc < 0)
                return rc;
 
+       /* If the device is sleeping, no channel is tuned */
+       if (!rc) {
+               *afc = 0;
+               return 0;
+       }
+
        mutex_lock(&priv->lock);
 
        /* Sync Lock Indicator */
        if (rc < 0)
                return rc;
 
-       /* Avoid firmware reload on slow devices or if PM disabled */
-       if (no_poweroff || priv->ctrl.disable_power_mgmt)
+       /* Device is already in sleep mode */
+       if (!rc)
                return 0;
 
-       /* Device is already in sleep mode */
-       if (priv->state == XC2028_SLEEP)
+       /* Avoid firmware reload on slow devices or if PM disabled */
+       if (no_poweroff || priv->ctrl.disable_power_mgmt)
                return 0;
 
        tuner_dbg("Putting xc2028/3028 into poweroff mode.\n");