Re: [PATCH 3/5] ddbridge: remove driver temporarily

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Sat,  2 Aug 2014 06:48:53 +0300
Antti Palosaari <crope@xxxxxx> escreveu:

> Remove driver (version 0.5) as we will update driver to latest
> vendor version 0.9.15. Driver has changed too much for normal
> feature by feature update, so better to remove it totally and
> build new one based directly to latest vendor version.

Don't do that. This breaks bisectability for this driver.

Regards,
Mauro

> 
> Signed-off-by: Antti Palosaari <crope@xxxxxx>
> ---
>  drivers/media/pci/ddbridge/ddbridge-core.c | 1887 ----------------------------
>  drivers/media/pci/ddbridge/ddbridge-regs.h |  151 ---
>  drivers/media/pci/ddbridge/ddbridge.h      |  188 ---
>  3 files changed, 2226 deletions(-)
>  delete mode 100644 drivers/media/pci/ddbridge/ddbridge-core.c
>  delete mode 100644 drivers/media/pci/ddbridge/ddbridge-regs.h
>  delete mode 100644 drivers/media/pci/ddbridge/ddbridge.h
> 
> diff --git a/drivers/media/pci/ddbridge/ddbridge-core.c b/drivers/media/pci/ddbridge/ddbridge-core.c
> deleted file mode 100644
> index 9f5837f..0000000
> --- a/drivers/media/pci/ddbridge/ddbridge-core.c
> +++ /dev/null
> @@ -1,1887 +0,0 @@
> -/*
> - * ddbridge.c: Digital Devices PCIe bridge driver
> - *
> - * Copyright (C) 2010-2011 Digital Devices GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * version 2 only, as published by the Free Software Foundation.
> - *
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> - * 02110-1301, USA
> - * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
> - */
> -
> -#include <linux/module.h>
> -#include <linux/init.h>
> -#include <linux/interrupt.h>
> -#include <linux/delay.h>
> -#include <linux/slab.h>
> -#include <linux/poll.h>
> -#include <linux/io.h>
> -#include <linux/pci.h>
> -#include <linux/pci_ids.h>
> -#include <linux/timer.h>
> -#include <linux/i2c.h>
> -#include <linux/swab.h>
> -#include <linux/vmalloc.h>
> -#include "ddbridge.h"
> -
> -#include "ddbridge-regs.h"
> -
> -#include "tda18271c2dd.h"
> -#include "stv6110x.h"
> -#include "stv090x.h"
> -#include "lnbh24.h"
> -#include "drxk.h"
> -#include "cxd2843.h"
> -#include "tda18212.h"
> -
> -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
> -
> -/* MSI had problems with lost interrupts, fixed but needs testing */
> -#undef CONFIG_PCI_MSI
> -
> -/******************************************************************************/
> -
> -static int i2c_read(struct i2c_adapter *adapter, u8 adr, u8 *val)
> -{
> -	struct i2c_msg msgs[1] = {{.addr = adr,  .flags = I2C_M_RD,
> -				   .buf  = val,  .len   = 1 } };
> -	return (i2c_transfer(adapter, msgs, 1) == 1) ? 0 : -1;
> -}
> -
> -static int i2c_read_reg(struct i2c_adapter *adapter, u8 adr, u8 reg, u8 *val)
> -{
> -	struct i2c_msg msgs[2] = {{.addr = adr,  .flags = 0,
> -				   .buf  = &reg, .len   = 1 },
> -				  {.addr = adr,  .flags = I2C_M_RD,
> -				   .buf  = val,  .len   = 1 } };
> -	return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
> -}
> -
> -static int i2c_read_reg16(struct i2c_adapter *adapter, u8 adr,
> -			  u16 reg, u8 *val)
> -{
> -	u8 msg[2] = {reg>>8, reg&0xff};
> -	struct i2c_msg msgs[2] = {{.addr = adr, .flags = 0,
> -				   .buf  = msg, .len   = 2},
> -				  {.addr = adr, .flags = I2C_M_RD,
> -				   .buf  = val, .len   = 1} };
> -	return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
> -}
> -
> -static int i2c_write(struct i2c_adapter *adap, u8 adr, u8 *data, int len)
> -{
> -	struct i2c_msg msg = {.addr = adr, .flags = 0,
> -			      .buf = data, .len = len};
> -
> -	return (i2c_transfer(adap, &msg, 1) == 1) ? 0 : -1;
> -}
> -
> -static int i2c_write_reg(struct i2c_adapter *adap, u8 adr, u8 reg, u8 val)
> -{
> -	u8 msg[2] = {reg, val};
> -
> -	return i2c_write(adap, adr, msg, 2);
> -}
> -
> -static int ddb_i2c_cmd(struct ddb_i2c *i2c, u32 adr, u32 cmd)
> -{
> -	struct ddb *dev = i2c->dev;
> -	int stat;
> -	u32 val;
> -
> -	i2c->done = 0;
> -	ddbwritel((adr << 9) | cmd, i2c->regs + I2C_COMMAND);
> -	stat = wait_event_timeout(i2c->wq, i2c->done == 1, HZ);
> -	if (stat <= 0) {
> -		printk(KERN_ERR "I2C timeout\n");
> -		{ /* MSI debugging*/
> -			u32 istat = ddbreadl(INTERRUPT_STATUS);
> -			printk(KERN_ERR "IRS %08x\n", istat);
> -			ddbwritel(istat, INTERRUPT_ACK);
> -		}
> -		return -EIO;
> -	}
> -	val = ddbreadl(i2c->regs+I2C_COMMAND);
> -	if (val & 0x70000)
> -		return -EIO;
> -	return 0;
> -}
> -
> -static int ddb_i2c_master_xfer(struct i2c_adapter *adapter,
> -			       struct i2c_msg msg[], int num)
> -{
> -	struct ddb_i2c *i2c = (struct ddb_i2c *)i2c_get_adapdata(adapter);
> -	struct ddb *dev = i2c->dev;
> -	u8 addr = 0;
> -
> -	if (num)
> -		addr = msg[0].addr;
> -
> -	if (num == 2 && msg[1].flags & I2C_M_RD &&
> -	    !(msg[0].flags & I2C_M_RD)) {
> -		memcpy_toio(dev->regs + I2C_TASKMEM_BASE + i2c->wbuf,
> -			    msg[0].buf, msg[0].len);
> -		ddbwritel(msg[0].len|(msg[1].len << 16),
> -			  i2c->regs+I2C_TASKLENGTH);
> -		if (!ddb_i2c_cmd(i2c, addr, 1)) {
> -			memcpy_fromio(msg[1].buf,
> -				      dev->regs + I2C_TASKMEM_BASE + i2c->rbuf,
> -				      msg[1].len);
> -			return num;
> -		}
> -	}
> -
> -	if (num == 1 && !(msg[0].flags & I2C_M_RD)) {
> -		ddbcpyto(I2C_TASKMEM_BASE + i2c->wbuf, msg[0].buf, msg[0].len);
> -		ddbwritel(msg[0].len, i2c->regs + I2C_TASKLENGTH);
> -		if (!ddb_i2c_cmd(i2c, addr, 2))
> -			return num;
> -	}
> -	if (num == 1 && (msg[0].flags & I2C_M_RD)) {
> -		ddbwritel(msg[0].len << 16, i2c->regs + I2C_TASKLENGTH);
> -		if (!ddb_i2c_cmd(i2c, addr, 3)) {
> -			ddbcpyfrom(msg[0].buf,
> -				   I2C_TASKMEM_BASE + i2c->rbuf, msg[0].len);
> -			return num;
> -		}
> -	}
> -	return -EIO;
> -}
> -
> -
> -static u32 ddb_i2c_functionality(struct i2c_adapter *adap)
> -{
> -	return I2C_FUNC_SMBUS_EMUL;
> -}
> -
> -struct i2c_algorithm ddb_i2c_algo = {
> -	.master_xfer   = ddb_i2c_master_xfer,
> -	.functionality = ddb_i2c_functionality,
> -};
> -
> -static void ddb_i2c_release(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_i2c *i2c;
> -	struct i2c_adapter *adap;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		i2c = &dev->i2c[i];
> -		adap = &i2c->adap;
> -		i2c_del_adapter(adap);
> -	}
> -}
> -
> -static int ddb_i2c_init(struct ddb *dev)
> -{
> -	int i, j, stat = 0;
> -	struct ddb_i2c *i2c;
> -	struct i2c_adapter *adap;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		i2c = &dev->i2c[i];
> -		i2c->dev = dev;
> -		i2c->nr = i;
> -		i2c->wbuf = i * (I2C_TASKMEM_SIZE / 4);
> -		i2c->rbuf = i2c->wbuf + (I2C_TASKMEM_SIZE / 8);
> -		i2c->regs = 0x80 + i * 0x20;
> -		ddbwritel(I2C_SPEED_100, i2c->regs + I2C_TIMING);
> -		ddbwritel((i2c->rbuf << 16) | i2c->wbuf,
> -			  i2c->regs + I2C_TASKADDRESS);
> -		init_waitqueue_head(&i2c->wq);
> -
> -		adap = &i2c->adap;
> -		i2c_set_adapdata(adap, i2c);
> -#ifdef I2C_ADAP_CLASS_TV_DIGITAL
> -		adap->class = I2C_ADAP_CLASS_TV_DIGITAL|I2C_CLASS_TV_ANALOG;
> -#else
> -#ifdef I2C_CLASS_TV_ANALOG
> -		adap->class = I2C_CLASS_TV_ANALOG;
> -#endif
> -#endif
> -		strcpy(adap->name, "ddbridge");
> -		adap->algo = &ddb_i2c_algo;
> -		adap->algo_data = (void *)i2c;
> -		adap->dev.parent = &dev->pdev->dev;
> -		stat = i2c_add_adapter(adap);
> -		if (stat)
> -			break;
> -	}
> -	if (stat)
> -		for (j = 0; j < i; j++) {
> -			i2c = &dev->i2c[j];
> -			adap = &i2c->adap;
> -			i2c_del_adapter(adap);
> -		}
> -	return stat;
> -}
> -
> -
> -/******************************************************************************/
> -/******************************************************************************/
> -/******************************************************************************/
> -
> -#if 0
> -static void set_table(struct ddb *dev, u32 off,
> -		      dma_addr_t *pbuf, u32 num)
> -{
> -	u32 i, base;
> -	u64 mem;
> -
> -	base = DMA_BASE_ADDRESS_TABLE + off;
> -	for (i = 0; i < num; i++) {
> -		mem = pbuf[i];
> -		ddbwritel(mem & 0xffffffff, base + i * 8);
> -		ddbwritel(mem >> 32, base + i * 8 + 4);
> -	}
> -}
> -#endif
> -
> -static void ddb_address_table(struct ddb *dev)
> -{
> -	u32 i, j, base;
> -	u64 mem;
> -	dma_addr_t *pbuf;
> -
> -	for (i = 0; i < dev->info->port_num * 2; i++) {
> -		base = DMA_BASE_ADDRESS_TABLE + i * 0x100;
> -		pbuf = dev->input[i].pbuf;
> -		for (j = 0; j < dev->input[i].dma_buf_num; j++) {
> -			mem = pbuf[j];
> -			ddbwritel(mem & 0xffffffff, base + j * 8);
> -			ddbwritel(mem >> 32, base + j * 8 + 4);
> -		}
> -	}
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		base = DMA_BASE_ADDRESS_TABLE + 0x800 + i * 0x100;
> -		pbuf = dev->output[i].pbuf;
> -		for (j = 0; j < dev->output[i].dma_buf_num; j++) {
> -			mem = pbuf[j];
> -			ddbwritel(mem & 0xffffffff, base + j * 8);
> -			ddbwritel(mem >> 32, base + j * 8 + 4);
> -		}
> -	}
> -}
> -
> -static void io_free(struct pci_dev *pdev, u8 **vbuf,
> -		    dma_addr_t *pbuf, u32 size, int num)
> -{
> -	int i;
> -
> -	for (i = 0; i < num; i++) {
> -		if (vbuf[i]) {
> -			pci_free_consistent(pdev, size, vbuf[i], pbuf[i]);
> -			vbuf[i] = 0;
> -		}
> -	}
> -}
> -
> -static int io_alloc(struct pci_dev *pdev, u8 **vbuf,
> -		    dma_addr_t *pbuf, u32 size, int num)
> -{
> -	int i;
> -
> -	for (i = 0; i < num; i++) {
> -		vbuf[i] = pci_alloc_consistent(pdev, size, &pbuf[i]);
> -		if (!vbuf[i])
> -			return -ENOMEM;
> -	}
> -	return 0;
> -}
> -
> -static int ddb_buffers_alloc(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		switch (port->class) {
> -		case DDB_PORT_TUNER:
> -			if (io_alloc(dev->pdev, port->input[0]->vbuf,
> -				     port->input[0]->pbuf,
> -				     port->input[0]->dma_buf_size,
> -				     port->input[0]->dma_buf_num) < 0)
> -				return -1;
> -			if (io_alloc(dev->pdev, port->input[1]->vbuf,
> -				     port->input[1]->pbuf,
> -				     port->input[1]->dma_buf_size,
> -				     port->input[1]->dma_buf_num) < 0)
> -				return -1;
> -			break;
> -		case DDB_PORT_CI:
> -			if (io_alloc(dev->pdev, port->input[0]->vbuf,
> -				     port->input[0]->pbuf,
> -				     port->input[0]->dma_buf_size,
> -				     port->input[0]->dma_buf_num) < 0)
> -				return -1;
> -			if (io_alloc(dev->pdev, port->output->vbuf,
> -				     port->output->pbuf,
> -				     port->output->dma_buf_size,
> -				     port->output->dma_buf_num) < 0)
> -				return -1;
> -			break;
> -		default:
> -			break;
> -		}
> -	}
> -	ddb_address_table(dev);
> -	return 0;
> -}
> -
> -static void ddb_buffers_free(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		io_free(dev->pdev, port->input[0]->vbuf,
> -			port->input[0]->pbuf,
> -			port->input[0]->dma_buf_size,
> -			port->input[0]->dma_buf_num);
> -		io_free(dev->pdev, port->input[1]->vbuf,
> -			port->input[1]->pbuf,
> -			port->input[1]->dma_buf_size,
> -			port->input[1]->dma_buf_num);
> -		io_free(dev->pdev, port->output->vbuf,
> -			port->output->pbuf,
> -			port->output->dma_buf_size,
> -			port->output->dma_buf_num);
> -	}
> -}
> -
> -static void ddb_input_start(struct ddb_input *input)
> -{
> -	struct ddb *dev = input->port->dev;
> -
> -	spin_lock_irq(&input->lock);
> -	input->cbuf = 0;
> -	input->coff = 0;
> -
> -	/* reset */
> -	ddbwritel(0, TS_INPUT_CONTROL(input->nr));
> -	ddbwritel(2, TS_INPUT_CONTROL(input->nr));
> -	ddbwritel(0, TS_INPUT_CONTROL(input->nr));
> -
> -	ddbwritel((1 << 16) |
> -		  (input->dma_buf_num << 11) |
> -		  (input->dma_buf_size >> 7),
> -		  DMA_BUFFER_SIZE(input->nr));
> -	ddbwritel(0, DMA_BUFFER_ACK(input->nr));
> -
> -	ddbwritel(1, DMA_BASE_WRITE);
> -	ddbwritel(3, DMA_BUFFER_CONTROL(input->nr));
> -	ddbwritel(9, TS_INPUT_CONTROL(input->nr));
> -	input->running = 1;
> -	spin_unlock_irq(&input->lock);
> -}
> -
> -static void ddb_input_stop(struct ddb_input *input)
> -{
> -	struct ddb *dev = input->port->dev;
> -
> -	spin_lock_irq(&input->lock);
> -	ddbwritel(0, TS_INPUT_CONTROL(input->nr));
> -	ddbwritel(0, DMA_BUFFER_CONTROL(input->nr));
> -	input->running = 0;
> -	spin_unlock_irq(&input->lock);
> -}
> -
> -static void ddb_output_start(struct ddb_output *output)
> -{
> -	struct ddb *dev = output->port->dev;
> -
> -	spin_lock_irq(&output->lock);
> -	output->cbuf = 0;
> -	output->coff = 0;
> -	ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
> -	ddbwritel(2, TS_OUTPUT_CONTROL(output->nr));
> -	ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
> -	ddbwritel(0x3c, TS_OUTPUT_CONTROL(output->nr));
> -	ddbwritel((1 << 16) |
> -		  (output->dma_buf_num << 11) |
> -		  (output->dma_buf_size >> 7),
> -		  DMA_BUFFER_SIZE(output->nr + 8));
> -	ddbwritel(0, DMA_BUFFER_ACK(output->nr + 8));
> -
> -	ddbwritel(1, DMA_BASE_READ);
> -	ddbwritel(3, DMA_BUFFER_CONTROL(output->nr + 8));
> -	/* ddbwritel(0xbd, TS_OUTPUT_CONTROL(output->nr)); */
> -	ddbwritel(0x1d, TS_OUTPUT_CONTROL(output->nr));
> -	output->running = 1;
> -	spin_unlock_irq(&output->lock);
> -}
> -
> -static void ddb_output_stop(struct ddb_output *output)
> -{
> -	struct ddb *dev = output->port->dev;
> -
> -	spin_lock_irq(&output->lock);
> -	ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
> -	ddbwritel(0, DMA_BUFFER_CONTROL(output->nr + 8));
> -	output->running = 0;
> -	spin_unlock_irq(&output->lock);
> -}
> -
> -static u32 ddb_output_free(struct ddb_output *output)
> -{
> -	u32 idx, off, stat = output->stat;
> -	s32 diff;
> -
> -	idx = (stat >> 11) & 0x1f;
> -	off = (stat & 0x7ff) << 7;
> -
> -	if (output->cbuf != idx) {
> -		if ((((output->cbuf + 1) % output->dma_buf_num) == idx) &&
> -		    (output->dma_buf_size - output->coff <= 188))
> -			return 0;
> -		return 188;
> -	}
> -	diff = off - output->coff;
> -	if (diff <= 0 || diff > 188)
> -		return 188;
> -	return 0;
> -}
> -
> -static ssize_t ddb_output_write(struct ddb_output *output,
> -				const u8 *buf, size_t count)
> -{
> -	struct ddb *dev = output->port->dev;
> -	u32 idx, off, stat = output->stat;
> -	u32 left = count, len;
> -
> -	idx = (stat >> 11) & 0x1f;
> -	off = (stat & 0x7ff) << 7;
> -
> -	while (left) {
> -		len = output->dma_buf_size - output->coff;
> -		if ((((output->cbuf + 1) % output->dma_buf_num) == idx) &&
> -		    (off == 0)) {
> -			if (len <= 188)
> -				break;
> -			len -= 188;
> -		}
> -		if (output->cbuf == idx) {
> -			if (off > output->coff) {
> -#if 1
> -				len = off - output->coff;
> -				len -= (len % 188);
> -				if (len <= 188)
> -
> -#endif
> -					break;
> -				len -= 188;
> -			}
> -		}
> -		if (len > left)
> -			len = left;
> -		if (copy_from_user(output->vbuf[output->cbuf] + output->coff,
> -				   buf, len))
> -			return -EIO;
> -		left -= len;
> -		buf += len;
> -		output->coff += len;
> -		if (output->coff == output->dma_buf_size) {
> -			output->coff = 0;
> -			output->cbuf = ((output->cbuf + 1) % output->dma_buf_num);
> -		}
> -		ddbwritel((output->cbuf << 11) | (output->coff >> 7),
> -			  DMA_BUFFER_ACK(output->nr + 8));
> -	}
> -	return count - left;
> -}
> -
> -static u32 ddb_input_avail(struct ddb_input *input)
> -{
> -	struct ddb *dev = input->port->dev;
> -	u32 idx, off, stat = input->stat;
> -	u32 ctrl = ddbreadl(DMA_BUFFER_CONTROL(input->nr));
> -
> -	idx = (stat >> 11) & 0x1f;
> -	off = (stat & 0x7ff) << 7;
> -
> -	if (ctrl & 4) {
> -		printk(KERN_ERR "IA %d %d %08x\n", idx, off, ctrl);
> -		ddbwritel(input->stat, DMA_BUFFER_ACK(input->nr));
> -		return 0;
> -	}
> -	if (input->cbuf != idx)
> -		return 188;
> -	return 0;
> -}
> -
> -static ssize_t ddb_input_read(struct ddb_input *input, u8 *buf, size_t count)
> -{
> -	struct ddb *dev = input->port->dev;
> -	u32 left = count;
> -	u32 idx, free, stat = input->stat;
> -	int ret;
> -
> -	idx = (stat >> 11) & 0x1f;
> -
> -	while (left) {
> -		if (input->cbuf == idx)
> -			return count - left;
> -		free = input->dma_buf_size - input->coff;
> -		if (free > left)
> -			free = left;
> -		ret = copy_to_user(buf, input->vbuf[input->cbuf] +
> -				   input->coff, free);
> -		if (ret)
> -			return -EFAULT;
> -		input->coff += free;
> -		if (input->coff == input->dma_buf_size) {
> -			input->coff = 0;
> -			input->cbuf = (input->cbuf+1) % input->dma_buf_num;
> -		}
> -		left -= free;
> -		ddbwritel((input->cbuf << 11) | (input->coff >> 7),
> -			  DMA_BUFFER_ACK(input->nr));
> -	}
> -	return count;
> -}
> -
> -/******************************************************************************/
> -/******************************************************************************/
> -/******************************************************************************/
> -
> -#if 0
> -static struct ddb_input *fe2input(struct ddb *dev, struct dvb_frontend *fe)
> -{
> -	int i;
> -
> -	for (i = 0; i < dev->info->port_num * 2; i++) {
> -		if (dev->input[i].fe == fe)
> -			return &dev->input[i];
> -	}
> -	return NULL;
> -}
> -#endif
> -
> -static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
> -{
> -	struct ddb_input *input = fe->sec_priv;
> -	struct ddb_port *port = input->port;
> -	int status;
> -
> -	if (enable) {
> -		mutex_lock(&port->i2c_gate_lock);
> -		status = input->gate_ctrl(fe, 1);
> -	} else {
> -		status = input->gate_ctrl(fe, 0);
> -		mutex_unlock(&port->i2c_gate_lock);
> -	}
> -	return status;
> -}
> -
> -static int demod_attach_drxk(struct ddb_input *input)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct dvb_frontend *fe;
> -	struct drxk_config config;
> -
> -	memset(&config, 0, sizeof(config));
> -	config.microcode_name = "drxk_a3.mc";
> -	config.qam_demod_parameter_count = 4;
> -	config.adr = 0x29 + (input->nr & 1);
> -
> -	fe = input->fe = dvb_attach(drxk_attach, &config, i2c);
> -	if (!input->fe) {
> -		printk(KERN_ERR "No DRXK found!\n");
> -		return -ENODEV;
> -	}
> -	fe->sec_priv = input;
> -	input->gate_ctrl = fe->ops.i2c_gate_ctrl;
> -	fe->ops.i2c_gate_ctrl = drxk_gate_ctrl;
> -	return 0;
> -}
> -
> -static int demod_attach_cxd2843(struct ddb_input *input)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct dvb_frontend *fe;
> -	struct cxd2843_cfg cxd2843_0 = {
> -		.adr = 0x6c,
> -	};
> -	struct cxd2843_cfg cxd2843_1 = {
> -		.adr = 0x6d,
> -	};
> -
> -	fe = input->fe = dvb_attach(cxd2843_attach, i2c,
> -				  (input->nr & 1) ?
> -				  &cxd2843_1 : &cxd2843_0);
> -	if (!input->fe) {
> -		pr_err("No cxd2837/38/43 found!\n");
> -		return -ENODEV;
> -	}
> -	fe->sec_priv = input;
> -	input->gate_ctrl = fe->ops.i2c_gate_ctrl;
> -	fe->ops.i2c_gate_ctrl = drxk_gate_ctrl;
> -	return 0;
> -}
> -
> -static int tuner_attach_tda18271(struct ddb_input *input)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct dvb_frontend *fe;
> -
> -	if (input->fe->ops.i2c_gate_ctrl)
> -		input->fe->ops.i2c_gate_ctrl(input->fe, 1);
> -	fe = dvb_attach(tda18271c2dd_attach, input->fe, i2c, 0x60);
> -	if (!fe) {
> -		printk(KERN_ERR "No TDA18271 found!\n");
> -		return -ENODEV;
> -	}
> -	if (input->fe->ops.i2c_gate_ctrl)
> -		input->fe->ops.i2c_gate_ctrl(input->fe, 0);
> -	return 0;
> -}
> -
> -static struct tda18212_config tda18212_config_60 = {
> -	.i2c_address = 0x60,
> -	.if_dvbt_6 = 3550,
> -	.if_dvbt_7 = 3700,
> -	.if_dvbt_8 = 4150,
> -	.if_dvbt2_6 = 3250,
> -	.if_dvbt2_7 = 4000,
> -	.if_dvbt2_8 = 4000,
> -	.if_dvbc = 5000,
> -};
> -
> -static struct tda18212_config tda18212_config_63 = {
> -	.i2c_address = 0x63,
> -	.if_dvbt_6 = 3550,
> -	.if_dvbt_7 = 3700,
> -	.if_dvbt_8 = 4150,
> -	.if_dvbt2_6 = 3250,
> -	.if_dvbt2_7 = 4000,
> -	.if_dvbt2_8 = 4000,
> -	.if_dvbc = 5000,
> -};
> -
> -static int tuner_attach_tda18212(struct ddb_input *input)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct dvb_frontend *fe;
> -	struct tda18212_config *config;
> -
> -	if (input->nr & 1)
> -		config = &tda18212_config_63;
> -	else
> -		config = &tda18212_config_60;
> -
> -	fe = dvb_attach(tda18212_attach, input->fe, i2c, config);
> -	if (!fe) {
> -		pr_err("No TDA18212 found!\n");
> -		return -ENODEV;
> -	}
> -	return 0;
> -}
> -
> -/******************************************************************************/
> -/******************************************************************************/
> -/******************************************************************************/
> -
> -static struct stv090x_config stv0900 = {
> -	.device         = STV0900,
> -	.demod_mode     = STV090x_DUAL,
> -	.clk_mode       = STV090x_CLK_EXT,
> -
> -	.xtal           = 27000000,
> -	.address        = 0x69,
> -
> -	.ts1_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
> -	.ts2_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
> -
> -	.repeater_level = STV090x_RPTLEVEL_16,
> -
> -	.adc1_range	= STV090x_ADC_1Vpp,
> -	.adc2_range	= STV090x_ADC_1Vpp,
> -
> -	.diseqc_envelope_mode = true,
> -};
> -
> -static struct stv090x_config stv0900_aa = {
> -	.device         = STV0900,
> -	.demod_mode     = STV090x_DUAL,
> -	.clk_mode       = STV090x_CLK_EXT,
> -
> -	.xtal           = 27000000,
> -	.address        = 0x68,
> -
> -	.ts1_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
> -	.ts2_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
> -
> -	.repeater_level = STV090x_RPTLEVEL_16,
> -
> -	.adc1_range	= STV090x_ADC_1Vpp,
> -	.adc2_range	= STV090x_ADC_1Vpp,
> -
> -	.diseqc_envelope_mode = true,
> -};
> -
> -static struct stv6110x_config stv6110a = {
> -	.addr    = 0x60,
> -	.refclk	 = 27000000,
> -	.clk_div = 1,
> -};
> -
> -static struct stv6110x_config stv6110b = {
> -	.addr    = 0x63,
> -	.refclk	 = 27000000,
> -	.clk_div = 1,
> -};
> -
> -static int demod_attach_stv0900(struct ddb_input *input, int type)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
> -
> -	input->fe = dvb_attach(stv090x_attach, feconf, i2c,
> -			       (input->nr & 1) ? STV090x_DEMODULATOR_1
> -			       : STV090x_DEMODULATOR_0);
> -	if (!input->fe) {
> -		printk(KERN_ERR "No STV0900 found!\n");
> -		return -ENODEV;
> -	}
> -	if (!dvb_attach(lnbh24_attach, input->fe, i2c, 0,
> -			0, (input->nr & 1) ?
> -			(0x09 - type) : (0x0b - type))) {
> -		printk(KERN_ERR "No LNBH24 found!\n");
> -		return -ENODEV;
> -	}
> -	return 0;
> -}
> -
> -static int tuner_attach_stv6110(struct ddb_input *input, int type)
> -{
> -	struct i2c_adapter *i2c = &input->port->i2c->adap;
> -	struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
> -	struct stv6110x_config *tunerconf = (input->nr & 1) ?
> -		&stv6110b : &stv6110a;
> -	struct stv6110x_devctl *ctl;
> -
> -	ctl = dvb_attach(stv6110x_attach, input->fe, tunerconf, i2c);
> -	if (!ctl) {
> -		printk(KERN_ERR "No STV6110X found!\n");
> -		return -ENODEV;
> -	}
> -	printk(KERN_INFO "attach tuner input %d adr %02x\n",
> -			 input->nr, tunerconf->addr);
> -
> -	feconf->tuner_init          = ctl->tuner_init;
> -	feconf->tuner_sleep         = ctl->tuner_sleep;
> -	feconf->tuner_set_mode      = ctl->tuner_set_mode;
> -	feconf->tuner_set_frequency = ctl->tuner_set_frequency;
> -	feconf->tuner_get_frequency = ctl->tuner_get_frequency;
> -	feconf->tuner_set_bandwidth = ctl->tuner_set_bandwidth;
> -	feconf->tuner_get_bandwidth = ctl->tuner_get_bandwidth;
> -	feconf->tuner_set_bbgain    = ctl->tuner_set_bbgain;
> -	feconf->tuner_get_bbgain    = ctl->tuner_get_bbgain;
> -	feconf->tuner_set_refclk    = ctl->tuner_set_refclk;
> -	feconf->tuner_get_status    = ctl->tuner_get_status;
> -
> -	return 0;
> -}
> -
> -static int my_dvb_dmx_ts_card_init(struct dvb_demux *dvbdemux, char *id,
> -			    int (*start_feed)(struct dvb_demux_feed *),
> -			    int (*stop_feed)(struct dvb_demux_feed *),
> -			    void *priv)
> -{
> -	dvbdemux->priv = priv;
> -
> -	dvbdemux->filternum = 256;
> -	dvbdemux->feednum = 256;
> -	dvbdemux->start_feed = start_feed;
> -	dvbdemux->stop_feed = stop_feed;
> -	dvbdemux->write_to_decoder = NULL;
> -	dvbdemux->dmx.capabilities = (DMX_TS_FILTERING |
> -				      DMX_SECTION_FILTERING |
> -				      DMX_MEMORY_BASED_FILTERING);
> -	return dvb_dmx_init(dvbdemux);
> -}
> -
> -static int my_dvb_dmxdev_ts_card_init(struct dmxdev *dmxdev,
> -			       struct dvb_demux *dvbdemux,
> -			       struct dmx_frontend *hw_frontend,
> -			       struct dmx_frontend *mem_frontend,
> -			       struct dvb_adapter *dvb_adapter)
> -{
> -	int ret;
> -
> -	dmxdev->filternum = 256;
> -	dmxdev->demux = &dvbdemux->dmx;
> -	dmxdev->capabilities = 0;
> -	ret = dvb_dmxdev_init(dmxdev, dvb_adapter);
> -	if (ret < 0)
> -		return ret;
> -
> -	hw_frontend->source = DMX_FRONTEND_0;
> -	dvbdemux->dmx.add_frontend(&dvbdemux->dmx, hw_frontend);
> -	mem_frontend->source = DMX_MEMORY_FE;
> -	dvbdemux->dmx.add_frontend(&dvbdemux->dmx, mem_frontend);
> -	return dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, hw_frontend);
> -}
> -
> -static int start_feed(struct dvb_demux_feed *dvbdmxfeed)
> -{
> -	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
> -	struct ddb_input *input = dvbdmx->priv;
> -
> -	if (!input->users)
> -		ddb_input_start(input);
> -
> -	return ++input->users;
> -}
> -
> -static int stop_feed(struct dvb_demux_feed *dvbdmxfeed)
> -{
> -	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
> -	struct ddb_input *input = dvbdmx->priv;
> -
> -	if (--input->users)
> -		return input->users;
> -
> -	ddb_input_stop(input);
> -	return 0;
> -}
> -
> -
> -static void dvb_input_detach(struct ddb_input *input)
> -{
> -	struct dvb_adapter *adap = &input->adap;
> -	struct dvb_demux *dvbdemux = &input->demux;
> -
> -	switch (input->attached) {
> -	case 5:
> -		if (input->fe2)
> -			dvb_unregister_frontend(input->fe2);
> -		if (input->fe) {
> -			dvb_unregister_frontend(input->fe);
> -			dvb_frontend_detach(input->fe);
> -			input->fe = NULL;
> -		}
> -	case 4:
> -		dvb_net_release(&input->dvbnet);
> -
> -	case 3:
> -		dvbdemux->dmx.close(&dvbdemux->dmx);
> -		dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
> -					      &input->hw_frontend);
> -		dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
> -					      &input->mem_frontend);
> -		dvb_dmxdev_release(&input->dmxdev);
> -
> -	case 2:
> -		dvb_dmx_release(&input->demux);
> -
> -	case 1:
> -		dvb_unregister_adapter(adap);
> -	}
> -	input->attached = 0;
> -}
> -
> -static int dvb_input_attach(struct ddb_input *input)
> -{
> -	int ret;
> -	struct ddb_port *port = input->port;
> -	struct dvb_adapter *adap = &input->adap;
> -	struct dvb_demux *dvbdemux = &input->demux;
> -
> -	ret = dvb_register_adapter(adap, "DDBridge", THIS_MODULE,
> -				   &input->port->dev->pdev->dev,
> -				   adapter_nr);
> -	if (ret < 0) {
> -		printk(KERN_ERR "ddbridge: Could not register adapter."
> -		       "Check if you enabled enough adapters in dvb-core!\n");
> -		return ret;
> -	}
> -	input->attached = 1;
> -
> -	ret = my_dvb_dmx_ts_card_init(dvbdemux, "SW demux",
> -				      start_feed,
> -				      stop_feed, input);
> -	if (ret < 0)
> -		return ret;
> -	input->attached = 2;
> -
> -	ret = my_dvb_dmxdev_ts_card_init(&input->dmxdev, &input->demux,
> -					 &input->hw_frontend,
> -					 &input->mem_frontend, adap);
> -	if (ret < 0)
> -		return ret;
> -	input->attached = 3;
> -
> -	ret = dvb_net_init(adap, &input->dvbnet, input->dmxdev.demux);
> -	if (ret < 0)
> -		return ret;
> -	input->attached = 4;
> -
> -	input->fe = 0;
> -	switch (port->type) {
> -	case DDB_TUNER_DVBS_ST:
> -		if (demod_attach_stv0900(input, 0) < 0)
> -			return -ENODEV;
> -		if (tuner_attach_stv6110(input, 0) < 0)
> -			return -ENODEV;
> -		if (input->fe) {
> -			if (dvb_register_frontend(adap, input->fe) < 0)
> -				return -ENODEV;
> -		}
> -		break;
> -	case DDB_TUNER_DVBS_ST_AA:
> -		if (demod_attach_stv0900(input, 1) < 0)
> -			return -ENODEV;
> -		if (tuner_attach_stv6110(input, 1) < 0)
> -			return -ENODEV;
> -		if (input->fe) {
> -			if (dvb_register_frontend(adap, input->fe) < 0)
> -				return -ENODEV;
> -		}
> -		break;
> -	case DDB_TUNER_DVBCT_TR:
> -		if (demod_attach_drxk(input) < 0)
> -			return -ENODEV;
> -		if (tuner_attach_tda18271(input) < 0)
> -			return -ENODEV;
> -		if (dvb_register_frontend(adap, input->fe) < 0)
> -			return -ENODEV;
> -		if (input->fe2) {
> -			if (dvb_register_frontend(adap, input->fe2) < 0)
> -				return -ENODEV;
> -			input->fe2->tuner_priv = input->fe->tuner_priv;
> -			memcpy(&input->fe2->ops.tuner_ops,
> -			       &input->fe->ops.tuner_ops,
> -			       sizeof(struct dvb_tuner_ops));
> -		}
> -		break;
> -	case DDB_TUNER_DVBCT2_SONY:
> -	case DDB_TUNER_DVBC2T2_SONY:
> -	case DDB_TUNER_ISDBT_SONY:
> -		if (demod_attach_cxd2843(input) < 0)
> -			return -ENODEV;
> -		if (tuner_attach_tda18212(input) < 0)
> -			return -ENODEV;
> -		if (input->fe) {
> -			if (dvb_register_frontend(adap, input->fe) < 0)
> -				return -ENODEV;
> -		}
> -		break;
> -	}
> -	input->attached = 5;
> -	return 0;
> -}
> -
> -/****************************************************************************/
> -/****************************************************************************/
> -
> -static ssize_t ts_write(struct file *file, const char *buf,
> -			size_t count, loff_t *ppos)
> -{
> -	struct dvb_device *dvbdev = file->private_data;
> -	struct ddb_output *output = dvbdev->priv;
> -	size_t left = count;
> -	int stat;
> -
> -	while (left) {
> -		if (ddb_output_free(output) < 188) {
> -			if (file->f_flags & O_NONBLOCK)
> -				break;
> -			if (wait_event_interruptible(
> -				    output->wq, ddb_output_free(output) >= 188) < 0)
> -				break;
> -		}
> -		stat = ddb_output_write(output, buf, left);
> -		if (stat < 0)
> -			break;
> -		buf += stat;
> -		left -= stat;
> -	}
> -	return (left == count) ? -EAGAIN : (count - left);
> -}
> -
> -static ssize_t ts_read(struct file *file, char *buf,
> -		       size_t count, loff_t *ppos)
> -{
> -	struct dvb_device *dvbdev = file->private_data;
> -	struct ddb_output *output = dvbdev->priv;
> -	struct ddb_input *input = output->port->input[0];
> -	int left, read;
> -
> -	count -= count % 188;
> -	left = count;
> -	while (left) {
> -		if (ddb_input_avail(input) < 188) {
> -			if (file->f_flags & O_NONBLOCK)
> -				break;
> -			if (wait_event_interruptible(
> -				    input->wq, ddb_input_avail(input) >= 188) < 0)
> -				break;
> -		}
> -		read = ddb_input_read(input, buf, left);
> -		if (read < 0)
> -			return read;
> -		left -= read;
> -		buf += read;
> -	}
> -	return (left == count) ? -EAGAIN : (count - left);
> -}
> -
> -static unsigned int ts_poll(struct file *file, poll_table *wait)
> -{
> -	/*
> -	struct dvb_device *dvbdev = file->private_data;
> -	struct ddb_output *output = dvbdev->priv;
> -	struct ddb_input *input = output->port->input[0];
> -	*/
> -	unsigned int mask = 0;
> -
> -#if 0
> -	if (data_avail_to_read)
> -		mask |= POLLIN | POLLRDNORM;
> -	if (data_avail_to_write)
> -		mask |= POLLOUT | POLLWRNORM;
> -
> -	poll_wait(file, &read_queue, wait);
> -	poll_wait(file, &write_queue, wait);
> -#endif
> -	return mask;
> -}
> -
> -static const struct file_operations ci_fops = {
> -	.owner   = THIS_MODULE,
> -	.read    = ts_read,
> -	.write   = ts_write,
> -	.open    = dvb_generic_open,
> -	.release = dvb_generic_release,
> -	.poll    = ts_poll,
> -	.mmap    = 0,
> -};
> -
> -static struct dvb_device dvbdev_ci = {
> -	.priv    = 0,
> -	.readers = -1,
> -	.writers = -1,
> -	.users   = -1,
> -	.fops    = &ci_fops,
> -};
> -
> -/****************************************************************************/
> -/****************************************************************************/
> -/****************************************************************************/
> -
> -static void input_tasklet(unsigned long data)
> -{
> -	struct ddb_input *input = (struct ddb_input *) data;
> -	struct ddb *dev = input->port->dev;
> -
> -	spin_lock(&input->lock);
> -	if (!input->running) {
> -		spin_unlock(&input->lock);
> -		return;
> -	}
> -	input->stat = ddbreadl(DMA_BUFFER_CURRENT(input->nr));
> -
> -	if (input->port->class == DDB_PORT_TUNER) {
> -		if (4&ddbreadl(DMA_BUFFER_CONTROL(input->nr)))
> -			printk(KERN_ERR "Overflow input %d\n", input->nr);
> -		while (input->cbuf != ((input->stat >> 11) & 0x1f)
> -		       || (4&ddbreadl(DMA_BUFFER_CONTROL(input->nr)))) {
> -			dvb_dmx_swfilter_packets(&input->demux,
> -						 input->vbuf[input->cbuf],
> -						 input->dma_buf_size / 188);
> -
> -			input->cbuf = (input->cbuf + 1) % input->dma_buf_num;
> -			ddbwritel((input->cbuf << 11),
> -				  DMA_BUFFER_ACK(input->nr));
> -			input->stat = ddbreadl(DMA_BUFFER_CURRENT(input->nr));
> -		       }
> -	}
> -	if (input->port->class == DDB_PORT_CI)
> -		wake_up(&input->wq);
> -	spin_unlock(&input->lock);
> -}
> -
> -static void output_tasklet(unsigned long data)
> -{
> -	struct ddb_output *output = (struct ddb_output *) data;
> -	struct ddb *dev = output->port->dev;
> -
> -	spin_lock(&output->lock);
> -	if (!output->running) {
> -		spin_unlock(&output->lock);
> -		return;
> -	}
> -	output->stat = ddbreadl(DMA_BUFFER_CURRENT(output->nr + 8));
> -	wake_up(&output->wq);
> -	spin_unlock(&output->lock);
> -}
> -
> -
> -struct cxd2099_cfg cxd_cfg = {
> -	.bitrate =  62000,
> -	.adr     =  0x40,
> -	.polarity = 1,
> -	.clock_mode = 1,
> -};
> -
> -static int ddb_ci_attach(struct ddb_port *port)
> -{
> -	int ret;
> -
> -	ret = dvb_register_adapter(&port->output->adap,
> -				   "DDBridge",
> -				   THIS_MODULE,
> -				   &port->dev->pdev->dev,
> -				   adapter_nr);
> -	if (ret < 0)
> -		return ret;
> -	port->en = cxd2099_attach(&cxd_cfg, port, &port->i2c->adap);
> -	if (!port->en) {
> -		dvb_unregister_adapter(&port->output->adap);
> -		return -ENODEV;
> -	}
> -	ddb_input_start(port->input[0]);
> -	ddb_output_start(port->output);
> -	dvb_ca_en50221_init(&port->output->adap,
> -			    port->en, 0, 1);
> -	ret = dvb_register_device(&port->output->adap, &port->output->dev,
> -				  &dvbdev_ci, (void *) port->output,
> -				  DVB_DEVICE_SEC);
> -	return ret;
> -}
> -
> -static int ddb_port_attach(struct ddb_port *port)
> -{
> -	int ret = 0;
> -
> -	switch (port->class) {
> -	case DDB_PORT_TUNER:
> -		ret = dvb_input_attach(port->input[0]);
> -		if (ret < 0)
> -			break;
> -		ret = dvb_input_attach(port->input[1]);
> -		break;
> -	case DDB_PORT_CI:
> -		ret = ddb_ci_attach(port);
> -		break;
> -	default:
> -		break;
> -	}
> -	if (ret < 0)
> -		printk(KERN_ERR "port_attach on port %d failed\n", port->nr);
> -	return ret;
> -}
> -
> -static int ddb_ports_attach(struct ddb *dev)
> -{
> -	int i, ret = 0;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		ret = ddb_port_attach(port);
> -		if (ret < 0)
> -			break;
> -	}
> -	return ret;
> -}
> -
> -static void ddb_ports_detach(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		switch (port->class) {
> -		case DDB_PORT_TUNER:
> -			dvb_input_detach(port->input[0]);
> -			dvb_input_detach(port->input[1]);
> -			break;
> -		case DDB_PORT_CI:
> -			if (port->output->dev)
> -				dvb_unregister_device(port->output->dev);
> -			if (port->en) {
> -				ddb_input_stop(port->input[0]);
> -				ddb_output_stop(port->output);
> -				dvb_ca_en50221_release(port->en);
> -				kfree(port->en);
> -				port->en = 0;
> -				dvb_unregister_adapter(&port->output->adap);
> -			}
> -			break;
> -		}
> -	}
> -}
> -
> -/****************************************************************************/
> -/****************************************************************************/
> -
> -static int port_has_ci(struct ddb_port *port)
> -{
> -	u8 val;
> -	return i2c_read_reg(&port->i2c->adap, 0x40, 0, &val) ? 0 : 1;
> -}
> -
> -static int port_has_stv0900(struct ddb_port *port)
> -{
> -	u8 val;
> -	if (i2c_read_reg16(&port->i2c->adap, 0x69, 0xf100, &val) < 0)
> -		return 0;
> -	return 1;
> -}
> -
> -static int port_has_stv0900_aa(struct ddb_port *port)
> -{
> -	u8 val;
> -	if (i2c_read_reg16(&port->i2c->adap, 0x68, 0xf100, &val) < 0)
> -		return 0;
> -	return 1;
> -}
> -
> -static int port_has_drxks(struct ddb_port *port)
> -{
> -	u8 val;
> -	if (i2c_read(&port->i2c->adap, 0x29, &val) < 0)
> -		return 0;
> -	if (i2c_read(&port->i2c->adap, 0x2a, &val) < 0)
> -		return 0;
> -	return 1;
> -}
> -
> -static int port_has_cxd28xx(struct ddb_port *port, u8 *id)
> -{
> -	int status;
> -
> -	status = i2c_write_reg(&port->i2c->adap, 0x6e, 0, 0);
> -	if (status)
> -		return 0;
> -	status = i2c_read_reg(&port->i2c->adap, 0x6e, 0xfd, id);
> -	if (status)
> -		return 0;
> -	return 1;
> -}
> -
> -static void ddb_port_probe(struct ddb_port *port)
> -{
> -	struct ddb *dev = port->dev;
> -	char *modname = "NO MODULE";
> -	u8 id;
> -
> -	port->class = DDB_PORT_NONE;
> -
> -	if (port_has_ci(port)) {
> -		modname = "CI";
> -		port->class = DDB_PORT_CI;
> -		ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
> -	} else if (port_has_stv0900(port)) {
> -		modname = "DUAL DVB-S2";
> -		port->class = DDB_PORT_TUNER;
> -		port->type = DDB_TUNER_DVBS_ST;
> -		ddbwritel(I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
> -	} else if (port_has_stv0900_aa(port)) {
> -		modname = "DUAL DVB-S2";
> -		port->class = DDB_PORT_TUNER;
> -		port->type = DDB_TUNER_DVBS_ST_AA;
> -		ddbwritel(I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
> -	} else if (port_has_drxks(port)) {
> -		modname = "DUAL DVB-C/T";
> -		port->class = DDB_PORT_TUNER;
> -		port->type = DDB_TUNER_DVBCT_TR;
> -		ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
> -	} else if (port_has_cxd28xx(port, &id)) {
> -		switch (id) {
> -		case 0xa4:
> -			modname = "DUAL DVB-C2T2 CXD2843";
> -			port->type = DDB_TUNER_DVBC2T2_SONY;
> -			break;
> -		case 0xb1:
> -			modname = "DUAL DVB-CT2 CXD2837";
> -			port->type = DDB_TUNER_DVBCT2_SONY;
> -			break;
> -		case 0xb0:
> -			modname = "DUAL ISDB-T CXD2838";
> -			port->type = DDB_TUNER_ISDBT_SONY;
> -			break;
> -		default:
> -			return;
> -		}
> -		port->class = DDB_PORT_TUNER;
> -		ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
> -	}
> -	printk(KERN_INFO "Port %d (TAB %d): %s\n",
> -			 port->nr, port->nr+1, modname);
> -}
> -
> -static void ddb_input_init(struct ddb_port *port, int nr)
> -{
> -	struct ddb *dev = port->dev;
> -	struct ddb_input *input = &dev->input[nr];
> -
> -	input->nr = nr;
> -	input->port = port;
> -	input->dma_buf_num = INPUT_DMA_BUFS;
> -	input->dma_buf_size = INPUT_DMA_SIZE;
> -	ddbwritel(0, TS_INPUT_CONTROL(nr));
> -	ddbwritel(2, TS_INPUT_CONTROL(nr));
> -	ddbwritel(0, TS_INPUT_CONTROL(nr));
> -	ddbwritel(0, DMA_BUFFER_ACK(nr));
> -	tasklet_init(&input->tasklet, input_tasklet, (unsigned long) input);
> -	spin_lock_init(&input->lock);
> -	init_waitqueue_head(&input->wq);
> -}
> -
> -static void ddb_output_init(struct ddb_port *port, int nr)
> -{
> -	struct ddb *dev = port->dev;
> -	struct ddb_output *output = &dev->output[nr];
> -	output->nr = nr;
> -	output->port = port;
> -	output->dma_buf_num = OUTPUT_DMA_BUFS;
> -	output->dma_buf_size = OUTPUT_DMA_SIZE;
> -
> -	ddbwritel(0, TS_OUTPUT_CONTROL(nr));
> -	ddbwritel(2, TS_OUTPUT_CONTROL(nr));
> -	ddbwritel(0, TS_OUTPUT_CONTROL(nr));
> -	tasklet_init(&output->tasklet, output_tasklet, (unsigned long) output);
> -	init_waitqueue_head(&output->wq);
> -}
> -
> -static void ddb_ports_init(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		port->dev = dev;
> -		port->nr = i;
> -		port->i2c = &dev->i2c[i];
> -		port->input[0] = &dev->input[2 * i];
> -		port->input[1] = &dev->input[2 * i + 1];
> -		port->output = &dev->output[i];
> -
> -		mutex_init(&port->i2c_gate_lock);
> -		ddb_port_probe(port);
> -		ddb_input_init(port, 2 * i);
> -		ddb_input_init(port, 2 * i + 1);
> -		ddb_output_init(port, i);
> -	}
> -}
> -
> -static void ddb_ports_release(struct ddb *dev)
> -{
> -	int i;
> -	struct ddb_port *port;
> -
> -	for (i = 0; i < dev->info->port_num; i++) {
> -		port = &dev->port[i];
> -		port->dev = dev;
> -		tasklet_kill(&port->input[0]->tasklet);
> -		tasklet_kill(&port->input[1]->tasklet);
> -		tasklet_kill(&port->output->tasklet);
> -	}
> -}
> -
> -/****************************************************************************/
> -/****************************************************************************/
> -/****************************************************************************/
> -
> -static void irq_handle_i2c(struct ddb *dev, int n)
> -{
> -	struct ddb_i2c *i2c = &dev->i2c[n];
> -
> -	i2c->done = 1;
> -	wake_up(&i2c->wq);
> -}
> -
> -static irqreturn_t irq_handler(int irq, void *dev_id)
> -{
> -	struct ddb *dev = (struct ddb *) dev_id;
> -	u32 s = ddbreadl(INTERRUPT_STATUS);
> -
> -	if (!s)
> -		return IRQ_NONE;
> -
> -	do {
> -		ddbwritel(s, INTERRUPT_ACK);
> -
> -		if (s & 0x00000001)
> -			irq_handle_i2c(dev, 0);
> -		if (s & 0x00000002)
> -			irq_handle_i2c(dev, 1);
> -		if (s & 0x00000004)
> -			irq_handle_i2c(dev, 2);
> -		if (s & 0x00000008)
> -			irq_handle_i2c(dev, 3);
> -
> -		if (s & 0x00000100)
> -			tasklet_schedule(&dev->input[0].tasklet);
> -		if (s & 0x00000200)
> -			tasklet_schedule(&dev->input[1].tasklet);
> -		if (s & 0x00000400)
> -			tasklet_schedule(&dev->input[2].tasklet);
> -		if (s & 0x00000800)
> -			tasklet_schedule(&dev->input[3].tasklet);
> -		if (s & 0x00001000)
> -			tasklet_schedule(&dev->input[4].tasklet);
> -		if (s & 0x00002000)
> -			tasklet_schedule(&dev->input[5].tasklet);
> -		if (s & 0x00004000)
> -			tasklet_schedule(&dev->input[6].tasklet);
> -		if (s & 0x00008000)
> -			tasklet_schedule(&dev->input[7].tasklet);
> -
> -		if (s & 0x00010000)
> -			tasklet_schedule(&dev->output[0].tasklet);
> -		if (s & 0x00020000)
> -			tasklet_schedule(&dev->output[1].tasklet);
> -		if (s & 0x00040000)
> -			tasklet_schedule(&dev->output[2].tasklet);
> -		if (s & 0x00080000)
> -			tasklet_schedule(&dev->output[3].tasklet);
> -
> -		/* if (s & 0x000f0000)	printk(KERN_DEBUG "%08x\n", istat); */
> -	} while ((s = ddbreadl(INTERRUPT_STATUS)));
> -
> -	return IRQ_HANDLED;
> -}
> -
> -/******************************************************************************/
> -/******************************************************************************/
> -/******************************************************************************/
> -
> -static int flashio(struct ddb *dev, u8 *wbuf, u32 wlen, u8 *rbuf, u32 rlen)
> -{
> -	u32 data, shift;
> -
> -	if (wlen > 4)
> -		ddbwritel(1, SPI_CONTROL);
> -	while (wlen > 4) {
> -		/* FIXME: check for big-endian */
> -		data = swab32(*(u32 *)wbuf);
> -		wbuf += 4;
> -		wlen -= 4;
> -		ddbwritel(data, SPI_DATA);
> -		while (ddbreadl(SPI_CONTROL) & 0x0004)
> -			;
> -	}
> -
> -	if (rlen)
> -		ddbwritel(0x0001 | ((wlen << (8 + 3)) & 0x1f00), SPI_CONTROL);
> -	else
> -		ddbwritel(0x0003 | ((wlen << (8 + 3)) & 0x1f00), SPI_CONTROL);
> -
> -	data = 0;
> -	shift = ((4 - wlen) * 8);
> -	while (wlen) {
> -		data <<= 8;
> -		data |= *wbuf;
> -		wlen--;
> -		wbuf++;
> -	}
> -	if (shift)
> -		data <<= shift;
> -	ddbwritel(data, SPI_DATA);
> -	while (ddbreadl(SPI_CONTROL) & 0x0004)
> -		;
> -
> -	if (!rlen) {
> -		ddbwritel(0, SPI_CONTROL);
> -		return 0;
> -	}
> -	if (rlen > 4)
> -		ddbwritel(1, SPI_CONTROL);
> -
> -	while (rlen > 4) {
> -		ddbwritel(0xffffffff, SPI_DATA);
> -		while (ddbreadl(SPI_CONTROL) & 0x0004)
> -			;
> -		data = ddbreadl(SPI_DATA);
> -		*(u32 *) rbuf = swab32(data);
> -		rbuf += 4;
> -		rlen -= 4;
> -	}
> -	ddbwritel(0x0003 | ((rlen << (8 + 3)) & 0x1F00), SPI_CONTROL);
> -	ddbwritel(0xffffffff, SPI_DATA);
> -	while (ddbreadl(SPI_CONTROL) & 0x0004)
> -		;
> -
> -	data = ddbreadl(SPI_DATA);
> -	ddbwritel(0, SPI_CONTROL);
> -
> -	if (rlen < 4)
> -		data <<= ((4 - rlen) * 8);
> -
> -	while (rlen > 0) {
> -		*rbuf = ((data >> 24) & 0xff);
> -		data <<= 8;
> -		rbuf++;
> -		rlen--;
> -	}
> -	return 0;
> -}
> -
> -#define DDB_MAGIC 'd'
> -
> -struct ddb_flashio {
> -	__u8 *write_buf;
> -	__u32 write_len;
> -	__u8 *read_buf;
> -	__u32 read_len;
> -};
> -
> -#define IOCTL_DDB_FLASHIO  _IOWR(DDB_MAGIC, 0x00, struct ddb_flashio)
> -
> -#define DDB_NAME "ddbridge"
> -
> -static u32 ddb_num;
> -static struct ddb *ddbs[32];
> -static struct class *ddb_class;
> -static int ddb_major;
> -
> -static int ddb_open(struct inode *inode, struct file *file)
> -{
> -	struct ddb *dev = ddbs[iminor(inode)];
> -
> -	file->private_data = dev;
> -	return 0;
> -}
> -
> -static long ddb_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
> -{
> -	struct ddb *dev = file->private_data;
> -	void *parg = (void *)arg;
> -	int res;
> -
> -	switch (cmd) {
> -	case IOCTL_DDB_FLASHIO:
> -	{
> -		struct ddb_flashio fio;
> -		u8 *rbuf, *wbuf;
> -
> -		if (copy_from_user(&fio, parg, sizeof(fio)))
> -			return -EFAULT;
> -
> -		if (fio.write_len > 1028 || fio.read_len > 1028)
> -			return -EINVAL;
> -		if (fio.write_len + fio.read_len > 1028)
> -			return -EINVAL;
> -
> -		wbuf = &dev->iobuf[0];
> -		rbuf = wbuf + fio.write_len;
> -
> -		if (copy_from_user(wbuf, fio.write_buf, fio.write_len))
> -			return -EFAULT;
> -		res = flashio(dev, wbuf, fio.write_len, rbuf, fio.read_len);
> -		if (res)
> -			return res;
> -		if (copy_to_user(fio.read_buf, rbuf, fio.read_len))
> -			return -EFAULT;
> -		break;
> -	}
> -	default:
> -		return -ENOTTY;
> -	}
> -	return 0;
> -}
> -
> -static const struct file_operations ddb_fops = {
> -	.unlocked_ioctl = ddb_ioctl,
> -	.open           = ddb_open,
> -};
> -
> -static char *ddb_devnode(struct device *device, umode_t *mode)
> -{
> -	struct ddb *dev = dev_get_drvdata(device);
> -
> -	return kasprintf(GFP_KERNEL, "ddbridge/card%d", dev->nr);
> -}
> -
> -static int ddb_class_create(void)
> -{
> -	ddb_major = register_chrdev(0, DDB_NAME, &ddb_fops);
> -	if (ddb_major < 0)
> -		return ddb_major;
> -
> -	ddb_class = class_create(THIS_MODULE, DDB_NAME);
> -	if (IS_ERR(ddb_class)) {
> -		unregister_chrdev(ddb_major, DDB_NAME);
> -		return PTR_ERR(ddb_class);
> -	}
> -	ddb_class->devnode = ddb_devnode;
> -	return 0;
> -}
> -
> -static void ddb_class_destroy(void)
> -{
> -	class_destroy(ddb_class);
> -	unregister_chrdev(ddb_major, DDB_NAME);
> -}
> -
> -static int ddb_device_create(struct ddb *dev)
> -{
> -	dev->nr = ddb_num++;
> -	dev->ddb_dev = device_create(ddb_class, NULL,
> -				     MKDEV(ddb_major, dev->nr),
> -				     dev, "ddbridge%d", dev->nr);
> -	ddbs[dev->nr] = dev;
> -	if (IS_ERR(dev->ddb_dev))
> -		return -1;
> -	return 0;
> -}
> -
> -static void ddb_device_destroy(struct ddb *dev)
> -{
> -	ddb_num--;
> -	if (IS_ERR(dev->ddb_dev))
> -		return;
> -	device_destroy(ddb_class, MKDEV(ddb_major, 0));
> -}
> -
> -
> -/****************************************************************************/
> -/****************************************************************************/
> -/****************************************************************************/
> -
> -static void ddb_unmap(struct ddb *dev)
> -{
> -	if (dev->regs)
> -		iounmap(dev->regs);
> -	vfree(dev);
> -}
> -
> -
> -static void ddb_remove(struct pci_dev *pdev)
> -{
> -	struct ddb *dev = pci_get_drvdata(pdev);
> -
> -	ddb_ports_detach(dev);
> -	ddb_i2c_release(dev);
> -
> -	ddbwritel(0, INTERRUPT_ENABLE);
> -	free_irq(dev->pdev->irq, dev);
> -#ifdef CONFIG_PCI_MSI
> -	if (dev->msi)
> -		pci_disable_msi(dev->pdev);
> -#endif
> -	ddb_ports_release(dev);
> -	ddb_buffers_free(dev);
> -	ddb_device_destroy(dev);
> -
> -	ddb_unmap(dev);
> -	pci_set_drvdata(pdev, 0);
> -	pci_disable_device(pdev);
> -}
> -
> -
> -static int ddb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> -{
> -	struct ddb *dev;
> -	int stat = 0;
> -	int irq_flag = IRQF_SHARED;
> -
> -	if (pci_enable_device(pdev) < 0)
> -		return -ENODEV;
> -
> -	dev = vmalloc(sizeof(struct ddb));
> -	if (dev == NULL)
> -		return -ENOMEM;
> -	memset(dev, 0, sizeof(struct ddb));
> -
> -	dev->pdev = pdev;
> -	pci_set_drvdata(pdev, dev);
> -	dev->info = (struct ddb_info *) id->driver_data;
> -	printk(KERN_INFO "DDBridge driver detected: %s\n", dev->info->name);
> -
> -	dev->regs = ioremap(pci_resource_start(dev->pdev, 0),
> -			    pci_resource_len(dev->pdev, 0));
> -	if (!dev->regs) {
> -		stat = -ENOMEM;
> -		goto fail;
> -	}
> -	printk(KERN_INFO "HW %08x FW %08x\n", ddbreadl(0), ddbreadl(4));
> -
> -#ifdef CONFIG_PCI_MSI
> -	if (pci_msi_enabled())
> -		stat = pci_enable_msi(dev->pdev);
> -	if (stat) {
> -		printk(KERN_INFO ": MSI not available.\n");
> -	} else {
> -		irq_flag = 0;
> -		dev->msi = 1;
> -	}
> -#endif
> -	stat = request_irq(dev->pdev->irq, irq_handler,
> -			   irq_flag, "DDBridge", (void *) dev);
> -	if (stat < 0)
> -		goto fail1;
> -	ddbwritel(0, DMA_BASE_WRITE);
> -	ddbwritel(0, DMA_BASE_READ);
> -	ddbwritel(0xffffffff, INTERRUPT_ACK);
> -	ddbwritel(0xfff0f, INTERRUPT_ENABLE);
> -	ddbwritel(0, MSI1_ENABLE);
> -
> -	if (ddb_i2c_init(dev) < 0)
> -		goto fail1;
> -	ddb_ports_init(dev);
> -	if (ddb_buffers_alloc(dev) < 0) {
> -		printk(KERN_INFO ": Could not allocate buffer memory\n");
> -		goto fail2;
> -	}
> -	if (ddb_ports_attach(dev) < 0)
> -		goto fail3;
> -	ddb_device_create(dev);
> -	return 0;
> -
> -fail3:
> -	ddb_ports_detach(dev);
> -	printk(KERN_ERR "fail3\n");
> -	ddb_ports_release(dev);
> -fail2:
> -	printk(KERN_ERR "fail2\n");
> -	ddb_buffers_free(dev);
> -fail1:
> -	printk(KERN_ERR "fail1\n");
> -	if (dev->msi)
> -		pci_disable_msi(dev->pdev);
> -	free_irq(dev->pdev->irq, dev);
> -fail:
> -	printk(KERN_ERR "fail\n");
> -	ddb_unmap(dev);
> -	pci_set_drvdata(pdev, 0);
> -	pci_disable_device(pdev);
> -	return -1;
> -}
> -
> -/******************************************************************************/
> -/******************************************************************************/
> -/******************************************************************************/
> -
> -static struct ddb_info ddb_none = {
> -	.type     = DDB_NONE,
> -	.name     = "Digital Devices PCIe bridge",
> -};
> -
> -static struct ddb_info ddb_octopus = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Octopus DVB adapter",
> -	.port_num = 4,
> -};
> -
> -static struct ddb_info ddb_octopus_le = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Octopus LE DVB adapter",
> -	.port_num = 2,
> -};
> -
> -static struct ddb_info ddb_octopus_mini = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Octopus Mini",
> -	.port_num = 4,
> -};
> -
> -static struct ddb_info ddb_v6 = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Cine S2 V6 DVB adapter",
> -	.port_num = 3,
> -};
> -static struct ddb_info ddb_v6_5 = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Cine S2 V6.5 DVB adapter",
> -	.port_num = 4,
> -};
> -
> -static struct ddb_info ddb_dvbct = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices DVBCT V6.1 DVB adapter",
> -	.port_num = 3,
> -};
> -
> -static struct ddb_info ddb_satixS2v3 = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Mystique SaTiX-S2 V3 DVB adapter",
> -	.port_num = 3,
> -};
> -
> -static struct ddb_info ddb_octopusv3 = {
> -	.type     = DDB_OCTOPUS,
> -	.name     = "Digital Devices Octopus V3 DVB adapter",
> -	.port_num = 4,
> -};
> -
> -#define DDVID 0xdd01 /* Digital Devices Vendor ID */
> -
> -#define DDB_ID(_vend, _dev, _subvend, _subdev, _driverdata) {	\
> -	.vendor      = _vend,    .device    = _dev, \
> -	.subvendor   = _subvend, .subdevice = _subdev, \
> -	.driver_data = (unsigned long)&_driverdata }
> -
> -static const struct pci_device_id ddb_id_tbl[] = {
> -	DDB_ID(DDVID, 0x0002, DDVID, 0x0001, ddb_octopus),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0001, ddb_octopus),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0002, ddb_octopus_le),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0010, ddb_octopus_mini),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0020, ddb_v6),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0021, ddb_v6_5),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0x0030, ddb_dvbct),
> -	DDB_ID(DDVID, 0x0003, DDVID, 0xdb03, ddb_satixS2v3),
> -	DDB_ID(DDVID, 0x0005, DDVID, 0x0004, ddb_octopusv3),
> -	/* in case sub-ids got deleted in flash */
> -	DDB_ID(DDVID, 0x0003, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
> -	{0}
> -};
> -MODULE_DEVICE_TABLE(pci, ddb_id_tbl);
> -
> -
> -static struct pci_driver ddb_pci_driver = {
> -	.name        = "DDBridge",
> -	.id_table    = ddb_id_tbl,
> -	.probe       = ddb_probe,
> -	.remove      = ddb_remove,
> -};
> -
> -static __init int module_init_ddbridge(void)
> -{
> -	int ret;
> -
> -	printk(KERN_INFO "Digital Devices PCIE bridge driver, "
> -	       "Copyright (C) 2010-11 Digital Devices GmbH\n");
> -
> -	ret = ddb_class_create();
> -	if (ret < 0)
> -		return ret;
> -	ret = pci_register_driver(&ddb_pci_driver);
> -	if (ret < 0)
> -		ddb_class_destroy();
> -	return ret;
> -}
> -
> -static __exit void module_exit_ddbridge(void)
> -{
> -	pci_unregister_driver(&ddb_pci_driver);
> -	ddb_class_destroy();
> -}
> -
> -module_init(module_init_ddbridge);
> -module_exit(module_exit_ddbridge);
> -
> -MODULE_DESCRIPTION("Digital Devices PCIe Bridge");
> -MODULE_AUTHOR("Ralph Metzler");
> -MODULE_LICENSE("GPL");
> -MODULE_VERSION("0.5");
> diff --git a/drivers/media/pci/ddbridge/ddbridge-regs.h b/drivers/media/pci/ddbridge/ddbridge-regs.h
> deleted file mode 100644
> index a3ccb31..0000000
> --- a/drivers/media/pci/ddbridge/ddbridge-regs.h
> +++ /dev/null
> @@ -1,151 +0,0 @@
> -/*
> - * ddbridge-regs.h: Digital Devices PCIe bridge driver
> - *
> - * Copyright (C) 2010-2011 Digital Devices GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * version 2 only, as published by the Free Software Foundation.
> - *
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> - * 02110-1301, USA
> - * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
> - */
> -
> -/* DD-DVBBridgeV1.h 273 2010-09-17 05:03:16Z manfred */
> -
> -/* Register Definitions */
> -
> -#define CUR_REGISTERMAP_VERSION 0x10000
> -
> -#define HARDWARE_VERSION       0x00
> -#define REGISTERMAP_VERSION    0x04
> -
> -/* ------------------------------------------------------------------------- */
> -/* SPI Controller */
> -
> -#define SPI_CONTROL     0x10
> -#define SPI_DATA        0x14
> -
> -/* ------------------------------------------------------------------------- */
> -
> -/* Interrupt controller                                     */
> -/* How many MSI's are available depends on HW (Min 2 max 8) */
> -/* How many are usable also depends on Host platform        */
> -
> -#define INTERRUPT_BASE   (0x40)
> -
> -#define INTERRUPT_ENABLE (INTERRUPT_BASE + 0x00)
> -#define MSI0_ENABLE      (INTERRUPT_BASE + 0x00)
> -#define MSI1_ENABLE      (INTERRUPT_BASE + 0x04)
> -#define MSI2_ENABLE      (INTERRUPT_BASE + 0x08)
> -#define MSI3_ENABLE      (INTERRUPT_BASE + 0x0C)
> -#define MSI4_ENABLE      (INTERRUPT_BASE + 0x10)
> -#define MSI5_ENABLE      (INTERRUPT_BASE + 0x14)
> -#define MSI6_ENABLE      (INTERRUPT_BASE + 0x18)
> -#define MSI7_ENABLE      (INTERRUPT_BASE + 0x1C)
> -
> -#define INTERRUPT_STATUS (INTERRUPT_BASE + 0x20)
> -#define INTERRUPT_ACK    (INTERRUPT_BASE + 0x20)
> -
> -#define INTMASK_I2C1        (0x00000001)
> -#define INTMASK_I2C2        (0x00000002)
> -#define INTMASK_I2C3        (0x00000004)
> -#define INTMASK_I2C4        (0x00000008)
> -
> -#define INTMASK_CIRQ1       (0x00000010)
> -#define INTMASK_CIRQ2       (0x00000020)
> -#define INTMASK_CIRQ3       (0x00000040)
> -#define INTMASK_CIRQ4       (0x00000080)
> -
> -#define INTMASK_TSINPUT1    (0x00000100)
> -#define INTMASK_TSINPUT2    (0x00000200)
> -#define INTMASK_TSINPUT3    (0x00000400)
> -#define INTMASK_TSINPUT4    (0x00000800)
> -#define INTMASK_TSINPUT5    (0x00001000)
> -#define INTMASK_TSINPUT6    (0x00002000)
> -#define INTMASK_TSINPUT7    (0x00004000)
> -#define INTMASK_TSINPUT8    (0x00008000)
> -
> -#define INTMASK_TSOUTPUT1   (0x00010000)
> -#define INTMASK_TSOUTPUT2   (0x00020000)
> -#define INTMASK_TSOUTPUT3   (0x00040000)
> -#define INTMASK_TSOUTPUT4   (0x00080000)
> -
> -/* ------------------------------------------------------------------------- */
> -/* I2C Master Controller */
> -
> -#define I2C_BASE        (0x80)  /* Byte offset */
> -
> -#define I2C_COMMAND     (0x00)
> -#define I2C_TIMING      (0x04)
> -#define I2C_TASKLENGTH  (0x08)     /* High read, low write */
> -#define I2C_TASKADDRESS (0x0C)     /* High read, low write */
> -
> -#define I2C_MONITOR     (0x1C)
> -
> -#define I2C_BASE_1      (I2C_BASE + 0x00)
> -#define I2C_BASE_2      (I2C_BASE + 0x20)
> -#define I2C_BASE_3      (I2C_BASE + 0x40)
> -#define I2C_BASE_4      (I2C_BASE + 0x60)
> -
> -#define I2C_BASE_N(i)   (I2C_BASE + (i) * 0x20)
> -
> -#define I2C_TASKMEM_BASE    (0x1000)    /* Byte offset */
> -#define I2C_TASKMEM_SIZE    (0x1000)
> -
> -#define I2C_SPEED_400   (0x04030404)
> -#define I2C_SPEED_200   (0x09080909)
> -#define I2C_SPEED_154   (0x0C0B0C0C)
> -#define I2C_SPEED_100   (0x13121313)
> -#define I2C_SPEED_77    (0x19181919)
> -#define I2C_SPEED_50    (0x27262727)
> -
> -
> -/* ------------------------------------------------------------------------- */
> -/* DMA  Controller */
> -
> -#define DMA_BASE_WRITE        (0x100)
> -#define DMA_BASE_READ         (0x140)
> -
> -#define DMA_CONTROL     (0x00)                  /* 64 */
> -#define DMA_ERROR       (0x04)                  /* 65 ( only read instance ) */
> -
> -#define DMA_DIAG_CONTROL                (0x1C)  /* 71 */
> -#define DMA_DIAG_PACKETCOUNTER_LOW      (0x20)  /* 72 */
> -#define DMA_DIAG_PACKETCOUNTER_HIGH     (0x24)  /* 73 */
> -#define DMA_DIAG_TIMECOUNTER_LOW        (0x28)  /* 74 */
> -#define DMA_DIAG_TIMECOUNTER_HIGH       (0x2C)  /* 75 */
> -#define DMA_DIAG_RECHECKCOUNTER         (0x30)  /* 76  ( Split completions on read ) */
> -#define DMA_DIAG_WAITTIMEOUTINIT        (0x34)  /* 77 */
> -#define DMA_DIAG_WAITOVERFLOWCOUNTER    (0x38)  /* 78 */
> -#define DMA_DIAG_WAITCOUNTER            (0x3C)  /* 79 */
> -
> -/* ------------------------------------------------------------------------- */
> -/* DMA  Buffer */
> -
> -#define TS_INPUT_BASE       (0x200)
> -#define TS_INPUT_CONTROL(i)         (TS_INPUT_BASE + (i) * 16 + 0x00)
> -
> -#define TS_OUTPUT_BASE       (0x280)
> -#define TS_OUTPUT_CONTROL(i)         (TS_OUTPUT_BASE + (i) * 16 + 0x00)
> -
> -#define DMA_BUFFER_BASE     (0x300)
> -
> -#define DMA_BUFFER_CONTROL(i)       (DMA_BUFFER_BASE + (i) * 16 + 0x00)
> -#define DMA_BUFFER_ACK(i)           (DMA_BUFFER_BASE + (i) * 16 + 0x04)
> -#define DMA_BUFFER_CURRENT(i)       (DMA_BUFFER_BASE + (i) * 16 + 0x08)
> -#define DMA_BUFFER_SIZE(i)          (DMA_BUFFER_BASE + (i) * 16 + 0x0c)
> -
> -#define DMA_BASE_ADDRESS_TABLE  (0x2000)
> -#define DMA_BASE_ADDRESS_TABLE_ENTRIES (512)
> -
> diff --git a/drivers/media/pci/ddbridge/ddbridge.h b/drivers/media/pci/ddbridge/ddbridge.h
> deleted file mode 100644
> index 04c56c2..0000000
> --- a/drivers/media/pci/ddbridge/ddbridge.h
> +++ /dev/null
> @@ -1,188 +0,0 @@
> -/*
> - * ddbridge.h: Digital Devices PCIe bridge driver
> - *
> - * Copyright (C) 2010-2011 Digital Devices GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * version 2 only, as published by the Free Software Foundation.
> - *
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> - * 02110-1301, USA
> - * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
> - */
> -
> -#ifndef _DDBRIDGE_H_
> -#define _DDBRIDGE_H_
> -
> -#include <linux/types.h>
> -#include <linux/sched.h>
> -#include <linux/interrupt.h>
> -#include <linux/i2c.h>
> -#include <linux/mutex.h>
> -#include <asm/dma.h>
> -#include <linux/dvb/frontend.h>
> -#include <linux/dvb/ca.h>
> -#include <linux/socket.h>
> -
> -#include "dmxdev.h"
> -#include "dvbdev.h"
> -#include "dvb_demux.h"
> -#include "dvb_frontend.h"
> -#include "dvb_ringbuffer.h"
> -#include "dvb_ca_en50221.h"
> -#include "dvb_net.h"
> -#include "cxd2099.h"
> -
> -#define DDB_MAX_I2C     4
> -#define DDB_MAX_PORT    4
> -#define DDB_MAX_INPUT   8
> -#define DDB_MAX_OUTPUT  4
> -
> -struct ddb_info {
> -	int   type;
> -#define DDB_NONE         0
> -#define DDB_OCTOPUS      1
> -	char *name;
> -	int   port_num;
> -	u32   port_type[DDB_MAX_PORT];
> -};
> -
> -/* DMA_SIZE MUST be divisible by 188 and 128 !!! */
> -
> -#define INPUT_DMA_MAX_BUFS 32      /* hardware table limit */
> -#define INPUT_DMA_BUFS 8
> -#define INPUT_DMA_SIZE (128*47*21)
> -
> -#define OUTPUT_DMA_MAX_BUFS 32
> -#define OUTPUT_DMA_BUFS 8
> -#define OUTPUT_DMA_SIZE (128*47*21)
> -
> -struct ddb;
> -struct ddb_port;
> -
> -struct ddb_input {
> -	struct ddb_port       *port;
> -	u32                    nr;
> -	int                    attached;
> -
> -	dma_addr_t             pbuf[INPUT_DMA_MAX_BUFS];
> -	u8                    *vbuf[INPUT_DMA_MAX_BUFS];
> -	u32                    dma_buf_num;
> -	u32                    dma_buf_size;
> -
> -	struct tasklet_struct  tasklet;
> -	spinlock_t             lock;
> -	wait_queue_head_t      wq;
> -	int                    running;
> -	u32                    stat;
> -	u32                    cbuf;
> -	u32                    coff;
> -
> -	struct dvb_adapter     adap;
> -	struct dvb_device     *dev;
> -	struct dvb_frontend   *fe;
> -	struct dvb_frontend   *fe2;
> -	struct dmxdev          dmxdev;
> -	struct dvb_demux       demux;
> -	struct dvb_net         dvbnet;
> -	struct dmx_frontend    hw_frontend;
> -	struct dmx_frontend    mem_frontend;
> -	int                    users;
> -	int (*gate_ctrl)(struct dvb_frontend *, int);
> -};
> -
> -struct ddb_output {
> -	struct ddb_port       *port;
> -	u32                    nr;
> -	dma_addr_t             pbuf[OUTPUT_DMA_MAX_BUFS];
> -	u8                    *vbuf[OUTPUT_DMA_MAX_BUFS];
> -	u32                    dma_buf_num;
> -	u32                    dma_buf_size;
> -	struct tasklet_struct  tasklet;
> -	spinlock_t             lock;
> -	wait_queue_head_t      wq;
> -	int                    running;
> -	u32                    stat;
> -	u32                    cbuf;
> -	u32                    coff;
> -
> -	struct dvb_adapter     adap;
> -	struct dvb_device     *dev;
> -};
> -
> -struct ddb_i2c {
> -	struct ddb            *dev;
> -	u32                    nr;
> -	struct i2c_adapter     adap;
> -	struct i2c_adapter     adap2;
> -	u32                    regs;
> -	u32                    rbuf;
> -	u32                    wbuf;
> -	int                    done;
> -	wait_queue_head_t      wq;
> -};
> -
> -struct ddb_port {
> -	struct ddb            *dev;
> -	u32                    nr;
> -	struct ddb_i2c        *i2c;
> -	struct mutex           i2c_gate_lock;
> -	u32                    class;
> -#define DDB_PORT_NONE           0
> -#define DDB_PORT_CI             1
> -#define DDB_PORT_TUNER          2
> -	u32                    type;
> -#define DDB_TUNER_NONE          0
> -#define DDB_TUNER_DVBS_ST       1
> -#define DDB_TUNER_DVBS_ST_AA    2
> -#define DDB_TUNER_DVBCT_TR     16
> -#define DDB_TUNER_DVBCT_ST     17
> -#define DDB_TUNER_DVBCT2_SONY  18
> -#define DDB_TUNER_ISDBT_SONY   19
> -#define DDB_TUNER_DVBC2T2_SONY 20
> -	u32                    adr;
> -
> -	struct ddb_input      *input[2];
> -	struct ddb_output     *output;
> -	struct dvb_ca_en50221 *en;
> -};
> -
> -struct ddb {
> -	struct pci_dev        *pdev;
> -	unsigned char         *regs;
> -	struct ddb_port        port[DDB_MAX_PORT];
> -	struct ddb_i2c         i2c[DDB_MAX_I2C];
> -	struct ddb_input       input[DDB_MAX_INPUT];
> -	struct ddb_output      output[DDB_MAX_OUTPUT];
> -
> -	struct device         *ddb_dev;
> -	int                    nr;
> -	u8                     iobuf[1028];
> -
> -	struct ddb_info       *info;
> -	int                    msi;
> -};
> -
> -/****************************************************************************/
> -
> -#define ddbwritel(_val, _adr)        writel((_val), \
> -				     (char *) (dev->regs+(_adr)))
> -#define ddbreadl(_adr)               readl((char *) (dev->regs+(_adr)))
> -#define ddbcpyto(_adr, _src, _count) memcpy_toio((char *)	\
> -				     (dev->regs+(_adr)), (_src), (_count))
> -#define ddbcpyfrom(_dst, _adr, _count) memcpy_fromio((_dst), (char *) \
> -				       (dev->regs+(_adr)), (_count))
> -
> -/****************************************************************************/
> -
> -#endif
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux