提交 a99d726b 编写于 作者: L Linus Torvalds

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (5023): Fix compilation on ppc32 architecture
  V4L/DVB (5071): Tveeprom: autodetect LG TAPC G701D as tuner type 37
  V4L/DVB (5069): Fix bttv and friends on 64bit machines with lots of memory
  V4L/DVB (5033): MSI TV@nywhere Plus fixes
  V4L/DVB (5029): Ks0127 status flags
  V4L/DVB (5024): Fix quickcam communicator driver for big endian architectures
  V4L/DVB (5021): Cx88xx: Fix lockup on suspend
  V4L/DVB (5020): Fix: disable interrupts while at KM_BOUNCE_READ
  V4L/DVB (5019): Fix the frame->grabstate update in read() entry point.
......@@ -38,6 +38,7 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/errno.h>
#include <linux/freezer.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h>
......@@ -961,6 +962,7 @@ int cx88_audio_thread(void *data)
msleep_interruptible(1000);
if (kthread_should_stop())
break;
try_to_freeze();
/* just monitor the audio status for now ... */
memset(&t, 0, sizeof(t));
......
......@@ -712,13 +712,13 @@ static int ks0127_command(struct i2c_client *client,
*iarg = 0;
status = ks0127_read(ks, KS_STAT);
if (!(status & 0x20)) /* NOVID not set */
*iarg = (*iarg & DECODER_STATUS_GOOD);
*iarg = (*iarg | DECODER_STATUS_GOOD);
if ((status & 0x01)) /* CLOCK set */
*iarg = (*iarg & DECODER_STATUS_COLOR);
*iarg = (*iarg | DECODER_STATUS_COLOR);
if ((status & 0x08)) /* PALDET set */
*iarg = (*iarg & DECODER_STATUS_PAL);
*iarg = (*iarg | DECODER_STATUS_PAL);
else
*iarg = (*iarg & DECODER_STATUS_NTSC);
*iarg = (*iarg | DECODER_STATUS_NTSC);
break;
//Catch any unknown command
......
......@@ -2570,6 +2570,7 @@ struct saa7134_board saa7134_boards[] = {
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
.gpiomask = 1 << 21,
.inputs = {{
.name = name_tv,
.vmux = 1,
......@@ -2578,15 +2579,20 @@ struct saa7134_board saa7134_boards[] = {
},{
.name = name_comp1,
.vmux = 3,
.amux = LINE1,
.amux = LINE2, /* unconfirmed, taken from Philips driver */
},{
.name = name_comp2,
.vmux = 0, /* untested, Composite over S-Video */
.amux = LINE2,
},{
.name = name_svideo,
.vmux = 0,
.amux = LINE1,
.vmux = 8,
.amux = LINE2,
}},
.radio = {
.name = name_radio,
.amux = LINE1,
.amux = TV,
.gpio = 0x0200000,
},
},
[SAA7134_BOARD_CINERGY250PCI] = {
......
......@@ -184,7 +184,7 @@ hauppauge_tuner[] =
{ TUNER_ABSENT, "Thompson DTT757"},
/* 80-89 */
{ TUNER_ABSENT, "Philips FQ1216LME MK3"},
{ TUNER_ABSENT, "LG TAPC G701D"},
{ TUNER_LG_PAL_NEW_TAPC, "LG TAPC G701D"},
{ TUNER_LG_NTSC_NEW_TAPC, "LG TAPC H791F"},
{ TUNER_LG_PAL_NEW_TAPC, "TCL 2002MB 3"},
{ TUNER_LG_PAL_NEW_TAPC, "TCL 2002MI 3"},
......
......@@ -35,27 +35,13 @@ struct rgb {
};
struct bayL0 {
#ifdef __BIG_ENDIAN
u8 r;
u8 g;
#elif __LITTLE_ENDIAN
u8 g;
u8 r;
#else
#error not byte order defined
#endif
};
struct bayL1 {
#ifdef __BIG_ENDIAN
u8 g;
u8 b;
#elif __LITTLE_ENDIAN
u8 b;
u8 g;
#else
#error not byte order defined
#endif
};
struct cam_size {
......
......@@ -1080,7 +1080,6 @@ static ssize_t usbvision_v4l2_read(struct file *file, char *buf,
int noblock = file->f_flags & O_NONBLOCK;
unsigned long lock_flags;
int frmx = -1;
int ret,i;
struct usbvision_frame *frame;
......@@ -1155,7 +1154,7 @@ static ssize_t usbvision_v4l2_read(struct file *file, char *buf,
frame->bytes_read = 0;
/* Mark it as available to be used again. */
usbvision->frame[frmx].grabstate = FrameState_Unused;
frame->grabstate = FrameState_Unused;
/* } */
return count;
......
......@@ -90,8 +90,15 @@ MODULE_LICENSE("GPL");
char *v4l2_norm_to_name(v4l2_std_id id)
{
char *name;
u32 myid = id;
switch (id) {
/* HACK: ppc32 architecture doesn't have __ucmpdi2 function to handle
64 bit comparations. So, on that architecture, with some gcc variants,
compilation fails. Currently, the max value is 30bit wide.
*/
BUG_ON(myid != id);
switch (myid) {
case V4L2_STD_PAL:
name="PAL"; break;
case V4L2_STD_PAL_BG:
......
......@@ -1229,7 +1229,7 @@ videobuf_vm_nopage(struct vm_area_struct *vma, unsigned long vaddr,
vaddr,vma->vm_start,vma->vm_end);
if (vaddr > vma->vm_end)
return NOPAGE_SIGBUS;
page = alloc_page(GFP_USER);
page = alloc_page(GFP_USER | __GFP_DMA32);
if (!page)
return NOPAGE_OOM;
clear_user_page(page_address(page), vaddr, page);
......
......@@ -270,10 +270,15 @@ static void gen_line(struct sg_to_addr to_addr[],int inipos,int pages,int wmax,
char *p,*s,*basep;
struct page *pg;
u8 chr,r,g,b,color;
unsigned long flags;
spinlock_t spinlock;
spin_lock_init(&spinlock);
/* Get first addr pointed to pixel position */
oldpg=get_addr_pos(pos,pages,to_addr);
pg=pfn_to_page(sg_dma_address(to_addr[oldpg].sg) >> PAGE_SHIFT);
spin_lock_irqsave(&spinlock,flags);
basep = kmap_atomic(pg, KM_BOUNCE_READ)+to_addr[oldpg].sg->offset;
/* We will just duplicate the second pixel at the packet */
......@@ -376,6 +381,8 @@ static void gen_line(struct sg_to_addr to_addr[],int inipos,int pages,int wmax,
end:
kunmap_atomic(basep, KM_BOUNCE_READ);
spin_unlock_irqrestore(&spinlock,flags);
}
static void vivi_fillbuff(struct vivi_dev *dev,struct vivi_buffer *buf)
{
......
......@@ -662,6 +662,15 @@ typedef __u64 v4l2_std_id;
#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
/* FIXME:
Although std_id is 64 bits, there is an issue on PPC32 architecture that
makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
this value to 32 bits.
As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
it should work fine. However, if needed to add more than two standards,
v4l2-common.c should be fixed.
*/
/* some merged standards */
#define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
#define V4L2_STD_B (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册