aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/common/siano/smsdvb-main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/common/siano/smsdvb-main.c')
-rw-r--r--drivers/media/common/siano/smsdvb-main.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/media/common/siano/smsdvb-main.c b/drivers/media/common/siano/smsdvb-main.c
index d83896bb98fd..4393c688d0ad 100644
--- a/drivers/media/common/siano/smsdvb-main.c
+++ b/drivers/media/common/siano/smsdvb-main.c
@@ -512,8 +512,13 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
512 512
513 switch (phdr->msgType) { 513 switch (phdr->msgType) {
514 case MSG_SMS_DVBT_BDA_DATA: 514 case MSG_SMS_DVBT_BDA_DATA:
515 dvb_dmx_swfilter(&client->demux, p, 515 /*
516 cb->size - sizeof(struct SmsMsgHdr_ST)); 516 * Only feed data to dvb demux if are there any feed listening
517 * to it and if the device has tuned
518 */
519 if (client->feed_users && client->has_tuned)
520 dvb_dmx_swfilter(&client->demux, p,
521 cb->size - sizeof(struct SmsMsgHdr_ST));
517 break; 522 break;
518 523
519 case MSG_SMS_RF_TUNE_RES: 524 case MSG_SMS_RF_TUNE_RES:
@@ -579,9 +584,10 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
579 sms_board_dvb3_event(client, DVB3_EVENT_UNC_OK); 584 sms_board_dvb3_event(client, DVB3_EVENT_UNC_OK);
580 else 585 else
581 sms_board_dvb3_event(client, DVB3_EVENT_UNC_ERR); 586 sms_board_dvb3_event(client, DVB3_EVENT_UNC_ERR);
587 client->has_tuned = true;
582 } else { 588 } else {
583 smsdvb_stats_not_ready(fe); 589 smsdvb_stats_not_ready(fe);
584 590 client->has_tuned = false;
585 sms_board_dvb3_event(client, DVB3_EVENT_FE_UNLOCK); 591 sms_board_dvb3_event(client, DVB3_EVENT_FE_UNLOCK);
586 } 592 }
587 complete(&client->stats_done); 593 complete(&client->stats_done);
@@ -623,6 +629,8 @@ static int smsdvb_start_feed(struct dvb_demux_feed *feed)
623 sms_debug("add pid %d(%x)", 629 sms_debug("add pid %d(%x)",
624 feed->pid, feed->pid); 630 feed->pid, feed->pid);
625 631
632 client->feed_users++;
633
626 PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID; 634 PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
627 PidMsg.xMsgHeader.msgDstId = HIF_TASK; 635 PidMsg.xMsgHeader.msgDstId = HIF_TASK;
628 PidMsg.xMsgHeader.msgFlags = 0; 636 PidMsg.xMsgHeader.msgFlags = 0;
@@ -643,6 +651,8 @@ static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
643 sms_debug("remove pid %d(%x)", 651 sms_debug("remove pid %d(%x)",
644 feed->pid, feed->pid); 652 feed->pid, feed->pid);
645 653
654 client->feed_users--;
655
646 PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID; 656 PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
647 PidMsg.xMsgHeader.msgDstId = HIF_TASK; 657 PidMsg.xMsgHeader.msgDstId = HIF_TASK;
648 PidMsg.xMsgHeader.msgFlags = 0; 658 PidMsg.xMsgHeader.msgFlags = 0;
@@ -963,6 +973,8 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe)
963 c->strength.stat[0].uvalue = 0; 973 c->strength.stat[0].uvalue = 0;
964 c->cnr.stat[0].uvalue = 0; 974 c->cnr.stat[0].uvalue = 0;
965 975
976 client->has_tuned = false;
977
966 switch (smscore_get_device_mode(coredev)) { 978 switch (smscore_get_device_mode(coredev)) {
967 case DEVICE_MODE_DVBT: 979 case DEVICE_MODE_DVBT:
968 case DEVICE_MODE_DVBT_BDA: 980 case DEVICE_MODE_DVBT_BDA: