From 45ad9f8b44b06bf1e91b4b3c338406c2233f0482 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Wed, 21 Jun 2006 17:04:13 -0300 Subject: [PATCH] V4L/DVB (4202): allow selecting CX2341x port mode CX2341X port was always set to 'memory', but 'streaming' is also possible ivtv uses the memory (DMA) interface with the CX2341X, while pvrusb2 and cx88-blackbird use the streaming interface. This setting is now selectable by the driver. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- Documentation/video4linux/cx2341x/fw-encoder-api.txt | 8 +++++++- drivers/media/video/cx2341x.c | 3 ++- drivers/media/video/cx88/cx88-blackbird.c | 1 + include/media/cx2341x.h | 7 +++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Documentation/video4linux/cx2341x/fw-encoder-api.txt b/Documentation/video4linux/cx2341x/fw-encoder-api.txt index f74b0ae4a769..001c68644b08 100644 --- a/Documentation/video4linux/cx2341x/fw-encoder-api.txt +++ b/Documentation/video4linux/cx2341x/fw-encoder-api.txt @@ -270,11 +270,17 @@ Param[0] Name CX2341X_ENC_SET_OUTPUT_PORT Enum 187/0xBB Description - Assign stream output port (not recommended you change setting from default) + Assign stream output port. Normally 0 when the data is copied through + the PCI bus (DMA), and 1 when the data is streamed to another chip + (pvrusb and cx88-blackbird). Param[0] 0=Memory (default) 1=Streaming 2=Serial +Param[1] + Unknown, but leaving this to 0 seems to work best. Indications are that + this might have to do with USB support, although passing anything but 0 + onl breaks things. ------------------------------------------------------------------------------- diff --git a/drivers/media/video/cx2341x.c b/drivers/media/video/cx2341x.c index 7cd1c4cf5aec..554813e6f65d 100644 --- a/drivers/media/video/cx2341x.c +++ b/drivers/media/video/cx2341x.c @@ -639,6 +639,7 @@ void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p) { static struct cx2341x_mpeg_params default_params = { /* misc */ + .port = CX2341X_PORT_MEMORY, .width = 720, .height = 480, .is_50hz = 0, @@ -714,7 +715,7 @@ int cx2341x_update(void *priv, cx2341x_mbox_func func, int err = 0; - cx2341x_api(priv, func, CX2341X_ENC_SET_OUTPUT_PORT, 1, 0); /* 0 = Memory */ + cx2341x_api(priv, func, CX2341X_ENC_SET_OUTPUT_PORT, 2, new->port, 0); if (old == NULL || old->is_50hz != new->is_50hz) { err = cx2341x_api(priv, func, CX2341X_ENC_SET_FRAME_RATE, 1, new->is_50hz); diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index 6e945de1f20a..26aac42ca8bd 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c @@ -1043,6 +1043,7 @@ static int __devinit blackbird_probe(struct pci_dev *pci_dev, dev->width = 720; dev->height = 576; cx2341x_fill_defaults(&dev->params); + dev->params.port = CX2341X_PORT_STREAMING; switch (core->board) { case CX88_BOARD_HAUPPAUGE_ROSLYN: diff --git a/include/media/cx2341x.h b/include/media/cx2341x.h index 0c9292fa5f6d..fb170d4b5235 100644 --- a/include/media/cx2341x.h +++ b/include/media/cx2341x.h @@ -19,8 +19,15 @@ #ifndef CX2341X_H #define CX2341X_H +enum cx2341x_port { + CX2341X_PORT_MEMORY, + CX2341X_PORT_STREAMING, + CX2341X_PORT_SERIAL +}; + struct cx2341x_mpeg_params { /* misc */ + enum cx2341x_port port; u16 width; u16 height; u16 is_50hz;