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.
This commit is contained in:
Коммит
a99d726bd0
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче