2 * ddbridge.c: Digital Devices PCIe bridge driver
4 * Copyright (C) 2010-2011 Digital Devices GmbH
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 only, as published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
24 #include <linux/module.h>
25 #include <linux/init.h>
26 #include <linux/interrupt.h>
27 #include <linux/delay.h>
28 #include <linux/slab.h>
29 #include <linux/poll.h>
31 #include <linux/pci.h>
32 #include <linux/pci_ids.h>
33 #include <linux/timer.h>
34 #include <linux/i2c.h>
35 #include <linux/swab.h>
36 #include <linux/vmalloc.h>
39 #include "ddbridge-regs.h"
41 #include "tda18271c2dd.h"
47 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
49 /* MSI had problems with lost interrupts, fixed but needs testing */
52 /******************************************************************************/
54 static int i2c_read(struct i2c_adapter
*adapter
, u8 adr
, u8
*val
)
56 struct i2c_msg msgs
[1] = {{.addr
= adr
, .flags
= I2C_M_RD
,
57 .buf
= val
, .len
= 1 } };
58 return (i2c_transfer(adapter
, msgs
, 1) == 1) ? 0 : -1;
61 static int i2c_read_reg(struct i2c_adapter
*adapter
, u8 adr
, u8 reg
, u8
*val
)
63 struct i2c_msg msgs
[2] = {{.addr
= adr
, .flags
= 0,
64 .buf
= ®
, .len
= 1 },
65 {.addr
= adr
, .flags
= I2C_M_RD
,
66 .buf
= val
, .len
= 1 } };
67 return (i2c_transfer(adapter
, msgs
, 2) == 2) ? 0 : -1;
70 static int i2c_read_reg16(struct i2c_adapter
*adapter
, u8 adr
,
73 u8 msg
[2] = {reg
>>8, reg
&0xff};
74 struct i2c_msg msgs
[2] = {{.addr
= adr
, .flags
= 0,
75 .buf
= msg
, .len
= 2},
76 {.addr
= adr
, .flags
= I2C_M_RD
,
77 .buf
= val
, .len
= 1} };
78 return (i2c_transfer(adapter
, msgs
, 2) == 2) ? 0 : -1;
81 static int ddb_i2c_cmd(struct ddb_i2c
*i2c
, u32 adr
, u32 cmd
)
83 struct ddb
*dev
= i2c
->dev
;
88 ddbwritel((adr
<< 9) | cmd
, i2c
->regs
+ I2C_COMMAND
);
89 stat
= wait_event_timeout(i2c
->wq
, i2c
->done
== 1, HZ
);
91 printk(KERN_ERR
"I2C timeout\n");
93 u32 istat
= ddbreadl(INTERRUPT_STATUS
);
94 printk(KERN_ERR
"IRS %08x\n", istat
);
95 ddbwritel(istat
, INTERRUPT_ACK
);
99 val
= ddbreadl(i2c
->regs
+I2C_COMMAND
);
105 static int ddb_i2c_master_xfer(struct i2c_adapter
*adapter
,
106 struct i2c_msg msg
[], int num
)
108 struct ddb_i2c
*i2c
= (struct ddb_i2c
*)i2c_get_adapdata(adapter
);
109 struct ddb
*dev
= i2c
->dev
;
115 if (num
== 2 && msg
[1].flags
& I2C_M_RD
&&
116 !(msg
[0].flags
& I2C_M_RD
)) {
117 memcpy_toio(dev
->regs
+ I2C_TASKMEM_BASE
+ i2c
->wbuf
,
118 msg
[0].buf
, msg
[0].len
);
119 ddbwritel(msg
[0].len
|(msg
[1].len
<< 16),
120 i2c
->regs
+I2C_TASKLENGTH
);
121 if (!ddb_i2c_cmd(i2c
, addr
, 1)) {
122 memcpy_fromio(msg
[1].buf
,
123 dev
->regs
+ I2C_TASKMEM_BASE
+ i2c
->rbuf
,
129 if (num
== 1 && !(msg
[0].flags
& I2C_M_RD
)) {
130 ddbcpyto(I2C_TASKMEM_BASE
+ i2c
->wbuf
, msg
[0].buf
, msg
[0].len
);
131 ddbwritel(msg
[0].len
, i2c
->regs
+ I2C_TASKLENGTH
);
132 if (!ddb_i2c_cmd(i2c
, addr
, 2))
135 if (num
== 1 && (msg
[0].flags
& I2C_M_RD
)) {
136 ddbwritel(msg
[0].len
<< 16, i2c
->regs
+ I2C_TASKLENGTH
);
137 if (!ddb_i2c_cmd(i2c
, addr
, 3)) {
138 ddbcpyfrom(msg
[0].buf
,
139 I2C_TASKMEM_BASE
+ i2c
->rbuf
, msg
[0].len
);
147 static u32
ddb_i2c_functionality(struct i2c_adapter
*adap
)
149 return I2C_FUNC_SMBUS_EMUL
;
152 static struct i2c_algorithm ddb_i2c_algo
= {
153 .master_xfer
= ddb_i2c_master_xfer
,
154 .functionality
= ddb_i2c_functionality
,
157 static void ddb_i2c_release(struct ddb
*dev
)
161 struct i2c_adapter
*adap
;
163 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
166 i2c_del_adapter(adap
);
170 static int ddb_i2c_init(struct ddb
*dev
)
174 struct i2c_adapter
*adap
;
176 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
180 i2c
->wbuf
= i
* (I2C_TASKMEM_SIZE
/ 4);
181 i2c
->rbuf
= i2c
->wbuf
+ (I2C_TASKMEM_SIZE
/ 8);
182 i2c
->regs
= 0x80 + i
* 0x20;
183 ddbwritel(I2C_SPEED_100
, i2c
->regs
+ I2C_TIMING
);
184 ddbwritel((i2c
->rbuf
<< 16) | i2c
->wbuf
,
185 i2c
->regs
+ I2C_TASKADDRESS
);
186 init_waitqueue_head(&i2c
->wq
);
189 i2c_set_adapdata(adap
, i2c
);
190 #ifdef I2C_ADAP_CLASS_TV_DIGITAL
191 adap
->class = I2C_ADAP_CLASS_TV_DIGITAL
|I2C_CLASS_TV_ANALOG
;
193 #ifdef I2C_CLASS_TV_ANALOG
194 adap
->class = I2C_CLASS_TV_ANALOG
;
197 strcpy(adap
->name
, "ddbridge");
198 adap
->algo
= &ddb_i2c_algo
;
199 adap
->algo_data
= (void *)i2c
;
200 adap
->dev
.parent
= &dev
->pdev
->dev
;
201 stat
= i2c_add_adapter(adap
);
206 for (j
= 0; j
< i
; j
++) {
209 i2c_del_adapter(adap
);
215 /******************************************************************************/
216 /******************************************************************************/
217 /******************************************************************************/
220 static void set_table(struct ddb
*dev
, u32 off
,
221 dma_addr_t
*pbuf
, u32 num
)
226 base
= DMA_BASE_ADDRESS_TABLE
+ off
;
227 for (i
= 0; i
< num
; i
++) {
229 ddbwritel(mem
& 0xffffffff, base
+ i
* 8);
230 ddbwritel(mem
>> 32, base
+ i
* 8 + 4);
235 static void ddb_address_table(struct ddb
*dev
)
241 for (i
= 0; i
< dev
->info
->port_num
* 2; i
++) {
242 base
= DMA_BASE_ADDRESS_TABLE
+ i
* 0x100;
243 pbuf
= dev
->input
[i
].pbuf
;
244 for (j
= 0; j
< dev
->input
[i
].dma_buf_num
; j
++) {
246 ddbwritel(mem
& 0xffffffff, base
+ j
* 8);
247 ddbwritel(mem
>> 32, base
+ j
* 8 + 4);
250 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
251 base
= DMA_BASE_ADDRESS_TABLE
+ 0x800 + i
* 0x100;
252 pbuf
= dev
->output
[i
].pbuf
;
253 for (j
= 0; j
< dev
->output
[i
].dma_buf_num
; j
++) {
255 ddbwritel(mem
& 0xffffffff, base
+ j
* 8);
256 ddbwritel(mem
>> 32, base
+ j
* 8 + 4);
261 static void io_free(struct pci_dev
*pdev
, u8
**vbuf
,
262 dma_addr_t
*pbuf
, u32 size
, int num
)
266 for (i
= 0; i
< num
; i
++) {
268 pci_free_consistent(pdev
, size
, vbuf
[i
], pbuf
[i
]);
274 static int io_alloc(struct pci_dev
*pdev
, u8
**vbuf
,
275 dma_addr_t
*pbuf
, u32 size
, int num
)
279 for (i
= 0; i
< num
; i
++) {
280 vbuf
[i
] = pci_alloc_consistent(pdev
, size
, &pbuf
[i
]);
287 static int ddb_buffers_alloc(struct ddb
*dev
)
290 struct ddb_port
*port
;
292 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
293 port
= &dev
->port
[i
];
294 switch (port
->class) {
296 if (io_alloc(dev
->pdev
, port
->input
[0]->vbuf
,
297 port
->input
[0]->pbuf
,
298 port
->input
[0]->dma_buf_size
,
299 port
->input
[0]->dma_buf_num
) < 0)
301 if (io_alloc(dev
->pdev
, port
->input
[1]->vbuf
,
302 port
->input
[1]->pbuf
,
303 port
->input
[1]->dma_buf_size
,
304 port
->input
[1]->dma_buf_num
) < 0)
308 if (io_alloc(dev
->pdev
, port
->input
[0]->vbuf
,
309 port
->input
[0]->pbuf
,
310 port
->input
[0]->dma_buf_size
,
311 port
->input
[0]->dma_buf_num
) < 0)
313 if (io_alloc(dev
->pdev
, port
->output
->vbuf
,
315 port
->output
->dma_buf_size
,
316 port
->output
->dma_buf_num
) < 0)
323 ddb_address_table(dev
);
327 static void ddb_buffers_free(struct ddb
*dev
)
330 struct ddb_port
*port
;
332 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
333 port
= &dev
->port
[i
];
334 io_free(dev
->pdev
, port
->input
[0]->vbuf
,
335 port
->input
[0]->pbuf
,
336 port
->input
[0]->dma_buf_size
,
337 port
->input
[0]->dma_buf_num
);
338 io_free(dev
->pdev
, port
->input
[1]->vbuf
,
339 port
->input
[1]->pbuf
,
340 port
->input
[1]->dma_buf_size
,
341 port
->input
[1]->dma_buf_num
);
342 io_free(dev
->pdev
, port
->output
->vbuf
,
344 port
->output
->dma_buf_size
,
345 port
->output
->dma_buf_num
);
349 static void ddb_input_start(struct ddb_input
*input
)
351 struct ddb
*dev
= input
->port
->dev
;
353 spin_lock_irq(&input
->lock
);
358 ddbwritel(0, TS_INPUT_CONTROL(input
->nr
));
359 ddbwritel(2, TS_INPUT_CONTROL(input
->nr
));
360 ddbwritel(0, TS_INPUT_CONTROL(input
->nr
));
362 ddbwritel((1 << 16) |
363 (input
->dma_buf_num
<< 11) |
364 (input
->dma_buf_size
>> 7),
365 DMA_BUFFER_SIZE(input
->nr
));
366 ddbwritel(0, DMA_BUFFER_ACK(input
->nr
));
368 ddbwritel(1, DMA_BASE_WRITE
);
369 ddbwritel(3, DMA_BUFFER_CONTROL(input
->nr
));
370 ddbwritel(9, TS_INPUT_CONTROL(input
->nr
));
372 spin_unlock_irq(&input
->lock
);
375 static void ddb_input_stop(struct ddb_input
*input
)
377 struct ddb
*dev
= input
->port
->dev
;
379 spin_lock_irq(&input
->lock
);
380 ddbwritel(0, TS_INPUT_CONTROL(input
->nr
));
381 ddbwritel(0, DMA_BUFFER_CONTROL(input
->nr
));
383 spin_unlock_irq(&input
->lock
);
386 static void ddb_output_start(struct ddb_output
*output
)
388 struct ddb
*dev
= output
->port
->dev
;
390 spin_lock_irq(&output
->lock
);
393 ddbwritel(0, TS_OUTPUT_CONTROL(output
->nr
));
394 ddbwritel(2, TS_OUTPUT_CONTROL(output
->nr
));
395 ddbwritel(0, TS_OUTPUT_CONTROL(output
->nr
));
396 ddbwritel(0x3c, TS_OUTPUT_CONTROL(output
->nr
));
397 ddbwritel((1 << 16) |
398 (output
->dma_buf_num
<< 11) |
399 (output
->dma_buf_size
>> 7),
400 DMA_BUFFER_SIZE(output
->nr
+ 8));
401 ddbwritel(0, DMA_BUFFER_ACK(output
->nr
+ 8));
403 ddbwritel(1, DMA_BASE_READ
);
404 ddbwritel(3, DMA_BUFFER_CONTROL(output
->nr
+ 8));
405 /* ddbwritel(0xbd, TS_OUTPUT_CONTROL(output->nr)); */
406 ddbwritel(0x1d, TS_OUTPUT_CONTROL(output
->nr
));
408 spin_unlock_irq(&output
->lock
);
411 static void ddb_output_stop(struct ddb_output
*output
)
413 struct ddb
*dev
= output
->port
->dev
;
415 spin_lock_irq(&output
->lock
);
416 ddbwritel(0, TS_OUTPUT_CONTROL(output
->nr
));
417 ddbwritel(0, DMA_BUFFER_CONTROL(output
->nr
+ 8));
419 spin_unlock_irq(&output
->lock
);
422 static u32
ddb_output_free(struct ddb_output
*output
)
424 u32 idx
, off
, stat
= output
->stat
;
427 idx
= (stat
>> 11) & 0x1f;
428 off
= (stat
& 0x7ff) << 7;
430 if (output
->cbuf
!= idx
) {
431 if ((((output
->cbuf
+ 1) % output
->dma_buf_num
) == idx
) &&
432 (output
->dma_buf_size
- output
->coff
<= 188))
436 diff
= off
- output
->coff
;
437 if (diff
<= 0 || diff
> 188)
442 static ssize_t
ddb_output_write(struct ddb_output
*output
,
443 const __user u8
*buf
, size_t count
)
445 struct ddb
*dev
= output
->port
->dev
;
446 u32 idx
, off
, stat
= output
->stat
;
447 u32 left
= count
, len
;
449 idx
= (stat
>> 11) & 0x1f;
450 off
= (stat
& 0x7ff) << 7;
453 len
= output
->dma_buf_size
- output
->coff
;
454 if ((((output
->cbuf
+ 1) % output
->dma_buf_num
) == idx
) &&
460 if (output
->cbuf
== idx
) {
461 if (off
> output
->coff
) {
463 len
= off
- output
->coff
;
474 if (copy_from_user(output
->vbuf
[output
->cbuf
] + output
->coff
,
480 if (output
->coff
== output
->dma_buf_size
) {
482 output
->cbuf
= ((output
->cbuf
+ 1) % output
->dma_buf_num
);
484 ddbwritel((output
->cbuf
<< 11) | (output
->coff
>> 7),
485 DMA_BUFFER_ACK(output
->nr
+ 8));
490 static u32
ddb_input_avail(struct ddb_input
*input
)
492 struct ddb
*dev
= input
->port
->dev
;
493 u32 idx
, off
, stat
= input
->stat
;
494 u32 ctrl
= ddbreadl(DMA_BUFFER_CONTROL(input
->nr
));
496 idx
= (stat
>> 11) & 0x1f;
497 off
= (stat
& 0x7ff) << 7;
500 printk(KERN_ERR
"IA %d %d %08x\n", idx
, off
, ctrl
);
501 ddbwritel(input
->stat
, DMA_BUFFER_ACK(input
->nr
));
504 if (input
->cbuf
!= idx
)
509 static ssize_t
ddb_input_read(struct ddb_input
*input
, __user u8
*buf
, size_t count
)
511 struct ddb
*dev
= input
->port
->dev
;
513 u32 idx
, free
, stat
= input
->stat
;
516 idx
= (stat
>> 11) & 0x1f;
519 if (input
->cbuf
== idx
)
521 free
= input
->dma_buf_size
- input
->coff
;
524 ret
= copy_to_user(buf
, input
->vbuf
[input
->cbuf
] +
529 if (input
->coff
== input
->dma_buf_size
) {
531 input
->cbuf
= (input
->cbuf
+1) % input
->dma_buf_num
;
534 ddbwritel((input
->cbuf
<< 11) | (input
->coff
>> 7),
535 DMA_BUFFER_ACK(input
->nr
));
540 /******************************************************************************/
541 /******************************************************************************/
542 /******************************************************************************/
545 static struct ddb_input
*fe2input(struct ddb
*dev
, struct dvb_frontend
*fe
)
549 for (i
= 0; i
< dev
->info
->port_num
* 2; i
++) {
550 if (dev
->input
[i
].fe
== fe
)
551 return &dev
->input
[i
];
557 static int drxk_gate_ctrl(struct dvb_frontend
*fe
, int enable
)
559 struct ddb_input
*input
= fe
->sec_priv
;
560 struct ddb_port
*port
= input
->port
;
564 mutex_lock(&port
->i2c_gate_lock
);
565 status
= input
->gate_ctrl(fe
, 1);
567 status
= input
->gate_ctrl(fe
, 0);
568 mutex_unlock(&port
->i2c_gate_lock
);
573 static int demod_attach_drxk(struct ddb_input
*input
)
575 struct i2c_adapter
*i2c
= &input
->port
->i2c
->adap
;
576 struct dvb_frontend
*fe
;
577 struct drxk_config config
;
579 memset(&config
, 0, sizeof(config
));
580 config
.microcode_name
= "drxk_a3.mc";
581 config
.qam_demod_parameter_count
= 4;
582 config
.adr
= 0x29 + (input
->nr
& 1);
584 fe
= input
->fe
= dvb_attach(drxk_attach
, &config
, i2c
);
586 printk(KERN_ERR
"No DRXK found!\n");
589 fe
->sec_priv
= input
;
590 input
->gate_ctrl
= fe
->ops
.i2c_gate_ctrl
;
591 fe
->ops
.i2c_gate_ctrl
= drxk_gate_ctrl
;
595 static int tuner_attach_tda18271(struct ddb_input
*input
)
597 struct i2c_adapter
*i2c
= &input
->port
->i2c
->adap
;
598 struct dvb_frontend
*fe
;
600 if (input
->fe
->ops
.i2c_gate_ctrl
)
601 input
->fe
->ops
.i2c_gate_ctrl(input
->fe
, 1);
602 fe
= dvb_attach(tda18271c2dd_attach
, input
->fe
, i2c
, 0x60);
604 printk(KERN_ERR
"No TDA18271 found!\n");
607 if (input
->fe
->ops
.i2c_gate_ctrl
)
608 input
->fe
->ops
.i2c_gate_ctrl(input
->fe
, 0);
612 /******************************************************************************/
613 /******************************************************************************/
614 /******************************************************************************/
616 static struct stv090x_config stv0900
= {
618 .demod_mode
= STV090x_DUAL
,
619 .clk_mode
= STV090x_CLK_EXT
,
624 .ts1_mode
= STV090x_TSMODE_SERIAL_PUNCTURED
,
625 .ts2_mode
= STV090x_TSMODE_SERIAL_PUNCTURED
,
627 .repeater_level
= STV090x_RPTLEVEL_16
,
629 .adc1_range
= STV090x_ADC_1Vpp
,
630 .adc2_range
= STV090x_ADC_1Vpp
,
632 .diseqc_envelope_mode
= true,
635 static struct stv090x_config stv0900_aa
= {
637 .demod_mode
= STV090x_DUAL
,
638 .clk_mode
= STV090x_CLK_EXT
,
643 .ts1_mode
= STV090x_TSMODE_SERIAL_PUNCTURED
,
644 .ts2_mode
= STV090x_TSMODE_SERIAL_PUNCTURED
,
646 .repeater_level
= STV090x_RPTLEVEL_16
,
648 .adc1_range
= STV090x_ADC_1Vpp
,
649 .adc2_range
= STV090x_ADC_1Vpp
,
651 .diseqc_envelope_mode
= true,
654 static struct stv6110x_config stv6110a
= {
660 static struct stv6110x_config stv6110b
= {
666 static int demod_attach_stv0900(struct ddb_input
*input
, int type
)
668 struct i2c_adapter
*i2c
= &input
->port
->i2c
->adap
;
669 struct stv090x_config
*feconf
= type
? &stv0900_aa
: &stv0900
;
671 input
->fe
= dvb_attach(stv090x_attach
, feconf
, i2c
,
672 (input
->nr
& 1) ? STV090x_DEMODULATOR_1
673 : STV090x_DEMODULATOR_0
);
675 printk(KERN_ERR
"No STV0900 found!\n");
678 if (!dvb_attach(lnbh24_attach
, input
->fe
, i2c
, 0,
680 (0x09 - type
) : (0x0b - type
))) {
681 printk(KERN_ERR
"No LNBH24 found!\n");
687 static int tuner_attach_stv6110(struct ddb_input
*input
, int type
)
689 struct i2c_adapter
*i2c
= &input
->port
->i2c
->adap
;
690 struct stv090x_config
*feconf
= type
? &stv0900_aa
: &stv0900
;
691 struct stv6110x_config
*tunerconf
= (input
->nr
& 1) ?
692 &stv6110b
: &stv6110a
;
693 const struct stv6110x_devctl
*ctl
;
695 ctl
= dvb_attach(stv6110x_attach
, input
->fe
, tunerconf
, i2c
);
697 printk(KERN_ERR
"No STV6110X found!\n");
700 printk(KERN_INFO
"attach tuner input %d adr %02x\n",
701 input
->nr
, tunerconf
->addr
);
703 feconf
->tuner_init
= ctl
->tuner_init
;
704 feconf
->tuner_sleep
= ctl
->tuner_sleep
;
705 feconf
->tuner_set_mode
= ctl
->tuner_set_mode
;
706 feconf
->tuner_set_frequency
= ctl
->tuner_set_frequency
;
707 feconf
->tuner_get_frequency
= ctl
->tuner_get_frequency
;
708 feconf
->tuner_set_bandwidth
= ctl
->tuner_set_bandwidth
;
709 feconf
->tuner_get_bandwidth
= ctl
->tuner_get_bandwidth
;
710 feconf
->tuner_set_bbgain
= ctl
->tuner_set_bbgain
;
711 feconf
->tuner_get_bbgain
= ctl
->tuner_get_bbgain
;
712 feconf
->tuner_set_refclk
= ctl
->tuner_set_refclk
;
713 feconf
->tuner_get_status
= ctl
->tuner_get_status
;
718 static int my_dvb_dmx_ts_card_init(struct dvb_demux
*dvbdemux
, char *id
,
719 int (*start_feed
)(struct dvb_demux_feed
*),
720 int (*stop_feed
)(struct dvb_demux_feed
*),
723 dvbdemux
->priv
= priv
;
725 dvbdemux
->filternum
= 256;
726 dvbdemux
->feednum
= 256;
727 dvbdemux
->start_feed
= start_feed
;
728 dvbdemux
->stop_feed
= stop_feed
;
729 dvbdemux
->write_to_decoder
= NULL
;
730 dvbdemux
->dmx
.capabilities
= (DMX_TS_FILTERING
|
731 DMX_SECTION_FILTERING
|
732 DMX_MEMORY_BASED_FILTERING
);
733 return dvb_dmx_init(dvbdemux
);
736 static int my_dvb_dmxdev_ts_card_init(struct dmxdev
*dmxdev
,
737 struct dvb_demux
*dvbdemux
,
738 struct dmx_frontend
*hw_frontend
,
739 struct dmx_frontend
*mem_frontend
,
740 struct dvb_adapter
*dvb_adapter
)
744 dmxdev
->filternum
= 256;
745 dmxdev
->demux
= &dvbdemux
->dmx
;
746 dmxdev
->capabilities
= 0;
747 ret
= dvb_dmxdev_init(dmxdev
, dvb_adapter
);
751 hw_frontend
->source
= DMX_FRONTEND_0
;
752 dvbdemux
->dmx
.add_frontend(&dvbdemux
->dmx
, hw_frontend
);
753 mem_frontend
->source
= DMX_MEMORY_FE
;
754 dvbdemux
->dmx
.add_frontend(&dvbdemux
->dmx
, mem_frontend
);
755 return dvbdemux
->dmx
.connect_frontend(&dvbdemux
->dmx
, hw_frontend
);
758 static int start_feed(struct dvb_demux_feed
*dvbdmxfeed
)
760 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
761 struct ddb_input
*input
= dvbdmx
->priv
;
764 ddb_input_start(input
);
766 return ++input
->users
;
769 static int stop_feed(struct dvb_demux_feed
*dvbdmxfeed
)
771 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
772 struct ddb_input
*input
= dvbdmx
->priv
;
777 ddb_input_stop(input
);
782 static void dvb_input_detach(struct ddb_input
*input
)
784 struct dvb_adapter
*adap
= &input
->adap
;
785 struct dvb_demux
*dvbdemux
= &input
->demux
;
787 switch (input
->attached
) {
790 dvb_unregister_frontend(input
->fe2
);
792 dvb_unregister_frontend(input
->fe
);
793 dvb_frontend_detach(input
->fe
);
797 dvb_net_release(&input
->dvbnet
);
800 dvbdemux
->dmx
.close(&dvbdemux
->dmx
);
801 dvbdemux
->dmx
.remove_frontend(&dvbdemux
->dmx
,
802 &input
->hw_frontend
);
803 dvbdemux
->dmx
.remove_frontend(&dvbdemux
->dmx
,
804 &input
->mem_frontend
);
805 dvb_dmxdev_release(&input
->dmxdev
);
808 dvb_dmx_release(&input
->demux
);
811 dvb_unregister_adapter(adap
);
816 static int dvb_input_attach(struct ddb_input
*input
)
819 struct ddb_port
*port
= input
->port
;
820 struct dvb_adapter
*adap
= &input
->adap
;
821 struct dvb_demux
*dvbdemux
= &input
->demux
;
823 ret
= dvb_register_adapter(adap
, "DDBridge", THIS_MODULE
,
824 &input
->port
->dev
->pdev
->dev
,
827 printk(KERN_ERR
"ddbridge: Could not register adapter."
828 "Check if you enabled enough adapters in dvb-core!\n");
833 ret
= my_dvb_dmx_ts_card_init(dvbdemux
, "SW demux",
840 ret
= my_dvb_dmxdev_ts_card_init(&input
->dmxdev
, &input
->demux
,
842 &input
->mem_frontend
, adap
);
847 ret
= dvb_net_init(adap
, &input
->dvbnet
, input
->dmxdev
.demux
);
853 switch (port
->type
) {
854 case DDB_TUNER_DVBS_ST
:
855 if (demod_attach_stv0900(input
, 0) < 0)
857 if (tuner_attach_stv6110(input
, 0) < 0)
860 if (dvb_register_frontend(adap
, input
->fe
) < 0)
864 case DDB_TUNER_DVBS_ST_AA
:
865 if (demod_attach_stv0900(input
, 1) < 0)
867 if (tuner_attach_stv6110(input
, 1) < 0)
870 if (dvb_register_frontend(adap
, input
->fe
) < 0)
874 case DDB_TUNER_DVBCT_TR
:
875 if (demod_attach_drxk(input
) < 0)
877 if (tuner_attach_tda18271(input
) < 0)
879 if (dvb_register_frontend(adap
, input
->fe
) < 0)
882 if (dvb_register_frontend(adap
, input
->fe2
) < 0)
884 input
->fe2
->tuner_priv
= input
->fe
->tuner_priv
;
885 memcpy(&input
->fe2
->ops
.tuner_ops
,
886 &input
->fe
->ops
.tuner_ops
,
887 sizeof(struct dvb_tuner_ops
));
895 /****************************************************************************/
896 /****************************************************************************/
898 static ssize_t
ts_write(struct file
*file
, const __user
char *buf
,
899 size_t count
, loff_t
*ppos
)
901 struct dvb_device
*dvbdev
= file
->private_data
;
902 struct ddb_output
*output
= dvbdev
->priv
;
907 if (ddb_output_free(output
) < 188) {
908 if (file
->f_flags
& O_NONBLOCK
)
910 if (wait_event_interruptible(
911 output
->wq
, ddb_output_free(output
) >= 188) < 0)
914 stat
= ddb_output_write(output
, buf
, left
);
920 return (left
== count
) ? -EAGAIN
: (count
- left
);
923 static ssize_t
ts_read(struct file
*file
, __user
char *buf
,
924 size_t count
, loff_t
*ppos
)
926 struct dvb_device
*dvbdev
= file
->private_data
;
927 struct ddb_output
*output
= dvbdev
->priv
;
928 struct ddb_input
*input
= output
->port
->input
[0];
931 count
-= count
% 188;
934 if (ddb_input_avail(input
) < 188) {
935 if (file
->f_flags
& O_NONBLOCK
)
937 if (wait_event_interruptible(
938 input
->wq
, ddb_input_avail(input
) >= 188) < 0)
941 read
= ddb_input_read(input
, buf
, left
);
947 return (left
== count
) ? -EAGAIN
: (count
- left
);
950 static unsigned int ts_poll(struct file
*file
, poll_table
*wait
)
953 struct dvb_device *dvbdev = file->private_data;
954 struct ddb_output *output = dvbdev->priv;
955 struct ddb_input *input = output->port->input[0];
957 unsigned int mask
= 0;
960 if (data_avail_to_read
)
961 mask
|= POLLIN
| POLLRDNORM
;
962 if (data_avail_to_write
)
963 mask
|= POLLOUT
| POLLWRNORM
;
965 poll_wait(file
, &read_queue
, wait
);
966 poll_wait(file
, &write_queue
, wait
);
971 static const struct file_operations ci_fops
= {
972 .owner
= THIS_MODULE
,
975 .open
= dvb_generic_open
,
976 .release
= dvb_generic_release
,
980 static struct dvb_device dvbdev_ci
= {
987 /****************************************************************************/
988 /****************************************************************************/
989 /****************************************************************************/
991 static void input_tasklet(unsigned long data
)
993 struct ddb_input
*input
= (struct ddb_input
*) data
;
994 struct ddb
*dev
= input
->port
->dev
;
996 spin_lock(&input
->lock
);
997 if (!input
->running
) {
998 spin_unlock(&input
->lock
);
1001 input
->stat
= ddbreadl(DMA_BUFFER_CURRENT(input
->nr
));
1003 if (input
->port
->class == DDB_PORT_TUNER
) {
1004 if (4&ddbreadl(DMA_BUFFER_CONTROL(input
->nr
)))
1005 printk(KERN_ERR
"Overflow input %d\n", input
->nr
);
1006 while (input
->cbuf
!= ((input
->stat
>> 11) & 0x1f)
1007 || (4&ddbreadl(DMA_BUFFER_CONTROL(input
->nr
)))) {
1008 dvb_dmx_swfilter_packets(&input
->demux
,
1009 input
->vbuf
[input
->cbuf
],
1010 input
->dma_buf_size
/ 188);
1012 input
->cbuf
= (input
->cbuf
+ 1) % input
->dma_buf_num
;
1013 ddbwritel((input
->cbuf
<< 11),
1014 DMA_BUFFER_ACK(input
->nr
));
1015 input
->stat
= ddbreadl(DMA_BUFFER_CURRENT(input
->nr
));
1018 if (input
->port
->class == DDB_PORT_CI
)
1019 wake_up(&input
->wq
);
1020 spin_unlock(&input
->lock
);
1023 static void output_tasklet(unsigned long data
)
1025 struct ddb_output
*output
= (struct ddb_output
*) data
;
1026 struct ddb
*dev
= output
->port
->dev
;
1028 spin_lock(&output
->lock
);
1029 if (!output
->running
) {
1030 spin_unlock(&output
->lock
);
1033 output
->stat
= ddbreadl(DMA_BUFFER_CURRENT(output
->nr
+ 8));
1034 wake_up(&output
->wq
);
1035 spin_unlock(&output
->lock
);
1039 static struct cxd2099_cfg cxd_cfg
= {
1046 static int ddb_ci_attach(struct ddb_port
*port
)
1050 ret
= dvb_register_adapter(&port
->output
->adap
,
1053 &port
->dev
->pdev
->dev
,
1057 port
->en
= cxd2099_attach(&cxd_cfg
, port
, &port
->i2c
->adap
);
1059 dvb_unregister_adapter(&port
->output
->adap
);
1062 ddb_input_start(port
->input
[0]);
1063 ddb_output_start(port
->output
);
1064 dvb_ca_en50221_init(&port
->output
->adap
,
1066 ret
= dvb_register_device(&port
->output
->adap
, &port
->output
->dev
,
1067 &dvbdev_ci
, (void *) port
->output
,
1072 static int ddb_port_attach(struct ddb_port
*port
)
1076 switch (port
->class) {
1077 case DDB_PORT_TUNER
:
1078 ret
= dvb_input_attach(port
->input
[0]);
1081 ret
= dvb_input_attach(port
->input
[1]);
1084 ret
= ddb_ci_attach(port
);
1090 printk(KERN_ERR
"port_attach on port %d failed\n", port
->nr
);
1094 static int ddb_ports_attach(struct ddb
*dev
)
1097 struct ddb_port
*port
;
1099 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
1100 port
= &dev
->port
[i
];
1101 ret
= ddb_port_attach(port
);
1108 static void ddb_ports_detach(struct ddb
*dev
)
1111 struct ddb_port
*port
;
1113 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
1114 port
= &dev
->port
[i
];
1115 switch (port
->class) {
1116 case DDB_PORT_TUNER
:
1117 dvb_input_detach(port
->input
[0]);
1118 dvb_input_detach(port
->input
[1]);
1121 dvb_unregister_device(port
->output
->dev
);
1123 ddb_input_stop(port
->input
[0]);
1124 ddb_output_stop(port
->output
);
1125 dvb_ca_en50221_release(port
->en
);
1128 dvb_unregister_adapter(&port
->output
->adap
);
1135 /****************************************************************************/
1136 /****************************************************************************/
1138 static int port_has_ci(struct ddb_port
*port
)
1141 return i2c_read_reg(&port
->i2c
->adap
, 0x40, 0, &val
) ? 0 : 1;
1144 static int port_has_stv0900(struct ddb_port
*port
)
1147 if (i2c_read_reg16(&port
->i2c
->adap
, 0x69, 0xf100, &val
) < 0)
1152 static int port_has_stv0900_aa(struct ddb_port
*port
)
1155 if (i2c_read_reg16(&port
->i2c
->adap
, 0x68, 0xf100, &val
) < 0)
1160 static int port_has_drxks(struct ddb_port
*port
)
1163 if (i2c_read(&port
->i2c
->adap
, 0x29, &val
) < 0)
1165 if (i2c_read(&port
->i2c
->adap
, 0x2a, &val
) < 0)
1170 static void ddb_port_probe(struct ddb_port
*port
)
1172 struct ddb
*dev
= port
->dev
;
1173 char *modname
= "NO MODULE";
1175 port
->class = DDB_PORT_NONE
;
1177 if (port_has_ci(port
)) {
1179 port
->class = DDB_PORT_CI
;
1180 ddbwritel(I2C_SPEED_400
, port
->i2c
->regs
+ I2C_TIMING
);
1181 } else if (port_has_stv0900(port
)) {
1182 modname
= "DUAL DVB-S2";
1183 port
->class = DDB_PORT_TUNER
;
1184 port
->type
= DDB_TUNER_DVBS_ST
;
1185 ddbwritel(I2C_SPEED_100
, port
->i2c
->regs
+ I2C_TIMING
);
1186 } else if (port_has_stv0900_aa(port
)) {
1187 modname
= "DUAL DVB-S2";
1188 port
->class = DDB_PORT_TUNER
;
1189 port
->type
= DDB_TUNER_DVBS_ST_AA
;
1190 ddbwritel(I2C_SPEED_100
, port
->i2c
->regs
+ I2C_TIMING
);
1191 } else if (port_has_drxks(port
)) {
1192 modname
= "DUAL DVB-C/T";
1193 port
->class = DDB_PORT_TUNER
;
1194 port
->type
= DDB_TUNER_DVBCT_TR
;
1195 ddbwritel(I2C_SPEED_400
, port
->i2c
->regs
+ I2C_TIMING
);
1197 printk(KERN_INFO
"Port %d (TAB %d): %s\n",
1198 port
->nr
, port
->nr
+1, modname
);
1201 static void ddb_input_init(struct ddb_port
*port
, int nr
)
1203 struct ddb
*dev
= port
->dev
;
1204 struct ddb_input
*input
= &dev
->input
[nr
];
1208 input
->dma_buf_num
= INPUT_DMA_BUFS
;
1209 input
->dma_buf_size
= INPUT_DMA_SIZE
;
1210 ddbwritel(0, TS_INPUT_CONTROL(nr
));
1211 ddbwritel(2, TS_INPUT_CONTROL(nr
));
1212 ddbwritel(0, TS_INPUT_CONTROL(nr
));
1213 ddbwritel(0, DMA_BUFFER_ACK(nr
));
1214 tasklet_init(&input
->tasklet
, input_tasklet
, (unsigned long) input
);
1215 spin_lock_init(&input
->lock
);
1216 init_waitqueue_head(&input
->wq
);
1219 static void ddb_output_init(struct ddb_port
*port
, int nr
)
1221 struct ddb
*dev
= port
->dev
;
1222 struct ddb_output
*output
= &dev
->output
[nr
];
1224 output
->port
= port
;
1225 output
->dma_buf_num
= OUTPUT_DMA_BUFS
;
1226 output
->dma_buf_size
= OUTPUT_DMA_SIZE
;
1228 ddbwritel(0, TS_OUTPUT_CONTROL(nr
));
1229 ddbwritel(2, TS_OUTPUT_CONTROL(nr
));
1230 ddbwritel(0, TS_OUTPUT_CONTROL(nr
));
1231 tasklet_init(&output
->tasklet
, output_tasklet
, (unsigned long) output
);
1232 init_waitqueue_head(&output
->wq
);
1235 static void ddb_ports_init(struct ddb
*dev
)
1238 struct ddb_port
*port
;
1240 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
1241 port
= &dev
->port
[i
];
1244 port
->i2c
= &dev
->i2c
[i
];
1245 port
->input
[0] = &dev
->input
[2 * i
];
1246 port
->input
[1] = &dev
->input
[2 * i
+ 1];
1247 port
->output
= &dev
->output
[i
];
1249 mutex_init(&port
->i2c_gate_lock
);
1250 ddb_port_probe(port
);
1251 ddb_input_init(port
, 2 * i
);
1252 ddb_input_init(port
, 2 * i
+ 1);
1253 ddb_output_init(port
, i
);
1257 static void ddb_ports_release(struct ddb
*dev
)
1260 struct ddb_port
*port
;
1262 for (i
= 0; i
< dev
->info
->port_num
; i
++) {
1263 port
= &dev
->port
[i
];
1265 tasklet_kill(&port
->input
[0]->tasklet
);
1266 tasklet_kill(&port
->input
[1]->tasklet
);
1267 tasklet_kill(&port
->output
->tasklet
);
1271 /****************************************************************************/
1272 /****************************************************************************/
1273 /****************************************************************************/
1275 static void irq_handle_i2c(struct ddb
*dev
, int n
)
1277 struct ddb_i2c
*i2c
= &dev
->i2c
[n
];
1283 static irqreturn_t
irq_handler(int irq
, void *dev_id
)
1285 struct ddb
*dev
= (struct ddb
*) dev_id
;
1286 u32 s
= ddbreadl(INTERRUPT_STATUS
);
1292 ddbwritel(s
, INTERRUPT_ACK
);
1295 irq_handle_i2c(dev
, 0);
1297 irq_handle_i2c(dev
, 1);
1299 irq_handle_i2c(dev
, 2);
1301 irq_handle_i2c(dev
, 3);
1304 tasklet_schedule(&dev
->input
[0].tasklet
);
1306 tasklet_schedule(&dev
->input
[1].tasklet
);
1308 tasklet_schedule(&dev
->input
[2].tasklet
);
1310 tasklet_schedule(&dev
->input
[3].tasklet
);
1312 tasklet_schedule(&dev
->input
[4].tasklet
);
1314 tasklet_schedule(&dev
->input
[5].tasklet
);
1316 tasklet_schedule(&dev
->input
[6].tasklet
);
1318 tasklet_schedule(&dev
->input
[7].tasklet
);
1321 tasklet_schedule(&dev
->output
[0].tasklet
);
1323 tasklet_schedule(&dev
->output
[1].tasklet
);
1325 tasklet_schedule(&dev
->output
[2].tasklet
);
1327 tasklet_schedule(&dev
->output
[3].tasklet
);
1329 /* if (s & 0x000f0000) printk(KERN_DEBUG "%08x\n", istat); */
1330 } while ((s
= ddbreadl(INTERRUPT_STATUS
)));
1335 /******************************************************************************/
1336 /******************************************************************************/
1337 /******************************************************************************/
1339 static int flashio(struct ddb
*dev
, u8
*wbuf
, u32 wlen
, u8
*rbuf
, u32 rlen
)
1344 ddbwritel(1, SPI_CONTROL
);
1346 /* FIXME: check for big-endian */
1347 data
= swab32(*(u32
*)wbuf
);
1350 ddbwritel(data
, SPI_DATA
);
1351 while (ddbreadl(SPI_CONTROL
) & 0x0004)
1356 ddbwritel(0x0001 | ((wlen
<< (8 + 3)) & 0x1f00), SPI_CONTROL
);
1358 ddbwritel(0x0003 | ((wlen
<< (8 + 3)) & 0x1f00), SPI_CONTROL
);
1361 shift
= ((4 - wlen
) * 8);
1370 ddbwritel(data
, SPI_DATA
);
1371 while (ddbreadl(SPI_CONTROL
) & 0x0004)
1375 ddbwritel(0, SPI_CONTROL
);
1379 ddbwritel(1, SPI_CONTROL
);
1382 ddbwritel(0xffffffff, SPI_DATA
);
1383 while (ddbreadl(SPI_CONTROL
) & 0x0004)
1385 data
= ddbreadl(SPI_DATA
);
1386 *(u32
*) rbuf
= swab32(data
);
1390 ddbwritel(0x0003 | ((rlen
<< (8 + 3)) & 0x1F00), SPI_CONTROL
);
1391 ddbwritel(0xffffffff, SPI_DATA
);
1392 while (ddbreadl(SPI_CONTROL
) & 0x0004)
1395 data
= ddbreadl(SPI_DATA
);
1396 ddbwritel(0, SPI_CONTROL
);
1399 data
<<= ((4 - rlen
) * 8);
1402 *rbuf
= ((data
>> 24) & 0xff);
1410 #define DDB_MAGIC 'd'
1412 struct ddb_flashio
{
1413 __user __u8
*write_buf
;
1415 __user __u8
*read_buf
;
1419 #define IOCTL_DDB_FLASHIO _IOWR(DDB_MAGIC, 0x00, struct ddb_flashio)
1421 #define DDB_NAME "ddbridge"
1424 static struct ddb
*ddbs
[32];
1425 static struct class *ddb_class
;
1426 static int ddb_major
;
1428 static int ddb_open(struct inode
*inode
, struct file
*file
)
1430 struct ddb
*dev
= ddbs
[iminor(inode
)];
1432 file
->private_data
= dev
;
1436 static long ddb_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
1438 struct ddb
*dev
= file
->private_data
;
1439 __user
void *parg
= (__user
void *)arg
;
1443 case IOCTL_DDB_FLASHIO
:
1445 struct ddb_flashio fio
;
1448 if (copy_from_user(&fio
, parg
, sizeof(fio
)))
1451 if (fio
.write_len
> 1028 || fio
.read_len
> 1028)
1453 if (fio
.write_len
+ fio
.read_len
> 1028)
1456 wbuf
= &dev
->iobuf
[0];
1457 rbuf
= wbuf
+ fio
.write_len
;
1459 if (copy_from_user(wbuf
, fio
.write_buf
, fio
.write_len
))
1461 res
= flashio(dev
, wbuf
, fio
.write_len
, rbuf
, fio
.read_len
);
1464 if (copy_to_user(fio
.read_buf
, rbuf
, fio
.read_len
))
1474 static const struct file_operations ddb_fops
= {
1475 .unlocked_ioctl
= ddb_ioctl
,
1479 static char *ddb_devnode(struct device
*device
, umode_t
*mode
)
1481 struct ddb
*dev
= dev_get_drvdata(device
);
1483 return kasprintf(GFP_KERNEL
, "ddbridge/card%d", dev
->nr
);
1486 static int ddb_class_create(void)
1488 ddb_major
= register_chrdev(0, DDB_NAME
, &ddb_fops
);
1492 ddb_class
= class_create(THIS_MODULE
, DDB_NAME
);
1493 if (IS_ERR(ddb_class
)) {
1494 unregister_chrdev(ddb_major
, DDB_NAME
);
1495 return PTR_ERR(ddb_class
);
1497 ddb_class
->devnode
= ddb_devnode
;
1501 static void ddb_class_destroy(void)
1503 class_destroy(ddb_class
);
1504 unregister_chrdev(ddb_major
, DDB_NAME
);
1507 static int ddb_device_create(struct ddb
*dev
)
1509 dev
->nr
= ddb_num
++;
1510 dev
->ddb_dev
= device_create(ddb_class
, NULL
,
1511 MKDEV(ddb_major
, dev
->nr
),
1512 dev
, "ddbridge%d", dev
->nr
);
1513 ddbs
[dev
->nr
] = dev
;
1514 if (IS_ERR(dev
->ddb_dev
))
1519 static void ddb_device_destroy(struct ddb
*dev
)
1522 if (IS_ERR(dev
->ddb_dev
))
1524 device_destroy(ddb_class
, MKDEV(ddb_major
, 0));
1528 /****************************************************************************/
1529 /****************************************************************************/
1530 /****************************************************************************/
1532 static void ddb_unmap(struct ddb
*dev
)
1540 static void ddb_remove(struct pci_dev
*pdev
)
1542 struct ddb
*dev
= pci_get_drvdata(pdev
);
1544 ddb_ports_detach(dev
);
1545 ddb_i2c_release(dev
);
1547 ddbwritel(0, INTERRUPT_ENABLE
);
1548 free_irq(dev
->pdev
->irq
, dev
);
1549 #ifdef CONFIG_PCI_MSI
1551 pci_disable_msi(dev
->pdev
);
1553 ddb_ports_release(dev
);
1554 ddb_buffers_free(dev
);
1555 ddb_device_destroy(dev
);
1558 pci_set_drvdata(pdev
, NULL
);
1559 pci_disable_device(pdev
);
1563 static int ddb_probe(struct pci_dev
*pdev
, const struct pci_device_id
*id
)
1567 int irq_flag
= IRQF_SHARED
;
1569 if (pci_enable_device(pdev
) < 0)
1572 dev
= vmalloc(sizeof(struct ddb
));
1575 memset(dev
, 0, sizeof(struct ddb
));
1578 pci_set_drvdata(pdev
, dev
);
1579 dev
->info
= (struct ddb_info
*) id
->driver_data
;
1580 printk(KERN_INFO
"DDBridge driver detected: %s\n", dev
->info
->name
);
1582 dev
->regs
= ioremap(pci_resource_start(dev
->pdev
, 0),
1583 pci_resource_len(dev
->pdev
, 0));
1588 printk(KERN_INFO
"HW %08x FW %08x\n", ddbreadl(0), ddbreadl(4));
1590 #ifdef CONFIG_PCI_MSI
1591 if (pci_msi_enabled())
1592 stat
= pci_enable_msi(dev
->pdev
);
1594 printk(KERN_INFO
": MSI not available.\n");
1600 stat
= request_irq(dev
->pdev
->irq
, irq_handler
,
1601 irq_flag
, "DDBridge", (void *) dev
);
1604 ddbwritel(0, DMA_BASE_WRITE
);
1605 ddbwritel(0, DMA_BASE_READ
);
1606 ddbwritel(0xffffffff, INTERRUPT_ACK
);
1607 ddbwritel(0xfff0f, INTERRUPT_ENABLE
);
1608 ddbwritel(0, MSI1_ENABLE
);
1610 if (ddb_i2c_init(dev
) < 0)
1612 ddb_ports_init(dev
);
1613 if (ddb_buffers_alloc(dev
) < 0) {
1614 printk(KERN_INFO
": Could not allocate buffer memory\n");
1617 if (ddb_ports_attach(dev
) < 0)
1619 ddb_device_create(dev
);
1623 ddb_ports_detach(dev
);
1624 printk(KERN_ERR
"fail3\n");
1625 ddb_ports_release(dev
);
1627 printk(KERN_ERR
"fail2\n");
1628 ddb_buffers_free(dev
);
1630 printk(KERN_ERR
"fail1\n");
1632 pci_disable_msi(dev
->pdev
);
1634 free_irq(dev
->pdev
->irq
, dev
);
1636 printk(KERN_ERR
"fail\n");
1638 pci_set_drvdata(pdev
, NULL
);
1639 pci_disable_device(pdev
);
1643 /******************************************************************************/
1644 /******************************************************************************/
1645 /******************************************************************************/
1647 static struct ddb_info ddb_none
= {
1649 .name
= "Digital Devices PCIe bridge",
1652 static struct ddb_info ddb_octopus
= {
1653 .type
= DDB_OCTOPUS
,
1654 .name
= "Digital Devices Octopus DVB adapter",
1658 static struct ddb_info ddb_octopus_le
= {
1659 .type
= DDB_OCTOPUS
,
1660 .name
= "Digital Devices Octopus LE DVB adapter",
1664 static struct ddb_info ddb_octopus_mini
= {
1665 .type
= DDB_OCTOPUS
,
1666 .name
= "Digital Devices Octopus Mini",
1670 static struct ddb_info ddb_v6
= {
1671 .type
= DDB_OCTOPUS
,
1672 .name
= "Digital Devices Cine S2 V6 DVB adapter",
1675 static struct ddb_info ddb_v6_5
= {
1676 .type
= DDB_OCTOPUS
,
1677 .name
= "Digital Devices Cine S2 V6.5 DVB adapter",
1681 static struct ddb_info ddb_dvbct
= {
1682 .type
= DDB_OCTOPUS
,
1683 .name
= "Digital Devices DVBCT V6.1 DVB adapter",
1687 static struct ddb_info ddb_satixS2v3
= {
1688 .type
= DDB_OCTOPUS
,
1689 .name
= "Mystique SaTiX-S2 V3 DVB adapter",
1693 static struct ddb_info ddb_octopusv3
= {
1694 .type
= DDB_OCTOPUS
,
1695 .name
= "Digital Devices Octopus V3 DVB adapter",
1699 #define DDVID 0xdd01 /* Digital Devices Vendor ID */
1701 #define DDB_ID(_vend, _dev, _subvend, _subdev, _driverdata) { \
1702 .vendor = _vend, .device = _dev, \
1703 .subvendor = _subvend, .subdevice = _subdev, \
1704 .driver_data = (unsigned long)&_driverdata }
1706 static const struct pci_device_id ddb_id_tbl
[] = {
1707 DDB_ID(DDVID
, 0x0002, DDVID
, 0x0001, ddb_octopus
),
1708 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0001, ddb_octopus
),
1709 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0002, ddb_octopus_le
),
1710 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0010, ddb_octopus_mini
),
1711 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0020, ddb_v6
),
1712 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0021, ddb_v6_5
),
1713 DDB_ID(DDVID
, 0x0003, DDVID
, 0x0030, ddb_dvbct
),
1714 DDB_ID(DDVID
, 0x0003, DDVID
, 0xdb03, ddb_satixS2v3
),
1715 DDB_ID(DDVID
, 0x0005, DDVID
, 0x0004, ddb_octopusv3
),
1716 /* in case sub-ids got deleted in flash */
1717 DDB_ID(DDVID
, 0x0003, PCI_ANY_ID
, PCI_ANY_ID
, ddb_none
),
1720 MODULE_DEVICE_TABLE(pci
, ddb_id_tbl
);
1723 static struct pci_driver ddb_pci_driver
= {
1725 .id_table
= ddb_id_tbl
,
1727 .remove
= ddb_remove
,
1730 static __init
int module_init_ddbridge(void)
1734 printk(KERN_INFO
"Digital Devices PCIE bridge driver, "
1735 "Copyright (C) 2010-11 Digital Devices GmbH\n");
1737 ret
= ddb_class_create();
1740 ret
= pci_register_driver(&ddb_pci_driver
);
1742 ddb_class_destroy();
1746 static __exit
void module_exit_ddbridge(void)
1748 pci_unregister_driver(&ddb_pci_driver
);
1749 ddb_class_destroy();
1752 module_init(module_init_ddbridge
);
1753 module_exit(module_exit_ddbridge
);
1755 MODULE_DESCRIPTION("Digital Devices PCIe Bridge");
1756 MODULE_AUTHOR("Ralph Metzler");
1757 MODULE_LICENSE("GPL");
1758 MODULE_VERSION("0.5");