]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/media/pci/ddbridge/ddbridge-core.c
Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
[karo-tx-linux.git] / drivers / media / pci / ddbridge / ddbridge-core.c
1 /*
2  * ddbridge.c: Digital Devices PCIe bridge driver
3  *
4  * Copyright (C) 2010-2011 Digital Devices GmbH
5  *
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.
9  *
10  *
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.
15  *
16  * To obtain the license, point your browser to
17  * http://www.gnu.org/copyleft/gpl.html
18  */
19
20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
21
22 #include <linux/module.h>
23 #include <linux/init.h>
24 #include <linux/interrupt.h>
25 #include <linux/delay.h>
26 #include <linux/slab.h>
27 #include <linux/poll.h>
28 #include <linux/io.h>
29 #include <linux/pci.h>
30 #include <linux/pci_ids.h>
31 #include <linux/timer.h>
32 #include <linux/i2c.h>
33 #include <linux/swab.h>
34 #include <linux/vmalloc.h>
35 #include "ddbridge.h"
36
37 #include "ddbridge-regs.h"
38
39 #include "tda18271c2dd.h"
40 #include "stv6110x.h"
41 #include "stv090x.h"
42 #include "lnbh24.h"
43 #include "drxk.h"
44 #include "stv0367.h"
45 #include "stv0367_priv.h"
46 #include "cxd2841er.h"
47 #include "tda18212.h"
48
49 static int xo2_speed = 2;
50 module_param(xo2_speed, int, 0444);
51 MODULE_PARM_DESC(xo2_speed, "default transfer speed for xo2 based duoflex, 0=55,1=75,2=90,3=104 MBit/s, default=2, use attribute to change for individual cards");
52
53 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
54
55 /* MSI had problems with lost interrupts, fixed but needs testing */
56 #undef CONFIG_PCI_MSI
57
58 /******************************************************************************/
59
60 static int i2c_io(struct i2c_adapter *adapter, u8 adr,
61                   u8 *wbuf, u32 wlen, u8 *rbuf, u32 rlen)
62 {
63         struct i2c_msg msgs[2] = {{.addr = adr,  .flags = 0,
64                                    .buf  = wbuf, .len   = wlen },
65                                   {.addr = adr,  .flags = I2C_M_RD,
66                                    .buf  = rbuf,  .len   = rlen } };
67         return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
68 }
69
70 static int i2c_write(struct i2c_adapter *adap, u8 adr, u8 *data, int len)
71 {
72         struct i2c_msg msg = {.addr = adr, .flags = 0,
73                               .buf = data, .len = len};
74
75         return (i2c_transfer(adap, &msg, 1) == 1) ? 0 : -1;
76 }
77
78 static int i2c_read(struct i2c_adapter *adapter, u8 adr, u8 *val)
79 {
80         struct i2c_msg msgs[1] = {{.addr = adr,  .flags = I2C_M_RD,
81                                    .buf  = val,  .len   = 1 } };
82         return (i2c_transfer(adapter, msgs, 1) == 1) ? 0 : -1;
83 }
84
85 static int i2c_read_regs(struct i2c_adapter *adapter,
86                          u8 adr, u8 reg, u8 *val, u8 len)
87 {
88         struct i2c_msg msgs[2] = {{.addr = adr,  .flags = 0,
89                                    .buf  = &reg, .len   = 1 },
90                                   {.addr = adr,  .flags = I2C_M_RD,
91                                    .buf  = val,  .len   = len } };
92         return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
93 }
94
95 static int i2c_read_reg(struct i2c_adapter *adapter, u8 adr, u8 reg, u8 *val)
96 {
97         return i2c_read_regs(adapter, adr, reg, val, 1);
98 }
99
100 static int i2c_read_reg16(struct i2c_adapter *adapter, u8 adr,
101                           u16 reg, u8 *val)
102 {
103         u8 msg[2] = {reg>>8, reg&0xff};
104         struct i2c_msg msgs[2] = {{.addr = adr, .flags = 0,
105                                    .buf  = msg, .len   = 2},
106                                   {.addr = adr, .flags = I2C_M_RD,
107                                    .buf  = val, .len   = 1} };
108         return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
109 }
110
111 static int i2c_write_reg(struct i2c_adapter *adap, u8 adr,
112                          u8 reg, u8 val)
113 {
114         u8 msg[2] = {reg, val};
115
116         return i2c_write(adap, adr, msg, 2);
117 }
118
119 static inline u32 safe_ddbreadl(struct ddb *dev, u32 adr)
120 {
121         u32 val = ddbreadl(adr);
122
123         /* (ddb)readl returns (uint)-1 (all bits set) on failure, catch that */
124         if (val == ~0) {
125                 dev_err(&dev->pdev->dev, "ddbreadl failure, adr=%08x\n", adr);
126                 return 0;
127         }
128
129         return val;
130 }
131
132 static int ddb_i2c_cmd(struct ddb_i2c *i2c, u32 adr, u32 cmd)
133 {
134         struct ddb *dev = i2c->dev;
135         long stat;
136         u32 val;
137
138         i2c->done = 0;
139         ddbwritel((adr << 9) | cmd, i2c->regs + I2C_COMMAND);
140         stat = wait_event_timeout(i2c->wq, i2c->done == 1, HZ);
141         if (stat == 0) {
142                 dev_err(&dev->pdev->dev, "I2C timeout\n");
143                 { /* MSI debugging*/
144                         u32 istat = ddbreadl(INTERRUPT_STATUS);
145                         dev_err(&dev->pdev->dev, "IRS %08x\n", istat);
146                         ddbwritel(istat, INTERRUPT_ACK);
147                 }
148                 return -EIO;
149         }
150         val = ddbreadl(i2c->regs+I2C_COMMAND);
151         if (val & 0x70000)
152                 return -EIO;
153         return 0;
154 }
155
156 static int ddb_i2c_master_xfer(struct i2c_adapter *adapter,
157                                struct i2c_msg msg[], int num)
158 {
159         struct ddb_i2c *i2c = (struct ddb_i2c *)i2c_get_adapdata(adapter);
160         struct ddb *dev = i2c->dev;
161         u8 addr = 0;
162
163         if (num)
164                 addr = msg[0].addr;
165
166         if (num == 2 && msg[1].flags & I2C_M_RD &&
167             !(msg[0].flags & I2C_M_RD)) {
168                 memcpy_toio(dev->regs + I2C_TASKMEM_BASE + i2c->wbuf,
169                             msg[0].buf, msg[0].len);
170                 ddbwritel(msg[0].len|(msg[1].len << 16),
171                           i2c->regs+I2C_TASKLENGTH);
172                 if (!ddb_i2c_cmd(i2c, addr, 1)) {
173                         memcpy_fromio(msg[1].buf,
174                                       dev->regs + I2C_TASKMEM_BASE + i2c->rbuf,
175                                       msg[1].len);
176                         return num;
177                 }
178         }
179
180         if (num == 1 && !(msg[0].flags & I2C_M_RD)) {
181                 ddbcpyto(I2C_TASKMEM_BASE + i2c->wbuf, msg[0].buf, msg[0].len);
182                 ddbwritel(msg[0].len, i2c->regs + I2C_TASKLENGTH);
183                 if (!ddb_i2c_cmd(i2c, addr, 2))
184                         return num;
185         }
186         if (num == 1 && (msg[0].flags & I2C_M_RD)) {
187                 ddbwritel(msg[0].len << 16, i2c->regs + I2C_TASKLENGTH);
188                 if (!ddb_i2c_cmd(i2c, addr, 3)) {
189                         ddbcpyfrom(msg[0].buf,
190                                    I2C_TASKMEM_BASE + i2c->rbuf, msg[0].len);
191                         return num;
192                 }
193         }
194         return -EIO;
195 }
196
197
198 static u32 ddb_i2c_functionality(struct i2c_adapter *adap)
199 {
200         return I2C_FUNC_SMBUS_EMUL;
201 }
202
203 static struct i2c_algorithm ddb_i2c_algo = {
204         .master_xfer   = ddb_i2c_master_xfer,
205         .functionality = ddb_i2c_functionality,
206 };
207
208 static void ddb_i2c_release(struct ddb *dev)
209 {
210         int i;
211         struct ddb_i2c *i2c;
212         struct i2c_adapter *adap;
213
214         for (i = 0; i < dev->info->port_num; i++) {
215                 i2c = &dev->i2c[i];
216                 adap = &i2c->adap;
217                 i2c_del_adapter(adap);
218         }
219 }
220
221 static int ddb_i2c_init(struct ddb *dev)
222 {
223         int i, j, stat = 0;
224         struct ddb_i2c *i2c;
225         struct i2c_adapter *adap;
226
227         for (i = 0; i < dev->info->port_num; i++) {
228                 i2c = &dev->i2c[i];
229                 i2c->dev = dev;
230                 i2c->nr = i;
231                 i2c->wbuf = i * (I2C_TASKMEM_SIZE / 4);
232                 i2c->rbuf = i2c->wbuf + (I2C_TASKMEM_SIZE / 8);
233                 i2c->regs = 0x80 + i * 0x20;
234                 ddbwritel(I2C_SPEED_100, i2c->regs + I2C_TIMING);
235                 ddbwritel((i2c->rbuf << 16) | i2c->wbuf,
236                           i2c->regs + I2C_TASKADDRESS);
237                 init_waitqueue_head(&i2c->wq);
238
239                 adap = &i2c->adap;
240                 i2c_set_adapdata(adap, i2c);
241 #ifdef I2C_ADAP_CLASS_TV_DIGITAL
242                 adap->class = I2C_ADAP_CLASS_TV_DIGITAL|I2C_CLASS_TV_ANALOG;
243 #else
244 #ifdef I2C_CLASS_TV_ANALOG
245                 adap->class = I2C_CLASS_TV_ANALOG;
246 #endif
247 #endif
248                 strcpy(adap->name, "ddbridge");
249                 adap->algo = &ddb_i2c_algo;
250                 adap->algo_data = (void *)i2c;
251                 adap->dev.parent = &dev->pdev->dev;
252                 stat = i2c_add_adapter(adap);
253                 if (stat)
254                         break;
255         }
256         if (stat)
257                 for (j = 0; j < i; j++) {
258                         i2c = &dev->i2c[j];
259                         adap = &i2c->adap;
260                         i2c_del_adapter(adap);
261                 }
262         return stat;
263 }
264
265
266 /******************************************************************************/
267 /******************************************************************************/
268 /******************************************************************************/
269
270 #if 0
271 static void set_table(struct ddb *dev, u32 off,
272                       dma_addr_t *pbuf, u32 num)
273 {
274         u32 i, base;
275         u64 mem;
276
277         base = DMA_BASE_ADDRESS_TABLE + off;
278         for (i = 0; i < num; i++) {
279                 mem = pbuf[i];
280                 ddbwritel(mem & 0xffffffff, base + i * 8);
281                 ddbwritel(mem >> 32, base + i * 8 + 4);
282         }
283 }
284 #endif
285
286 static void ddb_address_table(struct ddb *dev)
287 {
288         u32 i, j, base;
289         u64 mem;
290         dma_addr_t *pbuf;
291
292         for (i = 0; i < dev->info->port_num * 2; i++) {
293                 base = DMA_BASE_ADDRESS_TABLE + i * 0x100;
294                 pbuf = dev->input[i].pbuf;
295                 for (j = 0; j < dev->input[i].dma_buf_num; j++) {
296                         mem = pbuf[j];
297                         ddbwritel(mem & 0xffffffff, base + j * 8);
298                         ddbwritel(mem >> 32, base + j * 8 + 4);
299                 }
300         }
301         for (i = 0; i < dev->info->port_num; i++) {
302                 base = DMA_BASE_ADDRESS_TABLE + 0x800 + i * 0x100;
303                 pbuf = dev->output[i].pbuf;
304                 for (j = 0; j < dev->output[i].dma_buf_num; j++) {
305                         mem = pbuf[j];
306                         ddbwritel(mem & 0xffffffff, base + j * 8);
307                         ddbwritel(mem >> 32, base + j * 8 + 4);
308                 }
309         }
310 }
311
312 static void io_free(struct pci_dev *pdev, u8 **vbuf,
313                     dma_addr_t *pbuf, u32 size, int num)
314 {
315         int i;
316
317         for (i = 0; i < num; i++) {
318                 if (vbuf[i]) {
319                         pci_free_consistent(pdev, size, vbuf[i], pbuf[i]);
320                         vbuf[i] = NULL;
321                 }
322         }
323 }
324
325 static int io_alloc(struct pci_dev *pdev, u8 **vbuf,
326                     dma_addr_t *pbuf, u32 size, int num)
327 {
328         int i;
329
330         for (i = 0; i < num; i++) {
331                 vbuf[i] = pci_alloc_consistent(pdev, size, &pbuf[i]);
332                 if (!vbuf[i])
333                         return -ENOMEM;
334         }
335         return 0;
336 }
337
338 static int ddb_buffers_alloc(struct ddb *dev)
339 {
340         int i;
341         struct ddb_port *port;
342
343         for (i = 0; i < dev->info->port_num; i++) {
344                 port = &dev->port[i];
345                 switch (port->class) {
346                 case DDB_PORT_TUNER:
347                         if (io_alloc(dev->pdev, port->input[0]->vbuf,
348                                      port->input[0]->pbuf,
349                                      port->input[0]->dma_buf_size,
350                                      port->input[0]->dma_buf_num) < 0)
351                                 return -1;
352                         if (io_alloc(dev->pdev, port->input[1]->vbuf,
353                                      port->input[1]->pbuf,
354                                      port->input[1]->dma_buf_size,
355                                      port->input[1]->dma_buf_num) < 0)
356                                 return -1;
357                         break;
358                 case DDB_PORT_CI:
359                         if (io_alloc(dev->pdev, port->input[0]->vbuf,
360                                      port->input[0]->pbuf,
361                                      port->input[0]->dma_buf_size,
362                                      port->input[0]->dma_buf_num) < 0)
363                                 return -1;
364                         if (io_alloc(dev->pdev, port->output->vbuf,
365                                      port->output->pbuf,
366                                      port->output->dma_buf_size,
367                                      port->output->dma_buf_num) < 0)
368                                 return -1;
369                         break;
370                 default:
371                         break;
372                 }
373         }
374         ddb_address_table(dev);
375         return 0;
376 }
377
378 static void ddb_buffers_free(struct ddb *dev)
379 {
380         int i;
381         struct ddb_port *port;
382
383         for (i = 0; i < dev->info->port_num; i++) {
384                 port = &dev->port[i];
385                 io_free(dev->pdev, port->input[0]->vbuf,
386                         port->input[0]->pbuf,
387                         port->input[0]->dma_buf_size,
388                         port->input[0]->dma_buf_num);
389                 io_free(dev->pdev, port->input[1]->vbuf,
390                         port->input[1]->pbuf,
391                         port->input[1]->dma_buf_size,
392                         port->input[1]->dma_buf_num);
393                 io_free(dev->pdev, port->output->vbuf,
394                         port->output->pbuf,
395                         port->output->dma_buf_size,
396                         port->output->dma_buf_num);
397         }
398 }
399
400 static void ddb_input_start(struct ddb_input *input)
401 {
402         struct ddb *dev = input->port->dev;
403
404         spin_lock_irq(&input->lock);
405         input->cbuf = 0;
406         input->coff = 0;
407
408         /* reset */
409         ddbwritel(0, TS_INPUT_CONTROL(input->nr));
410         ddbwritel(2, TS_INPUT_CONTROL(input->nr));
411         ddbwritel(0, TS_INPUT_CONTROL(input->nr));
412
413         ddbwritel((1 << 16) |
414                   (input->dma_buf_num << 11) |
415                   (input->dma_buf_size >> 7),
416                   DMA_BUFFER_SIZE(input->nr));
417         ddbwritel(0, DMA_BUFFER_ACK(input->nr));
418
419         ddbwritel(1, DMA_BASE_WRITE);
420         ddbwritel(3, DMA_BUFFER_CONTROL(input->nr));
421         ddbwritel(9, TS_INPUT_CONTROL(input->nr));
422         input->running = 1;
423         spin_unlock_irq(&input->lock);
424 }
425
426 static void ddb_input_stop(struct ddb_input *input)
427 {
428         struct ddb *dev = input->port->dev;
429
430         spin_lock_irq(&input->lock);
431         ddbwritel(0, TS_INPUT_CONTROL(input->nr));
432         ddbwritel(0, DMA_BUFFER_CONTROL(input->nr));
433         input->running = 0;
434         spin_unlock_irq(&input->lock);
435 }
436
437 static void ddb_output_start(struct ddb_output *output)
438 {
439         struct ddb *dev = output->port->dev;
440
441         spin_lock_irq(&output->lock);
442         output->cbuf = 0;
443         output->coff = 0;
444         ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
445         ddbwritel(2, TS_OUTPUT_CONTROL(output->nr));
446         ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
447         ddbwritel(0x3c, TS_OUTPUT_CONTROL(output->nr));
448         ddbwritel((1 << 16) |
449                   (output->dma_buf_num << 11) |
450                   (output->dma_buf_size >> 7),
451                   DMA_BUFFER_SIZE(output->nr + 8));
452         ddbwritel(0, DMA_BUFFER_ACK(output->nr + 8));
453
454         ddbwritel(1, DMA_BASE_READ);
455         ddbwritel(3, DMA_BUFFER_CONTROL(output->nr + 8));
456         /* ddbwritel(0xbd, TS_OUTPUT_CONTROL(output->nr)); */
457         ddbwritel(0x1d, TS_OUTPUT_CONTROL(output->nr));
458         output->running = 1;
459         spin_unlock_irq(&output->lock);
460 }
461
462 static void ddb_output_stop(struct ddb_output *output)
463 {
464         struct ddb *dev = output->port->dev;
465
466         spin_lock_irq(&output->lock);
467         ddbwritel(0, TS_OUTPUT_CONTROL(output->nr));
468         ddbwritel(0, DMA_BUFFER_CONTROL(output->nr + 8));
469         output->running = 0;
470         spin_unlock_irq(&output->lock);
471 }
472
473 static u32 ddb_output_free(struct ddb_output *output)
474 {
475         u32 idx, off, stat = output->stat;
476         s32 diff;
477
478         idx = (stat >> 11) & 0x1f;
479         off = (stat & 0x7ff) << 7;
480
481         if (output->cbuf != idx) {
482                 if ((((output->cbuf + 1) % output->dma_buf_num) == idx) &&
483                     (output->dma_buf_size - output->coff <= 188))
484                         return 0;
485                 return 188;
486         }
487         diff = off - output->coff;
488         if (diff <= 0 || diff > 188)
489                 return 188;
490         return 0;
491 }
492
493 static ssize_t ddb_output_write(struct ddb_output *output,
494                                 const __user u8 *buf, size_t count)
495 {
496         struct ddb *dev = output->port->dev;
497         u32 idx, off, stat = output->stat;
498         u32 left = count, len;
499
500         idx = (stat >> 11) & 0x1f;
501         off = (stat & 0x7ff) << 7;
502
503         while (left) {
504                 len = output->dma_buf_size - output->coff;
505                 if ((((output->cbuf + 1) % output->dma_buf_num) == idx) &&
506                     (off == 0)) {
507                         if (len <= 188)
508                                 break;
509                         len -= 188;
510                 }
511                 if (output->cbuf == idx) {
512                         if (off > output->coff) {
513 #if 1
514                                 len = off - output->coff;
515                                 len -= (len % 188);
516                                 if (len <= 188)
517
518 #endif
519                                         break;
520                                 len -= 188;
521                         }
522                 }
523                 if (len > left)
524                         len = left;
525                 if (copy_from_user(output->vbuf[output->cbuf] + output->coff,
526                                    buf, len))
527                         return -EIO;
528                 left -= len;
529                 buf += len;
530                 output->coff += len;
531                 if (output->coff == output->dma_buf_size) {
532                         output->coff = 0;
533                         output->cbuf = ((output->cbuf + 1) % output->dma_buf_num);
534                 }
535                 ddbwritel((output->cbuf << 11) | (output->coff >> 7),
536                           DMA_BUFFER_ACK(output->nr + 8));
537         }
538         return count - left;
539 }
540
541 static u32 ddb_input_avail(struct ddb_input *input)
542 {
543         struct ddb *dev = input->port->dev;
544         u32 idx, off, stat = input->stat;
545         u32 ctrl = ddbreadl(DMA_BUFFER_CONTROL(input->nr));
546
547         idx = (stat >> 11) & 0x1f;
548         off = (stat & 0x7ff) << 7;
549
550         if (ctrl & 4) {
551                 dev_err(&dev->pdev->dev, "IA %d %d %08x\n", idx, off, ctrl);
552                 ddbwritel(input->stat, DMA_BUFFER_ACK(input->nr));
553                 return 0;
554         }
555         if (input->cbuf != idx)
556                 return 188;
557         return 0;
558 }
559
560 static ssize_t ddb_input_read(struct ddb_input *input, __user u8 *buf, size_t count)
561 {
562         struct ddb *dev = input->port->dev;
563         u32 left = count;
564         u32 idx, free, stat = input->stat;
565         int ret;
566
567         idx = (stat >> 11) & 0x1f;
568
569         while (left) {
570                 if (input->cbuf == idx)
571                         return count - left;
572                 free = input->dma_buf_size - input->coff;
573                 if (free > left)
574                         free = left;
575                 ret = copy_to_user(buf, input->vbuf[input->cbuf] +
576                                    input->coff, free);
577                 if (ret)
578                         return -EFAULT;
579                 input->coff += free;
580                 if (input->coff == input->dma_buf_size) {
581                         input->coff = 0;
582                         input->cbuf = (input->cbuf+1) % input->dma_buf_num;
583                 }
584                 left -= free;
585                 ddbwritel((input->cbuf << 11) | (input->coff >> 7),
586                           DMA_BUFFER_ACK(input->nr));
587         }
588         return count;
589 }
590
591 /******************************************************************************/
592 /******************************************************************************/
593 /******************************************************************************/
594
595 #if 0
596 static struct ddb_input *fe2input(struct ddb *dev, struct dvb_frontend *fe)
597 {
598         int i;
599
600         for (i = 0; i < dev->info->port_num * 2; i++) {
601                 if (dev->input[i].fe == fe)
602                         return &dev->input[i];
603         }
604         return NULL;
605 }
606 #endif
607
608 static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
609 {
610         struct ddb_input *input = fe->sec_priv;
611         struct ddb_port *port = input->port;
612         int status;
613
614         if (enable) {
615                 mutex_lock(&port->i2c_gate_lock);
616                 status = input->gate_ctrl(fe, 1);
617         } else {
618                 status = input->gate_ctrl(fe, 0);
619                 mutex_unlock(&port->i2c_gate_lock);
620         }
621         return status;
622 }
623
624 static int demod_attach_drxk(struct ddb_input *input)
625 {
626         struct i2c_adapter *i2c = &input->port->i2c->adap;
627         struct dvb_frontend *fe;
628         struct drxk_config config;
629         struct device *dev = &input->port->dev->pdev->dev;
630
631         memset(&config, 0, sizeof(config));
632         config.microcode_name = "drxk_a3.mc";
633         config.qam_demod_parameter_count = 4;
634         config.adr = 0x29 + (input->nr & 1);
635
636         fe = input->fe = dvb_attach(drxk_attach, &config, i2c);
637         if (!input->fe) {
638                 dev_err(dev, "No DRXK found!\n");
639                 return -ENODEV;
640         }
641         fe->sec_priv = input;
642         input->gate_ctrl = fe->ops.i2c_gate_ctrl;
643         fe->ops.i2c_gate_ctrl = drxk_gate_ctrl;
644         return 0;
645 }
646
647 static int tuner_attach_tda18271(struct ddb_input *input)
648 {
649         struct i2c_adapter *i2c = &input->port->i2c->adap;
650         struct dvb_frontend *fe;
651         struct device *dev = &input->port->dev->pdev->dev;
652
653         if (input->fe->ops.i2c_gate_ctrl)
654                 input->fe->ops.i2c_gate_ctrl(input->fe, 1);
655         fe = dvb_attach(tda18271c2dd_attach, input->fe, i2c, 0x60);
656         if (!fe) {
657                 dev_err(dev, "No TDA18271 found!\n");
658                 return -ENODEV;
659         }
660         if (input->fe->ops.i2c_gate_ctrl)
661                 input->fe->ops.i2c_gate_ctrl(input->fe, 0);
662         return 0;
663 }
664
665 /******************************************************************************/
666 /******************************************************************************/
667 /******************************************************************************/
668
669 static struct stv0367_config ddb_stv0367_config[] = {
670         {
671                 .demod_address = 0x1f,
672                 .xtal = 27000000,
673                 .if_khz = 0,
674                 .if_iq_mode = FE_TER_NORMAL_IF_TUNER,
675                 .ts_mode = STV0367_SERIAL_PUNCT_CLOCK,
676                 .clk_pol = STV0367_CLOCKPOLARITY_DEFAULT,
677         }, {
678                 .demod_address = 0x1e,
679                 .xtal = 27000000,
680                 .if_khz = 0,
681                 .if_iq_mode = FE_TER_NORMAL_IF_TUNER,
682                 .ts_mode = STV0367_SERIAL_PUNCT_CLOCK,
683                 .clk_pol = STV0367_CLOCKPOLARITY_DEFAULT,
684         },
685 };
686
687 static int demod_attach_stv0367(struct ddb_input *input)
688 {
689         struct i2c_adapter *i2c = &input->port->i2c->adap;
690         struct device *dev = &input->port->dev->pdev->dev;
691
692         /* attach frontend */
693         input->fe = dvb_attach(stv0367ddb_attach,
694                 &ddb_stv0367_config[(input->nr & 1)], i2c);
695
696         if (!input->fe) {
697                 dev_err(dev, "stv0367ddb_attach failed (not found?)\n");
698                 return -ENODEV;
699         }
700
701         input->fe->sec_priv = input;
702         input->gate_ctrl = input->fe->ops.i2c_gate_ctrl;
703         input->fe->ops.i2c_gate_ctrl = drxk_gate_ctrl;
704
705         return 0;
706 }
707
708 static int tuner_tda18212_ping(struct ddb_input *input, unsigned short adr)
709 {
710         struct i2c_adapter *adapter = &input->port->i2c->adap;
711         struct device *dev = &input->port->dev->pdev->dev;
712
713         u8 tda_id[2];
714         u8 subaddr = 0x00;
715
716         dev_dbg(dev, "stv0367-tda18212 tuner ping\n");
717         if (input->fe->ops.i2c_gate_ctrl)
718                 input->fe->ops.i2c_gate_ctrl(input->fe, 1);
719
720         if (i2c_read_regs(adapter, adr, subaddr, tda_id, sizeof(tda_id)) < 0)
721                 dev_dbg(dev, "tda18212 ping 1 fail\n");
722         if (i2c_read_regs(adapter, adr, subaddr, tda_id, sizeof(tda_id)) < 0)
723                 dev_warn(dev, "tda18212 ping failed, expect problems\n");
724
725         if (input->fe->ops.i2c_gate_ctrl)
726                 input->fe->ops.i2c_gate_ctrl(input->fe, 0);
727
728         return 0;
729 }
730
731 static int demod_attach_cxd28xx(struct ddb_input *input, int par, int osc24)
732 {
733         struct i2c_adapter *i2c = &input->port->i2c->adap;
734         struct device *dev = &input->port->dev->pdev->dev;
735         struct cxd2841er_config cfg;
736
737         /* the cxd2841er driver expects 8bit/shifted I2C addresses */
738         cfg.i2c_addr = ((input->nr & 1) ? 0x6d : 0x6c) << 1;
739
740         cfg.xtal = osc24 ? SONY_XTAL_24000 : SONY_XTAL_20500;
741         cfg.flags = CXD2841ER_AUTO_IFHZ | CXD2841ER_EARLY_TUNE |
742                 CXD2841ER_NO_WAIT_LOCK | CXD2841ER_NO_AGCNEG |
743                 CXD2841ER_TSBITS;
744
745         if (!par)
746                 cfg.flags |= CXD2841ER_TS_SERIAL;
747
748         /* attach frontend */
749         input->fe = dvb_attach(cxd2841er_attach_t_c, &cfg, i2c);
750
751         if (!input->fe) {
752                 dev_err(dev, "No Sony CXD28xx found!\n");
753                 return -ENODEV;
754         }
755
756         input->fe->sec_priv = input;
757         input->gate_ctrl = input->fe->ops.i2c_gate_ctrl;
758         input->fe->ops.i2c_gate_ctrl = drxk_gate_ctrl;
759
760         return 0;
761 }
762
763 static int tuner_attach_tda18212(struct ddb_input *input, u32 porttype)
764 {
765         struct i2c_adapter *adapter = &input->port->i2c->adap;
766         struct device *dev = &input->port->dev->pdev->dev;
767         struct i2c_client *client;
768         struct tda18212_config config = {
769                 .fe = input->fe,
770                 .if_dvbt_6 = 3550,
771                 .if_dvbt_7 = 3700,
772                 .if_dvbt_8 = 4150,
773                 .if_dvbt2_6 = 3250,
774                 .if_dvbt2_7 = 4000,
775                 .if_dvbt2_8 = 4000,
776                 .if_dvbc = 5000,
777         };
778         struct i2c_board_info board_info = {
779                 .type = "tda18212",
780                 .platform_data = &config,
781         };
782
783         if (input->nr & 1)
784                 board_info.addr = 0x63;
785         else
786                 board_info.addr = 0x60;
787
788         /* due to a hardware quirk with the I2C gate on the stv0367+tda18212
789          * combo, the tda18212 must be probed by reading it's id _twice_ when
790          * cold started, or it very likely will fail.
791          */
792         if (porttype == DDB_TUNER_DVBCT_ST)
793                 tuner_tda18212_ping(input, board_info.addr);
794
795         request_module(board_info.type);
796
797         /* perform tuner init/attach */
798         client = i2c_new_device(adapter, &board_info);
799         if (client == NULL || client->dev.driver == NULL)
800                 goto err;
801
802         if (!try_module_get(client->dev.driver->owner)) {
803                 i2c_unregister_device(client);
804                 goto err;
805         }
806
807         input->i2c_client[0] = client;
808
809         return 0;
810 err:
811         dev_warn(dev, "TDA18212 tuner not found. Device is not fully operational.\n");
812         return -ENODEV;
813 }
814
815 /******************************************************************************/
816 /******************************************************************************/
817 /******************************************************************************/
818
819 static struct stv090x_config stv0900 = {
820         .device         = STV0900,
821         .demod_mode     = STV090x_DUAL,
822         .clk_mode       = STV090x_CLK_EXT,
823
824         .xtal           = 27000000,
825         .address        = 0x69,
826
827         .ts1_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
828         .ts2_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
829
830         .repeater_level = STV090x_RPTLEVEL_16,
831
832         .adc1_range     = STV090x_ADC_1Vpp,
833         .adc2_range     = STV090x_ADC_1Vpp,
834
835         .diseqc_envelope_mode = true,
836 };
837
838 static struct stv090x_config stv0900_aa = {
839         .device         = STV0900,
840         .demod_mode     = STV090x_DUAL,
841         .clk_mode       = STV090x_CLK_EXT,
842
843         .xtal           = 27000000,
844         .address        = 0x68,
845
846         .ts1_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
847         .ts2_mode       = STV090x_TSMODE_SERIAL_PUNCTURED,
848
849         .repeater_level = STV090x_RPTLEVEL_16,
850
851         .adc1_range     = STV090x_ADC_1Vpp,
852         .adc2_range     = STV090x_ADC_1Vpp,
853
854         .diseqc_envelope_mode = true,
855 };
856
857 static struct stv6110x_config stv6110a = {
858         .addr    = 0x60,
859         .refclk  = 27000000,
860         .clk_div = 1,
861 };
862
863 static struct stv6110x_config stv6110b = {
864         .addr    = 0x63,
865         .refclk  = 27000000,
866         .clk_div = 1,
867 };
868
869 static int demod_attach_stv0900(struct ddb_input *input, int type)
870 {
871         struct i2c_adapter *i2c = &input->port->i2c->adap;
872         struct device *dev = &input->port->dev->pdev->dev;
873         struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
874
875         input->fe = dvb_attach(stv090x_attach, feconf, i2c,
876                                (input->nr & 1) ? STV090x_DEMODULATOR_1
877                                : STV090x_DEMODULATOR_0);
878         if (!input->fe) {
879                 dev_err(dev, "No STV0900 found!\n");
880                 return -ENODEV;
881         }
882         if (!dvb_attach(lnbh24_attach, input->fe, i2c, 0,
883                         0, (input->nr & 1) ?
884                         (0x09 - type) : (0x0b - type))) {
885                 dev_err(dev, "No LNBH24 found!\n");
886                 return -ENODEV;
887         }
888         return 0;
889 }
890
891 static int tuner_attach_stv6110(struct ddb_input *input, int type)
892 {
893         struct i2c_adapter *i2c = &input->port->i2c->adap;
894         struct device *dev = &input->port->dev->pdev->dev;
895         struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
896         struct stv6110x_config *tunerconf = (input->nr & 1) ?
897                 &stv6110b : &stv6110a;
898         const struct stv6110x_devctl *ctl;
899
900         ctl = dvb_attach(stv6110x_attach, input->fe, tunerconf, i2c);
901         if (!ctl) {
902                 dev_err(dev, "No STV6110X found!\n");
903                 return -ENODEV;
904         }
905         dev_info(dev, "attach tuner input %d adr %02x\n",
906                          input->nr, tunerconf->addr);
907
908         feconf->tuner_init          = ctl->tuner_init;
909         feconf->tuner_sleep         = ctl->tuner_sleep;
910         feconf->tuner_set_mode      = ctl->tuner_set_mode;
911         feconf->tuner_set_frequency = ctl->tuner_set_frequency;
912         feconf->tuner_get_frequency = ctl->tuner_get_frequency;
913         feconf->tuner_set_bandwidth = ctl->tuner_set_bandwidth;
914         feconf->tuner_get_bandwidth = ctl->tuner_get_bandwidth;
915         feconf->tuner_set_bbgain    = ctl->tuner_set_bbgain;
916         feconf->tuner_get_bbgain    = ctl->tuner_get_bbgain;
917         feconf->tuner_set_refclk    = ctl->tuner_set_refclk;
918         feconf->tuner_get_status    = ctl->tuner_get_status;
919
920         return 0;
921 }
922
923 static int my_dvb_dmx_ts_card_init(struct dvb_demux *dvbdemux, char *id,
924                             int (*start_feed)(struct dvb_demux_feed *),
925                             int (*stop_feed)(struct dvb_demux_feed *),
926                             void *priv)
927 {
928         dvbdemux->priv = priv;
929
930         dvbdemux->filternum = 256;
931         dvbdemux->feednum = 256;
932         dvbdemux->start_feed = start_feed;
933         dvbdemux->stop_feed = stop_feed;
934         dvbdemux->write_to_decoder = NULL;
935         dvbdemux->dmx.capabilities = (DMX_TS_FILTERING |
936                                       DMX_SECTION_FILTERING |
937                                       DMX_MEMORY_BASED_FILTERING);
938         return dvb_dmx_init(dvbdemux);
939 }
940
941 static int my_dvb_dmxdev_ts_card_init(struct dmxdev *dmxdev,
942                                struct dvb_demux *dvbdemux,
943                                struct dmx_frontend *hw_frontend,
944                                struct dmx_frontend *mem_frontend,
945                                struct dvb_adapter *dvb_adapter)
946 {
947         int ret;
948
949         dmxdev->filternum = 256;
950         dmxdev->demux = &dvbdemux->dmx;
951         dmxdev->capabilities = 0;
952         ret = dvb_dmxdev_init(dmxdev, dvb_adapter);
953         if (ret < 0)
954                 return ret;
955
956         hw_frontend->source = DMX_FRONTEND_0;
957         dvbdemux->dmx.add_frontend(&dvbdemux->dmx, hw_frontend);
958         mem_frontend->source = DMX_MEMORY_FE;
959         dvbdemux->dmx.add_frontend(&dvbdemux->dmx, mem_frontend);
960         return dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, hw_frontend);
961 }
962
963 static int start_feed(struct dvb_demux_feed *dvbdmxfeed)
964 {
965         struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
966         struct ddb_input *input = dvbdmx->priv;
967
968         if (!input->users)
969                 ddb_input_start(input);
970
971         return ++input->users;
972 }
973
974 static int stop_feed(struct dvb_demux_feed *dvbdmxfeed)
975 {
976         struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
977         struct ddb_input *input = dvbdmx->priv;
978
979         if (--input->users)
980                 return input->users;
981
982         ddb_input_stop(input);
983         return 0;
984 }
985
986
987 static void dvb_input_detach(struct ddb_input *input)
988 {
989         struct dvb_adapter *adap = &input->adap;
990         struct dvb_demux *dvbdemux = &input->demux;
991         struct i2c_client *client;
992
993         switch (input->attached) {
994         case 5:
995                 client = input->i2c_client[0];
996                 if (client) {
997                         module_put(client->dev.driver->owner);
998                         i2c_unregister_device(client);
999                 }
1000                 if (input->fe2) {
1001                         dvb_unregister_frontend(input->fe2);
1002                         input->fe2 = NULL;
1003                 }
1004                 if (input->fe) {
1005                         dvb_unregister_frontend(input->fe);
1006                         dvb_frontend_detach(input->fe);
1007                         input->fe = NULL;
1008                 }
1009                 /* fall-through */
1010         case 4:
1011                 dvb_net_release(&input->dvbnet);
1012                 /* fall-through */
1013         case 3:
1014                 dvbdemux->dmx.close(&dvbdemux->dmx);
1015                 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
1016                                               &input->hw_frontend);
1017                 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
1018                                               &input->mem_frontend);
1019                 dvb_dmxdev_release(&input->dmxdev);
1020                 /* fall-through */
1021         case 2:
1022                 dvb_dmx_release(&input->demux);
1023                 /* fall-through */
1024         case 1:
1025                 dvb_unregister_adapter(adap);
1026         }
1027         input->attached = 0;
1028 }
1029
1030 static int dvb_input_attach(struct ddb_input *input)
1031 {
1032         int ret;
1033         struct ddb_port *port = input->port;
1034         struct dvb_adapter *adap = &input->adap;
1035         struct dvb_demux *dvbdemux = &input->demux;
1036         struct device *dev = &input->port->dev->pdev->dev;
1037         int sony_osc24 = 0, sony_tspar = 0;
1038
1039         ret = dvb_register_adapter(adap, "DDBridge", THIS_MODULE,
1040                                    &input->port->dev->pdev->dev,
1041                                    adapter_nr);
1042         if (ret < 0) {
1043                 dev_err(dev, "Could not register adapter. Check if you enabled enough adapters in dvb-core!\n");
1044                 return ret;
1045         }
1046         input->attached = 1;
1047
1048         ret = my_dvb_dmx_ts_card_init(dvbdemux, "SW demux",
1049                                       start_feed,
1050                                       stop_feed, input);
1051         if (ret < 0)
1052                 return ret;
1053         input->attached = 2;
1054
1055         ret = my_dvb_dmxdev_ts_card_init(&input->dmxdev, &input->demux,
1056                                          &input->hw_frontend,
1057                                          &input->mem_frontend, adap);
1058         if (ret < 0)
1059                 return ret;
1060         input->attached = 3;
1061
1062         ret = dvb_net_init(adap, &input->dvbnet, input->dmxdev.demux);
1063         if (ret < 0)
1064                 return ret;
1065         input->attached = 4;
1066
1067         input->fe = NULL;
1068         switch (port->type) {
1069         case DDB_TUNER_DVBS_ST:
1070                 if (demod_attach_stv0900(input, 0) < 0)
1071                         return -ENODEV;
1072                 if (tuner_attach_stv6110(input, 0) < 0)
1073                         return -ENODEV;
1074                 if (input->fe) {
1075                         if (dvb_register_frontend(adap, input->fe) < 0)
1076                                 return -ENODEV;
1077                 }
1078                 break;
1079         case DDB_TUNER_DVBS_ST_AA:
1080                 if (demod_attach_stv0900(input, 1) < 0)
1081                         return -ENODEV;
1082                 if (tuner_attach_stv6110(input, 1) < 0)
1083                         return -ENODEV;
1084                 if (input->fe) {
1085                         if (dvb_register_frontend(adap, input->fe) < 0)
1086                                 return -ENODEV;
1087                 }
1088                 break;
1089         case DDB_TUNER_DVBCT_TR:
1090                 if (demod_attach_drxk(input) < 0)
1091                         return -ENODEV;
1092                 if (tuner_attach_tda18271(input) < 0)
1093                         return -ENODEV;
1094                 if (dvb_register_frontend(adap, input->fe) < 0)
1095                         return -ENODEV;
1096                 if (input->fe2) {
1097                         if (dvb_register_frontend(adap, input->fe2) < 0)
1098                                 return -ENODEV;
1099                         input->fe2->tuner_priv = input->fe->tuner_priv;
1100                         memcpy(&input->fe2->ops.tuner_ops,
1101                                &input->fe->ops.tuner_ops,
1102                                sizeof(struct dvb_tuner_ops));
1103                 }
1104                 break;
1105         case DDB_TUNER_DVBCT_ST:
1106                 if (demod_attach_stv0367(input) < 0)
1107                         return -ENODEV;
1108                 if (tuner_attach_tda18212(input, port->type) < 0)
1109                         return -ENODEV;
1110                 if (input->fe) {
1111                         if (dvb_register_frontend(adap, input->fe) < 0)
1112                                 return -ENODEV;
1113                 }
1114                 break;
1115         case DDB_TUNER_DVBC2T2I_SONY_P:
1116         case DDB_TUNER_DVBCT2_SONY_P:
1117         case DDB_TUNER_DVBC2T2_SONY_P:
1118         case DDB_TUNER_ISDBT_SONY_P:
1119                 if (port->type == DDB_TUNER_DVBC2T2I_SONY_P)
1120                         sony_osc24 = 1;
1121                 if (input->port->dev->info->ts_quirks & TS_QUIRK_ALT_OSC)
1122                         sony_osc24 = 0;
1123                 if (input->port->dev->info->ts_quirks & TS_QUIRK_SERIAL)
1124                         sony_tspar = 0;
1125                 else
1126                         sony_tspar = 1;
1127
1128                 if (demod_attach_cxd28xx(input, sony_tspar, sony_osc24) < 0)
1129                         return -ENODEV;
1130                 if (tuner_attach_tda18212(input, port->type) < 0)
1131                         return -ENODEV;
1132                 if (input->fe) {
1133                         if (dvb_register_frontend(adap, input->fe) < 0)
1134                                 return -ENODEV;
1135                 }
1136                 break;
1137         case DDB_TUNER_XO2_DVBC2T2I_SONY:
1138         case DDB_TUNER_XO2_DVBCT2_SONY:
1139         case DDB_TUNER_XO2_DVBC2T2_SONY:
1140         case DDB_TUNER_XO2_ISDBT_SONY:
1141                 if (port->type == DDB_TUNER_XO2_DVBC2T2I_SONY)
1142                         sony_osc24 = 1;
1143
1144                 if (demod_attach_cxd28xx(input, 0, sony_osc24) < 0)
1145                         return -ENODEV;
1146                 if (tuner_attach_tda18212(input, port->type) < 0)
1147                         return -ENODEV;
1148                 if (input->fe) {
1149                         if (dvb_register_frontend(adap, input->fe) < 0)
1150                                 return -ENODEV;
1151                 }
1152                 break;
1153         }
1154
1155         input->attached = 5;
1156         return 0;
1157 }
1158
1159 /****************************************************************************/
1160 /****************************************************************************/
1161
1162 static ssize_t ts_write(struct file *file, const __user char *buf,
1163                         size_t count, loff_t *ppos)
1164 {
1165         struct dvb_device *dvbdev = file->private_data;
1166         struct ddb_output *output = dvbdev->priv;
1167         size_t left = count;
1168         int stat;
1169
1170         while (left) {
1171                 if (ddb_output_free(output) < 188) {
1172                         if (file->f_flags & O_NONBLOCK)
1173                                 break;
1174                         if (wait_event_interruptible(
1175                                     output->wq, ddb_output_free(output) >= 188) < 0)
1176                                 break;
1177                 }
1178                 stat = ddb_output_write(output, buf, left);
1179                 if (stat < 0)
1180                         break;
1181                 buf += stat;
1182                 left -= stat;
1183         }
1184         return (left == count) ? -EAGAIN : (count - left);
1185 }
1186
1187 static ssize_t ts_read(struct file *file, __user char *buf,
1188                        size_t count, loff_t *ppos)
1189 {
1190         struct dvb_device *dvbdev = file->private_data;
1191         struct ddb_output *output = dvbdev->priv;
1192         struct ddb_input *input = output->port->input[0];
1193         int left, read;
1194
1195         count -= count % 188;
1196         left = count;
1197         while (left) {
1198                 if (ddb_input_avail(input) < 188) {
1199                         if (file->f_flags & O_NONBLOCK)
1200                                 break;
1201                         if (wait_event_interruptible(
1202                                     input->wq, ddb_input_avail(input) >= 188) < 0)
1203                                 break;
1204                 }
1205                 read = ddb_input_read(input, buf, left);
1206                 if (read < 0)
1207                         return read;
1208                 left -= read;
1209                 buf += read;
1210         }
1211         return (left == count) ? -EAGAIN : (count - left);
1212 }
1213
1214 static unsigned int ts_poll(struct file *file, poll_table *wait)
1215 {
1216         /*
1217         struct dvb_device *dvbdev = file->private_data;
1218         struct ddb_output *output = dvbdev->priv;
1219         struct ddb_input *input = output->port->input[0];
1220         */
1221         unsigned int mask = 0;
1222
1223 #if 0
1224         if (data_avail_to_read)
1225                 mask |= POLLIN | POLLRDNORM;
1226         if (data_avail_to_write)
1227                 mask |= POLLOUT | POLLWRNORM;
1228
1229         poll_wait(file, &read_queue, wait);
1230         poll_wait(file, &write_queue, wait);
1231 #endif
1232         return mask;
1233 }
1234
1235 static const struct file_operations ci_fops = {
1236         .owner   = THIS_MODULE,
1237         .read    = ts_read,
1238         .write   = ts_write,
1239         .open    = dvb_generic_open,
1240         .release = dvb_generic_release,
1241         .poll    = ts_poll,
1242 };
1243
1244 static struct dvb_device dvbdev_ci = {
1245         .readers = -1,
1246         .writers = -1,
1247         .users   = -1,
1248         .fops    = &ci_fops,
1249 };
1250
1251 /****************************************************************************/
1252 /****************************************************************************/
1253 /****************************************************************************/
1254
1255 static void input_tasklet(unsigned long data)
1256 {
1257         struct ddb_input *input = (struct ddb_input *) data;
1258         struct ddb *dev = input->port->dev;
1259
1260         spin_lock(&input->lock);
1261         if (!input->running) {
1262                 spin_unlock(&input->lock);
1263                 return;
1264         }
1265         input->stat = ddbreadl(DMA_BUFFER_CURRENT(input->nr));
1266
1267         if (input->port->class == DDB_PORT_TUNER) {
1268                 if (4&ddbreadl(DMA_BUFFER_CONTROL(input->nr)))
1269                         dev_err(&dev->pdev->dev, "Overflow input %d\n", input->nr);
1270                 while (input->cbuf != ((input->stat >> 11) & 0x1f)
1271                        || (4 & safe_ddbreadl(dev, DMA_BUFFER_CONTROL(input->nr)))) {
1272                         dvb_dmx_swfilter_packets(&input->demux,
1273                                                  input->vbuf[input->cbuf],
1274                                                  input->dma_buf_size / 188);
1275
1276                         input->cbuf = (input->cbuf + 1) % input->dma_buf_num;
1277                         ddbwritel((input->cbuf << 11),
1278                                   DMA_BUFFER_ACK(input->nr));
1279                         input->stat = ddbreadl(DMA_BUFFER_CURRENT(input->nr));
1280                        }
1281         }
1282         if (input->port->class == DDB_PORT_CI)
1283                 wake_up(&input->wq);
1284         spin_unlock(&input->lock);
1285 }
1286
1287 static void output_tasklet(unsigned long data)
1288 {
1289         struct ddb_output *output = (struct ddb_output *) data;
1290         struct ddb *dev = output->port->dev;
1291
1292         spin_lock(&output->lock);
1293         if (!output->running) {
1294                 spin_unlock(&output->lock);
1295                 return;
1296         }
1297         output->stat = ddbreadl(DMA_BUFFER_CURRENT(output->nr + 8));
1298         wake_up(&output->wq);
1299         spin_unlock(&output->lock);
1300 }
1301
1302
1303 static struct cxd2099_cfg cxd_cfg = {
1304         .bitrate =  62000,
1305         .adr     =  0x40,
1306         .polarity = 1,
1307         .clock_mode = 1,
1308         .max_i2c = 512,
1309 };
1310
1311 static int ddb_ci_attach(struct ddb_port *port)
1312 {
1313         int ret;
1314
1315         ret = dvb_register_adapter(&port->output->adap,
1316                                    "DDBridge",
1317                                    THIS_MODULE,
1318                                    &port->dev->pdev->dev,
1319                                    adapter_nr);
1320         if (ret < 0)
1321                 return ret;
1322         port->en = cxd2099_attach(&cxd_cfg, port, &port->i2c->adap);
1323         if (!port->en) {
1324                 dvb_unregister_adapter(&port->output->adap);
1325                 return -ENODEV;
1326         }
1327         ddb_input_start(port->input[0]);
1328         ddb_output_start(port->output);
1329         dvb_ca_en50221_init(&port->output->adap,
1330                             port->en, 0, 1);
1331         ret = dvb_register_device(&port->output->adap, &port->output->dev,
1332                                   &dvbdev_ci, (void *) port->output,
1333                                   DVB_DEVICE_SEC, 0);
1334         return ret;
1335 }
1336
1337 static int ddb_port_attach(struct ddb_port *port)
1338 {
1339         struct device *dev = &port->dev->pdev->dev;
1340         int ret = 0;
1341
1342         switch (port->class) {
1343         case DDB_PORT_TUNER:
1344                 ret = dvb_input_attach(port->input[0]);
1345                 if (ret < 0)
1346                         break;
1347                 ret = dvb_input_attach(port->input[1]);
1348                 break;
1349         case DDB_PORT_CI:
1350                 ret = ddb_ci_attach(port);
1351                 break;
1352         default:
1353                 break;
1354         }
1355         if (ret < 0)
1356                 dev_err(dev, "port_attach on port %d failed\n", port->nr);
1357         return ret;
1358 }
1359
1360 static int ddb_ports_attach(struct ddb *dev)
1361 {
1362         int i, ret = 0;
1363         struct ddb_port *port;
1364
1365         for (i = 0; i < dev->info->port_num; i++) {
1366                 port = &dev->port[i];
1367                 ret = ddb_port_attach(port);
1368                 if (ret < 0)
1369                         break;
1370         }
1371         return ret;
1372 }
1373
1374 static void ddb_ports_detach(struct ddb *dev)
1375 {
1376         int i;
1377         struct ddb_port *port;
1378
1379         for (i = 0; i < dev->info->port_num; i++) {
1380                 port = &dev->port[i];
1381                 switch (port->class) {
1382                 case DDB_PORT_TUNER:
1383                         dvb_input_detach(port->input[0]);
1384                         dvb_input_detach(port->input[1]);
1385                         break;
1386                 case DDB_PORT_CI:
1387                         dvb_unregister_device(port->output->dev);
1388                         if (port->en) {
1389                                 ddb_input_stop(port->input[0]);
1390                                 ddb_output_stop(port->output);
1391                                 dvb_ca_en50221_release(port->en);
1392                                 kfree(port->en);
1393                                 port->en = NULL;
1394                                 dvb_unregister_adapter(&port->output->adap);
1395                         }
1396                         break;
1397                 }
1398         }
1399 }
1400
1401 /****************************************************************************/
1402 /****************************************************************************/
1403
1404 static int init_xo2(struct ddb_port *port)
1405 {
1406         struct i2c_adapter *i2c = &port->i2c->adap;
1407         struct device *dev = &port->dev->pdev->dev;
1408         u8 val, data[2];
1409         int res;
1410
1411         res = i2c_read_regs(i2c, 0x10, 0x04, data, 2);
1412         if (res < 0)
1413                 return res;
1414
1415         if (data[0] != 0x01)  {
1416                 dev_info(dev, "Port %d: invalid XO2\n", port->nr);
1417                 return -1;
1418         }
1419
1420         i2c_read_reg(i2c, 0x10, 0x08, &val);
1421         if (val != 0) {
1422                 i2c_write_reg(i2c, 0x10, 0x08, 0x00);
1423                 msleep(100);
1424         }
1425         /* Enable tuner power, disable pll, reset demods */
1426         i2c_write_reg(i2c, 0x10, 0x08, 0x04);
1427         usleep_range(2000, 3000);
1428         /* Release demod resets */
1429         i2c_write_reg(i2c, 0x10, 0x08, 0x07);
1430
1431         /* speed: 0=55,1=75,2=90,3=104 MBit/s */
1432         i2c_write_reg(i2c, 0x10, 0x09,
1433                 ((xo2_speed >= 0 && xo2_speed <= 3) ? xo2_speed : 2));
1434
1435         i2c_write_reg(i2c, 0x10, 0x0a, 0x01);
1436         i2c_write_reg(i2c, 0x10, 0x0b, 0x01);
1437
1438         usleep_range(2000, 3000);
1439         /* Start XO2 PLL */
1440         i2c_write_reg(i2c, 0x10, 0x08, 0x87);
1441
1442         return 0;
1443 }
1444
1445 static int port_has_xo2(struct ddb_port *port, u8 *type, u8 *id)
1446 {
1447         u8 probe[1] = { 0x00 }, data[4];
1448
1449         *type = DDB_XO2_TYPE_NONE;
1450
1451         if (i2c_io(&port->i2c->adap, 0x10, probe, 1, data, 4))
1452                 return 0;
1453         if (data[0] == 'D' && data[1] == 'F') {
1454                 *id = data[2];
1455                 *type = DDB_XO2_TYPE_DUOFLEX;
1456                 return 1;
1457         }
1458         if (data[0] == 'C' && data[1] == 'I') {
1459                 *id = data[2];
1460                 *type = DDB_XO2_TYPE_CI;
1461                 return 1;
1462         }
1463         return 0;
1464 }
1465
1466 /****************************************************************************/
1467 /****************************************************************************/
1468
1469 static int port_has_ci(struct ddb_port *port)
1470 {
1471         u8 val;
1472         return i2c_read_reg(&port->i2c->adap, 0x40, 0, &val) ? 0 : 1;
1473 }
1474
1475 static int port_has_stv0900(struct ddb_port *port)
1476 {
1477         u8 val;
1478         if (i2c_read_reg16(&port->i2c->adap, 0x69, 0xf100, &val) < 0)
1479                 return 0;
1480         return 1;
1481 }
1482
1483 static int port_has_stv0900_aa(struct ddb_port *port)
1484 {
1485         u8 val;
1486         if (i2c_read_reg16(&port->i2c->adap, 0x68, 0xf100, &val) < 0)
1487                 return 0;
1488         return 1;
1489 }
1490
1491 static int port_has_drxks(struct ddb_port *port)
1492 {
1493         u8 val;
1494         if (i2c_read(&port->i2c->adap, 0x29, &val) < 0)
1495                 return 0;
1496         if (i2c_read(&port->i2c->adap, 0x2a, &val) < 0)
1497                 return 0;
1498         return 1;
1499 }
1500
1501 static int port_has_stv0367(struct ddb_port *port)
1502 {
1503         u8 val;
1504         if (i2c_read_reg16(&port->i2c->adap, 0x1e, 0xf000, &val) < 0)
1505                 return 0;
1506         if (val != 0x60)
1507                 return 0;
1508         if (i2c_read_reg16(&port->i2c->adap, 0x1f, 0xf000, &val) < 0)
1509                 return 0;
1510         if (val != 0x60)
1511                 return 0;
1512         return 1;
1513 }
1514
1515 static int port_has_cxd28xx(struct ddb_port *port, u8 *id)
1516 {
1517         struct i2c_adapter *i2c = &port->i2c->adap;
1518         int status;
1519
1520         status = i2c_write_reg(&port->i2c->adap, 0x6e, 0, 0);
1521         if (status)
1522                 return 0;
1523         status = i2c_read_reg(i2c, 0x6e, 0xfd, id);
1524         if (status)
1525                 return 0;
1526         return 1;
1527 }
1528
1529 static void ddb_port_probe(struct ddb_port *port)
1530 {
1531         struct ddb *dev = port->dev;
1532         char *modname = "NO MODULE";
1533         u8 xo2_type, xo2_id, cxd_id;
1534
1535         port->class = DDB_PORT_NONE;
1536
1537         if (port_has_ci(port)) {
1538                 modname = "CI";
1539                 port->class = DDB_PORT_CI;
1540                 ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
1541         } else if (port_has_xo2(port, &xo2_type, &xo2_id)) {
1542                 dev_dbg(&dev->pdev->dev, "Port %d (TAB %d): XO2 type: %d, id: %d\n",
1543                         port->nr, port->nr+1, xo2_type, xo2_id);
1544
1545                 ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
1546
1547                 switch (xo2_type) {
1548                 case DDB_XO2_TYPE_DUOFLEX:
1549                         init_xo2(port);
1550                         switch (xo2_id >> 2) {
1551                         case 0:
1552                                 modname = "DUAL DVB-S2 (unsupported)";
1553                                 port->class = DDB_PORT_NONE;
1554                                 port->type = DDB_TUNER_XO2_DVBS_STV0910;
1555                                 break;
1556                         case 1:
1557                                 modname = "DUAL DVB-C/T/T2";
1558                                 port->class = DDB_PORT_TUNER;
1559                                 port->type = DDB_TUNER_XO2_DVBCT2_SONY;
1560                                 break;
1561                         case 2:
1562                                 modname = "DUAL DVB-ISDBT";
1563                                 port->class = DDB_PORT_TUNER;
1564                                 port->type = DDB_TUNER_XO2_ISDBT_SONY;
1565                                 break;
1566                         case 3:
1567                                 modname = "DUAL DVB-C/C2/T/T2";
1568                                 port->class = DDB_PORT_TUNER;
1569                                 port->type = DDB_TUNER_XO2_DVBC2T2_SONY;
1570                                 break;
1571                         case 4:
1572                                 modname = "DUAL ATSC (unsupported)";
1573                                 port->class = DDB_PORT_NONE;
1574                                 port->type = DDB_TUNER_XO2_ATSC_ST;
1575                                 break;
1576                         case 5:
1577                                 modname = "DUAL DVB-C/C2/T/T2/ISDBT";
1578                                 port->class = DDB_PORT_TUNER;
1579                                 port->type = DDB_TUNER_XO2_DVBC2T2I_SONY;
1580                                 break;
1581                         default:
1582                                 modname = "Unknown XO2 DuoFlex module\n";
1583                                 break;
1584                         }
1585                         break;
1586                 case DDB_XO2_TYPE_CI:
1587                         dev_info(&dev->pdev->dev, "DuoFlex CI modules not supported\n");
1588                         break;
1589                 default:
1590                         dev_info(&dev->pdev->dev, "Unknown XO2 DuoFlex module\n");
1591                         break;
1592                 }
1593         } else if (port_has_cxd28xx(port, &cxd_id)) {
1594                 switch (cxd_id) {
1595                 case 0xa4:
1596                         modname = "DUAL DVB-C2T2 CXD2843";
1597                         port->class = DDB_PORT_TUNER;
1598                         port->type = DDB_TUNER_DVBC2T2_SONY_P;
1599                         break;
1600                 case 0xb1:
1601                         modname = "DUAL DVB-CT2 CXD2837";
1602                         port->class = DDB_PORT_TUNER;
1603                         port->type = DDB_TUNER_DVBCT2_SONY_P;
1604                         break;
1605                 case 0xb0:
1606                         modname = "DUAL ISDB-T CXD2838";
1607                         port->class = DDB_PORT_TUNER;
1608                         port->type = DDB_TUNER_ISDBT_SONY_P;
1609                         break;
1610                 case 0xc1:
1611                         modname = "DUAL DVB-C2T2 ISDB-T CXD2854";
1612                         port->class = DDB_PORT_TUNER;
1613                         port->type = DDB_TUNER_DVBC2T2I_SONY_P;
1614                         break;
1615                 default:
1616                         modname = "Unknown CXD28xx tuner";
1617                         break;
1618                 }
1619                 ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
1620         } else if (port_has_stv0900(port)) {
1621                 modname = "DUAL DVB-S2";
1622                 port->class = DDB_PORT_TUNER;
1623                 port->type = DDB_TUNER_DVBS_ST;
1624                 ddbwritel(I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
1625         } else if (port_has_stv0900_aa(port)) {
1626                 modname = "DUAL DVB-S2";
1627                 port->class = DDB_PORT_TUNER;
1628                 port->type = DDB_TUNER_DVBS_ST_AA;
1629                 ddbwritel(I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
1630         } else if (port_has_drxks(port)) {
1631                 modname = "DUAL DVB-C/T";
1632                 port->class = DDB_PORT_TUNER;
1633                 port->type = DDB_TUNER_DVBCT_TR;
1634                 ddbwritel(I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
1635         } else if (port_has_stv0367(port)) {
1636                 modname = "DUAL DVB-C/T";
1637                 port->class = DDB_PORT_TUNER;
1638                 port->type = DDB_TUNER_DVBCT_ST;
1639                 ddbwritel(I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
1640         }
1641
1642         dev_info(&dev->pdev->dev, "Port %d (TAB %d): %s\n",
1643                          port->nr, port->nr+1, modname);
1644 }
1645
1646 static void ddb_input_init(struct ddb_port *port, int nr)
1647 {
1648         struct ddb *dev = port->dev;
1649         struct ddb_input *input = &dev->input[nr];
1650
1651         input->nr = nr;
1652         input->port = port;
1653         input->dma_buf_num = INPUT_DMA_BUFS;
1654         input->dma_buf_size = INPUT_DMA_SIZE;
1655         ddbwritel(0, TS_INPUT_CONTROL(nr));
1656         ddbwritel(2, TS_INPUT_CONTROL(nr));
1657         ddbwritel(0, TS_INPUT_CONTROL(nr));
1658         ddbwritel(0, DMA_BUFFER_ACK(nr));
1659         tasklet_init(&input->tasklet, input_tasklet, (unsigned long) input);
1660         spin_lock_init(&input->lock);
1661         init_waitqueue_head(&input->wq);
1662 }
1663
1664 static void ddb_output_init(struct ddb_port *port, int nr)
1665 {
1666         struct ddb *dev = port->dev;
1667         struct ddb_output *output = &dev->output[nr];
1668         output->nr = nr;
1669         output->port = port;
1670         output->dma_buf_num = OUTPUT_DMA_BUFS;
1671         output->dma_buf_size = OUTPUT_DMA_SIZE;
1672
1673         ddbwritel(0, TS_OUTPUT_CONTROL(nr));
1674         ddbwritel(2, TS_OUTPUT_CONTROL(nr));
1675         ddbwritel(0, TS_OUTPUT_CONTROL(nr));
1676         tasklet_init(&output->tasklet, output_tasklet, (unsigned long) output);
1677         init_waitqueue_head(&output->wq);
1678 }
1679
1680 static void ddb_ports_init(struct ddb *dev)
1681 {
1682         int i;
1683         struct ddb_port *port;
1684
1685         for (i = 0; i < dev->info->port_num; i++) {
1686                 port = &dev->port[i];
1687                 port->dev = dev;
1688                 port->nr = i;
1689                 port->i2c = &dev->i2c[i];
1690                 port->input[0] = &dev->input[2 * i];
1691                 port->input[1] = &dev->input[2 * i + 1];
1692                 port->output = &dev->output[i];
1693
1694                 mutex_init(&port->i2c_gate_lock);
1695                 ddb_port_probe(port);
1696                 ddb_input_init(port, 2 * i);
1697                 ddb_input_init(port, 2 * i + 1);
1698                 ddb_output_init(port, i);
1699         }
1700 }
1701
1702 static void ddb_ports_release(struct ddb *dev)
1703 {
1704         int i;
1705         struct ddb_port *port;
1706
1707         for (i = 0; i < dev->info->port_num; i++) {
1708                 port = &dev->port[i];
1709                 port->dev = dev;
1710                 tasklet_kill(&port->input[0]->tasklet);
1711                 tasklet_kill(&port->input[1]->tasklet);
1712                 tasklet_kill(&port->output->tasklet);
1713         }
1714 }
1715
1716 /****************************************************************************/
1717 /****************************************************************************/
1718 /****************************************************************************/
1719
1720 static void irq_handle_i2c(struct ddb *dev, int n)
1721 {
1722         struct ddb_i2c *i2c = &dev->i2c[n];
1723
1724         i2c->done = 1;
1725         wake_up(&i2c->wq);
1726 }
1727
1728 static irqreturn_t irq_handler(int irq, void *dev_id)
1729 {
1730         struct ddb *dev = (struct ddb *) dev_id;
1731         u32 s = ddbreadl(INTERRUPT_STATUS);
1732
1733         if (!s)
1734                 return IRQ_NONE;
1735
1736         do {
1737                 ddbwritel(s, INTERRUPT_ACK);
1738
1739                 if (s & 0x00000001)
1740                         irq_handle_i2c(dev, 0);
1741                 if (s & 0x00000002)
1742                         irq_handle_i2c(dev, 1);
1743                 if (s & 0x00000004)
1744                         irq_handle_i2c(dev, 2);
1745                 if (s & 0x00000008)
1746                         irq_handle_i2c(dev, 3);
1747
1748                 if (s & 0x00000100)
1749                         tasklet_schedule(&dev->input[0].tasklet);
1750                 if (s & 0x00000200)
1751                         tasklet_schedule(&dev->input[1].tasklet);
1752                 if (s & 0x00000400)
1753                         tasklet_schedule(&dev->input[2].tasklet);
1754                 if (s & 0x00000800)
1755                         tasklet_schedule(&dev->input[3].tasklet);
1756                 if (s & 0x00001000)
1757                         tasklet_schedule(&dev->input[4].tasklet);
1758                 if (s & 0x00002000)
1759                         tasklet_schedule(&dev->input[5].tasklet);
1760                 if (s & 0x00004000)
1761                         tasklet_schedule(&dev->input[6].tasklet);
1762                 if (s & 0x00008000)
1763                         tasklet_schedule(&dev->input[7].tasklet);
1764
1765                 if (s & 0x00010000)
1766                         tasklet_schedule(&dev->output[0].tasklet);
1767                 if (s & 0x00020000)
1768                         tasklet_schedule(&dev->output[1].tasklet);
1769                 if (s & 0x00040000)
1770                         tasklet_schedule(&dev->output[2].tasklet);
1771                 if (s & 0x00080000)
1772                         tasklet_schedule(&dev->output[3].tasklet);
1773
1774                 /* if (s & 0x000f0000)  printk(KERN_DEBUG "%08x\n", istat); */
1775         } while ((s = ddbreadl(INTERRUPT_STATUS)));
1776
1777         return IRQ_HANDLED;
1778 }
1779
1780 /******************************************************************************/
1781 /******************************************************************************/
1782 /******************************************************************************/
1783
1784 static int flashio(struct ddb *dev, u8 *wbuf, u32 wlen, u8 *rbuf, u32 rlen)
1785 {
1786         u32 data, shift;
1787
1788         if (wlen > 4)
1789                 ddbwritel(1, SPI_CONTROL);
1790         while (wlen > 4) {
1791                 /* FIXME: check for big-endian */
1792                 data = swab32(*(u32 *)wbuf);
1793                 wbuf += 4;
1794                 wlen -= 4;
1795                 ddbwritel(data, SPI_DATA);
1796                 while (safe_ddbreadl(dev, SPI_CONTROL) & 0x0004)
1797                         ;
1798         }
1799
1800         if (rlen)
1801                 ddbwritel(0x0001 | ((wlen << (8 + 3)) & 0x1f00), SPI_CONTROL);
1802         else
1803                 ddbwritel(0x0003 | ((wlen << (8 + 3)) & 0x1f00), SPI_CONTROL);
1804
1805         data = 0;
1806         shift = ((4 - wlen) * 8);
1807         while (wlen) {
1808                 data <<= 8;
1809                 data |= *wbuf;
1810                 wlen--;
1811                 wbuf++;
1812         }
1813         if (shift)
1814                 data <<= shift;
1815         ddbwritel(data, SPI_DATA);
1816         while (safe_ddbreadl(dev, SPI_CONTROL) & 0x0004)
1817                 ;
1818
1819         if (!rlen) {
1820                 ddbwritel(0, SPI_CONTROL);
1821                 return 0;
1822         }
1823         if (rlen > 4)
1824                 ddbwritel(1, SPI_CONTROL);
1825
1826         while (rlen > 4) {
1827                 ddbwritel(0xffffffff, SPI_DATA);
1828                 while (safe_ddbreadl(dev, SPI_CONTROL) & 0x0004)
1829                         ;
1830                 data = ddbreadl(SPI_DATA);
1831                 *(u32 *) rbuf = swab32(data);
1832                 rbuf += 4;
1833                 rlen -= 4;
1834         }
1835         ddbwritel(0x0003 | ((rlen << (8 + 3)) & 0x1F00), SPI_CONTROL);
1836         ddbwritel(0xffffffff, SPI_DATA);
1837         while (safe_ddbreadl(dev, SPI_CONTROL) & 0x0004)
1838                 ;
1839
1840         data = ddbreadl(SPI_DATA);
1841         ddbwritel(0, SPI_CONTROL);
1842
1843         if (rlen < 4)
1844                 data <<= ((4 - rlen) * 8);
1845
1846         while (rlen > 0) {
1847                 *rbuf = ((data >> 24) & 0xff);
1848                 data <<= 8;
1849                 rbuf++;
1850                 rlen--;
1851         }
1852         return 0;
1853 }
1854
1855 #define DDB_MAGIC 'd'
1856
1857 struct ddb_flashio {
1858         __user __u8 *write_buf;
1859         __u32 write_len;
1860         __user __u8 *read_buf;
1861         __u32 read_len;
1862 };
1863
1864 #define IOCTL_DDB_FLASHIO  _IOWR(DDB_MAGIC, 0x00, struct ddb_flashio)
1865
1866 #define DDB_NAME "ddbridge"
1867
1868 static u32 ddb_num;
1869 static struct ddb *ddbs[32];
1870 static struct class *ddb_class;
1871 static int ddb_major;
1872
1873 static int ddb_open(struct inode *inode, struct file *file)
1874 {
1875         struct ddb *dev = ddbs[iminor(inode)];
1876
1877         file->private_data = dev;
1878         return 0;
1879 }
1880
1881 static long ddb_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1882 {
1883         struct ddb *dev = file->private_data;
1884         __user void *parg = (__user void *)arg;
1885         int res;
1886
1887         switch (cmd) {
1888         case IOCTL_DDB_FLASHIO:
1889         {
1890                 struct ddb_flashio fio;
1891                 u8 *rbuf, *wbuf;
1892
1893                 if (copy_from_user(&fio, parg, sizeof(fio)))
1894                         return -EFAULT;
1895
1896                 if (fio.write_len > 1028 || fio.read_len > 1028)
1897                         return -EINVAL;
1898                 if (fio.write_len + fio.read_len > 1028)
1899                         return -EINVAL;
1900
1901                 wbuf = &dev->iobuf[0];
1902                 rbuf = wbuf + fio.write_len;
1903
1904                 if (copy_from_user(wbuf, fio.write_buf, fio.write_len))
1905                         return -EFAULT;
1906                 res = flashio(dev, wbuf, fio.write_len, rbuf, fio.read_len);
1907                 if (res)
1908                         return res;
1909                 if (copy_to_user(fio.read_buf, rbuf, fio.read_len))
1910                         return -EFAULT;
1911                 break;
1912         }
1913         default:
1914                 return -ENOTTY;
1915         }
1916         return 0;
1917 }
1918
1919 static const struct file_operations ddb_fops = {
1920         .unlocked_ioctl = ddb_ioctl,
1921         .open           = ddb_open,
1922 };
1923
1924 static char *ddb_devnode(struct device *device, umode_t *mode)
1925 {
1926         struct ddb *dev = dev_get_drvdata(device);
1927
1928         return kasprintf(GFP_KERNEL, "ddbridge/card%d", dev->nr);
1929 }
1930
1931 static int ddb_class_create(void)
1932 {
1933         ddb_major = register_chrdev(0, DDB_NAME, &ddb_fops);
1934         if (ddb_major < 0)
1935                 return ddb_major;
1936
1937         ddb_class = class_create(THIS_MODULE, DDB_NAME);
1938         if (IS_ERR(ddb_class)) {
1939                 unregister_chrdev(ddb_major, DDB_NAME);
1940                 return PTR_ERR(ddb_class);
1941         }
1942         ddb_class->devnode = ddb_devnode;
1943         return 0;
1944 }
1945
1946 static void ddb_class_destroy(void)
1947 {
1948         class_destroy(ddb_class);
1949         unregister_chrdev(ddb_major, DDB_NAME);
1950 }
1951
1952 static int ddb_device_create(struct ddb *dev)
1953 {
1954         dev->nr = ddb_num++;
1955         dev->ddb_dev = device_create(ddb_class, NULL,
1956                                      MKDEV(ddb_major, dev->nr),
1957                                      dev, "ddbridge%d", dev->nr);
1958         ddbs[dev->nr] = dev;
1959         if (IS_ERR(dev->ddb_dev))
1960                 return -1;
1961         return 0;
1962 }
1963
1964 static void ddb_device_destroy(struct ddb *dev)
1965 {
1966         ddb_num--;
1967         if (IS_ERR(dev->ddb_dev))
1968                 return;
1969         device_destroy(ddb_class, MKDEV(ddb_major, 0));
1970 }
1971
1972
1973 /****************************************************************************/
1974 /****************************************************************************/
1975 /****************************************************************************/
1976
1977 static void ddb_unmap(struct ddb *dev)
1978 {
1979         if (dev->regs)
1980                 iounmap(dev->regs);
1981         vfree(dev);
1982 }
1983
1984
1985 static void ddb_remove(struct pci_dev *pdev)
1986 {
1987         struct ddb *dev = pci_get_drvdata(pdev);
1988
1989         ddb_ports_detach(dev);
1990         ddb_i2c_release(dev);
1991
1992         ddbwritel(0, INTERRUPT_ENABLE);
1993         free_irq(dev->pdev->irq, dev);
1994 #ifdef CONFIG_PCI_MSI
1995         if (dev->msi)
1996                 pci_disable_msi(dev->pdev);
1997 #endif
1998         ddb_ports_release(dev);
1999         ddb_buffers_free(dev);
2000         ddb_device_destroy(dev);
2001
2002         ddb_unmap(dev);
2003         pci_set_drvdata(pdev, NULL);
2004         pci_disable_device(pdev);
2005 }
2006
2007
2008 static int ddb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2009 {
2010         struct ddb *dev;
2011         int stat = 0;
2012         int irq_flag = IRQF_SHARED;
2013
2014         if (pci_enable_device(pdev) < 0)
2015                 return -ENODEV;
2016
2017         dev = vzalloc(sizeof(struct ddb));
2018         if (dev == NULL)
2019                 return -ENOMEM;
2020
2021         dev->pdev = pdev;
2022         pci_set_drvdata(pdev, dev);
2023         dev->info = (struct ddb_info *) id->driver_data;
2024         dev_info(&pdev->dev, "Detected %s\n", dev->info->name);
2025
2026         dev->regs = ioremap(pci_resource_start(dev->pdev, 0),
2027                             pci_resource_len(dev->pdev, 0));
2028         if (!dev->regs) {
2029                 stat = -ENOMEM;
2030                 goto fail;
2031         }
2032         dev_info(&pdev->dev, "HW %08x FW %08x\n", ddbreadl(0), ddbreadl(4));
2033
2034 #ifdef CONFIG_PCI_MSI
2035         if (pci_msi_enabled())
2036                 stat = pci_enable_msi(dev->pdev);
2037         if (stat) {
2038                 dev_info(&pdev->dev, "MSI not available.\n");
2039         } else {
2040                 irq_flag = 0;
2041                 dev->msi = 1;
2042         }
2043 #endif
2044         stat = request_irq(dev->pdev->irq, irq_handler,
2045                            irq_flag, "DDBridge", (void *) dev);
2046         if (stat < 0)
2047                 goto fail1;
2048         ddbwritel(0, DMA_BASE_WRITE);
2049         ddbwritel(0, DMA_BASE_READ);
2050         ddbwritel(0xffffffff, INTERRUPT_ACK);
2051         ddbwritel(0xfff0f, INTERRUPT_ENABLE);
2052         ddbwritel(0, MSI1_ENABLE);
2053
2054         /* board control */
2055         if (dev->info->board_control) {
2056                 ddbwritel(0, DDB_LINK_TAG(0) | BOARD_CONTROL);
2057                 msleep(100);
2058                 ddbwritel(dev->info->board_control_2,
2059                         DDB_LINK_TAG(0) | BOARD_CONTROL);
2060                 usleep_range(2000, 3000);
2061                 ddbwritel(dev->info->board_control_2
2062                         | dev->info->board_control,
2063                         DDB_LINK_TAG(0) | BOARD_CONTROL);
2064                 usleep_range(2000, 3000);
2065         }
2066
2067         if (ddb_i2c_init(dev) < 0)
2068                 goto fail1;
2069         ddb_ports_init(dev);
2070         if (ddb_buffers_alloc(dev) < 0) {
2071                 dev_err(&pdev->dev, "Could not allocate buffer memory\n");
2072                 goto fail2;
2073         }
2074         if (ddb_ports_attach(dev) < 0)
2075                 goto fail3;
2076         ddb_device_create(dev);
2077         return 0;
2078
2079 fail3:
2080         ddb_ports_detach(dev);
2081         dev_err(&pdev->dev, "fail3\n");
2082         ddb_ports_release(dev);
2083 fail2:
2084         dev_err(&pdev->dev, "fail2\n");
2085         ddb_buffers_free(dev);
2086 fail1:
2087         dev_err(&pdev->dev, "fail1\n");
2088         if (dev->msi)
2089                 pci_disable_msi(dev->pdev);
2090         if (stat == 0)
2091                 free_irq(dev->pdev->irq, dev);
2092 fail:
2093         dev_err(&pdev->dev, "fail\n");
2094         ddb_unmap(dev);
2095         pci_set_drvdata(pdev, NULL);
2096         pci_disable_device(pdev);
2097         return -1;
2098 }
2099
2100 /******************************************************************************/
2101 /******************************************************************************/
2102 /******************************************************************************/
2103
2104 static const struct ddb_info ddb_none = {
2105         .type     = DDB_NONE,
2106         .name     = "Digital Devices PCIe bridge",
2107 };
2108
2109 static const struct ddb_info ddb_octopus = {
2110         .type     = DDB_OCTOPUS,
2111         .name     = "Digital Devices Octopus DVB adapter",
2112         .port_num = 4,
2113 };
2114
2115 static const struct ddb_info ddb_octopus_le = {
2116         .type     = DDB_OCTOPUS,
2117         .name     = "Digital Devices Octopus LE DVB adapter",
2118         .port_num = 2,
2119 };
2120
2121 static const struct ddb_info ddb_octopus_oem = {
2122         .type     = DDB_OCTOPUS,
2123         .name     = "Digital Devices Octopus OEM",
2124         .port_num = 4,
2125 };
2126
2127 static const struct ddb_info ddb_octopus_mini = {
2128         .type     = DDB_OCTOPUS,
2129         .name     = "Digital Devices Octopus Mini",
2130         .port_num = 4,
2131 };
2132
2133 static const struct ddb_info ddb_v6 = {
2134         .type     = DDB_OCTOPUS,
2135         .name     = "Digital Devices Cine S2 V6 DVB adapter",
2136         .port_num = 3,
2137 };
2138 static const struct ddb_info ddb_v6_5 = {
2139         .type     = DDB_OCTOPUS,
2140         .name     = "Digital Devices Cine S2 V6.5 DVB adapter",
2141         .port_num = 4,
2142 };
2143
2144 static const struct ddb_info ddb_dvbct = {
2145         .type     = DDB_OCTOPUS,
2146         .name     = "Digital Devices DVBCT V6.1 DVB adapter",
2147         .port_num = 3,
2148 };
2149
2150 static const struct ddb_info ddb_ctv7 = {
2151         .type     = DDB_OCTOPUS,
2152         .name     = "Digital Devices Cine CT V7 DVB adapter",
2153         .port_num = 4,
2154         .board_control   = 3,
2155         .board_control_2 = 4,
2156 };
2157
2158 static const struct ddb_info ddb_satixS2v3 = {
2159         .type     = DDB_OCTOPUS,
2160         .name     = "Mystique SaTiX-S2 V3 DVB adapter",
2161         .port_num = 3,
2162 };
2163
2164 static const struct ddb_info ddb_octopusv3 = {
2165         .type     = DDB_OCTOPUS,
2166         .name     = "Digital Devices Octopus V3 DVB adapter",
2167         .port_num = 4,
2168 };
2169
2170 /*** MaxA8 adapters ***********************************************************/
2171
2172 static struct ddb_info ddb_ct2_8 = {
2173         .type     = DDB_OCTOPUS_MAX_CT,
2174         .name     = "Digital Devices MAX A8 CT2",
2175         .port_num = 4,
2176         .board_control   = 0x0ff,
2177         .board_control_2 = 0xf00,
2178         .ts_quirks = TS_QUIRK_SERIAL,
2179 };
2180
2181 static struct ddb_info ddb_c2t2_8 = {
2182         .type     = DDB_OCTOPUS_MAX_CT,
2183         .name     = "Digital Devices MAX A8 C2T2",
2184         .port_num = 4,
2185         .board_control   = 0x0ff,
2186         .board_control_2 = 0xf00,
2187         .ts_quirks = TS_QUIRK_SERIAL,
2188 };
2189
2190 static struct ddb_info ddb_isdbt_8 = {
2191         .type     = DDB_OCTOPUS_MAX_CT,
2192         .name     = "Digital Devices MAX A8 ISDBT",
2193         .port_num = 4,
2194         .board_control   = 0x0ff,
2195         .board_control_2 = 0xf00,
2196         .ts_quirks = TS_QUIRK_SERIAL,
2197 };
2198
2199 static struct ddb_info ddb_c2t2i_v0_8 = {
2200         .type     = DDB_OCTOPUS_MAX_CT,
2201         .name     = "Digital Devices MAX A8 C2T2I V0",
2202         .port_num = 4,
2203         .board_control   = 0x0ff,
2204         .board_control_2 = 0xf00,
2205         .ts_quirks = TS_QUIRK_SERIAL | TS_QUIRK_ALT_OSC,
2206 };
2207
2208 static struct ddb_info ddb_c2t2i_8 = {
2209         .type     = DDB_OCTOPUS_MAX_CT,
2210         .name     = "Digital Devices MAX A8 C2T2I",
2211         .port_num = 4,
2212         .board_control   = 0x0ff,
2213         .board_control_2 = 0xf00,
2214         .ts_quirks = TS_QUIRK_SERIAL,
2215 };
2216
2217 /******************************************************************************/
2218
2219 #define DDVID 0xdd01 /* Digital Devices Vendor ID */
2220
2221 #define DDB_ID(_vend, _dev, _subvend, _subdev, _driverdata) {   \
2222         .vendor      = _vend,    .device    = _dev, \
2223         .subvendor   = _subvend, .subdevice = _subdev, \
2224         .driver_data = (unsigned long)&_driverdata }
2225
2226 static const struct pci_device_id ddb_id_tbl[] = {
2227         DDB_ID(DDVID, 0x0002, DDVID, 0x0001, ddb_octopus),
2228         DDB_ID(DDVID, 0x0003, DDVID, 0x0001, ddb_octopus),
2229         DDB_ID(DDVID, 0x0005, DDVID, 0x0004, ddb_octopusv3),
2230         DDB_ID(DDVID, 0x0003, DDVID, 0x0002, ddb_octopus_le),
2231         DDB_ID(DDVID, 0x0003, DDVID, 0x0003, ddb_octopus_oem),
2232         DDB_ID(DDVID, 0x0003, DDVID, 0x0010, ddb_octopus_mini),
2233         DDB_ID(DDVID, 0x0005, DDVID, 0x0011, ddb_octopus_mini),
2234         DDB_ID(DDVID, 0x0003, DDVID, 0x0020, ddb_v6),
2235         DDB_ID(DDVID, 0x0003, DDVID, 0x0021, ddb_v6_5),
2236         DDB_ID(DDVID, 0x0003, DDVID, 0x0030, ddb_dvbct),
2237         DDB_ID(DDVID, 0x0003, DDVID, 0xdb03, ddb_satixS2v3),
2238         DDB_ID(DDVID, 0x0006, DDVID, 0x0031, ddb_ctv7),
2239         DDB_ID(DDVID, 0x0006, DDVID, 0x0032, ddb_ctv7),
2240         DDB_ID(DDVID, 0x0006, DDVID, 0x0033, ddb_ctv7),
2241         DDB_ID(DDVID, 0x0008, DDVID, 0x0034, ddb_ct2_8),
2242         DDB_ID(DDVID, 0x0008, DDVID, 0x0035, ddb_c2t2_8),
2243         DDB_ID(DDVID, 0x0008, DDVID, 0x0036, ddb_isdbt_8),
2244         DDB_ID(DDVID, 0x0008, DDVID, 0x0037, ddb_c2t2i_v0_8),
2245         DDB_ID(DDVID, 0x0008, DDVID, 0x0038, ddb_c2t2i_8),
2246         DDB_ID(DDVID, 0x0006, DDVID, 0x0039, ddb_ctv7),
2247         /* in case sub-ids got deleted in flash */
2248         DDB_ID(DDVID, 0x0003, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2249         DDB_ID(DDVID, 0x0005, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2250         DDB_ID(DDVID, 0x0006, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2251         DDB_ID(DDVID, 0x0007, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2252         DDB_ID(DDVID, 0x0008, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2253         DDB_ID(DDVID, 0x0011, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2254         DDB_ID(DDVID, 0x0013, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2255         DDB_ID(DDVID, 0x0201, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2256         DDB_ID(DDVID, 0x0320, PCI_ANY_ID, PCI_ANY_ID, ddb_none),
2257         {0}
2258 };
2259 MODULE_DEVICE_TABLE(pci, ddb_id_tbl);
2260
2261
2262 static struct pci_driver ddb_pci_driver = {
2263         .name        = "DDBridge",
2264         .id_table    = ddb_id_tbl,
2265         .probe       = ddb_probe,
2266         .remove      = ddb_remove,
2267 };
2268
2269 static __init int module_init_ddbridge(void)
2270 {
2271         int ret;
2272
2273         pr_info("Digital Devices PCIE bridge driver, Copyright (C) 2010-11 Digital Devices GmbH\n");
2274
2275         ret = ddb_class_create();
2276         if (ret < 0)
2277                 return ret;
2278         ret = pci_register_driver(&ddb_pci_driver);
2279         if (ret < 0)
2280                 ddb_class_destroy();
2281         return ret;
2282 }
2283
2284 static __exit void module_exit_ddbridge(void)
2285 {
2286         pci_unregister_driver(&ddb_pci_driver);
2287         ddb_class_destroy();
2288 }
2289
2290 module_init(module_init_ddbridge);
2291 module_exit(module_exit_ddbridge);
2292
2293 MODULE_DESCRIPTION("Digital Devices PCIe Bridge");
2294 MODULE_AUTHOR("Ralph Metzler");
2295 MODULE_LICENSE("GPL");
2296 MODULE_VERSION("0.5");