diff -r 792a97818dd1 linux/drivers/media/dvb/dvb-usb/dib0700_core.c --- a/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Thu Jul 26 10:49:35 2007 -0300 +++ b/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Fri Jul 27 14:03:52 2007 +0200 @@ -243,21 +243,18 @@ int dib0700_streaming_ctrl(struct dvb_us b[2] = (0x01 << 4); /* Master mode */ b[3] = 0x00; - deb_info("modifying (%d) streaming state for %d\n", onoff, adap->id); - - if (onoff) - st->channel_state |= 1 << adap->id; - else - st->channel_state &= ~(1 << adap->id); - - b[2] |= st->channel_state; - - if (st->channel_state) /* if at least one channel is active */ - b[1] = (0x01 << 4) | 0x00; - - deb_info("data for streaming: %x %x\n",b[1],b[2]); - - return dib0700_ctrl_wr(adap->dev, b, 4); + if (onoff) { + if ((st->channel_state & (1 << adap->id)) == 0) { + deb_info("modifying (%d) streaming state for %d\n", onoff, adap->id); + st->channel_state |= 1 << adap->id; + b[1] = (0x01 << 4) | 0x00; + b[2] |= st->channel_state; + deb_info("data for streaming: %x %x\n",b[1],b[2]); + return dib0700_ctrl_wr(adap->dev, b, 4); + } + } + + return 0; } static int dib0700_probe(struct usb_interface *intf,