Index: libs/libmythtv/dvbchannel.cpp
===================================================================
--- libs/libmythtv/dvbchannel.cpp	(revision 9403)
+++ libs/libmythtv/dvbchannel.cpp	(working copy)
@@ -62,7 +62,7 @@
 
 static uint tuned_frequency(const DVBTuning&, fe_type_t, fe_sec_tone_mode_t *);
 static void drain_dvb_events(int fd);
-static bool wait_for_backend(int fd, int timeout_ms);
+static bool wait_for_backend(int fd, int timeout_ms, uint tuning_delay);
 static bool handle_diseq(const DVBTuning&, DVBDiSEqC*, bool reset);
 
 #define LOC QString("DVB#%1 ").arg(cardnum)
@@ -636,11 +636,12 @@
         }
 
         // Extra delay to add for broken DVB drivers
-        if (tuning_delay)
-            usleep(tuning_delay * 1000);
+        if (tuning_delay) {
+	  CHANNEL(QString("DVBChannel: Sleeping for tuning_delay=%1 prior to wait_for_backend.").arg(tuning_delay));
+	  usleep(tuning_delay * 1000);
+	}
+        wait_for_backend(fd_frontend, 5 /* msec */, tuning_delay);
 
-        wait_for_backend(fd_frontend, 5 /* msec */);
-
         prev_tuning.params = params;
         first_tune = false;
     }
@@ -718,7 +719,7 @@
 
 /** \fn drain_dvb_events(int)
  *  \brief Reads all the events off the queue, so we can use select
- *         in wait_for_backend(int,int).
+ *         in wait_for_backend(int,int,uint).
  */
 static void drain_dvb_events(int fd)
 {
@@ -743,7 +744,7 @@
     return (tone) ? lnb_hi : lnb_lo;
 }
 
-/** \fn wait_for_backend(int,int)
+/** \fn wait_for_backend(int,int,uint)
  *  \brief Waits for backend to get tune message.
  *
  *   With linux 2.6.12 or later this should block
@@ -766,7 +767,7 @@
  *  \param fd         frontend file descriptor
  *  \param timeout_ms timeout before FE_READ_STATUS in milliseconds
  */
-static bool wait_for_backend(int fd, int timeout_ms)
+static bool wait_for_backend(int fd, int timeout_ms, uint tuning_delay)
 {
     struct timeval select_timeout = { 0, (timeout_ms % 1000) * 1000 /*usec*/};
     fd_set fd_select_set;
@@ -787,6 +788,11 @@
         return false;
     }
 
+    // Some broken cards need a delay after reading status.
+    if (tuning_delay) {
+      VERBOSE(VB_CHANNEL, QString("DVBChannel: Sleeping for tuning_delay=%1 after FE_READ_STATUS.").arg(tuning_delay));
+      usleep(tuning_delay * 1000);
+    }
     VERBOSE(VB_CHANNEL, QString("dvbchannel.cpp:wait_for_backend: Status: %1")
             .arg(toString(status)));
     return true;
