Commit 20a508a0 authored by Gerd Knorr's avatar Gerd Knorr Committed by Linus Torvalds

[PATCH] v4l: cx88 update

This is a cx88 driver update, changes:

 * adapt to video-buf changes.
 * add support for a new card.
 * use the new video-buf-dvb module.

The dvb stuff doesn't build yet as it depends on some cutting-edge code
from the linuxtv cvs and is tagged as 'BROKEN' because of that.

The patch also removes all trailing whitespaces.  I've a script to remove
them from my sources now, that should kill those no-op whitespace changes
in my patches after merging this initial cleanup.
Signed-off-by: default avatarGerd Knorr <kraxel@bytesex.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent eba51e01
...@@ -315,12 +315,13 @@ config VIDEO_CX88 ...@@ -315,12 +315,13 @@ config VIDEO_CX88
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called cx8800 module will be called cx8800
#config VIDEO_CX88_DVB config VIDEO_CX88_DVB
# tristate "DVB Support for cx2388x based TV cards" tristate "DVB Support for cx2388x based TV cards"
# depends on VIDEO_CX88 && DVB_CORE depends on VIDEO_CX88 && DVB_CORE && BROKEN
# ---help--- select VIDEO_BUF_DVB
# This adds support for DVB cards based on the ---help---
# Connexant 2388x chip. This adds support for DVB cards based on the
Connexant 2388x chip.
config VIDEO_OVCAMCHIP config VIDEO_OVCAMCHIP
tristate "OmniVision Camera Chip support" tristate "OmniVision Camera Chip support"
......
...@@ -5,4 +5,6 @@ cx8802-objs := cx88-mpeg.o ...@@ -5,4 +5,6 @@ cx8802-objs := cx88-mpeg.o
obj-$(CONFIG_VIDEO_CX88) += cx88xx.o cx8800.o cx8802.o cx88-blackbird.o obj-$(CONFIG_VIDEO_CX88) += cx88xx.o cx8800.o cx8802.o cx88-blackbird.o
obj-$(CONFIG_VIDEO_CX88_DVB) += cx88-dvb.o obj-$(CONFIG_VIDEO_CX88_DVB) += cx88-dvb.o
EXTRA_CFLAGS = -I$(src)/.. -I$(srctree)/drivers/media/dvb/dvb-core EXTRA_CFLAGS += -I$(src)/..
EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/dvb-core
EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/frontends
/* /*
* $Id: cx88-blackbird.c,v 1.14 2004/10/12 07:33:22 kraxel Exp $ * $Id: cx88-blackbird.c,v 1.17 2004/11/07 13:17:15 kraxel Exp $
* *
* Support for a cx23416 mpeg encoder via cx2388x host port. * Support for a cx23416 mpeg encoder via cx2388x host port.
* "blackbird" reference design. * "blackbird" reference design.
...@@ -543,9 +543,10 @@ static int blackbird_initialize_codec(struct cx8802_dev *dev) ...@@ -543,9 +543,10 @@ static int blackbird_initialize_codec(struct cx8802_dev *dev)
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
static int bb_buf_setup(void *priv, unsigned int *count, unsigned int *size) static int bb_buf_setup(struct videobuf_queue *q,
unsigned int *count, unsigned int *size)
{ {
struct cx8802_fh *fh = priv; struct cx8802_fh *fh = q->priv_data;
fh->dev->ts_packet_size = 512; fh->dev->ts_packet_size = 512;
fh->dev->ts_packet_count = 100; fh->dev->ts_packet_count = 100;
...@@ -561,23 +562,24 @@ static int bb_buf_setup(void *priv, unsigned int *count, unsigned int *size) ...@@ -561,23 +562,24 @@ static int bb_buf_setup(void *priv, unsigned int *count, unsigned int *size)
} }
static int static int
bb_buf_prepare(void *priv, struct videobuf_buffer *vb, bb_buf_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
enum v4l2_field field) enum v4l2_field field)
{ {
struct cx8802_fh *fh = priv; struct cx8802_fh *fh = q->priv_data;
return cx8802_buf_prepare(fh->dev, (struct cx88_buffer*)vb); return cx8802_buf_prepare(fh->dev, (struct cx88_buffer*)vb);
} }
static void static void
bb_buf_queue(void *priv, struct videobuf_buffer *vb) bb_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
{ {
struct cx8802_fh *fh = priv; struct cx8802_fh *fh = q->priv_data;
cx8802_buf_queue(fh->dev, (struct cx88_buffer*)vb); cx8802_buf_queue(fh->dev, (struct cx88_buffer*)vb);
} }
static void bb_buf_release(void *priv, struct videobuf_buffer *vb) static void
bb_buf_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
{ {
struct cx8802_fh *fh = priv; struct cx8802_fh *fh = q->priv_data;
cx88_free_buffer(fh->dev->pci, (struct cx88_buffer*)vb); cx88_free_buffer(fh->dev->pci, (struct cx88_buffer*)vb);
} }
...@@ -635,23 +637,23 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file, ...@@ -635,23 +637,23 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file,
/* --- streaming capture ------------------------------------- */ /* --- streaming capture ------------------------------------- */
case VIDIOC_REQBUFS: case VIDIOC_REQBUFS:
return videobuf_reqbufs(file->private_data, &fh->mpegq, arg); return videobuf_reqbufs(&fh->mpegq, arg);
case VIDIOC_QUERYBUF: case VIDIOC_QUERYBUF:
return videobuf_querybuf(&fh->mpegq, arg); return videobuf_querybuf(&fh->mpegq, arg);
case VIDIOC_QBUF: case VIDIOC_QBUF:
return videobuf_qbuf(file->private_data, &fh->mpegq, arg); return videobuf_qbuf(&fh->mpegq, arg);
case VIDIOC_DQBUF: case VIDIOC_DQBUF:
return videobuf_dqbuf(file->private_data, &fh->mpegq, arg, return videobuf_dqbuf(&fh->mpegq, arg,
file->f_flags & O_NONBLOCK); file->f_flags & O_NONBLOCK);
case VIDIOC_STREAMON: case VIDIOC_STREAMON:
return videobuf_streamon(file->private_data, &fh->mpegq); return videobuf_streamon(&fh->mpegq);
case VIDIOC_STREAMOFF: case VIDIOC_STREAMOFF:
return videobuf_streamoff(file->private_data, &fh->mpegq); return videobuf_streamoff(&fh->mpegq);
default: default:
return -EINVAL; return -EINVAL;
...@@ -696,9 +698,8 @@ static int mpeg_open(struct inode *inode, struct file *file) ...@@ -696,9 +698,8 @@ static int mpeg_open(struct inode *inode, struct file *file)
dev->pci, &dev->slock, dev->pci, &dev->slock,
V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_FIELD_TOP, V4L2_FIELD_TOP,
sizeof(struct cx88_buffer)); sizeof(struct cx88_buffer),
init_MUTEX(&fh->mpegq.lock); fh);
return 0; return 0;
} }
...@@ -710,9 +711,9 @@ static int mpeg_release(struct inode *inode, struct file *file) ...@@ -710,9 +711,9 @@ static int mpeg_release(struct inode *inode, struct file *file)
/* stop mpeg capture */ /* stop mpeg capture */
if (fh->mpegq.streaming) if (fh->mpegq.streaming)
videobuf_streamoff(file->private_data,&fh->mpegq); videobuf_streamoff(&fh->mpegq);
if (fh->mpegq.reading) if (fh->mpegq.reading)
videobuf_read_stop(file->private_data,&fh->mpegq); videobuf_read_stop(&fh->mpegq);
file->private_data = NULL; file->private_data = NULL;
kfree(fh); kfree(fh);
...@@ -724,8 +725,7 @@ mpeg_read(struct file *file, char *data, size_t count, loff_t *ppos) ...@@ -724,8 +725,7 @@ mpeg_read(struct file *file, char *data, size_t count, loff_t *ppos)
{ {
struct cx8802_fh *fh = file->private_data; struct cx8802_fh *fh = file->private_data;
return videobuf_read_stream(file->private_data, return videobuf_read_stream(&fh->mpegq, data, count, ppos, 0,
&fh->mpegq, data, count, ppos, 0,
file->f_flags & O_NONBLOCK); file->f_flags & O_NONBLOCK);
} }
...@@ -734,8 +734,7 @@ mpeg_poll(struct file *file, struct poll_table_struct *wait) ...@@ -734,8 +734,7 @@ mpeg_poll(struct file *file, struct poll_table_struct *wait)
{ {
struct cx8802_fh *fh = file->private_data; struct cx8802_fh *fh = file->private_data;
return videobuf_poll_stream(file, file->private_data, return videobuf_poll_stream(file, &fh->mpegq, wait);
&fh->mpegq, wait);
} }
static int static int
...@@ -743,7 +742,7 @@ mpeg_mmap(struct file *file, struct vm_area_struct * vma) ...@@ -743,7 +742,7 @@ mpeg_mmap(struct file *file, struct vm_area_struct * vma)
{ {
struct cx8802_fh *fh = file->private_data; struct cx8802_fh *fh = file->private_data;
return videobuf_mmap_mapper(vma, &fh->mpegq); return videobuf_mmap_mapper(&fh->mpegq, vma);
} }
static struct file_operations mpeg_fops = static struct file_operations mpeg_fops =
...@@ -871,7 +870,7 @@ static struct pci_driver blackbird_pci_driver = { ...@@ -871,7 +870,7 @@ static struct pci_driver blackbird_pci_driver = {
.name = "cx88-blackbird", .name = "cx88-blackbird",
.id_table = cx8802_pci_tbl, .id_table = cx8802_pci_tbl,
.probe = blackbird_probe, .probe = blackbird_probe,
.remove = blackbird_remove, .remove = __devexit_p(blackbird_remove),
.suspend = cx8802_suspend_common, .suspend = cx8802_suspend_common,
.resume = cx8802_resume_common, .resume = cx8802_resume_common,
}; };
......
/* /*
* $Id: cx88-cards.c,v 1.44 2004/10/12 07:33:22 kraxel Exp $ * $Id: cx88-cards.c,v 1.47 2004/11/03 09:04:50 kraxel Exp $
* *
* device driver for Conexant 2388x based TV cards * device driver for Conexant 2388x based TV cards
* card-specific stuff. * card-specific stuff.
...@@ -336,11 +336,11 @@ struct cx88_board cx88_boards[] = { ...@@ -336,11 +336,11 @@ struct cx88_board cx88_boards[] = {
.tuner_type = TUNER_ABSENT, /* No analog tuner */ .tuner_type = TUNER_ABSENT, /* No analog tuner */
.input = {{ .input = {{
.type = CX88_VMUX_COMPOSITE1, .type = CX88_VMUX_COMPOSITE1,
.vmux = 0, .vmux = 1,
.gpio0 = 0x000027df, .gpio0 = 0x000027df,
},{ },{
.type = CX88_VMUX_SVIDEO, .type = CX88_VMUX_SVIDEO,
.vmux = 1, .vmux = 2,
.gpio0 = 0x000027df, .gpio0 = 0x000027df,
}}, }},
.dvb = 1, .dvb = 1,
...@@ -438,6 +438,20 @@ struct cx88_board cx88_boards[] = { ...@@ -438,6 +438,20 @@ struct cx88_board cx88_boards[] = {
}}, }},
.blackbird = 1, .blackbird = 1,
}, },
[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
.name = "DVICO FusionHDTV DVB-T Plus",
.tuner_type = TUNER_ABSENT, /* No analog tuner */
.input = {{
.type = CX88_VMUX_COMPOSITE1,
.vmux = 1,
.gpio0 = 0x000027df,
},{
.type = CX88_VMUX_SVIDEO,
.vmux = 2,
.gpio0 = 0x000027df,
}},
.dvb = 1,
},
}; };
const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
...@@ -525,6 +539,10 @@ struct cx88_subid cx88_subids[] = { ...@@ -525,6 +539,10 @@ struct cx88_subid cx88_subids[] = {
.subvendor = 0x1540, .subvendor = 0x1540,
.subdevice = 0x2580, .subdevice = 0x2580,
.card = CX88_BOARD_PROVIDEO_PV259, .card = CX88_BOARD_PROVIDEO_PV259,
},{
.subvendor = 0x18AC,
.subdevice = 0xDB10,
.card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
} }
}; };
const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
...@@ -612,7 +630,7 @@ static struct { ...@@ -612,7 +630,7 @@ static struct {
{ TUNER_ABSENT, "Philips TD1536D_FH_44"}, { TUNER_ABSENT, "Philips TD1536D_FH_44"},
{ TUNER_LG_NTSC_FM, "LG TPI8NSR01F"}, { TUNER_LG_NTSC_FM, "LG TPI8NSR01F"},
{ TUNER_LG_PAL_FM, "LG TPI8PSB01D"}, { TUNER_LG_PAL_FM, "LG TPI8PSB01D"},
{ TUNER_LG_PAL, "LG TPI8PSB11D"}, { TUNER_LG_PAL, "LG TPI8PSB11D"},
{ TUNER_LG_PAL_I_FM, "LG TAPC-I001D"}, { TUNER_LG_PAL_I_FM, "LG TAPC-I001D"},
{ TUNER_LG_PAL_I, "LG TAPC-I701D"} { TUNER_LG_PAL_I, "LG TAPC-I701D"}
}; };
...@@ -634,12 +652,12 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) ...@@ -634,12 +652,12 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data)
model = eeprom_data[12] << 8 | eeprom_data[11]; model = eeprom_data[12] << 8 | eeprom_data[11];
tuner = eeprom_data[9]; tuner = eeprom_data[9];
radio = eeprom_data[blk2-1] & 0x01; radio = eeprom_data[blk2-1] & 0x01;
if (tuner < ARRAY_SIZE(hauppauge_tuner)) if (tuner < ARRAY_SIZE(hauppauge_tuner))
core->tuner_type = hauppauge_tuner[tuner].id; core->tuner_type = hauppauge_tuner[tuner].id;
if (radio) if (radio)
core->has_radio = 1; core->has_radio = 1;
printk(KERN_INFO "%s: hauppauge eeprom: model=%d, " printk(KERN_INFO "%s: hauppauge eeprom: model=%d, "
"tuner=%s (%d), radio=%s\n", "tuner=%s (%d), radio=%s\n",
core->name, model, (tuner < ARRAY_SIZE(hauppauge_tuner) core->name, model, (tuner < ARRAY_SIZE(hauppauge_tuner)
...@@ -804,7 +822,7 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) ...@@ -804,7 +822,7 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci)
void cx88_card_setup(struct cx88_core *core) void cx88_card_setup(struct cx88_core *core)
{ {
static u8 eeprom[128]; static u8 eeprom[128];
switch (core->board) { switch (core->board) {
case CX88_BOARD_HAUPPAUGE: case CX88_BOARD_HAUPPAUGE:
if (0 == core->i2c_rc) if (0 == core->i2c_rc)
......
/* /*
* $Id: cx88-core.c,v 1.13 2004/10/12 07:33:22 kraxel Exp $ * $Id: cx88-core.c,v 1.15 2004/10/25 11:26:36 kraxel Exp $
* *
* device driver for Conexant 2388x based TV cards * device driver for Conexant 2388x based TV cards
* driver core * driver core
...@@ -50,13 +50,12 @@ module_param(latency,int,0444); ...@@ -50,13 +50,12 @@ module_param(latency,int,0444);
MODULE_PARM_DESC(latency,"pci latency timer"); MODULE_PARM_DESC(latency,"pci latency timer");
static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
static int tuner_num; static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
module_param_array(tuner,int,&tuner_num,0444);
MODULE_PARM_DESC(tuner,"tuner type"); module_param_array(tuner, int, NULL, 0444);
module_param_array(card, int, NULL, 0444);
static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; MODULE_PARM_DESC(tuner,"tuner type");
static int card_num;
module_param_array(card,int,&card_num,0444);
MODULE_PARM_DESC(card,"card type"); MODULE_PARM_DESC(card,"card type");
static unsigned int nicam = 0; static unsigned int nicam = 0;
...@@ -137,7 +136,7 @@ static u32* cx88_risc_field(u32 *rp, struct scatterlist *sglist, ...@@ -137,7 +136,7 @@ static u32* cx88_risc_field(u32 *rp, struct scatterlist *sglist,
/* sync instruction */ /* sync instruction */
if (sync_line != NO_SYNC_LINE) if (sync_line != NO_SYNC_LINE)
*(rp++) = cpu_to_le32(RISC_RESYNC | sync_line); *(rp++) = cpu_to_le32(RISC_RESYNC | sync_line);
/* scan lines */ /* scan lines */
sg = sglist; sg = sglist;
for (line = 0; line < lines; line++) { for (line = 0; line < lines; line++) {
...@@ -291,7 +290,7 @@ cx88_free_buffer(struct pci_dev *pci, struct cx88_buffer *buf) ...@@ -291,7 +290,7 @@ cx88_free_buffer(struct pci_dev *pci, struct cx88_buffer *buf)
* *
* Every channel has 160 bytes control data (64 bytes instruction * Every channel has 160 bytes control data (64 bytes instruction
* queue and 6 CDT entries), which is close to 2k total. * queue and 6 CDT entries), which is close to 2k total.
* *
* Address layout: * Address layout:
* 0x0000 - 0x03ff CMDs / reserved * 0x0000 - 0x03ff CMDs / reserved
* 0x0400 - 0x0bff instruction queues + CDs * 0x0400 - 0x0bff instruction queues + CDs
...@@ -467,7 +466,7 @@ void cx88_risc_disasm(struct cx88_core *core, ...@@ -467,7 +466,7 @@ void cx88_risc_disasm(struct cx88_core *core,
struct btcx_riscmem *risc) struct btcx_riscmem *risc)
{ {
unsigned int i,j,n; unsigned int i,j,n;
printk("%s: risc disasm: %p [dma=0x%08lx]\n", printk("%s: risc disasm: %p [dma=0x%08lx]\n",
core->name, risc->cpu, (unsigned long)risc->dma); core->name, risc->cpu, (unsigned long)risc->dma);
for (i = 0; i < (risc->size >> 2); i += n) { for (i = 0; i < (risc->size >> 2); i += n) {
...@@ -537,13 +536,13 @@ void cx88_sram_channel_dump(struct cx88_core *core, ...@@ -537,13 +536,13 @@ void cx88_sram_channel_dump(struct cx88_core *core,
} }
char *cx88_pci_irqs[32] = { char *cx88_pci_irqs[32] = {
"vid", "aud", "ts", "vip", "hst", "5", "6", "tm1", "vid", "aud", "ts", "vip", "hst", "5", "6", "tm1",
"src_dma", "dst_dma", "risc_rd_err", "risc_wr_err", "src_dma", "dst_dma", "risc_rd_err", "risc_wr_err",
"brdg_err", "src_dma_err", "dst_dma_err", "ipb_dma_err", "brdg_err", "src_dma_err", "dst_dma_err", "ipb_dma_err",
"i2c", "i2c_rack", "ir_smp", "gpio0", "gpio1" "i2c", "i2c_rack", "ir_smp", "gpio0", "gpio1"
}; };
char *cx88_vid_irqs[32] = { char *cx88_vid_irqs[32] = {
"y_risci1", "u_risci1", "v_risci1", "vbi_risc1", "y_risci1", "u_risci1", "v_risci1", "vbi_risc1",
"y_risci2", "u_risci2", "v_risci2", "vbi_risc2", "y_risci2", "u_risci2", "v_risci2", "vbi_risc2",
"y_oflow", "u_oflow", "v_oflow", "vbi_oflow", "y_oflow", "u_oflow", "v_oflow", "vbi_oflow",
"y_sync", "u_sync", "v_sync", "vbi_sync", "y_sync", "u_sync", "v_sync", "vbi_sync",
......
This diff is collapsed.
/* /*
$Id: cx88-i2c.c,v 1.17 2004/10/11 13:45:51 kraxel Exp $ $Id: cx88-i2c.c,v 1.18 2004/10/13 10:39:00 kraxel Exp $
cx88-i2c.c -- all the i2c code is here cx88-i2c.c -- all the i2c code is here
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -72,7 +72,7 @@ static int cx8800_bit_getscl(void *data) ...@@ -72,7 +72,7 @@ static int cx8800_bit_getscl(void *data)
{ {
struct cx88_core *core = data; struct cx88_core *core = data;
u32 state; u32 state;
state = cx_read(MO_I2C); state = cx_read(MO_I2C);
return state & 0x02 ? 1 : 0; return state & 0x02 ? 1 : 0;
} }
......
/* /*
* $Id: cx88-mpeg.c,v 1.11 2004/10/12 07:33:22 kraxel Exp $ * $Id: cx88-mpeg.c,v 1.14 2004/10/25 11:26:36 kraxel Exp $
* *
* Support for the mpeg transport stream transfers * Support for the mpeg transport stream transfers
* PCI function #2 of the cx2388x. * PCI function #2 of the cx2388x.
...@@ -239,7 +239,6 @@ static void cx8802_timeout(unsigned long data) ...@@ -239,7 +239,6 @@ static void cx8802_timeout(unsigned long data)
if (debug) if (debug)
cx88_sram_channel_dump(dev->core, &cx88_sram_channels[SRAM_CH28]); cx88_sram_channel_dump(dev->core, &cx88_sram_channels[SRAM_CH28]);
cx8802_stop_dma(dev); cx8802_stop_dma(dev);
dev->timeout_count++;
do_cancel_buffers(dev,"timeout",1); do_cancel_buffers(dev,"timeout",1);
} }
...@@ -276,7 +275,6 @@ static void cx8802_mpeg_irq(struct cx8802_dev *dev) ...@@ -276,7 +275,6 @@ static void cx8802_mpeg_irq(struct cx8802_dev *dev)
/* risc2 y */ /* risc2 y */
if (status & 0x10) { if (status & 0x10) {
spin_lock(&dev->slock); spin_lock(&dev->slock);
dev->stopper_count++;
cx8802_restart_queue(dev,&dev->mpegq); cx8802_restart_queue(dev,&dev->mpegq);
spin_unlock(&dev->slock); spin_unlock(&dev->slock);
} }
...@@ -284,7 +282,6 @@ static void cx8802_mpeg_irq(struct cx8802_dev *dev) ...@@ -284,7 +282,6 @@ static void cx8802_mpeg_irq(struct cx8802_dev *dev)
/* other general errors */ /* other general errors */
if (status & 0x1f0100) { if (status & 0x1f0100) {
spin_lock(&dev->slock); spin_lock(&dev->slock);
dev->error_count++;
cx8802_stop_dma(dev); cx8802_stop_dma(dev);
cx8802_restart_queue(dev,&dev->mpegq); cx8802_restart_queue(dev,&dev->mpegq);
spin_unlock(&dev->slock); spin_unlock(&dev->slock);
......
/* /*
$Id: cx88-reg.h,v 1.5 2004/09/15 16:15:24 kraxel Exp $ $Id: cx88-reg.h,v 1.6 2004/10/13 10:39:00 kraxel Exp $
cx88x-hw.h - CX2388x register offsets cx88x-hw.h - CX2388x register offsets
...@@ -559,11 +559,11 @@ ...@@ -559,11 +559,11 @@
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
/* various constants */ /* various constants */
#define SEL_BTSC 0x01 #define SEL_BTSC 0x01
#define SEL_EIAJ 0x02 #define SEL_EIAJ 0x02
#define SEL_A2 0x04 #define SEL_A2 0x04
#define SEL_SAP 0x08 #define SEL_SAP 0x08
#define SEL_NICAM 0x10 #define SEL_NICAM 0x10
#define SEL_FMRADIO 0x20 #define SEL_FMRADIO 0x20
// AUD_CTL // AUD_CTL
...@@ -618,7 +618,7 @@ ...@@ -618,7 +618,7 @@
#define EN_DMTRX_BYPASS (1 << 11) #define EN_DMTRX_BYPASS (1 << 11)
#endif #endif
// Video // Video
#define VID_CAPTURE_CONTROL 0x310180 #define VID_CAPTURE_CONTROL 0x310180
#define CX23880_CAP_CTL_CAPTURE_VBI_ODD (1<<3) #define CX23880_CAP_CTL_CAPTURE_VBI_ODD (1<<3)
...@@ -630,10 +630,10 @@ ...@@ -630,10 +630,10 @@
#define VideoInputMux1 0x1 #define VideoInputMux1 0x1
#define VideoInputMux2 0x2 #define VideoInputMux2 0x2
#define VideoInputMux3 0x3 #define VideoInputMux3 0x3
#define VideoInputTuner 0x0 #define VideoInputTuner 0x0
#define VideoInputComposite 0x1 #define VideoInputComposite 0x1
#define VideoInputSVideo 0x2 #define VideoInputSVideo 0x2
#define VideoInputOther 0x3 #define VideoInputOther 0x3
#define Xtal0 0x1 #define Xtal0 0x1
#define Xtal1 0x2 #define Xtal1 0x2
...@@ -644,12 +644,12 @@ ...@@ -644,12 +644,12 @@
#define VideoFormatNTSCJapan 0x2 #define VideoFormatNTSCJapan 0x2
#define VideoFormatNTSC443 0x3 #define VideoFormatNTSC443 0x3
#define VideoFormatPAL 0x4 #define VideoFormatPAL 0x4
#define VideoFormatPALB 0x4 #define VideoFormatPALB 0x4
#define VideoFormatPALD 0x4 #define VideoFormatPALD 0x4
#define VideoFormatPALG 0x4 #define VideoFormatPALG 0x4
#define VideoFormatPALH 0x4 #define VideoFormatPALH 0x4
#define VideoFormatPALI 0x4 #define VideoFormatPALI 0x4
#define VideoFormatPALBDGHI 0x4 #define VideoFormatPALBDGHI 0x4
#define VideoFormatPALM 0x5 #define VideoFormatPALM 0x5
#define VideoFormatPALN 0x6 #define VideoFormatPALN 0x6
#define VideoFormatPALNC 0x7 #define VideoFormatPALNC 0x7
...@@ -661,12 +661,12 @@ ...@@ -661,12 +661,12 @@
#define VideoFormatNTSCJapan27MHz 0x12 #define VideoFormatNTSCJapan27MHz 0x12
#define VideoFormatNTSC44327MHz 0x13 #define VideoFormatNTSC44327MHz 0x13
#define VideoFormatPAL27MHz 0x14 #define VideoFormatPAL27MHz 0x14
#define VideoFormatPALB27MHz 0x14 #define VideoFormatPALB27MHz 0x14
#define VideoFormatPALD27MHz 0x14 #define VideoFormatPALD27MHz 0x14
#define VideoFormatPALG27MHz 0x14 #define VideoFormatPALG27MHz 0x14
#define VideoFormatPALH27MHz 0x14 #define VideoFormatPALH27MHz 0x14
#define VideoFormatPALI27MHz 0x14 #define VideoFormatPALI27MHz 0x14
#define VideoFormatPALBDGHI27MHz 0x14 #define VideoFormatPALBDGHI27MHz 0x14
#define VideoFormatPALM27MHz 0x15 #define VideoFormatPALM27MHz 0x15
#define VideoFormatPALN27MHz 0x16 #define VideoFormatPALN27MHz 0x16
#define VideoFormatPALNC27MHz 0x17 #define VideoFormatPALNC27MHz 0x17
...@@ -745,8 +745,8 @@ ...@@ -745,8 +745,8 @@
#define CHANNEL_VIP_UP 0xA #define CHANNEL_VIP_UP 0xA
#define CHANNEL_HOST_DN 0xB #define CHANNEL_HOST_DN 0xB
#define CHANNEL_HOST_UP 0xC #define CHANNEL_HOST_UP 0xC
#define CHANNEL_FIRST 0x1 #define CHANNEL_FIRST 0x1
#define CHANNEL_LAST 0xC #define CHANNEL_LAST 0xC
#define GP_COUNT_CONTROL_NONE 0x0 #define GP_COUNT_CONTROL_NONE 0x0
#define GP_COUNT_CONTROL_INC 0x1 #define GP_COUNT_CONTROL_INC 0x1
...@@ -773,15 +773,15 @@ ...@@ -773,15 +773,15 @@
#define DEFAULT_SAT_U_NTSC 0x7F #define DEFAULT_SAT_U_NTSC 0x7F
#define DEFAULT_SAT_V_NTSC 0x5A #define DEFAULT_SAT_V_NTSC 0x5A
typedef enum typedef enum
{ {
SOURCE_TUNER = 0, SOURCE_TUNER = 0,
SOURCE_COMPOSITE, SOURCE_COMPOSITE,
SOURCE_SVIDEO, SOURCE_SVIDEO,
SOURCE_OTHER1, SOURCE_OTHER1,
SOURCE_OTHER2, SOURCE_OTHER2,
SOURCE_COMPVIASVIDEO, SOURCE_COMPVIASVIDEO,
SOURCE_CCIR656 SOURCE_CCIR656
} VIDEOSOURCETYPE; } VIDEOSOURCETYPE;
#endif /* _CX88_REG_H_ */ #endif /* _CX88_REG_H_ */
/* /*
$Id: cx88-tvaudio.c,v 1.22 2004/10/11 13:45:51 kraxel Exp $ $Id: cx88-tvaudio.c,v 1.24 2004/10/25 11:51:00 kraxel Exp $
cx88x-audio.c - Conexant CX23880/23881 audio downstream driver driver cx88x-audio.c - Conexant CX23880/23881 audio downstream driver driver
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
Some comes from the dscaler sources, one of the dscaler driver guy works Some comes from the dscaler sources, one of the dscaler driver guy works
for Conexant ... for Conexant ...
----------------------------------------------------------------------- -----------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
...@@ -553,6 +553,13 @@ static void set_audio_standard_A2(struct cx88_core *core) ...@@ -553,6 +553,13 @@ static void set_audio_standard_A2(struct cx88_core *core)
set_audio_start(core, 0x0004, EN_DMTRX_SUMDIFF | EN_A2_AUTO_STEREO); set_audio_start(core, 0x0004, EN_DMTRX_SUMDIFF | EN_A2_AUTO_STEREO);
set_audio_registers(core, a2_common); set_audio_registers(core, a2_common);
switch (core->tvaudio) { switch (core->tvaudio) {
case WW_NICAM_I:
/* gives at least mono according to the dscaler guys */
/* so use use that while nicam is broken ... */
dprintk("%s PAL-I mono (status: unknown)\n",__FUNCTION__);
set_audio_registers(core, a2_table1);
cx_write(AUD_CTL, EN_A2_FORCE_MONO1);
break;
case WW_A2_BG: case WW_A2_BG:
dprintk("%s PAL-BG A2 (status: known-good)\n",__FUNCTION__); dprintk("%s PAL-BG A2 (status: known-good)\n",__FUNCTION__);
set_audio_registers(core, a2_table1); set_audio_registers(core, a2_table1);
...@@ -601,7 +608,7 @@ static void set_audio_standard_FM(struct cx88_core *core) ...@@ -601,7 +608,7 @@ static void set_audio_standard_FM(struct cx88_core *core)
cx_write(AUD_DEEMPH1_B0, 0x1C29); cx_write(AUD_DEEMPH1_B0, 0x1C29);
cx_write(AUD_DEEMPH1_A1, 0x3FC66); cx_write(AUD_DEEMPH1_A1, 0x3FC66);
cx_write(AUD_DEEMPH1_B1, 0x399A); cx_write(AUD_DEEMPH1_B1, 0x399A);
break; break;
case WW_FM_DEEMPH_75: case WW_FM_DEEMPH_75:
...@@ -639,10 +646,11 @@ void cx88_set_tvaudio(struct cx88_core *core) ...@@ -639,10 +646,11 @@ void cx88_set_tvaudio(struct cx88_core *core)
case WW_BTSC: case WW_BTSC:
set_audio_standard_BTSC(core,0); set_audio_standard_BTSC(core,0);
break; break;
case WW_NICAM_I: // case WW_NICAM_I:
case WW_NICAM_BGDKL: case WW_NICAM_BGDKL:
set_audio_standard_NICAM(core); set_audio_standard_NICAM(core);
break; break;
case WW_NICAM_I:
case WW_A2_BG: case WW_A2_BG:
case WW_A2_DK: case WW_A2_DK:
case WW_A2_M: case WW_A2_M:
...@@ -750,7 +758,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode) ...@@ -750,7 +758,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode)
case WW_A2_DK: case WW_A2_DK:
case WW_A2_M: case WW_A2_M:
switch (mode) { switch (mode) {
case V4L2_TUNER_MODE_MONO: case V4L2_TUNER_MODE_MONO:
case V4L2_TUNER_MODE_LANG1: case V4L2_TUNER_MODE_LANG1:
ctl = EN_A2_FORCE_MONO1; ctl = EN_A2_FORCE_MONO1;
mask = 0x3f; mask = 0x3f;
...@@ -767,7 +775,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode) ...@@ -767,7 +775,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode)
break; break;
case WW_NICAM_BGDKL: case WW_NICAM_BGDKL:
switch (mode) { switch (mode) {
case V4L2_TUNER_MODE_MONO: case V4L2_TUNER_MODE_MONO:
ctl = EN_NICAM_FORCE_MONO1; ctl = EN_NICAM_FORCE_MONO1;
mask = 0x3f; mask = 0x3f;
break; break;
...@@ -780,10 +788,10 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode) ...@@ -780,10 +788,10 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode)
mask = 0x93f; mask = 0x93f;
break; break;
} }
break; break;
case WW_FM: case WW_FM:
switch (mode) { switch (mode) {
case V4L2_TUNER_MODE_MONO: case V4L2_TUNER_MODE_MONO:
ctl = EN_FMRADIO_FORCE_MONO; ctl = EN_FMRADIO_FORCE_MONO;
mask = 0x3f; mask = 0x3f;
break; break;
...@@ -792,7 +800,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode) ...@@ -792,7 +800,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode)
mask = 0x3f; mask = 0x3f;
break; break;
} }
break; break;
} }
if (UNSET != ctl) { if (UNSET != ctl) {
......
/* /*
* $Id: cx88-vbi.c,v 1.12 2004/10/11 13:45:51 kraxel Exp $ * $Id: cx88-vbi.c,v 1.14 2004/11/07 13:17:15 kraxel Exp $
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -143,7 +143,7 @@ void cx8800_vbi_timeout(unsigned long data) ...@@ -143,7 +143,7 @@ void cx8800_vbi_timeout(unsigned long data)
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
static int static int
vbi_setup(void *priv, unsigned int *count, unsigned int *size) vbi_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
{ {
*size = VBI_LINE_COUNT * VBI_LINE_LENGTH * 2; *size = VBI_LINE_COUNT * VBI_LINE_LENGTH * 2;
if (0 == *count) if (0 == *count)
...@@ -156,12 +156,12 @@ vbi_setup(void *priv, unsigned int *count, unsigned int *size) ...@@ -156,12 +156,12 @@ vbi_setup(void *priv, unsigned int *count, unsigned int *size)
} }
static int static int
vbi_prepare(void *priv, struct videobuf_buffer *vb, vbi_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,
enum v4l2_field field) enum v4l2_field field)
{ {
struct cx8800_fh *fh = priv; struct cx8800_fh *fh = q->priv_data;
struct cx8800_dev *dev = fh->dev; struct cx8800_dev *dev = fh->dev;
struct cx88_buffer *buf = (struct cx88_buffer*)vb; struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb);
unsigned int size; unsigned int size;
int rc; int rc;
...@@ -192,11 +192,11 @@ vbi_prepare(void *priv, struct videobuf_buffer *vb, ...@@ -192,11 +192,11 @@ vbi_prepare(void *priv, struct videobuf_buffer *vb,
} }
static void static void
vbi_queue(void *priv, struct videobuf_buffer *vb) vbi_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
{ {
struct cx88_buffer *buf = (struct cx88_buffer*)vb; struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb);
struct cx88_buffer *prev; struct cx88_buffer *prev;
struct cx8800_fh *fh = priv; struct cx8800_fh *fh = vq->priv_data;
struct cx8800_dev *dev = fh->dev; struct cx8800_dev *dev = fh->dev;
struct cx88_dmaqueue *q = &dev->vbiq; struct cx88_dmaqueue *q = &dev->vbiq;
...@@ -224,10 +224,10 @@ vbi_queue(void *priv, struct videobuf_buffer *vb) ...@@ -224,10 +224,10 @@ vbi_queue(void *priv, struct videobuf_buffer *vb)
} }
} }
static void vbi_release(void *priv, struct videobuf_buffer *vb) static void vbi_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
{ {
struct cx88_buffer *buf = (struct cx88_buffer*)vb; struct cx88_buffer *buf = container_of(vb,struct cx88_buffer,vb);
struct cx8800_fh *fh = priv; struct cx8800_fh *fh = q->priv_data;
cx88_free_buffer(fh->dev->pci,buf); cx88_free_buffer(fh->dev->pci,buf);
} }
......
This diff is collapsed.
/* /*
* $Id: cx88.h,v 1.37 2004/10/12 07:33:22 kraxel Exp $ * $Id: cx88.h,v 1.40 2004/11/03 09:04:51 kraxel Exp $
* *
* v4l2 device driver for cx2388x based TV cards * v4l2 device driver for cx2388x based TV cards
* *
...@@ -26,15 +26,10 @@ ...@@ -26,15 +26,10 @@
#include <linux/videodev.h> #include <linux/videodev.h>
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
#include <dvbdev.h>
#include <dmxdev.h>
#include <dvb_demux.h>
#include <dvb_net.h>
#include <dvb_frontend.h>
#include <media/video-buf.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/audiochip.h> #include <media/audiochip.h>
#include <media/video-buf.h>
#include <media/video-buf-dvb.h>
#include "btcx-risc.h" #include "btcx-risc.h"
#include "cx88-reg.h" #include "cx88-reg.h"
...@@ -160,6 +155,7 @@ extern struct sram_channel cx88_sram_channels[]; ...@@ -160,6 +155,7 @@ extern struct sram_channel cx88_sram_channels[];
#define CX88_BOARD_HAUPPAUGE_DVB_T1 18 #define CX88_BOARD_HAUPPAUGE_DVB_T1 18
#define CX88_BOARD_CONEXANT_DVB_T1 19 #define CX88_BOARD_CONEXANT_DVB_T1 19
#define CX88_BOARD_PROVIDEO_PV259 20 #define CX88_BOARD_PROVIDEO_PV259 20
#define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS 21
enum cx88_itype { enum cx88_itype {
CX88_VMUX_COMPOSITE1 = 1, CX88_VMUX_COMPOSITE1 = 1,
...@@ -351,7 +347,6 @@ struct cx8802_fh { ...@@ -351,7 +347,6 @@ struct cx8802_fh {
}; };
struct cx8802_suspend_state { struct cx8802_suspend_state {
u32 pci_cfg[64 / sizeof(u32)];
int disabled; int disabled;
}; };
...@@ -369,11 +364,6 @@ struct cx8802_dev { ...@@ -369,11 +364,6 @@ struct cx8802_dev {
u32 ts_packet_size; u32 ts_packet_size;
u32 ts_packet_count; u32 ts_packet_count;
/* error stats */
u32 stopper_count;
u32 error_count;
u32 timeout_count;
/* other global state info */ /* other global state info */
struct cx8802_suspend_state state; struct cx8802_suspend_state state;
...@@ -383,15 +373,7 @@ struct cx8802_dev { ...@@ -383,15 +373,7 @@ struct cx8802_dev {
u32 mailbox; u32 mailbox;
/* for dvb only */ /* for dvb only */
struct dvb_adapter *dvb_adapter; struct videobuf_dvb dvb;
struct videobuf_queue dvbq;
struct task_struct *dvb_thread;
struct dvb_demux demux;
struct dmxdev dmxdev;
struct dmx_frontend fe_hw;
struct dmx_frontend fe_mem;
struct dvb_net dvbnet;
int nfeeds;
void* fe_handle; void* fe_handle;
int (*fe_release)(void *handle); int (*fe_release)(void *handle);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment