[media] siano: use a separate completion for stats
authorMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 7 Mar 2013 19:32:33 +0000 (16:32 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Mar 2013 10:43:31 +0000 (07:43 -0300)
Instead of re-use tune_done also for stats, the better is to use
a different completion.
Also, it was noticed that sometimes, the driver answers with
MSG_SMS_SIGNAL_DETECTED_IND for status request. Fix the code to
also handle those other signal indicators.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/common/siano/smsdvb.c

index 57f3560514abc307d3c2b476b00643cabb17a2fa..f4fd6703c49e2ffb164822359dc51a31d7e3607b 100644 (file)
@@ -48,6 +48,7 @@ struct smsdvb_client_t {
        fe_status_t             fe_status;
 
        struct completion       tune_done;
+       struct completion       stats_done;
 
        struct SMSHOSTLIB_STATISTICS_DVB_S sms_stat_dvb;
        int event_fe_state;
@@ -349,7 +350,6 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
                        pReceptionData->ErrorTSPackets = 0;
                }
 
-               complete(&client->tune_done);
                break;
        }
        default:
@@ -376,6 +376,7 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
                                client->fe_status = 0;
                        sms_board_dvb3_event(client, DVB3_EVENT_FE_UNLOCK);
                }
+               complete(&client->stats_done);
        }
 
        return 0;
@@ -471,7 +472,7 @@ static int smsdvb_send_statistics_request(struct smsdvb_client_t *client)
                                    sizeof(struct SmsMsgHdr_ST), 0 };
 
        rc = smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
-                                         &client->tune_done);
+                                        &client->stats_done);
 
        return rc;
 }
@@ -1002,6 +1003,7 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
        client->coredev = coredev;
 
        init_completion(&client->tune_done);
+       init_completion(&client->stats_done);
 
        kmutex_lock(&g_smsdvb_clientslock);