Skip to contentSkip to conversation

V4L/DVB fixes and small improvements

PATCH New [email protected] 1 participant 7 messages Dec 14, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover V4L/DVB fixes and small improvements

patch series for -mm is also available at:
http://linuxtv.org/downloads/quilt.

It contains the following stuff:

- USB hot unplug Oops fix.
- TTUSB DEC driver patch roundup
- Replaces MAX()/MIN() by kernel.h max()/min() macros
- Updates to the tveeprom eeprom checking
- ir-kbd-gpio is now part of bttv
- "Philips 1236D ATSC/NTSC dual in" - fix typo.

---------

 Documentation/video4linux/CARDLIST.tuner |    2
 drivers/media/dvb/cinergyT2/cinergyT2.c  |   71 +-
 drivers/media/dvb/ttusb-dec/ttusb_dec.c  |   15
 drivers/media/dvb/ttusb-dec/ttusbdecfe.c |   53 +
 drivers/media/video/Makefile             |    5
 drivers/media/video/bttv-cards.c         |    3
 drivers/media/video/bttv-driver.c        |   13
 drivers/media/video/bttv-gpio.c          |   18
 drivers/media/video/bttv-input.c         |  688 ++++++++++++++++++++
 drivers/media/video/bttv.h               |   36 +
 drivers/media/video/bttvp.h              |    6
 drivers/media/video/ir-kbd-gpio.c        |  766 -----------------------
 drivers/media/video/msp3400.c            |   26
 drivers/media/video/tuner-simple.c       |    2
 drivers/media/video/tveeprom.c           |    2
 15 files changed, 854 insertions(+), 852 deletions(-)
#1 lore raw

PATCH 1/6 DVB (2401): USB hot unplug Oops fix.

From: Deti Fliegl <[email protected]>

- USB hot unplug Oops fix.

---

 drivers/media/dvb/cinergyT2/cinergyT2.c |   71 +++++++++++++++++++++-----------
 1 file changed, 47 insertions(+), 24 deletions(-)
drivers/media/dvb/cinergyT2/cinergyT2.c +47 -24
@@ -131,6 +131,8 @@ struct cinergyt2 {
 
 	wait_queue_head_t poll_wq;
 	int pending_fe_events;
+	int disconnect_pending;
+	atomic_t inuse;
 
 	void *streambuf;
 	dma_addr_t streambuf_dmahandle;
@@ -343,7 +345,7 @@ static int cinergyt2_start_feed(struct d
 	struct dvb_demux *demux = dvbdmxfeed->demux;
 	struct cinergyt2 *cinergyt2 = demux->priv;
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
 	if (cinergyt2->streaming == 0)
@@ -359,7 +361,7 @@ static int cinergyt2_stop_feed(struct dv
 	struct dvb_demux *demux = dvbdmxfeed->demux;
 	struct cinergyt2 *cinergyt2 = demux->priv;
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
 	if (--cinergyt2->streaming == 0)
@@ -479,23 +481,37 @@ static int cinergyt2_open (struct inode 
 {
 	struct dvb_device *dvbdev = file->private_data;
 	struct cinergyt2 *cinergyt2 = dvbdev->priv;
-	int err;
+	int err = -ERESTARTSYS;
 
-	if ((err = dvb_generic_open(inode, file)))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
+		return -ERESTARTSYS;
+
+	if ((err = dvb_generic_open(inode, file))) {
+		up(&cinergyt2->sem);
 		return err;
+	}
 
-	if (down_interruptible(&cinergyt2->sem))
-		return -ERESTARTSYS;
 
 	if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
 		cinergyt2_sleep(cinergyt2, 0);
 		schedule_delayed_work(&cinergyt2->query_work, HZ/2);
 	}
 
+	atomic_inc(&cinergyt2->inuse);
+
 	up(&cinergyt2->sem);
 	return 0;
 }
 
+static void cinergyt2_unregister(struct cinergyt2 *cinergyt2)
+{
+	dvb_unregister_device(cinergyt2->fedev);
+	dvb_unregister_adapter(&cinergyt2->adapter);
+
+	cinergyt2_free_stream_urbs(cinergyt2);
+	kfree(cinergyt2);
+}
+
 static int cinergyt2_release (struct inode *inode, struct file *file)
 {
 	struct dvb_device *dvbdev = file->private_data;
@@ -504,7 +520,7 @@ static int cinergyt2_release (struct ino
 	if (down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
-	if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
+	if (!cinergyt2->disconnect_pending && (file->f_flags & O_ACCMODE) != O_RDONLY) {
 		cancel_delayed_work(&cinergyt2->query_work);
 		flush_scheduled_work();
 		cinergyt2_sleep(cinergyt2, 1);
@@ -512,6 +528,11 @@ static int cinergyt2_release (struct ino
 
 	up(&cinergyt2->sem);
 
+	if (atomic_dec_and_test(&cinergyt2->inuse) && cinergyt2->disconnect_pending) {
+		warn("delayed unregister in release");
+		cinergyt2_unregister(cinergyt2);
+	}
+
 	return dvb_generic_release(inode, file);
 }
 
@@ -519,7 +540,14 @@ static unsigned int cinergyt2_poll (stru
 {
 	struct dvb_device *dvbdev = file->private_data;
 	struct cinergyt2 *cinergyt2 = dvbdev->priv;
+
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
+		return -ERESTARTSYS;
+
 	poll_wait(file, &cinergyt2->poll_wq, wait);
+
+	up(&cinergyt2->sem);
+
 	return (POLLIN | POLLRDNORM | POLLPRI);
 }
 
@@ -585,7 +613,7 @@ static int cinergyt2_ioctl (struct inode
 		if (copy_from_user(&p, (void  __user*) arg, sizeof(p)))
 			return -EFAULT;
 
-		if (down_interruptible(&cinergyt2->sem))
+		if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 			return -ERESTARTSYS;
 
 		param->cmd = CINERGYT2_EP1_SET_TUNER_PARAMETERS;
@@ -696,7 +724,7 @@ static void cinergyt2_query_rc (void *da
 	struct cinergyt2_rc_event rc_events[12];
 	int n, len, i;
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return;
 
 	len = cinergyt2_command(cinergyt2, buf, sizeof(buf),
@@ -791,7 +819,6 @@ static int cinergyt2_register_rc(struct 
 static void cinergyt2_unregister_rc(struct cinergyt2 *cinergyt2)
 {
 	cancel_delayed_work(&cinergyt2->rc_query_work);
-	flush_scheduled_work();
 	input_unregister_device(cinergyt2->rc_input_dev);
 }
 
@@ -822,7 +849,7 @@ static void cinergyt2_query (void *data)
 	uint8_t lock_bits;
 	uint32_t unc;
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return;
 
 	unc = s->uncorrected_block_count;
@@ -922,28 +949,25 @@ static void cinergyt2_disconnect (struct
 {
 	struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
 
-	if (down_interruptible(&cinergyt2->sem))
-		return;
+	flush_scheduled_work();
 
 	cinergyt2_unregister_rc(cinergyt2);
 
+	cancel_delayed_work(&cinergyt2->query_work);
+	wake_up_interruptible(&cinergyt2->poll_wq);
+
 	cinergyt2->demux.dmx.close(&cinergyt2->demux.dmx);
-	dvb_net_release(&cinergyt2->dvbnet);
-	dvb_dmxdev_release(&cinergyt2->dmxdev);
-	dvb_dmx_release(&cinergyt2->demux);
-	dvb_unregister_device(cinergyt2->fedev);
-	dvb_unregister_adapter(&cinergyt2->adapter);
+	cinergyt2->disconnect_pending = 1;
 
-	cinergyt2_free_stream_urbs(cinergyt2);
-	up(&cinergyt2->sem);
-	kfree(cinergyt2);
+	if (!atomic_read(&cinergyt2->inuse))
+		cinergyt2_unregister(cinergyt2);
 }
 
 static int cinergyt2_suspend (struct usb_interface *intf, pm_message_t state)
 {
 	struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
 	if (state.event > PM_EVENT_ON) {
@@ -966,7 +990,7 @@ static int cinergyt2_resume (struct usb_
 	struct cinergyt2 *cinergyt2 = usb_get_intfdata (intf);
 	struct dvbt_set_parameters_msg *param = &cinergyt2->param;
 
-	if (down_interruptible(&cinergyt2->sem))
+	if (cinergyt2->disconnect_pending || down_interruptible(&cinergyt2->sem))
 		return -ERESTARTSYS;
 
 	if (!cinergyt2->sleeping) {
@@ -1020,4 +1044,3 @@ module_exit (cinergyt2_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Holger Waechtler, Daniel Mack");
-

--

#2 lore raw

PATCH 2/6 V4L/DVB (3154): TTUSB DEC driver patch roundup

In reply to [email protected]

From: Alex Woods <[email protected]>

- Collection of patches from Peter Beutner addressing:
- add symbolrates to the DVB-S frontend description
- fix capability flags in DVB-S frontend describtion
- remove some void casts
- disable zig-zag scanning as it makes no sense for DVB-T
- set sensible min_delay value
- return an error for requested filter types the driver can't handle

 drivers/media/dvb/ttusb-dec/ttusb_dec.c  |   15 ++++----
 drivers/media/dvb/ttusb-dec/ttusbdecfe.c |   53 ++++++++++++++++++++++++++++---
 2 files changed, 56 insertions(+), 12 deletions(-)
drivers/media/dvb/ttusb-dec/ttusb_dec.c +8 -7
@@ -369,7 +369,7 @@ static int ttusb_dec_get_stb_state (stru
 
 static int ttusb_dec_audio_pes2ts_cb(void *priv, unsigned char *data)
 {
-	struct ttusb_dec *dec = (struct ttusb_dec *)priv;
+	struct ttusb_dec *dec = priv;
 
 	dec->audio_filter->feed->cb.ts(data, 188, NULL, 0,
 				       &dec->audio_filter->feed->feed.ts,
@@ -380,7 +380,7 @@ static int ttusb_dec_audio_pes2ts_cb(voi
 
 static int ttusb_dec_video_pes2ts_cb(void *priv, unsigned char *data)
 {
-	struct ttusb_dec *dec = (struct ttusb_dec *)priv;
+	struct ttusb_dec *dec = priv;
 
 	dec->video_filter->feed->cb.ts(data, 188, NULL, 0,
 				       &dec->video_filter->feed->feed.ts,
@@ -965,8 +965,8 @@ static int ttusb_dec_start_ts_feed(struc
 
 	case DMX_TS_PES_TELETEXT:
 		dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
-		dprintk("  pes_type: DMX_TS_PES_TELETEXT\n");
-		break;
+		dprintk("  pes_type: DMX_TS_PES_TELETEXT(not supported)\n");
+		return -ENOSYS;
 
 	case DMX_TS_PES_PCR:
 		dprintk("  pes_type: DMX_TS_PES_PCR\n");
@@ -975,8 +975,8 @@ static int ttusb_dec_start_ts_feed(struc
 		break;
 
 	case DMX_TS_PES_OTHER:
-		dprintk("  pes_type: DMX_TS_PES_OTHER\n");
-		break;
+		dprintk("  pes_type: DMX_TS_PES_OTHER(not supported)\n");
+		return -ENOSYS;
 
 	default:
 		dprintk("  pes_type: unknown (%d)\n", dvbdmxfeed->pes_type);
@@ -1395,6 +1395,7 @@ static int ttusb_dec_init_stb(struct ttu
 			/* We can't trust the USB IDs that some firmwares
 			   give the box */
 			switch (model) {
+			case 0x00070001:
 			case 0x00070008:
 			case 0x0007000c:
 				ttusb_dec_set_model(dec, TTUSB_DEC3000S);
@@ -1588,7 +1589,7 @@ static int fe_send_command(struct dvb_fr
 			   int param_length, const u8 params[],
 			   int *result_length, u8 cmd_result[])
 {
-	struct ttusb_dec* dec = (struct ttusb_dec*) fe->dvb->priv;
+	struct ttusb_dec* dec = fe->dvb->priv;
 	return ttusb_dec_send_command(dec, command, param_length, params, result_length, cmd_result);
 }
 
drivers/media/dvb/ttusb-dec/ttusbdecfe.c +48 -5

79 lines not on this page · raw message

--

#3 lore raw

PATCH 3/6 V4L/DVB (3159): Replaces MAX()/MIN() by kernel.h max()/min() macros

In reply to [email protected]

From: Mauro Carvalho Chehab <[email protected]>

- Replaces MAX()/MIN() by kernel.h max()/min() macros

 drivers/media/video/msp3400.c |   26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)
drivers/media/video/msp3400.c +12 -14
@@ -163,8 +163,6 @@ struct msp3400c {
 	int                  watch_stereo:1;
 };
 
-#define MIN(a,b) (((a)>(b))?(b):(a))
-#define MAX(a,b) (((a)>(b))?(a):(b))
 #define HAVE_NICAM(msp)   (((msp->rev2>>8) & 0xff) != 00)
 #define HAVE_SIMPLE(msp)  ((msp->rev1      & 0xff) >= 'D'-'@')
 #define HAVE_SIMPLER(msp) ((msp->rev1      & 0xff) >= 'G'-'@')
@@ -1667,9 +1665,9 @@ static int msp_get_ctrl(struct i2c_clien
 		return 0;
 	case V4L2_CID_AUDIO_BALANCE:
 	{
-		int volume = MAX(msp->left, msp->right);
+		int volume = max(msp->left, msp->right);
 
-		ctrl->value = (32768 * MIN(msp->left, msp->right)) /
+		ctrl->value = (32768 * min(msp->left, msp->right)) /
 		    (volume ? volume : 1);
 		ctrl->value = (msp->left < msp->right) ?
 		    (65535 - ctrl->value) : ctrl->value;
@@ -1684,7 +1682,7 @@ static int msp_get_ctrl(struct i2c_clien
 		ctrl->value = msp->treble;
 		return 0;
 	case V4L2_CID_AUDIO_VOLUME:
-		ctrl->value = MAX(msp->left, msp->right);
+		ctrl->value = max(msp->left, msp->right);
 		return 0;
 	default:
 		return -EINVAL;
@@ -1707,7 +1705,7 @@ static int msp_set_ctrl(struct i2c_clien
 		return 0;
 	case V4L2_CID_AUDIO_BALANCE:
 		balance=ctrl->value;
-		volume = MAX(msp->left, msp->right);
+		volume = max(msp->left, msp->right);
 		set_volume=1;
 		break;
 	case V4L2_CID_AUDIO_BASS:
@@ -1719,9 +1717,9 @@ static int msp_set_ctrl(struct i2c_clien
 		msp3400c_settreble(client, msp->treble);
 		return 0;
 	case V4L2_CID_AUDIO_VOLUME:
-		volume = MAX(msp->left, msp->right);
+		volume = max(msp->left, msp->right);
 
-		balance = (32768 * MIN(msp->left, msp->right)) /
+		balance = (32768 * min(msp->left, msp->right)) /
 					(volume ? volume : 1);
 		balance = (msp->left < msp->right) ?
 					(65535 - balance) : balance;
@@ -1736,8 +1734,8 @@ static int msp_set_ctrl(struct i2c_clien
 	}
 
 	if (set_volume) {
-		msp->left = (MIN(65536 - balance, 32768) * volume) / 32768;
-		msp->right = (MIN(balance, 32768) * volume) / 32768;
+		msp->left = (min(65536 - balance, 32768) * volume) / 32768;
+		msp->right = (min(balance, 32768) * volume) / 32768;
 
 		msp3400_dbg("volume=%d, balance=%d, left=%d, right=%d",
 			volume,balance,msp->left,msp->right);
@@ -1858,8 +1856,8 @@ static int msp_command(struct i2c_client
 
 		if (msp->muted)
 			va->flags |= VIDEO_AUDIO_MUTE;
-		va->volume = MAX(msp->left, msp->right);
-		va->balance = (32768 * MIN(msp->left, msp->right)) /
+		va->volume = max(msp->left, msp->right);
+		va->balance = (32768 * min(msp->left, msp->right)) /
 		    (va->volume ? va->volume : 1);
 		va->balance = (msp->left < msp->right) ?
 		    (65535 - va->balance) : va->balance;
@@ -1878,9 +1876,9 @@ static int msp_command(struct i2c_client
 
 		msp3400_dbg("VIDIOCSAUDIO\n");
 		msp->muted = (va->flags & VIDEO_AUDIO_MUTE);
-		msp->left = (MIN(65536 - va->balance, 32768) *
+		msp->left = (min(65536 - va->balance, 32768) *
 			     va->volume) / 32768;
-		msp->right = (MIN(va->balance, 32768) * va->volume) / 32768;
+		msp->right = (min((int)va->balance, 32768) * va->volume) / 32768;
 		msp->bass = va->bass;
 		msp->treble = va->treble;
 		msp3400_dbg("VIDIOCSAUDIO setting va->volume to %d\n",

--

#4 lore raw

PATCH 4/6 V4L/DVB (3160): Updates to the tveeprom eeprom checking

In reply to [email protected]

From: Steven Toth <[email protected]>

Updates to the tveeprom eeprom checking

 drivers/media/video/tveeprom.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/video/tveeprom.c +1 -1
@@ -387,7 +387,7 @@ void tveeprom_hauppauge_analog(struct i2
 	if ((eeprom_data[0] == 0x1a) && (eeprom_data[1] == 0xeb) &&
 			(eeprom_data[2] == 0x67) && (eeprom_data[3] == 0x95))
 		start=0xa0; /* Generic em28xx offset */
-	else if (((eeprom_data[0] & 0xf0) == 0x10) &&
+	else if (((eeprom_data[0] & 0xe1) == 0x01) &&
 					(eeprom_data[1] == 0x00) &&
 					(eeprom_data[2] == 0x00) &&
 					(eeprom_data[8] == 0x84))

--

#5 lore raw

PATCH 5/6 V4L/DVB (3161): ir-kbd-gpio is now part of bttv

In reply to [email protected]

From: Ricardo Cerqueira <[email protected]>

- Merged ir-kbd-gpio into bttv as bttv-input, for consistency with other input modules

 drivers/media/video/Makefile      |    5 
 drivers/media/video/bttv-cards.c  |    3 
 drivers/media/video/bttv-driver.c |   13 
 drivers/media/video/bttv-gpio.c   |   18 
 drivers/media/video/bttv-input.c  |  688 ++++++++++++++++++++++++++++++++++
 drivers/media/video/bttv.h        |   36 +
 drivers/media/video/bttvp.h       |    6 
 drivers/media/video/ir-kbd-gpio.c |  766 --------------------------------------
 8 files changed, 736 insertions(+), 799 deletions(-)
drivers/media/video/bttv-cards.c +0 -3
@@ -2139,7 +2139,6 @@ struct tvcard bttv_tvcards[] = {
 		.has_remote	= 1,
 		.gpiomask	= 0x1b,
 		.no_gpioirq     = 1,
-		.any_irq		= 1,
 	},
 	[BTTV_BOARD_PV143] = {
 		/* Jorge Boncompte - DTI2 <[email protected]> */
@@ -3412,8 +3411,6 @@ void __devinit bttv_init_card2(struct bt
 		btv->has_remote=1;
 	if (!bttv_tvcards[btv->c.type].no_gpioirq)
 		btv->gpioirq=1;
-	if (bttv_tvcards[btv->c.type].any_irq)
-		btv->any_irq = 1;
 	if (bttv_tvcards[btv->c.type].audio_hook)
 		btv->audio_hook=bttv_tvcards[btv->c.type].audio_hook;
 
drivers/media/video/bttv-driver.c +8 -5
@@ -3702,8 +3702,8 @@ static irqreturn_t bttv_irq(int irq, voi
 
 	btv=(struct bttv *)dev_id;
 
-	if (btv->any_irq)
-		handled = bttv_any_irq(&btv->c);
+	if (btv->custom_irq)
+		handled = btv->custom_irq(btv);
 
 	count=0;
 	while (1) {
@@ -3739,9 +3739,9 @@ static irqreturn_t bttv_irq(int irq, voi
 		if (astat&BT848_INT_VSYNC)
 			btv->field_count++;
 
-		if (astat & BT848_INT_GPINT) {
+		if ((astat & BT848_INT_GPINT) && btv->remote) {
 			wake_up(&btv->gpioq);
-			bttv_gpio_irq(&btv->c);
+			bttv_input_irq(btv);
 		}
 
 		if (astat & BT848_INT_I2CDONE) {
@@ -4070,6 +4070,8 @@ static int __devinit bttv_probe(struct p
 	if (bttv_tvcards[btv->c.type].has_dvb)
 		bttv_sub_add_device(&btv->c, "dvb");
 
+	bttv_input_init(btv);
+
 	/* everything is fine */
 	bttv_num++;
 	return 0;
@@ -4104,7 +4106,8 @@ static void __devexit bttv_remove(struct
 	/* tell gpio modules we are leaving ... */
 	btv->shutdown=1;
 	wake_up(&btv->gpioq);
-	bttv_sub_del_devices(&btv->c);
+	bttv_input_fini(btv);
+	//bttv_sub_del_devices(&btv->c);
 
 	/* unregister i2c_bus + input */
 	fini_bttv_i2c(btv);
drivers/media/video/bttv-gpio.c +0 -18
@@ -113,24 +113,6 @@ void bttv_gpio_irq(struct bttv_core *cor
 	}
 }
 
-int bttv_any_irq(struct bttv_core *core)
-{
-	struct bttv_sub_driver *drv;
-	struct bttv_sub_device *dev;
-	struct list_head *item;
-	int handled = 0;
-
-	list_for_each(item,&core->subs) {
-		dev = list_entry(item,struct bttv_sub_device,list);
-		drv = to_bttv_sub_drv(dev->dev.driver);
-		if (drv && drv->any_irq) {
-			if (drv->any_irq(dev))
-				handled = 1;
-		}
-	}
-	return handled;
-}
-
 /* ----------------------------------------------------------------------- */
 /* external: sub-driver register/unregister                                */
 
drivers/media/video/bttv.h +34 -2
@@ -16,6 +16,8 @@
 
 #include <linux/videodev.h>
 #include <linux/i2c.h>
+#include <media/ir-common.h>
+#include <media/ir-kbd-i2c.h>
 
 /* ---------------------------------------------------------- */
 /* exported by bttv-cards.c                                   */
@@ -211,6 +213,34 @@ struct bttv_core {
 
 struct bttv;
 
+
+struct bttv_ir {
+	struct input_dev        *dev;
+	struct ir_input_state   ir;
+	char                    name[32];
+	char                    phys[32];
+
+	/* Usual gpio signalling */
+
+	u32                     mask_keycode;
+	u32                     mask_keydown;
+	u32                     mask_keyup;
+	u32                     polling;
+	u32                     last_gpio;
+	struct work_struct      work;
+	struct timer_list       timer;
+
+	/* RC5 gpio */
+	u32 rc5_gpio;
+	struct timer_list timer_end;	/* timer_end for code completion */
+	struct timer_list timer_keyup;	/* timer_end for key release */
+	u32 last_rc5;			/* last good rc5 code */
+	u32 last_bit;			/* last raw bit seen */
+	u32 code;			/* raw code under construction */
+	struct timeval base_time;	/* time of last seen code */
+	int active;			/* building raw code */
+};
+
 struct tvcard
 {
 	char *name;
@@ -236,7 +266,6 @@ struct tvcard
 	unsigned int has_dvb:1;
 	unsigned int has_remote:1;
 	unsigned int no_gpioirq:1;
-	unsigned int any_irq:1;
 
 	/* other settings */
 	unsigned int pll;
@@ -336,7 +365,6 @@ struct bttv_sub_driver {
 	struct device_driver   drv;
 	char                   wanted[BUS_ID_SIZE];
 	void                   (*gpio_irq)(struct bttv_sub_device *sub);
-	int                    (*any_irq)(struct bttv_sub_device *sub);
 };
 #define to_bttv_sub_drv(x) container_of((x), struct bttv_sub_driver, drv)
 
@@ -364,6 +392,10 @@ extern int bttv_I2CWrite(struct bttv *bt
 			 unsigned char b2, int both);
 extern void bttv_readee(struct bttv *btv, unsigned char *eedata, int addr);
 
+extern int bttv_input_init(struct bttv *dev);
+extern void bttv_input_fini(struct bttv *dev);
+extern void bttv_input_irq(struct bttv *dev);
+
 #endif /* _BTTV_H_ */
 /*
  * Local variables:
drivers/media/video/bttv-input.c new file +688 -0

688 lines not on this page · raw message

drivers/media/video/bttvp.h +3 -3
@@ -209,7 +209,6 @@ extern struct bus_type bttv_sub_bus_type
 int bttv_sub_add_device(struct bttv_core *core, char *name);
 int bttv_sub_del_devices(struct bttv_core *core);
 void bttv_gpio_irq(struct bttv_core *core);
-int bttv_any_irq(struct bttv_core *core);
 
 
 /* ---------------------------------------------------------- */
@@ -275,7 +274,8 @@ struct bttv {
 	struct bttv_pll_info pll;
 	int triton1;
 	int gpioirq;
-	int any_irq;
+	int (*custom_irq)(struct bttv *btv);
+
 	int use_i2c_hw;
 
 	/* old gpio interface */
@@ -300,7 +300,7 @@ struct bttv {
 
 	/* infrared remote */
 	int has_remote;
-	struct bttv_input *remote;
+	struct bttv_ir *remote;
 
 	/* locking */
 	spinlock_t s_lock;
drivers/media/video/ir-kbd-gpio.c deleted +0 -766

766 lines not on this page · raw message

drivers/media/video/Makefile +3 -2
@@ -3,7 +3,8 @@
 #
 
 bttv-objs	:=	bttv-driver.o bttv-cards.o bttv-if.o \
-			bttv-risc.o bttv-vbi.o bttv-i2c.o bttv-gpio.o
+			bttv-risc.o bttv-vbi.o bttv-i2c.o bttv-gpio.o \
+			bttv-input.o
 zoran-objs      :=	zr36120.o zr36120_i2c.o zr36120_mem.o
 zr36067-objs	:=	zoran_procfs.o zoran_device.o \
 			zoran_driver.o zoran_card.o
@@ -12,7 +13,7 @@ tuner-objs	:=	tuner-core.o tuner-simple.
 obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o v4l1-compat.o compat_ioctl32.o
 
 obj-$(CONFIG_VIDEO_BT848) += bttv.o msp3400.o tvaudio.o \
-	tda7432.o tda9875.o ir-kbd-i2c.o ir-kbd-gpio.o
+	tda7432.o tda9875.o ir-kbd-i2c.o
 obj-$(CONFIG_SOUND_TVMIXER) += tvmixer.o
 
 obj-$(CONFIG_VIDEO_ZR36120) += zoran.o

--

#6 lore raw

PATCH 6/6 V4L/DVB (3166): "Philips 1236D ATSC/NTSC dual in" - fix typo.

In reply to [email protected]

From: Michael Krufky <[email protected]>

- "Philips 1236D ATSC/NTSC dual in" - fix typo.

 Documentation/video4linux/CARDLIST.tuner |    2 +-
 drivers/media/video/tuner-simple.c       |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/video4linux/CARDLIST.tuner +1 -1
@@ -40,7 +40,7 @@ tuner=38 - Philips PAL/SECAM multi (FM12
 tuner=39 - LG NTSC (newer TAPC series)
 tuner=40 - HITACHI V7-J180AT
 tuner=41 - Philips PAL_MK (FI1216 MK)
-tuner=42 - Philips 1236D ATSC/NTSC daul in
+tuner=42 - Philips 1236D ATSC/NTSC dual in
 tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F)
 tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant)
 tuner=45 - Microtune 4049 FM5
drivers/media/video/tuner-simple.c +1 -1
@@ -481,7 +481,7 @@ static struct tunertype tuners[] = {
 		.config = 0x8e,
 	},
 	[TUNER_PHILIPS_ATSC] = { /* Philips ATSC */
-		.name   = "Philips 1236D ATSC/NTSC daul in",
+		.name   = "Philips 1236D ATSC/NTSC dual in",
 		.thresh1= 16 * 157.25 /*MHz*/,
 		.thresh2= 16 * 454.00 /*MHz*/,
 		.VHF_L  = 0xa0,

--