diff options
Diffstat (limited to 'drivers/media/common/siano/smsdvb-main.c')
-rw-r--r-- | drivers/media/common/siano/smsdvb-main.c | 18 |
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: |