diff options
Diffstat (limited to 'drivers/media/dvb-core')
| -rw-r--r-- | drivers/media/dvb-core/dmxdev.c | 4 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dvb-usb-ids.h | 7 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dvb_demux.c | 26 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dvb_frontend.c | 10 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dvb_net.c | 10 | ||||
| -rw-r--r-- | drivers/media/dvb-core/dvbdev.c | 19 | 
6 files changed, 43 insertions, 33 deletions
diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c index 0b4616b8719..c0363f1b6c9 100644 --- a/drivers/media/dvb-core/dmxdev.c +++ b/drivers/media/dvb-core/dmxdev.c @@ -206,8 +206,6 @@ static int dvb_dvr_release(struct inode *inode, struct file *file)  	/* TODO */  	dvbdev->users--;  	if (dvbdev->users == 1 && dmxdev->exit == 1) { -		fops_put(file->f_op); -		file->f_op = NULL;  		mutex_unlock(&dmxdev->mutex);  		wake_up(&dvbdev->wait_queue);  	} else @@ -1120,8 +1118,6 @@ static int dvb_demux_release(struct inode *inode, struct file *file)  	mutex_lock(&dmxdev->mutex);  	dmxdev->dvbdev->users--;  	if(dmxdev->dvbdev->users==1 && dmxdev->exit==1) { -		fops_put(file->f_op); -		file->f_op = NULL;  		mutex_unlock(&dmxdev->mutex);  		wake_up(&dmxdev->dvbdev->wait_queue);  	} else diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h index 419a2d6b434..11d2bea23b0 100644 --- a/drivers/media/dvb-core/dvb-usb-ids.h +++ b/drivers/media/dvb-core/dvb-usb-ids.h @@ -239,6 +239,7 @@  #define USB_PID_AVERMEDIA_A835B_4835			0x4835  #define USB_PID_AVERMEDIA_1867				0x1867  #define USB_PID_AVERMEDIA_A867				0xa867 +#define USB_PID_AVERMEDIA_H335				0x0335  #define USB_PID_AVERMEDIA_TWINSTAR			0x0825  #define USB_PID_TECHNOTREND_CONNECT_S2400               0x3006  #define USB_PID_TECHNOTREND_CONNECT_S2400_8KEEPROM	0x3009 @@ -256,6 +257,7 @@  #define USB_PID_TERRATEC_T5				0x10a1  #define USB_PID_NOXON_DAB_STICK				0x00b3  #define USB_PID_NOXON_DAB_STICK_REV2			0x00e0 +#define USB_PID_NOXON_DAB_STICK_REV3			0x00b4  #define USB_PID_PINNACLE_EXPRESSCARD_320CX		0x022e  #define USB_PID_PINNACLE_PCTV2000E			0x022c  #define USB_PID_PINNACLE_PCTV_DVB_T_FLASH		0x0228 @@ -317,6 +319,7 @@  #define USB_PID_WINFAST_DTV_DONGLE_H			0x60f6  #define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2		0x6f01  #define USB_PID_WINFAST_DTV_DONGLE_GOLD			0x6029 +#define USB_PID_WINFAST_DTV_DONGLE_MINID		0x6f0f  #define USB_PID_GENPIX_8PSK_REV_1_COLD			0x0200  #define USB_PID_GENPIX_8PSK_REV_1_WARM			0x0201  #define USB_PID_GENPIX_8PSK_REV_2			0x0202 @@ -353,11 +356,13 @@  #define USB_PID_ELGATO_EYETV_DTT_2			0x003f  #define USB_PID_ELGATO_EYETV_DTT_Dlx			0x0020  #define USB_PID_ELGATO_EYETV_SAT			0x002a +#define USB_PID_ELGATO_EYETV_SAT_V2			0x0025  #define USB_PID_DVB_T_USB_STICK_HIGH_SPEED_COLD		0x5000  #define USB_PID_DVB_T_USB_STICK_HIGH_SPEED_WARM		0x5001  #define USB_PID_FRIIO_WHITE				0x0001  #define USB_PID_TVWAY_PLUS				0x0002  #define USB_PID_SVEON_STV20				0xe39d +#define USB_PID_SVEON_STV20_RTL2832U			0xd39d  #define USB_PID_SVEON_STV22				0xe401  #define USB_PID_SVEON_STV22_IT9137			0xe411  #define USB_PID_AZUREWAVE_AZ6027			0x3275 @@ -365,10 +370,12 @@  #define USB_PID_TERRATEC_DVBS2CI_V2			0x10ac  #define USB_PID_TECHNISAT_USB2_HDCI_V1			0x0001  #define USB_PID_TECHNISAT_USB2_HDCI_V2			0x0002 +#define USB_PID_TECHNISAT_USB2_CABLESTAR_HDCI		0x0003  #define USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2		0x0004  #define USB_PID_TECHNISAT_USB2_DVB_S2			0x0500  #define USB_PID_CPYTO_REDI_PC50A			0xa803  #define USB_PID_CTVDIGDUAL_V2				0xe410  #define USB_PID_PCTV_2002E                              0x025c  #define USB_PID_PCTV_2002E_SE                           0x025d +#define USB_PID_SVEON_STV27                             0xd3af  #endif diff --git a/drivers/media/dvb-core/dvb_demux.c b/drivers/media/dvb-core/dvb_demux.c index 3485655fa08..6c7ff0cdcd3 100644 --- a/drivers/media/dvb-core/dvb_demux.c +++ b/drivers/media/dvb-core/dvb_demux.c @@ -435,7 +435,7 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)  		dprintk_tscheck("TEI detected. "  				"PID=0x%x data1=0x%x\n",  				pid, buf[1]); -		/* data in this packet cant be trusted - drop it unless +		/* data in this packet can't be trusted - drop it unless  		 * module option dvb_demux_feed_err_pkts is set */  		if (!dvb_demux_feed_err_pkts)  			return; @@ -476,7 +476,9 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)  void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,  			      size_t count)  { -	spin_lock(&demux->lock); +	unsigned long flags; + +	spin_lock_irqsave(&demux->lock, flags);  	while (count--) {  		if (buf[0] == 0x47) @@ -484,7 +486,7 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,  		buf += 188;  	} -	spin_unlock(&demux->lock); +	spin_unlock_irqrestore(&demux->lock, flags);  }  EXPORT_SYMBOL(dvb_dmx_swfilter_packets); @@ -519,8 +521,9 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf,  {  	int p = 0, i, j;  	const u8 *q; +	unsigned long flags; -	spin_lock(&demux->lock); +	spin_lock_irqsave(&demux->lock, flags);  	if (demux->tsbufp) { /* tsbuf[0] is now 0x47. */  		i = demux->tsbufp; @@ -564,7 +567,7 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf,  	}  bailout: -	spin_unlock(&demux->lock); +	spin_unlock_irqrestore(&demux->lock, flags);  }  void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) @@ -581,11 +584,13 @@ EXPORT_SYMBOL(dvb_dmx_swfilter_204);  void dvb_dmx_swfilter_raw(struct dvb_demux *demux, const u8 *buf, size_t count)  { -	spin_lock(&demux->lock); +	unsigned long flags; + +	spin_lock_irqsave(&demux->lock, flags);  	demux->feed->cb.ts(buf, count, NULL, 0, &demux->feed->feed.ts, DMX_OK); -	spin_unlock(&demux->lock); +	spin_unlock_irqrestore(&demux->lock, flags);  }  EXPORT_SYMBOL(dvb_dmx_swfilter_raw); @@ -1027,8 +1032,13 @@ static int dmx_section_feed_release_filter(struct dmx_section_feed *feed,  		return -EINVAL;  	} -	if (feed->is_filtering) +	if (feed->is_filtering) { +		/* release dvbdmx->mutex as far as it is +		   acquired by stop_filtering() itself */ +		mutex_unlock(&dvbdmx->mutex);  		feed->stop_filtering(feed); +		mutex_lock(&dvbdmx->mutex); +	}  	spin_lock_irq(&dvbdmx->lock);  	f = dvbdmxfeed->filter; diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index 1f925e85697..6ce435ac866 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c @@ -1279,7 +1279,7 @@ static int dtv_property_process_get(struct dvb_frontend *fe,  	switch(tvp->cmd) {  	case DTV_ENUM_DELSYS:  		ncaps = 0; -		while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { +		while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) {  			tvp->u.buffer.data[ncaps] = fe->ops.delsys[ncaps];  			ncaps++;  		} @@ -1596,7 +1596,7 @@ static int dvbv5_set_delivery_system(struct dvb_frontend *fe,  	 * supported  	 */  	ncaps = 0; -	while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { +	while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) {  		if (fe->ops.delsys[ncaps] == desired_system) {  			c->delivery_system = desired_system;  			dev_dbg(fe->dvb->device, @@ -1628,7 +1628,7 @@ static int dvbv5_set_delivery_system(struct dvb_frontend *fe,  	* of the desired system  	*/  	ncaps = 0; -	while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { +	while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) {  		if (dvbv3_type(fe->ops.delsys[ncaps]) == type)  			delsys = fe->ops.delsys[ncaps];  		ncaps++; @@ -1703,7 +1703,7 @@ static int dvbv3_set_delivery_system(struct dvb_frontend *fe)  	 * DVBv3 standard  	 */  	ncaps = 0; -	while (fe->ops.delsys[ncaps] && ncaps < MAX_DELSYS) { +	while (ncaps < MAX_DELSYS && fe->ops.delsys[ncaps]) {  		if (dvbv3_type(fe->ops.delsys[ncaps]) != DVBV3_UNKNOWN) {  			delsys = fe->ops.delsys[ncaps];  			break; @@ -1882,6 +1882,8 @@ static int dtv_property_process_set(struct dvb_frontend *fe,  		c->lna = tvp->u.data;  		if (fe->ops.set_lna)  			r = fe->ops.set_lna(fe); +		if (r < 0) +			c->lna = LNA_AUTO;  		break;  	default: diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c index f91c80c0e9e..8a86b302563 100644 --- a/drivers/media/dvb-core/dvb_net.c +++ b/drivers/media/dvb-core/dvb_net.c @@ -179,7 +179,7 @@ static __be16 dvb_net_eth_type_trans(struct sk_buff *skb,  	eth = eth_hdr(skb);  	if (*eth->h_dest & 1) { -		if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0) +		if(ether_addr_equal(eth->h_dest,dev->broadcast))  			skb->pkt_type=PACKET_BROADCAST;  		else  			skb->pkt_type=PACKET_MULTICAST; @@ -674,11 +674,13 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )  					if (priv->rx_mode != RX_MODE_PROMISC) {  						if (priv->ule_skb->data[0] & 0x01) {  							/* multicast or broadcast */ -							if (memcmp(priv->ule_skb->data, bc_addr, ETH_ALEN)) { +							if (!ether_addr_equal(priv->ule_skb->data, bc_addr)) {  								/* multicast */  								if (priv->rx_mode == RX_MODE_MULTI) {  									int i; -									for(i = 0; i < priv->multi_num && memcmp(priv->ule_skb->data, priv->multi_macs[i], ETH_ALEN); i++) +									for(i = 0; i < priv->multi_num && +									    !ether_addr_equal(priv->ule_skb->data, +											      priv->multi_macs[i]); i++)  										;  									if (i == priv->multi_num)  										drop = 1; @@ -688,7 +690,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )  							}  							/* else: broadcast */  						} -						else if (memcmp(priv->ule_skb->data, dev->dev_addr, ETH_ALEN)) +						else if (!ether_addr_equal(priv->ule_skb->data, dev->dev_addr))  							drop = 1;  						/* else: destination address matches the MAC address of our receiver device */  					} diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index 401ef64f92c..983db75de35 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -74,22 +74,15 @@ static int dvb_device_open(struct inode *inode, struct file *file)  	if (dvbdev && dvbdev->fops) {  		int err = 0; -		const struct file_operations *old_fops; +		const struct file_operations *new_fops; -		file->private_data = dvbdev; -		old_fops = file->f_op; -		file->f_op = fops_get(dvbdev->fops); -		if (file->f_op == NULL) { -			file->f_op = old_fops; +		new_fops = fops_get(dvbdev->fops); +		if (!new_fops)  			goto fail; -		} -		if(file->f_op->open) +		file->private_data = dvbdev; +		replace_fops(file, new_fops); +		if (file->f_op->open)  			err = file->f_op->open(inode,file); -		if (err) { -			fops_put(file->f_op); -			file->f_op = fops_get(old_fops); -		} -		fops_put(old_fops);  		up_read(&minor_rwsem);  		mutex_unlock(&dvbdev_mutex);  		return err;  | 
