Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 5 Nov 2007 21:50:49 +0000 (13:50 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 5 Nov 2007 21:50:49 +0000 (13:50 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
  ide: fix IDE_HFLAG_NO_ATAPI_DMA handling in config_drive_for_dma()
  ide: move ide_fixstring() documentation to ide-iops.c from ide.h
  ide: add missing #ifdef/#endif CONFIG_IDE_TASK_IOCTL
  ide: fix ide_find_dma_mode() to print human-readable info
  ide: add missing rq.ref_count initialization to ide_diag_taskfile()
  ide: clear HOB bit for REQ_TYPE_ATA_TASK requests in ide_end_drive_cmd()
  ide: check rq->cmd_type in drive_cmd_intr()
  ide/Kconfig: fix BLK_DEV_OFFBOARD dependencies
  ide: unexport ide_fix_driveid
  ide/Kconfig: add IDEDISK_MULTI_MODE text adapted from hdparm manual page
  ide: do_identify() string termination fix
  piix: add support for ICH7 on Acer 5602aWLMi

27 files changed:
Documentation/video4linux/CARDLIST.em28xx
Makefile
drivers/media/Kconfig
drivers/media/common/saa7146_core.c
drivers/media/dvb/frontends/mt2131.c
drivers/media/dvb/frontends/s5h1409.c
drivers/media/dvb/frontends/stv0297.c
drivers/media/dvb/frontends/tda10021.c
drivers/media/dvb/frontends/ves1820.c
drivers/media/dvb/ttpci/Kconfig
drivers/media/video/Kconfig
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cafe_ccic.c
drivers/media/video/cx23885/Kconfig
drivers/media/video/cx88/Kconfig
drivers/media/video/em28xx/Kconfig
drivers/media/video/em28xx/em28xx-i2c.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/planb.c
drivers/media/video/pvrusb2/pvrusb2-ctrl.c
drivers/media/video/pvrusb2/pvrusb2-main.c
drivers/media/video/pvrusb2/pvrusb2-sysfs.c
drivers/media/video/saa7134/Kconfig
drivers/media/video/saa7134/saa7134-alsa.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/tuner-core.c
drivers/media/video/tvp5150.c

index a302668..37f0e3c 100644 (file)
@@ -8,4 +8,7 @@
   7 -> Leadtek Winfast USB II                   (em2800)
   8 -> Kworld USB2800                           (em2800)
   9 -> Pinnacle Dazzle DVC 90                   (em2820/em2840) [2304:0207]
+ 10 -> Hauppauge WinTV HVR 900                  (em2880)
+ 11 -> Terratec Hybrid XS                       (em2880)
  12 -> Kworld PVR TV 2800 RF                    (em2820/em2840)
+ 13 -> Terratec Prodigy XS                      (em2880)
index 188c3b6..cb740d4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -528,9 +528,22 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 
 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
-KBUILD_CPPFLAGS += $(CPPFLAGS)
-KBUILD_AFLAGS   += $(AFLAGS)
-KBUILD_CFLAGS   += $(CFLAGS)
+# But warn user when we do so
+warn-assign = \
+$(warning "WARNING: Appending $$K$(1) ($(K$(1))) from $(origin K$(1)) to kernel $$$(1)")
+
+ifneq ($(KCPPFLAGS),)
+        $(call warn-assign,CPPFLAGS)
+        KBUILD_CPPFLAGS += $(KCPPFLAGS)
+endif
+ifneq ($(KAFLAGS),)
+        $(call warn-assign,AFLAGS)
+        KBUILD_AFLAGS += $(KAFLAGS)
+endif
+ifneq ($(KCFLAGS),)
+        $(call warn-assign,CFLAGS)
+        KBUILD_CFLAGS += $(KCFLAGS)
+endif
 
 # Use --build-id when available.
 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
index dd9bd43..1604f04 100644 (file)
@@ -151,6 +151,7 @@ config VIDEO_IR_I2C
 
 config VIDEO_IR
        tristate
+       depends on INPUT
        select VIDEO_IR_I2C if I2C
 
 config VIDEO_TVEEPROM
index cb034ea..7d04a6f 100644 (file)
@@ -59,43 +59,89 @@ void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data)
 }
 
 /* This DEBI code is based on the saa7146 Stradis driver by Nathan Laredo */
-int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop)
+static inline int saa7146_wait_for_debi_done_sleep(struct saa7146_dev *dev,
+                               unsigned long us1, unsigned long us2)
 {
-       unsigned long start;
+       unsigned long timeout;
        int err;
 
        /* wait for registers to be programmed */
-       start = jiffies;
+       timeout = jiffies + usecs_to_jiffies(us1);
        while (1) {
-               err = time_after(jiffies, start + HZ/20);
+               err = time_after(jiffies, timeout);
                if (saa7146_read(dev, MC2) & 2)
                        break;
                if (err) {
-                       DEB_S(("timed out while waiting for registers getting programmed\n"));
+                       printk(KERN_ERR "%s: %s timed out while waiting for "
+                                       "registers getting programmed\n",
+                                       dev->name, __FUNCTION__);
                        return -ETIMEDOUT;
                }
-               if (nobusyloop)
-                       msleep(1);
+               msleep(1);
        }
 
        /* wait for transfer to complete */
-       start = jiffies;
+       timeout = jiffies + usecs_to_jiffies(us2);
        while (1) {
-               err = time_after(jiffies, start + HZ/4);
+               err = time_after(jiffies, timeout);
                if (!(saa7146_read(dev, PSR) & SPCI_DEBI_S))
                        break;
                saa7146_read(dev, MC2);
                if (err) {
-                       DEB_S(("timed out while waiting for transfer completion\n"));
+                       DEB_S(("%s: %s timed out while waiting for transfer "
+                               "completion\n", dev->name, __FUNCTION__));
                        return -ETIMEDOUT;
                }
-               if (nobusyloop)
-                       msleep(1);
+               msleep(1);
        }
 
        return 0;
 }
 
+static inline int saa7146_wait_for_debi_done_busyloop(struct saa7146_dev *dev,
+                               unsigned long us1, unsigned long us2)
+{
+       unsigned long loops;
+
+       /* wait for registers to be programmed */
+       loops = us1;
+       while (1) {
+               if (saa7146_read(dev, MC2) & 2)
+                       break;
+               if (!loops--) {
+                       printk(KERN_ERR "%s: %s timed out while waiting for "
+                                       "registers getting programmed\n",
+                                       dev->name, __FUNCTION__);
+                       return -ETIMEDOUT;
+               }
+               udelay(1);
+       }
+
+       /* wait for transfer to complete */
+       loops = us2 / 5;
+       while (1) {
+               if (!(saa7146_read(dev, PSR) & SPCI_DEBI_S))
+                       break;
+               saa7146_read(dev, MC2);
+               if (!loops--) {
+                       DEB_S(("%s: %s timed out while waiting for transfer "
+                               "completion\n", dev->name, __FUNCTION__));
+                       return -ETIMEDOUT;
+               }
+               udelay(5);
+       }
+
+       return 0;
+}
+
+int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop)
+{
+       if (nobusyloop)
+               return saa7146_wait_for_debi_done_sleep(dev, 50000, 250000);
+       else
+               return saa7146_wait_for_debi_done_busyloop(dev, 50000, 250000);
+}
+
 /****************************************************************************
  * general helper functions
  ****************************************************************************/
index 4b93931..13cf166 100644 (file)
@@ -116,7 +116,7 @@ static int mt2131_set_params(struct dvb_frontend *fe,
        f_lo1 = (f_lo1 / 250) * 250;
        f_lo2 = f_lo1 - freq - MT2131_IF2;
 
-       priv->frequency =  (f_lo1 - f_lo2 - MT2131_IF2) * 1000,
+       priv->frequency =  (f_lo1 - f_lo2 - MT2131_IF2) * 1000;
 
        /* Frequency LO1 = 16MHz * (DIV1 + NUM1/8192 ) */
        num1 = f_lo1 * 64 / (MT2131_FREF / 128);
index 30e8a70..8dee7ec 100644 (file)
@@ -42,6 +42,9 @@ struct s5h1409_state {
        fe_modulation_t current_modulation;
 
        u32 current_frequency;
+
+       u32 is_qam_locked;
+       u32 qam_state;
 };
 
 static int debug = 0;
@@ -94,6 +97,7 @@ static struct init_tab {
        { 0xac, 0x1003, },
        { 0xad, 0x103f, },
        { 0xe2, 0x0100, },
+       { 0xe3, 0x0000, },
        { 0x28, 0x1010, },
        { 0xb1, 0x000e, },
 };
@@ -335,6 +339,8 @@ static int s5h1409_softreset(struct dvb_frontend* fe)
 
        s5h1409_writereg(state, 0xf5, 0);
        s5h1409_writereg(state, 0xf5, 1);
+       state->is_qam_locked = 0;
+       state->qam_state = 0;
        return 0;
 }
 
@@ -349,6 +355,11 @@ static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz)
                s5h1409_writereg(state, 0x87, 0x01be);
                s5h1409_writereg(state, 0x88, 0x0436);
                s5h1409_writereg(state, 0x89, 0x054d);
+       } else
+       if (KHz == 4000) {
+               s5h1409_writereg(state, 0x87, 0x014b);
+               s5h1409_writereg(state, 0x88, 0x0cb5);
+               s5h1409_writereg(state, 0x89, 0x03e2);
        } else {
                printk("%s() Invalid arg = %d KHz\n", __FUNCTION__, KHz);
                ret = -1;
@@ -361,7 +372,7 @@ static int s5h1409_set_spectralinversion(struct dvb_frontend* fe, int inverted)
 {
        struct s5h1409_state* state = fe->demodulator_priv;
 
-       dprintk("%s()\n", __FUNCTION__);
+       dprintk("%s(%d)\n", __FUNCTION__, inverted);
 
        if(inverted == 1)
                return s5h1409_writereg(state, 0x1b, 0x1101); /* Inverted */
@@ -382,14 +393,10 @@ static int s5h1409_enable_modulation(struct dvb_frontend* fe,
                s5h1409_writereg(state, 0xf4, 0);
                break;
        case QAM_64:
-               dprintk("%s() QAM_64\n", __FUNCTION__);
-               s5h1409_writereg(state, 0xf4, 1);
-               s5h1409_writereg(state, 0x85, 0x100);
-               break;
        case QAM_256:
-               dprintk("%s() QAM_256\n", __FUNCTION__);
+               dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__);
                s5h1409_writereg(state, 0xf4, 1);
-               s5h1409_writereg(state, 0x85, 0x101);
+               s5h1409_writereg(state, 0x85, 0x110);
                break;
        default:
                dprintk("%s() Invalid modulation\n", __FUNCTION__);
@@ -423,7 +430,7 @@ static int s5h1409_set_gpio(struct dvb_frontend* fe, int enable)
        if (enable)
                return s5h1409_writereg(state, 0xe3, 0x1100);
        else
-               return s5h1409_writereg(state, 0xe3, 0);
+               return s5h1409_writereg(state, 0xe3, 0x1000);
 }
 
 static int s5h1409_sleep(struct dvb_frontend* fe, int enable)
@@ -444,6 +451,66 @@ static int s5h1409_register_reset(struct dvb_frontend* fe)
        return s5h1409_writereg(state, 0xfa, 0);
 }
 
+static void s5h1409_set_qam_amhum_mode(struct dvb_frontend *fe)
+{
+       struct s5h1409_state *state = fe->demodulator_priv;
+       u16 reg;
+
+       if (state->is_qam_locked)
+               return;
+
+       /* QAM EQ lock check */
+       reg = s5h1409_readreg(state, 0xf0);
+
+       if ((reg >> 13) & 0x1) {
+
+               state->is_qam_locked = 1;
+               reg &= 0xff;
+
+               s5h1409_writereg(state, 0x96, 0x00c);
+               if ((reg < 0x38) || (reg > 0x68) ) {
+                       s5h1409_writereg(state, 0x93, 0x3332);
+                       s5h1409_writereg(state, 0x9e, 0x2c37);
+               } else {
+                       s5h1409_writereg(state, 0x93, 0x3130);
+                       s5h1409_writereg(state, 0x9e, 0x2836);
+               }
+
+       } else {
+               s5h1409_writereg(state, 0x96, 0x0008);
+               s5h1409_writereg(state, 0x93, 0x3332);
+               s5h1409_writereg(state, 0x9e, 0x2c37);
+       }
+}
+
+static void s5h1409_set_qam_interleave_mode(struct dvb_frontend *fe)
+{
+       struct s5h1409_state *state = fe->demodulator_priv;
+       u16 reg, reg1, reg2;
+
+       reg = s5h1409_readreg(state, 0xf1);
+
+       /* Master lock */
+       if ((reg >> 15) & 0x1) {
+               if (state->qam_state != 2) {
+                       state->qam_state = 2;
+                       reg1 = s5h1409_readreg(state, 0xb2);
+                       reg2 = s5h1409_readreg(state, 0xad);
+
+                       s5h1409_writereg(state, 0x96, 0x20);
+                       s5h1409_writereg(state, 0xad,
+                               ( ((reg1 & 0xf000) >> 4) | (reg2 & 0xf0ff)) );
+                       s5h1409_writereg(state, 0xab, 0x1100);
+               }
+       } else {
+               if (state->qam_state != 1) {
+                       state->qam_state = 1;
+                       s5h1409_writereg(state, 0x96, 0x08);
+                       s5h1409_writereg(state, 0xab, 0x1101);
+               }
+       }
+}
+
 /* Talk to the demod, set the FEC, GUARD, QAM settings etc */
 static int s5h1409_set_frontend (struct dvb_frontend* fe,
                                 struct dvb_frontend_parameters *p)
@@ -458,12 +525,21 @@ static int s5h1409_set_frontend (struct dvb_frontend* fe,
 
        s5h1409_enable_modulation(fe, p->u.vsb.modulation);
 
+       /* Allow the demod to settle */
+       msleep(100);
+
        if (fe->ops.tuner_ops.set_params) {
                if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 1);
                fe->ops.tuner_ops.set_params(fe, p);
                if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);
        }
 
+       /* Optimize the demod for QAM */
+       if (p->u.vsb.modulation != VSB_8) {
+               s5h1409_set_qam_amhum_mode(fe);
+               s5h1409_set_qam_interleave_mode(fe);
+       }
+
        return 0;
 }
 
@@ -495,8 +571,8 @@ static int s5h1409_init (struct dvb_frontend* fe)
        s5h1409_set_gpio(fe, state->config->gpio);
        s5h1409_softreset(fe);
 
-       /* Note: Leaving the I2C gate open here. */
-       s5h1409_i2c_gate_ctrl(fe, 1);
+       /* Note: Leaving the I2C gate closed. */
+       s5h1409_i2c_gate_ctrl(fe, 0);
 
        return 0;
 }
index 17e5cb5..7c23775 100644 (file)
@@ -358,11 +358,23 @@ static int stv0297_read_ber(struct dvb_frontend *fe, u32 * ber)
 static int stv0297_read_signal_strength(struct dvb_frontend *fe, u16 * strength)
 {
        struct stv0297_state *state = fe->demodulator_priv;
-       u8 STRENGTH[2];
-
-       stv0297_readregs(state, 0x41, STRENGTH, 2);
-       *strength = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0];
-
+       u8 STRENGTH[3];
+       u16 tmp;
+
+       stv0297_readregs(state, 0x41, STRENGTH, 3);
+       tmp = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0];
+       if (STRENGTH[2] & 0x20) {
+               if (tmp < 0x200)
+                       tmp = 0;
+               else
+                       tmp = tmp - 0x200;
+       } else {
+               if (tmp > 0x1ff)
+                       tmp = 0;
+               else
+                       tmp = 0x1ff - tmp;
+       }
+       *strength = (tmp << 7) | (tmp >> 2);
        return 0;
 }
 
index 4cd9e82..45137d2 100644 (file)
@@ -301,6 +301,8 @@ static int tda10021_read_ber(struct dvb_frontend* fe, u32* ber)
        u32 _ber = tda10021_readreg(state, 0x14) |
                (tda10021_readreg(state, 0x15) << 8) |
                ((tda10021_readreg(state, 0x16) & 0x0f) << 16);
+       _tda10021_writereg(state, 0x10, (tda10021_readreg(state, 0x10) & ~0xc0)
+                                       | (tda10021_inittab[0x10] & 0xc0));
        *ber = 10 * _ber;
 
        return 0;
@@ -310,7 +312,11 @@ static int tda10021_read_signal_strength(struct dvb_frontend* fe, u16* strength)
 {
        struct tda10021_state* state = fe->demodulator_priv;
 
+       u8 config = tda10021_readreg(state, 0x02);
        u8 gain = tda10021_readreg(state, 0x17);
+       if (config & 0x02)
+               /* the agc value is inverted */
+               gain = ~gain;
        *strength = (gain << 8) | gain;
 
        return 0;
index 066b73b..60433b5 100644 (file)
@@ -47,7 +47,7 @@ struct ves1820_state {
 static int verbose;
 
 static u8 ves1820_inittab[] = {
-       0x69, 0x6A, 0x93, 0x12, 0x12, 0x46, 0x26, 0x1A,
+       0x69, 0x6A, 0x93, 0x1A, 0x12, 0x46, 0x26, 0x1A,
        0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x20,
        0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
index 6d53289..54b91f2 100644 (file)
@@ -84,7 +84,7 @@ config DVB_BUDGET
 
 config DVB_BUDGET_CI
        tristate "Budget cards with onboard CI connector"
-       depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
+       depends on DVB_CORE && PCI && I2C && VIDEO_V4L1 && INPUT
        select VIDEO_SAA7146
        select DVB_STV0297 if !DVB_FE_CUSTOMISE
        select DVB_STV0299 if !DVB_FE_CUSTOMISE
index 2e571eb..c9f14bf 100644 (file)
@@ -363,7 +363,7 @@ endmenu # encoder / decoder chips
 
 config VIDEO_VIVI
        tristate "Virtual Video Driver"
-       depends on VIDEO_V4L2 && !SPARC32 && !SPARC64 && PCI
+       depends on VIDEO_V4L2 && !SPARC32 && !SPARC64
        select VIDEOBUF_VMALLOC
        default n
        ---help---
index 9feeb63..a88b56e 100644 (file)
@@ -2881,10 +2881,6 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
                if (NULL == fmt)
                        return -EINVAL;
                mutex_lock(&fh->cap.lock);
-               if (fmt->depth != pic->depth) {
-                       retval = -EINVAL;
-                       goto fh_unlock_and_return;
-               }
                if (fmt->flags & FORMAT_FLAGS_RAW) {
                        /* VIDIOCMCAPTURE uses gbufsize, not RAW_BPL *
                           RAW_LINES * 2. F1 is stored at offset 0, F2
@@ -3117,6 +3113,8 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
                                             vm->width,vm->height,field);
                if (0 != retval)
                        goto fh_unlock_and_return;
+               btv->init.width = vm->width;
+               btv->init.height = vm->height;
                spin_lock_irqsave(&btv->s_lock,flags);
                buffer_queue(&fh->cap,&buf->vb);
                spin_unlock_irqrestore(&btv->s_lock,flags);
index b63cab3..7ae499c 100644 (file)
@@ -3,6 +3,9 @@
  * multifunction chip.  Currently works with the Omnivision OV7670
  * sensor.
  *
+ * The data sheet for this device can be found at:
+ *    http://www.marvell.com/products/pcconn/88ALP01.jsp
+ *
  * Copyright 2006 One Laptop Per Child Association, Inc.
  * Copyright 2006-7 Jonathan Corbet <corbet@lwn.net>
  *
@@ -2232,13 +2235,16 @@ static int cafe_pci_suspend(struct pci_dev *pdev, pm_message_t state)
 {
        struct cafe_camera *cam = cafe_find_by_pdev(pdev);
        int ret;
+       enum cafe_state cstate;
 
        ret = pci_save_state(pdev);
        if (ret)
                return ret;
+       cstate = cam->state; /* HACK - stop_dma sets to idle */
        cafe_ctlr_stop_dma(cam);
        cafe_ctlr_power_down(cam);
        pci_disable_device(pdev);
+       cam->state = cstate;
        return 0;
 }
 
index 72004a0..d8b1ccb 100644 (file)
@@ -1,6 +1,6 @@
 config VIDEO_CX23885
        tristate "Conexant cx23885 (2388x successor) support"
-       depends on DVB_CORE && VIDEO_DEV && PCI && I2C
+       depends on DVB_CORE && VIDEO_DEV && PCI && I2C && INPUT
        select I2C_ALGOBIT
        select FW_LOADER
        select VIDEO_BTCX
index eeb5224..ceb31d4 100644 (file)
@@ -1,6 +1,6 @@
 config VIDEO_CX88
        tristate "Conexant 2388x (bt878 successor) support"
-       depends on VIDEO_DEV && PCI && I2C
+       depends on VIDEO_DEV && PCI && I2C && INPUT
        select I2C_ALGOBIT
        select FW_LOADER
        select VIDEO_BTCX
index 5b6a403..c112780 100644 (file)
@@ -1,6 +1,6 @@
 config VIDEO_EM28XX
        tristate "Empia EM2800/2820/2840 USB video capture support"
-       depends on VIDEO_V4L1 && I2C
+       depends on VIDEO_V4L1 && I2C && INPUT
        select VIDEO_TUNER
        select VIDEO_TVEEPROM
        select VIDEO_IR
index 997d067..e3a4aa7 100644 (file)
@@ -416,8 +416,10 @@ static int attach_inform(struct i2c_client *client)
        struct em28xx *dev = client->adapter->algo_data;
 
        switch (client->addr << 1) {
-               case 0x43:
-               case 0x4b:
+               case 0x86:
+               case 0x84:
+               case 0x96:
+               case 0x94:
                {
                        struct tuner_setup tun_setup;
 
index a4c2a90..2529c29 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/usb.h>
 #include <linux/i2c.h>
 #include <linux/version.h>
+#include <linux/mm.h>
 #include <linux/video_decoder.h>
 #include <linux/mutex.h>
 
index ce4b2f9..36047d4 100644 (file)
@@ -91,7 +91,6 @@ static void planb_close(struct video_device *);
 static int planb_ioctl(struct video_device *, unsigned int, void *);
 static int planb_init_done(struct video_device *);
 static int planb_mmap(struct video_device *, const char *, unsigned long);
-static void planb_irq(int, void *);
 static void release_planb(void);
 int init_planbs(struct video_init *);
 
@@ -1315,7 +1314,7 @@ cmd_tab_data_end:
        return c1;
 }
 
-static void planb_irq(int irq, void *dev_id)
+static irqreturn_t planb_irq(int irq, void *dev_id)
 {
        unsigned int stat, astat;
        struct planb *pb = (struct planb *)dev_id;
@@ -1358,13 +1357,14 @@ static void planb_irq(int irq, void *dev_id)
                pb->frame_stat[fr] = GBUFFER_DONE;
                pb->grabbing--;
                wake_up_interruptible(&pb->capq);
-               return;
+               return IRQ_HANDLED;
        }
        /* incorrect interrupts? */
        pb->intr_mask = PLANB_CLR_IRQ;
        out_le32(&pb->planb_base->intr_stat, PLANB_CLR_IRQ);
        printk(KERN_ERR "PlanB: IRQ lockup, cleared intrrupts"
                                                        " unconditionally\n");
+       return IRQ_HANDLED;
 }
 
 /*******************************
@@ -2090,7 +2090,7 @@ static int init_planb(struct planb *pb)
        /* clear interrupt mask */
        pb->intr_mask = PLANB_CLR_IRQ;
 
-       result = request_irq(pb->irq, planb_irq, 0, "PlanB", (void *)pb);
+       result = request_irq(pb->irq, planb_irq, 0, "PlanB", pb);
        if (result < 0) {
                if (result==-EINVAL)
                        printk(KERN_ERR "PlanB: Bad irq number (%d) "
index f569b00..46f156f 100644 (file)
@@ -410,7 +410,7 @@ static int parse_mtoken(const char *ptr,unsigned int len,
        int msk;
        *valptr = 0;
        for (idx = 0, msk = 1; valid_bits; idx++, msk <<= 1) {
-               if (!msk & valid_bits) continue;
+               if (!(msk & valid_bits)) continue;
                valid_bits &= ~msk;
                if (!names[idx]) continue;
                slen = strlen(names[idx]);
index ca9e278..11b3b2e 100644 (file)
@@ -136,14 +136,13 @@ static int __init pvr_init(void)
 
 static void __exit pvr_exit(void)
 {
-
        pvr2_trace(PVR2_TRACE_INIT,"pvr_exit");
 
+       usb_deregister(&pvr_driver);
+
 #ifdef CONFIG_VIDEO_PVRUSB2_SYSFS
        pvr2_sysfs_class_destroy(class_ptr);
 #endif /* CONFIG_VIDEO_PVRUSB2_SYSFS */
-
-       usb_deregister(&pvr_driver);
 }
 
 module_init(pvr_init);
index 2ee3c30..3c57a7d 100644 (file)
@@ -905,13 +905,6 @@ struct pvr2_sysfs *pvr2_sysfs_create(struct pvr2_context *mp,
 }
 
 
-static int pvr2_sysfs_hotplug(struct device *d,
-                             struct kobj_uevent_env *env)
-{
-       /* Even though we don't do anything here, we still need this function
-          because sysfs will still try to call it. */
-       return 0;
-}
 
 struct pvr2_sysfs_class *pvr2_sysfs_class_create(void)
 {
@@ -922,7 +915,6 @@ struct pvr2_sysfs_class *pvr2_sysfs_class_create(void)
        clp->class.name = "pvrusb2";
        clp->class.class_release = pvr2_sysfs_class_release;
        clp->class.dev_release = pvr2_sysfs_release;
-       clp->class.dev_uevent = pvr2_sysfs_hotplug;
        if (class_register(&clp->class)) {
                pvr2_sysfs_trace(
                        "Registration failed for pvr2_sysfs_class id=%p",clp);
index d6d8d66..3aa8cb2 100644 (file)
@@ -1,6 +1,6 @@
 config VIDEO_SAA7134
        tristate "Philips SAA7134 support"
-       depends on VIDEO_DEV && PCI && I2C
+       depends on VIDEO_DEV && PCI && I2C && INPUT
        select VIDEOBUF_DMA_SG
        select VIDEO_IR
        select VIDEO_TUNER
index c6f7279..b9c5cf7 100644 (file)
@@ -543,8 +543,10 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
           V4L functions, and force ALSA to use that as the DMA area */
 
        substream->runtime->dma_area = dev->dmasound.dma.vmalloc;
+       substream->runtime->dma_bytes = dev->dmasound.bufsize;
+       substream->runtime->dma_addr = 0;
 
-       return 1;
+       return 0;
 
 }
 
@@ -651,6 +653,17 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
        return 0;
 }
 
+/*
+ * page callback (needed for mmap)
+ */
+
+static struct page *snd_card_saa7134_page(struct snd_pcm_substream *substream,
+                                       unsigned long offset)
+{
+       void *pageptr = substream->runtime->dma_area + offset;
+       return vmalloc_to_page(pageptr);
+}
+
 /*
  * ALSA capture callbacks definition
  */
@@ -664,6 +677,7 @@ static struct snd_pcm_ops snd_card_saa7134_capture_ops = {
        .prepare =              snd_card_saa7134_capture_prepare,
        .trigger =              snd_card_saa7134_capture_trigger,
        .pointer =              snd_card_saa7134_capture_pointer,
+       .page =                 snd_card_saa7134_page,
 };
 
 /*
index a4c192f..4f3dad9 100644 (file)
@@ -2996,11 +2996,11 @@ struct saa7134_board saa7134_boards[] = {
                },{
                        .name   = name_comp1,
                        .vmux   = 0,
-                       .amux   = LINE2,
+                       .amux   = LINE1,
                },{
                        .name   = name_svideo,
                        .vmux   = 8,
-                       .amux   = LINE2,
+                       .amux   = LINE1,
                }},
        },
        [SAA7134_BOARD_FLYDVBS_LR300] = {
index 6a77760..9e99f36 100644 (file)
@@ -30,7 +30,7 @@
 
 /* standard i2c insmod options */
 static unsigned short normal_i2c[] = {
-#ifdef CONFIG_TUNER_TEA5761
+#if defined(CONFIG_TUNER_TEA5761) || (defined(CONFIG_TUNER_TEA5761_MODULE) && defined(MODULE))
        0x10,
 #endif
        0x42, 0x43, 0x4a, 0x4b,                 /* tda8290 */
@@ -292,7 +292,6 @@ static void set_type(struct i2c_client *c, unsigned int type,
                }
                t->mode_mask = T_RADIO;
                break;
-#ifdef CONFIG_TUNER_TEA5761
        case TUNER_TEA5761:
                if (tea5761_attach(&t->fe, t->i2c.adapter, t->i2c.addr) == NULL) {
                        t->type = TUNER_ABSENT;
@@ -301,7 +300,6 @@ static void set_type(struct i2c_client *c, unsigned int type,
                }
                t->mode_mask = T_RADIO;
                break;
-#endif
        case TUNER_PHILIPS_FMD1216ME_MK3:
                buffer[0] = 0x0b;
                buffer[1] = 0xdc;
@@ -594,7 +592,6 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
        /* autodetection code based on the i2c addr */
        if (!no_autodetect) {
                switch (addr) {
-#ifdef CONFIG_TUNER_TEA5761
                case 0x10:
                        if (tea5761_autodetection(t->i2c.adapter, t->i2c.addr) != EINVAL) {
                                t->type = TUNER_TEA5761;
@@ -606,7 +603,6 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
                                goto register_client;
                        }
                        break;
-#endif
                case 0x42:
                case 0x43:
                case 0x4a:
index e2f1c97..25d0aef 100644 (file)
@@ -799,10 +799,10 @@ static inline void tvp5150_reset(struct i2c_client *c)
        tvp5150_write_inittab(c, tvp5150_init_enable);
 
        /* Initialize image preferences */
-       tvp5150_write(c, TVP5150_BRIGHT_CTL, decoder->bright >> 8);
-       tvp5150_write(c, TVP5150_CONTRAST_CTL, decoder->contrast >> 8);
-       tvp5150_write(c, TVP5150_SATURATION_CTL, decoder->contrast >> 8);
-       tvp5150_write(c, TVP5150_HUE_CTL, (decoder->hue - 32768) >> 8);
+       tvp5150_write(c, TVP5150_BRIGHT_CTL, decoder->bright);
+       tvp5150_write(c, TVP5150_CONTRAST_CTL, decoder->contrast);
+       tvp5150_write(c, TVP5150_SATURATION_CTL, decoder->contrast);
+       tvp5150_write(c, TVP5150_HUE_CTL, decoder->hue);
 
        tvp5150_set_std(c, decoder->norm);
 };
@@ -1077,10 +1077,10 @@ static int tvp5150_detect_client(struct i2c_adapter *adapter,
        core->norm = V4L2_STD_ALL;      /* Default is autodetect */
        core->route.input = TVP5150_COMPOSITE1;
        core->enable = 1;
-       core->bright = 32768;
-       core->contrast = 32768;
-       core->hue = 32768;
-       core->sat = 32768;
+       core->bright = 128;
+       core->contrast = 128;
+       core->hue = 0;
+       core->sat = 128;
 
        if (rv) {
                kfree(c);