0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <linux/module.h>
0017 #include <linux/kmod.h>
0018 #include <linux/delay.h>
0019 #include <linux/fs.h>
0020 #include <linux/timer.h>
0021 #include <linux/poll.h>
0022
0023 #include <linux/kernel.h>
0024 #include <linux/sched.h>
0025 #include <linux/types.h>
0026 #include <linux/fcntl.h>
0027 #include <linux/interrupt.h>
0028 #include <linux/string.h>
0029 #include <linux/pci.h>
0030 #include <linux/vmalloc.h>
0031 #include <linux/firmware.h>
0032 #include <linux/crc32.h>
0033 #include <linux/i2c.h>
0034 #include <linux/kthread.h>
0035 #include <linux/slab.h>
0036 #include <asm/unaligned.h>
0037 #include <asm/byteorder.h>
0038
0039
0040 #include <linux/dvb/frontend.h>
0041
0042 #include <media/dvb_frontend.h>
0043
0044 #include "ttpci-eeprom.h"
0045 #include "av7110.h"
0046 #include "av7110_hw.h"
0047 #include "av7110_av.h"
0048 #include "av7110_ca.h"
0049 #include "av7110_ipack.h"
0050
0051 #include "bsbe1.h"
0052 #include "lnbp21.h"
0053 #include "bsru6.h"
0054
0055 #define TS_WIDTH 376
0056 #define TS_HEIGHT 512
0057 #define TS_BUFLEN (TS_WIDTH*TS_HEIGHT)
0058 #define TS_MAX_PACKETS (TS_BUFLEN/TS_SIZE)
0059
0060
0061 int av7110_debug;
0062
0063 static int vidmode = CVBS_RGB_OUT;
0064 static int pids_off;
0065 static int adac = DVB_ADAC_TI;
0066 static int hw_sections;
0067 static int rgb_on;
0068 static int volume = 255;
0069 static int budgetpatch;
0070 static int wss_cfg_4_3 = 0x4008;
0071 static int wss_cfg_16_9 = 0x0007;
0072 static int tv_standard;
0073 static int full_ts;
0074
0075 module_param_named(debug, av7110_debug, int, 0644);
0076 MODULE_PARM_DESC(debug, "debug level (bitmask, default 0)");
0077 module_param(vidmode, int, 0444);
0078 MODULE_PARM_DESC(vidmode,"analog video out: 0 off, 1 CVBS+RGB (default), 2 CVBS+YC, 3 YC");
0079 module_param(pids_off, int, 0444);
0080 MODULE_PARM_DESC(pids_off,"clear video/audio/PCR PID filters when demux is closed");
0081 module_param(adac, int, 0444);
0082 MODULE_PARM_DESC(adac,"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)");
0083 module_param(hw_sections, int, 0444);
0084 MODULE_PARM_DESC(hw_sections, "0 use software section filter, 1 use hardware");
0085 module_param(rgb_on, int, 0444);
0086 MODULE_PARM_DESC(rgb_on, "For Siemens DVB-C cards only: Enable RGB control signal on SCART pin 16 to switch SCART video mode from CVBS to RGB");
0087 module_param(volume, int, 0444);
0088 MODULE_PARM_DESC(volume, "initial volume: default 255 (range 0-255)");
0089 module_param(budgetpatch, int, 0444);
0090 MODULE_PARM_DESC(budgetpatch, "use budget-patch hardware modification: default 0 (0 no, 1 autodetect, 2 always)");
0091 module_param(full_ts, int, 0444);
0092 MODULE_PARM_DESC(full_ts, "enable code for full-ts hardware modification: 0 disable (default), 1 enable");
0093 module_param(wss_cfg_4_3, int, 0444);
0094 MODULE_PARM_DESC(wss_cfg_4_3, "WSS 4:3 - default 0x4008 - bit 15: disable, 14: burst mode, 13..0: wss data");
0095 module_param(wss_cfg_16_9, int, 0444);
0096 MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data");
0097 module_param(tv_standard, int, 0444);
0098 MODULE_PARM_DESC(tv_standard, "TV standard: 0 PAL (default), 1 NTSC");
0099
0100 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
0101
0102 static void restart_feeds(struct av7110 *av7110);
0103 static int budget_start_feed(struct dvb_demux_feed *feed);
0104 static int budget_stop_feed(struct dvb_demux_feed *feed);
0105
0106 static int av7110_num;
0107
0108 #define FE_FUNC_OVERRIDE(fe_func, av7110_copy, av7110_func) \
0109 {\
0110 if (fe_func != NULL) { \
0111 av7110_copy = fe_func; \
0112 fe_func = av7110_func; \
0113 } \
0114 }
0115
0116
0117 static void init_av7110_av(struct av7110 *av7110)
0118 {
0119 int ret;
0120 struct saa7146_dev *dev = av7110->dev;
0121
0122
0123 av7110->adac_type = DVB_ADAC_TI;
0124 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
0125 if (ret < 0)
0126 printk("dvb-ttpci:cannot set internal volume to maximum:%d\n",ret);
0127
0128 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetMonitorType,
0129 1, (u16) av7110->display_ar);
0130 if (ret < 0)
0131 printk("dvb-ttpci: unable to set aspect ratio\n");
0132 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetPanScanType,
0133 1, av7110->display_panscan);
0134 if (ret < 0)
0135 printk("dvb-ttpci: unable to set pan scan\n");
0136
0137 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 2, wss_cfg_4_3);
0138 if (ret < 0)
0139 printk("dvb-ttpci: unable to configure 4:3 wss\n");
0140 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 3, wss_cfg_16_9);
0141 if (ret < 0)
0142 printk("dvb-ttpci: unable to configure 16:9 wss\n");
0143
0144 ret = av7710_set_video_mode(av7110, vidmode);
0145 if (ret < 0)
0146 printk("dvb-ttpci:cannot set video mode:%d\n",ret);
0147
0148
0149
0150 av7110->analog_tuner_flags = 0;
0151 av7110->current_input = 0;
0152 if (dev->pci->subsystem_vendor == 0x13c2 && dev->pci->subsystem_device == 0x000a)
0153 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 0);
0154 if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) {
0155 printk ("dvb-ttpci: Crystal audio DAC @ card %d detected\n",
0156 av7110->dvb_adapter.num);
0157 av7110->adac_type = DVB_ADAC_CRYSTAL;
0158 i2c_writereg(av7110, 0x20, 0x01, 0xd2);
0159 i2c_writereg(av7110, 0x20, 0x02, 0x49);
0160 i2c_writereg(av7110, 0x20, 0x03, 0x00);
0161 i2c_writereg(av7110, 0x20, 0x04, 0x00);
0162
0163
0164
0165
0166 } else if (0 == av7110_init_analog_module(av7110)) {
0167
0168 }
0169 else if (dev->pci->subsystem_vendor == 0x110a) {
0170 printk("dvb-ttpci: DVB-C w/o analog module @ card %d detected\n",
0171 av7110->dvb_adapter.num);
0172 av7110->adac_type = DVB_ADAC_NONE;
0173 }
0174 else {
0175 av7110->adac_type = adac;
0176 printk("dvb-ttpci: adac type set to %d @ card %d\n",
0177 av7110->adac_type, av7110->dvb_adapter.num);
0178 }
0179
0180 if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP34x0) {
0181
0182 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0);
0183 if (ret < 0)
0184 printk("dvb-ttpci:cannot switch on SCART(Main):%d\n",ret);
0185 ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1);
0186 if (ret < 0)
0187 printk("dvb-ttpci:cannot switch on SCART(AD):%d\n",ret);
0188 if (rgb_on &&
0189 ((av7110->dev->pci->subsystem_vendor == 0x110a) ||
0190 (av7110->dev->pci->subsystem_vendor == 0x13c2)) &&
0191 (av7110->dev->pci->subsystem_device == 0x0000)) {
0192 saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI);
0193
0194 }
0195 }
0196
0197 if (dev->pci->subsystem_vendor == 0x13c2 && dev->pci->subsystem_device == 0x000e)
0198 av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, SpdifSwitch, 1, 0);
0199
0200 ret = av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right);
0201 if (ret < 0)
0202 printk("dvb-ttpci:cannot set volume :%d\n",ret);
0203 }
0204
0205 static void recover_arm(struct av7110 *av7110)
0206 {
0207 dprintk(4, "%p\n",av7110);
0208
0209 av7110_bootarm(av7110);
0210 msleep(100);
0211
0212 init_av7110_av(av7110);
0213
0214
0215 if (av7110->recover)
0216 av7110->recover(av7110);
0217
0218 restart_feeds(av7110);
0219
0220 #if IS_ENABLED(CONFIG_DVB_AV7110_IR)
0221 av7110_set_ir_config(av7110);
0222 #endif
0223 }
0224
0225 static void av7110_arm_sync(struct av7110 *av7110)
0226 {
0227 if (av7110->arm_thread)
0228 kthread_stop(av7110->arm_thread);
0229
0230 av7110->arm_thread = NULL;
0231 }
0232
0233 static int arm_thread(void *data)
0234 {
0235 struct av7110 *av7110 = data;
0236 u16 newloops = 0;
0237 int timeout;
0238
0239 dprintk(4, "%p\n",av7110);
0240
0241 for (;;) {
0242 timeout = wait_event_interruptible_timeout(av7110->arm_wait,
0243 kthread_should_stop(), 5 * HZ);
0244
0245 if (-ERESTARTSYS == timeout || kthread_should_stop()) {
0246
0247 break;
0248 }
0249
0250 if (!av7110->arm_ready)
0251 continue;
0252
0253 if (mutex_lock_interruptible(&av7110->dcomlock))
0254 break;
0255 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2);
0256 mutex_unlock(&av7110->dcomlock);
0257
0258 if (newloops == av7110->arm_loops || av7110->arm_errors > 3) {
0259 printk(KERN_ERR "dvb-ttpci: ARM crashed @ card %d\n",
0260 av7110->dvb_adapter.num);
0261
0262 recover_arm(av7110);
0263
0264 if (mutex_lock_interruptible(&av7110->dcomlock))
0265 break;
0266 newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2) - 1;
0267 mutex_unlock(&av7110->dcomlock);
0268 }
0269 av7110->arm_loops = newloops;
0270 av7110->arm_errors = 0;
0271 }
0272
0273 return 0;
0274 }
0275
0276
0277
0278
0279
0280
0281 static int DvbDmxFilterCallback(u8 *buffer1, size_t buffer1_len,
0282 u8 *buffer2, size_t buffer2_len,
0283 struct dvb_demux_filter *dvbdmxfilter,
0284 struct av7110 *av7110)
0285 {
0286 if (!dvbdmxfilter->feed->demux->dmx.frontend)
0287 return 0;
0288 if (dvbdmxfilter->feed->demux->dmx.frontend->source == DMX_MEMORY_FE)
0289 return 0;
0290
0291 switch (dvbdmxfilter->type) {
0292 case DMX_TYPE_SEC:
0293 if ((((buffer1[1] << 8) | buffer1[2]) & 0xfff) + 3 != buffer1_len)
0294 return 0;
0295 if (dvbdmxfilter->doneq) {
0296 struct dmx_section_filter *filter = &dvbdmxfilter->filter;
0297 int i;
0298 u8 xor, neq = 0;
0299
0300 for (i = 0; i < DVB_DEMUX_MASK_MAX; i++) {
0301 xor = filter->filter_value[i] ^ buffer1[i];
0302 neq |= dvbdmxfilter->maskandnotmode[i] & xor;
0303 }
0304 if (!neq)
0305 return 0;
0306 }
0307 return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len,
0308 buffer2, buffer2_len,
0309 &dvbdmxfilter->filter, NULL);
0310 case DMX_TYPE_TS:
0311 if (!(dvbdmxfilter->feed->ts_type & TS_PACKET))
0312 return 0;
0313 if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY)
0314 return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len,
0315 buffer2, buffer2_len,
0316 &dvbdmxfilter->feed->feed.ts,
0317 NULL);
0318 else
0319 av7110_p2t_write(buffer1, buffer1_len,
0320 dvbdmxfilter->feed->pid,
0321 &av7110->p2t_filter[dvbdmxfilter->index]);
0322 return 0;
0323 default:
0324 return 0;
0325 }
0326 }
0327
0328
0329
0330 static inline void print_time(char *s)
0331 {
0332 #ifdef DEBUG_TIMING
0333 struct timespec64 ts;
0334 ktime_get_real_ts64(&ts);
0335 printk("%s: %lld.%09ld\n", s, (s64)ts.tv_sec, ts.tv_nsec);
0336 #endif
0337 }
0338
0339 #define DEBI_READ 0
0340 #define DEBI_WRITE 1
0341 static inline void start_debi_dma(struct av7110 *av7110, int dir,
0342 unsigned long addr, unsigned int len)
0343 {
0344 dprintk(8, "%c %08lx %u\n", dir == DEBI_READ ? 'R' : 'W', addr, len);
0345 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
0346 printk(KERN_ERR "%s: saa7146_wait_for_debi_done timed out\n", __func__);
0347 return;
0348 }
0349
0350 SAA7146_ISR_CLEAR(av7110->dev, MASK_19);
0351 SAA7146_IER_ENABLE(av7110->dev, MASK_19);
0352 if (len < 5)
0353 len = 5;
0354 if (dir == DEBI_WRITE)
0355 iwdebi(av7110, DEBISWAB, addr, 0, (len + 3) & ~3);
0356 else
0357 irdebi(av7110, DEBISWAB, addr, 0, len);
0358 }
0359
0360 static void debiirq(struct tasklet_struct *t)
0361 {
0362 struct av7110 *av7110 = from_tasklet(av7110, t, debi_tasklet);
0363 int type = av7110->debitype;
0364 int handle = (type >> 8) & 0x1f;
0365 unsigned int xfer = 0;
0366
0367 print_time("debi");
0368 dprintk(4, "type 0x%04x\n", type);
0369
0370 if (type == -1) {
0371 printk("DEBI irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",
0372 jiffies, saa7146_read(av7110->dev, PSR),
0373 saa7146_read(av7110->dev, SSR));
0374 goto debi_done;
0375 }
0376 av7110->debitype = -1;
0377
0378 switch (type & 0xff) {
0379
0380 case DATA_TS_RECORD:
0381 dvb_dmx_swfilter_packets(&av7110->demux,
0382 (const u8 *) av7110->debi_virt,
0383 av7110->debilen / 188);
0384 xfer = RX_BUFF;
0385 break;
0386
0387 case DATA_PES_RECORD:
0388 if (av7110->demux.recording)
0389 av7110_record_cb(&av7110->p2t[handle],
0390 (u8 *) av7110->debi_virt,
0391 av7110->debilen);
0392 xfer = RX_BUFF;
0393 break;
0394
0395 case DATA_IPMPE:
0396 case DATA_FSECTION:
0397 case DATA_PIPING:
0398 if (av7110->handle2filter[handle])
0399 DvbDmxFilterCallback((u8 *)av7110->debi_virt,
0400 av7110->debilen, NULL, 0,
0401 av7110->handle2filter[handle],
0402 av7110);
0403 xfer = RX_BUFF;
0404 break;
0405
0406 case DATA_CI_GET:
0407 {
0408 u8 *data = av7110->debi_virt;
0409 u8 data_0 = data[0];
0410
0411 if (data_0 < 2 && data[2] == 0xff) {
0412 int flags = 0;
0413 if (data[5] > 0)
0414 flags |= CA_CI_MODULE_PRESENT;
0415 if (data[5] > 5)
0416 flags |= CA_CI_MODULE_READY;
0417 av7110->ci_slot[data_0].flags = flags;
0418 } else
0419 ci_get_data(&av7110->ci_rbuffer,
0420 av7110->debi_virt,
0421 av7110->debilen);
0422 xfer = RX_BUFF;
0423 break;
0424 }
0425
0426 case DATA_COMMON_INTERFACE:
0427 CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen);
0428 xfer = RX_BUFF;
0429 break;
0430
0431 case DATA_DEBUG_MESSAGE:
0432 ((s8*)av7110->debi_virt)[Reserved_SIZE - 1] = 0;
0433 printk("%s\n", (s8 *) av7110->debi_virt);
0434 xfer = RX_BUFF;
0435 break;
0436
0437 case DATA_CI_PUT:
0438 dprintk(4, "debi DATA_CI_PUT\n");
0439 xfer = TX_BUFF;
0440 break;
0441 case DATA_MPEG_PLAY:
0442 dprintk(4, "debi DATA_MPEG_PLAY\n");
0443 xfer = TX_BUFF;
0444 break;
0445 case DATA_BMP_LOAD:
0446 dprintk(4, "debi DATA_BMP_LOAD\n");
0447 xfer = TX_BUFF;
0448 break;
0449 default:
0450 break;
0451 }
0452 debi_done:
0453 spin_lock(&av7110->debilock);
0454 if (xfer)
0455 iwdebi(av7110, DEBINOSWAP, xfer, 0, 2);
0456 ARM_ClearMailBox(av7110);
0457 spin_unlock(&av7110->debilock);
0458 }
0459
0460
0461 static void gpioirq(struct tasklet_struct *t)
0462 {
0463 struct av7110 *av7110 = from_tasklet(av7110, t, gpio_tasklet);
0464 u32 rxbuf, txbuf;
0465 int len;
0466
0467 if (av7110->debitype != -1)
0468
0469 printk("dvb-ttpci: GPIO0 irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",
0470 jiffies, saa7146_read(av7110->dev, PSR),
0471 saa7146_read(av7110->dev, SSR));
0472
0473 if (saa7146_wait_for_debi_done(av7110->dev, 0)) {
0474 printk(KERN_ERR "%s: saa7146_wait_for_debi_done timed out\n", __func__);
0475 BUG();
0476 }
0477
0478 spin_lock(&av7110->debilock);
0479 ARM_ClearIrq(av7110);
0480
0481
0482 av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2);
0483 av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0484 rxbuf = irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
0485 txbuf = irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0486 len = (av7110->debilen + 3) & ~3;
0487
0488 print_time("gpio");
0489 dprintk(8, "GPIO0 irq 0x%04x %d\n", av7110->debitype, av7110->debilen);
0490
0491 switch (av7110->debitype & 0xff) {
0492
0493 case DATA_TS_PLAY:
0494 case DATA_PES_PLAY:
0495 break;
0496
0497 case DATA_MPEG_VIDEO_EVENT:
0498 {
0499 u32 h_ar;
0500 struct video_event event;
0501
0502 av7110->video_size.w = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_WIDTH, 0, 2);
0503 h_ar = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_HEIGHT_AR, 0, 2);
0504
0505 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0506 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
0507
0508 av7110->video_size.h = h_ar & 0xfff;
0509
0510 event.type = VIDEO_EVENT_SIZE_CHANGED;
0511 event.u.size.w = av7110->video_size.w;
0512 event.u.size.h = av7110->video_size.h;
0513 switch ((h_ar >> 12) & 0xf)
0514 {
0515 case 3:
0516 av7110->video_size.aspect_ratio = VIDEO_FORMAT_16_9;
0517 event.u.size.aspect_ratio = VIDEO_FORMAT_16_9;
0518 av7110->videostate.video_format = VIDEO_FORMAT_16_9;
0519 break;
0520 case 4:
0521 av7110->video_size.aspect_ratio = VIDEO_FORMAT_221_1;
0522 event.u.size.aspect_ratio = VIDEO_FORMAT_221_1;
0523 av7110->videostate.video_format = VIDEO_FORMAT_221_1;
0524 break;
0525 default:
0526 av7110->video_size.aspect_ratio = VIDEO_FORMAT_4_3;
0527 event.u.size.aspect_ratio = VIDEO_FORMAT_4_3;
0528 av7110->videostate.video_format = VIDEO_FORMAT_4_3;
0529 }
0530
0531 dprintk(8, "GPIO0 irq: DATA_MPEG_VIDEO_EVENT: w/h/ar = %u/%u/%u\n",
0532 av7110->video_size.w, av7110->video_size.h,
0533 av7110->video_size.aspect_ratio);
0534
0535 dvb_video_add_event(av7110, &event);
0536 break;
0537 }
0538
0539 case DATA_CI_PUT:
0540 {
0541 int avail;
0542 struct dvb_ringbuffer *cibuf = &av7110->ci_wbuffer;
0543
0544 avail = dvb_ringbuffer_avail(cibuf);
0545 if (avail <= 2) {
0546 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0547 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
0548 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0549 break;
0550 }
0551 len = DVB_RINGBUFFER_PEEK(cibuf, 0) << 8;
0552 len |= DVB_RINGBUFFER_PEEK(cibuf, 1);
0553 if (avail < len + 2) {
0554 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0555 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
0556 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0557 break;
0558 }
0559 DVB_RINGBUFFER_SKIP(cibuf, 2);
0560
0561 dvb_ringbuffer_read(cibuf, av7110->debi_virt, len);
0562
0563 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
0564 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
0565 dprintk(8, "DMA: CI\n");
0566 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
0567 spin_unlock(&av7110->debilock);
0568 wake_up(&cibuf->queue);
0569 return;
0570 }
0571
0572 case DATA_MPEG_PLAY:
0573 if (!av7110->playing) {
0574 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0575 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
0576 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0577 break;
0578 }
0579 len = 0;
0580 if (av7110->debitype & 0x100) {
0581 spin_lock(&av7110->aout.lock);
0582 len = av7110_pes_play(av7110->debi_virt, &av7110->aout, 2048);
0583 spin_unlock(&av7110->aout.lock);
0584 }
0585 if (len <= 0 && (av7110->debitype & 0x200)
0586 &&av7110->videostate.play_state != VIDEO_FREEZED) {
0587 spin_lock(&av7110->avout.lock);
0588 len = av7110_pes_play(av7110->debi_virt, &av7110->avout, 2048);
0589 spin_unlock(&av7110->avout.lock);
0590 }
0591 if (len <= 0) {
0592 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0593 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
0594 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0595 break;
0596 }
0597 dprintk(8, "GPIO0 PES_PLAY len=%04x\n", len);
0598 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
0599 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
0600 dprintk(8, "DMA: MPEG_PLAY\n");
0601 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len);
0602 spin_unlock(&av7110->debilock);
0603 return;
0604
0605 case DATA_BMP_LOAD:
0606 len = av7110->debilen;
0607 dprintk(8, "gpio DATA_BMP_LOAD len %d\n", len);
0608 if (!len) {
0609 av7110->bmp_state = BMP_LOADED;
0610 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2);
0611 iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2);
0612 iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2);
0613 wake_up(&av7110->bmpq);
0614 dprintk(8, "gpio DATA_BMP_LOAD done\n");
0615 break;
0616 }
0617 if (len > av7110->bmplen)
0618 len = av7110->bmplen;
0619 if (len > 2 * 1024)
0620 len = 2 * 1024;
0621 iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2);
0622 iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2);
0623 memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len);
0624 av7110->bmpp += len;
0625 av7110->bmplen -= len;
0626 dprintk(8, "gpio DATA_BMP_LOAD DMA len %d\n", len);
0627 start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE+txbuf, len);
0628 spin_unlock(&av7110->debilock);
0629 return;
0630
0631 case DATA_CI_GET:
0632 case DATA_COMMON_INTERFACE:
0633 case DATA_FSECTION:
0634 case DATA_IPMPE:
0635 case DATA_PIPING:
0636 if (!len || len > 4 * 1024) {
0637 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
0638 break;
0639 }
0640 fallthrough;
0641
0642 case DATA_TS_RECORD:
0643 case DATA_PES_RECORD:
0644 dprintk(8, "DMA: TS_REC etc.\n");
0645 start_debi_dma(av7110, DEBI_READ, DPRAM_BASE+rxbuf, len);
0646 spin_unlock(&av7110->debilock);
0647 return;
0648
0649 case DATA_DEBUG_MESSAGE:
0650 if (!len || len > 0xff) {
0651 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
0652 break;
0653 }
0654 start_debi_dma(av7110, DEBI_READ, Reserved, len);
0655 spin_unlock(&av7110->debilock);
0656 return;
0657
0658 case DATA_IRCOMMAND:
0659 #if IS_ENABLED(CONFIG_DVB_AV7110_IR)
0660 av7110_ir_handler(av7110,
0661 swahw32(irdebi(av7110, DEBINOSWAP, Reserved,
0662 0, 4)));
0663 #endif
0664 iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2);
0665 break;
0666
0667 default:
0668 printk("dvb-ttpci: gpioirq unknown type=%d len=%d\n",
0669 av7110->debitype, av7110->debilen);
0670 break;
0671 }
0672 av7110->debitype = -1;
0673 ARM_ClearMailBox(av7110);
0674 spin_unlock(&av7110->debilock);
0675 }
0676
0677
0678 #ifdef CONFIG_DVB_AV7110_OSD
0679 static int dvb_osd_ioctl(struct file *file,
0680 unsigned int cmd, void *parg)
0681 {
0682 struct dvb_device *dvbdev = file->private_data;
0683 struct av7110 *av7110 = dvbdev->priv;
0684
0685 dprintk(4, "%p\n", av7110);
0686
0687 if (cmd == OSD_SEND_CMD)
0688 return av7110_osd_cmd(av7110, (osd_cmd_t *) parg);
0689 if (cmd == OSD_GET_CAPABILITY)
0690 return av7110_osd_capability(av7110, (osd_cap_t *) parg);
0691
0692 return -EINVAL;
0693 }
0694
0695
0696 static const struct file_operations dvb_osd_fops = {
0697 .owner = THIS_MODULE,
0698 .unlocked_ioctl = dvb_generic_ioctl,
0699 .open = dvb_generic_open,
0700 .release = dvb_generic_release,
0701 .llseek = noop_llseek,
0702 };
0703
0704 static struct dvb_device dvbdev_osd = {
0705 .priv = NULL,
0706 .users = 1,
0707 .writers = 1,
0708 .fops = &dvb_osd_fops,
0709 .kernel_ioctl = dvb_osd_ioctl,
0710 };
0711 #endif
0712
0713
0714 static inline int SetPIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
0715 u16 subpid, u16 pcrpid)
0716 {
0717 u16 aflags = 0;
0718
0719 dprintk(4, "%p\n", av7110);
0720
0721 if (vpid == 0x1fff || apid == 0x1fff ||
0722 ttpid == 0x1fff || subpid == 0x1fff || pcrpid == 0x1fff) {
0723 vpid = apid = ttpid = subpid = pcrpid = 0;
0724 av7110->pids[DMX_PES_VIDEO] = 0;
0725 av7110->pids[DMX_PES_AUDIO] = 0;
0726 av7110->pids[DMX_PES_TELETEXT] = 0;
0727 av7110->pids[DMX_PES_PCR] = 0;
0728 }
0729
0730 if (av7110->audiostate.bypass_mode)
0731 aflags |= 0x8000;
0732
0733 return av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, MultiPID, 6,
0734 pcrpid, vpid, apid, ttpid, subpid, aflags);
0735 }
0736
0737 int ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid,
0738 u16 subpid, u16 pcrpid)
0739 {
0740 int ret = 0;
0741 dprintk(4, "%p\n", av7110);
0742
0743 if (mutex_lock_interruptible(&av7110->pid_mutex))
0744 return -ERESTARTSYS;
0745
0746 if (!(vpid & 0x8000))
0747 av7110->pids[DMX_PES_VIDEO] = vpid;
0748 if (!(apid & 0x8000))
0749 av7110->pids[DMX_PES_AUDIO] = apid;
0750 if (!(ttpid & 0x8000))
0751 av7110->pids[DMX_PES_TELETEXT] = ttpid;
0752 if (!(pcrpid & 0x8000))
0753 av7110->pids[DMX_PES_PCR] = pcrpid;
0754
0755 av7110->pids[DMX_PES_SUBTITLE] = 0;
0756
0757 if (av7110->fe_synced) {
0758 pcrpid = av7110->pids[DMX_PES_PCR];
0759 ret = SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid);
0760 }
0761
0762 mutex_unlock(&av7110->pid_mutex);
0763 return ret;
0764 }
0765
0766
0767
0768
0769
0770
0771 static int StartHWFilter(struct dvb_demux_filter *dvbdmxfilter)
0772 {
0773 struct dvb_demux_feed *dvbdmxfeed = dvbdmxfilter->feed;
0774 struct av7110 *av7110 = dvbdmxfeed->demux->priv;
0775 u16 buf[20];
0776 int ret, i;
0777 u16 handle;
0778
0779 u16 mode = 0xb96a;
0780
0781 dprintk(4, "%p\n", av7110);
0782
0783 if (av7110->full_ts)
0784 return 0;
0785
0786 if (dvbdmxfilter->type == DMX_TYPE_SEC) {
0787 if (hw_sections) {
0788 buf[4] = (dvbdmxfilter->filter.filter_value[0] << 8) |
0789 dvbdmxfilter->maskandmode[0];
0790 for (i = 3; i < 18; i++)
0791 buf[i + 4 - 2] =
0792 (dvbdmxfilter->filter.filter_value[i] << 8) |
0793 dvbdmxfilter->maskandmode[i];
0794 mode = 4;
0795 }
0796 } else if ((dvbdmxfeed->ts_type & TS_PACKET) &&
0797 !(dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)) {
0798 av7110_p2t_init(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed);
0799 }
0800
0801 buf[0] = (COMTYPE_PID_FILTER << 8) + AddPIDFilter;
0802 buf[1] = 16;
0803 buf[2] = dvbdmxfeed->pid;
0804 buf[3] = mode;
0805
0806 ret = av7110_fw_request(av7110, buf, 20, &handle, 1);
0807 if (ret != 0 || handle >= 32) {
0808 printk(KERN_ERR "dvb-ttpci: %s error buf %04x %04x %04x %04x ret %d handle %04x\n",
0809 __func__, buf[0], buf[1], buf[2], buf[3],
0810 ret, handle);
0811 dvbdmxfilter->hw_handle = 0xffff;
0812 if (!ret)
0813 ret = -1;
0814 return ret;
0815 }
0816
0817 av7110->handle2filter[handle] = dvbdmxfilter;
0818 dvbdmxfilter->hw_handle = handle;
0819
0820 return ret;
0821 }
0822
0823 static int StopHWFilter(struct dvb_demux_filter *dvbdmxfilter)
0824 {
0825 struct av7110 *av7110 = dvbdmxfilter->feed->demux->priv;
0826 u16 buf[3];
0827 u16 answ[2];
0828 int ret;
0829 u16 handle;
0830
0831 dprintk(4, "%p\n", av7110);
0832
0833 if (av7110->full_ts)
0834 return 0;
0835
0836 handle = dvbdmxfilter->hw_handle;
0837 if (handle >= 32) {
0838 printk("%s tried to stop invalid filter %04x, filter type = %x\n",
0839 __func__, handle, dvbdmxfilter->type);
0840 return -EINVAL;
0841 }
0842
0843 av7110->handle2filter[handle] = NULL;
0844
0845 buf[0] = (COMTYPE_PID_FILTER << 8) + DelPIDFilter;
0846 buf[1] = 1;
0847 buf[2] = handle;
0848 ret = av7110_fw_request(av7110, buf, 3, answ, 2);
0849 if (ret != 0 || answ[1] != handle) {
0850 printk(KERN_ERR "dvb-ttpci: %s error cmd %04x %04x %04x ret %x resp %04x %04x pid %d\n",
0851 __func__, buf[0], buf[1], buf[2], ret,
0852 answ[0], answ[1], dvbdmxfilter->feed->pid);
0853 if (!ret)
0854 ret = -1;
0855 }
0856 return ret;
0857 }
0858
0859
0860 static int dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed)
0861 {
0862 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
0863 struct av7110 *av7110 = dvbdmx->priv;
0864 u16 *pid = dvbdmx->pids, npids[5];
0865 int i;
0866 int ret = 0;
0867
0868 dprintk(4, "%p\n", av7110);
0869
0870 npids[0] = npids[1] = npids[2] = npids[3] = npids[4] = 0xffff;
0871 i = dvbdmxfeed->pes_type;
0872 npids[i] = (pid[i]&0x8000) ? 0 : pid[i];
0873 if ((i == 2) && npids[i] && (dvbdmxfeed->ts_type & TS_PACKET)) {
0874 npids[i] = 0;
0875 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
0876 if (!ret)
0877 ret = StartHWFilter(dvbdmxfeed->filter);
0878 return ret;
0879 }
0880 if (dvbdmxfeed->pes_type <= 2 || dvbdmxfeed->pes_type == 4) {
0881 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
0882 if (ret)
0883 return ret;
0884 }
0885
0886 if (dvbdmxfeed->pes_type < 2 && npids[0])
0887 if (av7110->fe_synced)
0888 {
0889 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
0890 if (ret)
0891 return ret;
0892 }
0893
0894 if ((dvbdmxfeed->ts_type & TS_PACKET) && !av7110->full_ts) {
0895 if (dvbdmxfeed->pes_type == 0 && !(dvbdmx->pids[0] & 0x8000))
0896 ret = av7110_av_start_record(av7110, RP_AUDIO, dvbdmxfeed);
0897 if (dvbdmxfeed->pes_type == 1 && !(dvbdmx->pids[1] & 0x8000))
0898 ret = av7110_av_start_record(av7110, RP_VIDEO, dvbdmxfeed);
0899 }
0900 return ret;
0901 }
0902
0903 static int dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed)
0904 {
0905 struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
0906 struct av7110 *av7110 = dvbdmx->priv;
0907 u16 *pid = dvbdmx->pids, npids[5];
0908 int i;
0909
0910 int ret = 0;
0911
0912 dprintk(4, "%p\n", av7110);
0913
0914 if (dvbdmxfeed->pes_type <= 1) {
0915 ret = av7110_av_stop(av7110, dvbdmxfeed->pes_type ? RP_VIDEO : RP_AUDIO);
0916 if (ret)
0917 return ret;
0918 if (!av7110->rec_mode)
0919 dvbdmx->recording = 0;
0920 if (!av7110->playing)
0921 dvbdmx->playing = 0;
0922 }
0923 npids[0] = npids[1] = npids[2] = npids[3] = npids[4] = 0xffff;
0924 i = dvbdmxfeed->pes_type;
0925 switch (i) {
0926 case 2:
0927 if (dvbdmxfeed->ts_type & TS_PACKET)
0928 ret = StopHWFilter(dvbdmxfeed->filter);
0929 npids[2] = 0;
0930 break;
0931 case 0:
0932 case 1:
0933 case 4:
0934 if (!pids_off)
0935 return 0;
0936 npids[i] = (pid[i]&0x8000) ? 0 : pid[i];
0937 break;
0938 }
0939 if (!ret)
0940 ret = ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]);
0941 return ret;
0942 }
0943
0944 static int av7110_start_feed(struct dvb_demux_feed *feed)
0945 {
0946 struct dvb_demux *demux = feed->demux;
0947 struct av7110 *av7110 = demux->priv;
0948 int ret = 0;
0949
0950 dprintk(4, "%p\n", av7110);
0951
0952 if (!demux->dmx.frontend)
0953 return -EINVAL;
0954
0955 if (!av7110->full_ts && feed->pid > 0x1fff)
0956 return -EINVAL;
0957
0958 if (feed->type == DMX_TYPE_TS) {
0959 if ((feed->ts_type & TS_DECODER) &&
0960 (feed->pes_type <= DMX_PES_PCR)) {
0961 switch (demux->dmx.frontend->source) {
0962 case DMX_MEMORY_FE:
0963 if (feed->ts_type & TS_DECODER)
0964 if (feed->pes_type < 2 &&
0965 !(demux->pids[0] & 0x8000) &&
0966 !(demux->pids[1] & 0x8000)) {
0967 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
0968 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
0969 ret = av7110_av_start_play(av7110,RP_AV);
0970 if (!ret)
0971 demux->playing = 1;
0972 }
0973 break;
0974 default:
0975 ret = dvb_feed_start_pid(feed);
0976 break;
0977 }
0978 } else if ((feed->ts_type & TS_PACKET) &&
0979 (demux->dmx.frontend->source != DMX_MEMORY_FE)) {
0980 ret = StartHWFilter(feed->filter);
0981 }
0982 }
0983
0984 if (av7110->full_ts) {
0985 budget_start_feed(feed);
0986 return ret;
0987 }
0988
0989 if (feed->type == DMX_TYPE_SEC) {
0990 int i;
0991
0992 for (i = 0; i < demux->filternum; i++) {
0993 if (demux->filter[i].state != DMX_STATE_READY)
0994 continue;
0995 if (demux->filter[i].type != DMX_TYPE_SEC)
0996 continue;
0997 if (demux->filter[i].filter.parent != &feed->feed.sec)
0998 continue;
0999 demux->filter[i].state = DMX_STATE_GO;
1000 if (demux->dmx.frontend->source != DMX_MEMORY_FE) {
1001 ret = StartHWFilter(&demux->filter[i]);
1002 if (ret)
1003 break;
1004 }
1005 }
1006 }
1007
1008 return ret;
1009 }
1010
1011
1012 static int av7110_stop_feed(struct dvb_demux_feed *feed)
1013 {
1014 struct dvb_demux *demux = feed->demux;
1015 struct av7110 *av7110 = demux->priv;
1016 int i, rc, ret = 0;
1017 dprintk(4, "%p\n", av7110);
1018
1019 if (feed->type == DMX_TYPE_TS) {
1020 if (feed->ts_type & TS_DECODER) {
1021 if (feed->pes_type >= DMX_PES_OTHER ||
1022 !demux->pesfilter[feed->pes_type])
1023 return -EINVAL;
1024 demux->pids[feed->pes_type] |= 0x8000;
1025 demux->pesfilter[feed->pes_type] = NULL;
1026 }
1027 if (feed->ts_type & TS_DECODER &&
1028 feed->pes_type < DMX_PES_OTHER) {
1029 ret = dvb_feed_stop_pid(feed);
1030 } else
1031 if ((feed->ts_type & TS_PACKET) &&
1032 (demux->dmx.frontend->source != DMX_MEMORY_FE))
1033 ret = StopHWFilter(feed->filter);
1034 }
1035
1036 if (av7110->full_ts) {
1037 budget_stop_feed(feed);
1038 return ret;
1039 }
1040
1041 if (feed->type == DMX_TYPE_SEC) {
1042 for (i = 0; i<demux->filternum; i++) {
1043 if (demux->filter[i].state == DMX_STATE_GO &&
1044 demux->filter[i].filter.parent == &feed->feed.sec) {
1045 demux->filter[i].state = DMX_STATE_READY;
1046 if (demux->dmx.frontend->source != DMX_MEMORY_FE) {
1047 rc = StopHWFilter(&demux->filter[i]);
1048 if (!ret)
1049 ret = rc;
1050
1051 }
1052 }
1053 }
1054 }
1055
1056 return ret;
1057 }
1058
1059
1060 static void restart_feeds(struct av7110 *av7110)
1061 {
1062 struct dvb_demux *dvbdmx = &av7110->demux;
1063 struct dvb_demux_feed *feed;
1064 int mode;
1065 int feeding;
1066 int i, j;
1067
1068 dprintk(4, "%p\n", av7110);
1069
1070 mode = av7110->playing;
1071 av7110->playing = 0;
1072 av7110->rec_mode = 0;
1073
1074 feeding = av7110->feeding1;
1075
1076 for (i = 0; i < dvbdmx->feednum; i++) {
1077 feed = &dvbdmx->feed[i];
1078 if (feed->state == DMX_STATE_GO) {
1079 if (feed->type == DMX_TYPE_SEC) {
1080 for (j = 0; j < dvbdmx->filternum; j++) {
1081 if (dvbdmx->filter[j].type != DMX_TYPE_SEC)
1082 continue;
1083 if (dvbdmx->filter[j].filter.parent != &feed->feed.sec)
1084 continue;
1085 if (dvbdmx->filter[j].state == DMX_STATE_GO)
1086 dvbdmx->filter[j].state = DMX_STATE_READY;
1087 }
1088 }
1089 av7110_start_feed(feed);
1090 }
1091 }
1092
1093 av7110->feeding1 = feeding;
1094
1095 if (mode)
1096 av7110_av_start_play(av7110, mode);
1097 }
1098
1099 static int dvb_get_stc(struct dmx_demux *demux, unsigned int num,
1100 uint64_t *stc, unsigned int *base)
1101 {
1102 int ret;
1103 u16 fwstc[4];
1104 u16 tag = ((COMTYPE_REQUEST << 8) + ReqSTC);
1105 struct dvb_demux *dvbdemux;
1106 struct av7110 *av7110;
1107
1108
1109 BUG_ON(!demux);
1110 dvbdemux = demux->priv;
1111 BUG_ON(!dvbdemux);
1112 av7110 = dvbdemux->priv;
1113
1114 dprintk(4, "%p\n", av7110);
1115
1116 if (num != 0)
1117 return -EINVAL;
1118
1119 ret = av7110_fw_request(av7110, &tag, 0, fwstc, 4);
1120 if (ret) {
1121 printk(KERN_ERR "%s: av7110_fw_request error\n", __func__);
1122 return ret;
1123 }
1124 dprintk(2, "fwstc = %04hx %04hx %04hx %04hx\n",
1125 fwstc[0], fwstc[1], fwstc[2], fwstc[3]);
1126
1127 *stc = (((uint64_t) ((fwstc[3] & 0x8000) >> 15)) << 32) |
1128 (((uint64_t) fwstc[1]) << 16) | ((uint64_t) fwstc[0]);
1129 *base = 1;
1130
1131 dprintk(4, "stc = %lu\n", (unsigned long)*stc);
1132
1133 return 0;
1134 }
1135
1136
1137
1138
1139
1140
1141
1142 static int av7110_set_tone(struct dvb_frontend *fe, enum fe_sec_tone_mode tone)
1143 {
1144 struct av7110* av7110 = fe->dvb->priv;
1145
1146 switch (tone) {
1147 case SEC_TONE_ON:
1148 return Set22K(av7110, 1);
1149
1150 case SEC_TONE_OFF:
1151 return Set22K(av7110, 0);
1152
1153 default:
1154 return -EINVAL;
1155 }
1156 }
1157
1158 static int av7110_diseqc_send_master_cmd(struct dvb_frontend* fe,
1159 struct dvb_diseqc_master_cmd* cmd)
1160 {
1161 struct av7110* av7110 = fe->dvb->priv;
1162
1163 return av7110_diseqc_send(av7110, cmd->msg_len, cmd->msg, -1);
1164 }
1165
1166 static int av7110_diseqc_send_burst(struct dvb_frontend* fe,
1167 enum fe_sec_mini_cmd minicmd)
1168 {
1169 struct av7110* av7110 = fe->dvb->priv;
1170
1171 return av7110_diseqc_send(av7110, 0, NULL, minicmd);
1172 }
1173
1174
1175 static int stop_ts_capture(struct av7110 *budget)
1176 {
1177 dprintk(2, "budget: %p\n", budget);
1178
1179 if (--budget->feeding1)
1180 return budget->feeding1;
1181 saa7146_write(budget->dev, MC1, MASK_20);
1182 SAA7146_IER_DISABLE(budget->dev, MASK_10);
1183 SAA7146_ISR_CLEAR(budget->dev, MASK_10);
1184 return 0;
1185 }
1186
1187 static int start_ts_capture(struct av7110 *budget)
1188 {
1189 unsigned y;
1190
1191 dprintk(2, "budget: %p\n", budget);
1192
1193 if (budget->feeding1)
1194 return ++budget->feeding1;
1195 for (y = 0; y < TS_HEIGHT; y++)
1196 memset(budget->grabbing + y * TS_WIDTH, 0x00, TS_WIDTH);
1197 budget->ttbp = 0;
1198 SAA7146_ISR_CLEAR(budget->dev, MASK_10);
1199 SAA7146_IER_ENABLE(budget->dev, MASK_10);
1200 saa7146_write(budget->dev, MC1, (MASK_04 | MASK_20));
1201 return ++budget->feeding1;
1202 }
1203
1204 static int budget_start_feed(struct dvb_demux_feed *feed)
1205 {
1206 struct dvb_demux *demux = feed->demux;
1207 struct av7110 *budget = demux->priv;
1208 int status;
1209
1210 dprintk(2, "av7110: %p\n", budget);
1211
1212 spin_lock(&budget->feedlock1);
1213 feed->pusi_seen = false;
1214 status = start_ts_capture(budget);
1215 spin_unlock(&budget->feedlock1);
1216 return status;
1217 }
1218
1219 static int budget_stop_feed(struct dvb_demux_feed *feed)
1220 {
1221 struct dvb_demux *demux = feed->demux;
1222 struct av7110 *budget = demux->priv;
1223 int status;
1224
1225 dprintk(2, "budget: %p\n", budget);
1226
1227 spin_lock(&budget->feedlock1);
1228 status = stop_ts_capture(budget);
1229 spin_unlock(&budget->feedlock1);
1230 return status;
1231 }
1232
1233 static void vpeirq(struct tasklet_struct *t)
1234 {
1235 struct av7110 *budget = from_tasklet(budget, t, vpe_tasklet);
1236 u8 *mem = (u8 *) (budget->grabbing);
1237 u32 olddma = budget->ttbp;
1238 u32 newdma = saa7146_read(budget->dev, PCI_VDP3);
1239 struct dvb_demux *demux = budget->full_ts ? &budget->demux : &budget->demux1;
1240
1241
1242 newdma -= newdma % 188;
1243
1244 if (newdma >= TS_BUFLEN)
1245 return;
1246
1247 budget->ttbp = newdma;
1248
1249 if (!budget->feeding1 || (newdma == olddma))
1250 return;
1251
1252
1253 dma_sync_sg_for_cpu(&budget->dev->pci->dev, budget->pt.slist,
1254 budget->pt.nents, DMA_FROM_DEVICE);
1255
1256 #if 0
1257
1258 printk("vpeirq: %02x Event Counter 1 0x%04x\n",
1259 mem[olddma],
1260 saa7146_read(budget->dev, EC1R) & 0x3fff);
1261 #endif
1262
1263 if (newdma > olddma)
1264
1265 dvb_dmx_swfilter_packets(demux, mem + olddma, (newdma - olddma) / 188);
1266 else {
1267
1268 dvb_dmx_swfilter_packets(demux, mem + olddma, (TS_BUFLEN - olddma) / 188);
1269 dvb_dmx_swfilter_packets(demux, mem, newdma / 188);
1270 }
1271 }
1272
1273 static int av7110_register(struct av7110 *av7110)
1274 {
1275 int ret, i;
1276 struct dvb_demux *dvbdemux = &av7110->demux;
1277 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1278
1279 dprintk(4, "%p\n", av7110);
1280
1281 if (av7110->registered)
1282 return -1;
1283
1284 av7110->registered = 1;
1285
1286 dvbdemux->priv = (void *) av7110;
1287
1288 for (i = 0; i < 32; i++)
1289 av7110->handle2filter[i] = NULL;
1290
1291 dvbdemux->filternum = (av7110->full_ts) ? 256 : 32;
1292 dvbdemux->feednum = (av7110->full_ts) ? 256 : 32;
1293 dvbdemux->start_feed = av7110_start_feed;
1294 dvbdemux->stop_feed = av7110_stop_feed;
1295 dvbdemux->write_to_decoder = av7110_write_to_decoder;
1296 dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING |
1297 DMX_MEMORY_BASED_FILTERING);
1298
1299 dvb_dmx_init(&av7110->demux);
1300 av7110->demux.dmx.get_stc = dvb_get_stc;
1301
1302 av7110->dmxdev.filternum = (av7110->full_ts) ? 256 : 32;
1303 av7110->dmxdev.demux = &dvbdemux->dmx;
1304 av7110->dmxdev.capabilities = 0;
1305
1306 dvb_dmxdev_init(&av7110->dmxdev, &av7110->dvb_adapter);
1307
1308 av7110->hw_frontend.source = DMX_FRONTEND_0;
1309
1310 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1311
1312 if (ret < 0)
1313 return ret;
1314
1315 av7110->mem_frontend.source = DMX_MEMORY_FE;
1316
1317 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1318
1319 if (ret < 0)
1320 return ret;
1321
1322 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx,
1323 &av7110->hw_frontend);
1324 if (ret < 0)
1325 return ret;
1326
1327 av7110_av_register(av7110);
1328 av7110_ca_register(av7110);
1329
1330 #ifdef CONFIG_DVB_AV7110_OSD
1331 dvb_register_device(&av7110->dvb_adapter, &av7110->osd_dev,
1332 &dvbdev_osd, av7110, DVB_DEVICE_OSD, 0);
1333 #endif
1334
1335 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx);
1336
1337 if (budgetpatch) {
1338
1339
1340
1341 dvbdemux1->priv = (void *) av7110;
1342
1343 dvbdemux1->filternum = 256;
1344 dvbdemux1->feednum = 256;
1345 dvbdemux1->start_feed = budget_start_feed;
1346 dvbdemux1->stop_feed = budget_stop_feed;
1347 dvbdemux1->write_to_decoder = NULL;
1348
1349 dvbdemux1->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING |
1350 DMX_MEMORY_BASED_FILTERING);
1351
1352 dvb_dmx_init(&av7110->demux1);
1353
1354 av7110->dmxdev1.filternum = 256;
1355 av7110->dmxdev1.demux = &dvbdemux1->dmx;
1356 av7110->dmxdev1.capabilities = 0;
1357
1358 dvb_dmxdev_init(&av7110->dmxdev1, &av7110->dvb_adapter);
1359
1360 dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net1, &dvbdemux1->dmx);
1361 printk("dvb-ttpci: additional demux1 for budget-patch registered\n");
1362 }
1363 return 0;
1364 }
1365
1366
1367 static void dvb_unregister(struct av7110 *av7110)
1368 {
1369 struct dvb_demux *dvbdemux = &av7110->demux;
1370 struct dvb_demux *dvbdemux1 = &av7110->demux1;
1371
1372 dprintk(4, "%p\n", av7110);
1373
1374 if (!av7110->registered)
1375 return;
1376
1377 if (budgetpatch) {
1378 dvb_net_release(&av7110->dvb_net1);
1379 dvbdemux->dmx.close(&dvbdemux1->dmx);
1380 dvb_dmxdev_release(&av7110->dmxdev1);
1381 dvb_dmx_release(&av7110->demux1);
1382 }
1383
1384 dvb_net_release(&av7110->dvb_net);
1385
1386 dvbdemux->dmx.close(&dvbdemux->dmx);
1387 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend);
1388 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend);
1389
1390 dvb_dmxdev_release(&av7110->dmxdev);
1391 dvb_dmx_release(&av7110->demux);
1392
1393 if (av7110->fe != NULL) {
1394 dvb_unregister_frontend(av7110->fe);
1395 dvb_frontend_detach(av7110->fe);
1396 }
1397 dvb_unregister_device(av7110->osd_dev);
1398 av7110_av_unregister(av7110);
1399 av7110_ca_unregister(av7110);
1400 }
1401
1402
1403
1404
1405
1406
1407 int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val)
1408 {
1409 u8 msg[2] = { reg, val };
1410 struct i2c_msg msgs;
1411
1412 msgs.flags = 0;
1413 msgs.addr = id / 2;
1414 msgs.len = 2;
1415 msgs.buf = msg;
1416 return i2c_transfer(&av7110->i2c_adap, &msgs, 1);
1417 }
1418
1419 u8 i2c_readreg(struct av7110 *av7110, u8 id, u8 reg)
1420 {
1421 u8 mm1[] = {0x00};
1422 u8 mm2[] = {0x00};
1423 struct i2c_msg msgs[2];
1424
1425 msgs[0].flags = 0;
1426 msgs[1].flags = I2C_M_RD;
1427 msgs[0].addr = msgs[1].addr = id / 2;
1428 mm1[0] = reg;
1429 msgs[0].len = 1; msgs[1].len = 1;
1430 msgs[0].buf = mm1; msgs[1].buf = mm2;
1431 i2c_transfer(&av7110->i2c_adap, msgs, 2);
1432
1433 return mm2[0];
1434 }
1435
1436
1437
1438
1439
1440
1441 static int check_firmware(struct av7110* av7110)
1442 {
1443 u32 crc = 0, len = 0;
1444 unsigned char *ptr;
1445
1446
1447 ptr = av7110->bin_fw;
1448 if (ptr[0] != 'A' || ptr[1] != 'V' ||
1449 ptr[2] != 'F' || ptr[3] != 'W') {
1450 printk("dvb-ttpci: this is not an av7110 firmware\n");
1451 return -EINVAL;
1452 }
1453 ptr += 4;
1454
1455
1456 crc = get_unaligned_be32(ptr);
1457 ptr += 4;
1458 len = get_unaligned_be32(ptr);
1459 ptr += 4;
1460 if (len >= 512) {
1461 printk("dvb-ttpci: dpram file is way too big.\n");
1462 return -EINVAL;
1463 }
1464 if (crc != crc32_le(0, ptr, len)) {
1465 printk("dvb-ttpci: crc32 of dpram file does not match.\n");
1466 return -EINVAL;
1467 }
1468 av7110->bin_dpram = ptr;
1469 av7110->size_dpram = len;
1470 ptr += len;
1471
1472
1473 crc = get_unaligned_be32(ptr);
1474 ptr += 4;
1475 len = get_unaligned_be32(ptr);
1476 ptr += 4;
1477
1478 if (len <= 200000 || len >= 300000 ||
1479 len > ((av7110->bin_fw + av7110->size_fw) - ptr)) {
1480 printk("dvb-ttpci: root file has strange size (%d). aborting.\n", len);
1481 return -EINVAL;
1482 }
1483 if( crc != crc32_le(0, ptr, len)) {
1484 printk("dvb-ttpci: crc32 of root file does not match.\n");
1485 return -EINVAL;
1486 }
1487 av7110->bin_root = ptr;
1488 av7110->size_root = len;
1489 return 0;
1490 }
1491
1492 static void put_firmware(struct av7110* av7110)
1493 {
1494 vfree(av7110->bin_fw);
1495 }
1496
1497 static int get_firmware(struct av7110* av7110)
1498 {
1499 int ret;
1500 const struct firmware *fw;
1501
1502
1503 ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
1504 if (ret) {
1505 if (ret == -ENOENT) {
1506 printk(KERN_ERR "dvb-ttpci: could not load firmware, file not found: dvb-ttpci-01.fw\n");
1507 printk(KERN_ERR "dvb-ttpci: usually this should be in /usr/lib/hotplug/firmware or /lib/firmware\n");
1508 printk(KERN_ERR "dvb-ttpci: and can be downloaded from https://linuxtv.org/download/dvb/firmware/\n");
1509 } else
1510 printk(KERN_ERR "dvb-ttpci: cannot request firmware (error %i)\n",
1511 ret);
1512 return -EINVAL;
1513 }
1514
1515 if (fw->size <= 200000) {
1516 printk("dvb-ttpci: this firmware is way too small.\n");
1517 release_firmware(fw);
1518 return -EINVAL;
1519 }
1520
1521
1522 av7110->bin_fw = vmalloc(fw->size);
1523 if (NULL == av7110->bin_fw) {
1524 dprintk(1, "out of memory\n");
1525 release_firmware(fw);
1526 return -ENOMEM;
1527 }
1528
1529 memcpy(av7110->bin_fw, fw->data, fw->size);
1530 av7110->size_fw = fw->size;
1531 if ((ret = check_firmware(av7110)))
1532 vfree(av7110->bin_fw);
1533
1534 release_firmware(fw);
1535 return ret;
1536 }
1537
1538 static int alps_bsrv2_tuner_set_params(struct dvb_frontend *fe)
1539 {
1540 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1541 struct av7110* av7110 = fe->dvb->priv;
1542 u8 pwr = 0;
1543 u8 buf[4];
1544 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf) };
1545 u32 div = (p->frequency + 479500) / 125;
1546
1547 if (p->frequency > 2000000)
1548 pwr = 3;
1549 else if (p->frequency > 1800000)
1550 pwr = 2;
1551 else if (p->frequency > 1600000)
1552 pwr = 1;
1553 else if (p->frequency > 1200000)
1554 pwr = 0;
1555 else if (p->frequency >= 1100000)
1556 pwr = 1;
1557 else
1558 pwr = 2;
1559
1560 buf[0] = (div >> 8) & 0x7f;
1561 buf[1] = div & 0xff;
1562 buf[2] = ((div & 0x18000) >> 10) | 0x95;
1563 buf[3] = (pwr << 6) | 0x30;
1564
1565
1566
1567
1568 if (fe->ops.i2c_gate_ctrl)
1569 fe->ops.i2c_gate_ctrl(fe, 1);
1570 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1)
1571 return -EIO;
1572 return 0;
1573 }
1574
1575 static struct ves1x93_config alps_bsrv2_config = {
1576 .demod_address = 0x08,
1577 .xin = 90100000UL,
1578 .invert_pwm = 0,
1579 };
1580
1581 static int alps_tdbe2_tuner_set_params(struct dvb_frontend *fe)
1582 {
1583 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1584 struct av7110* av7110 = fe->dvb->priv;
1585 u32 div;
1586 u8 data[4];
1587 struct i2c_msg msg = { .addr = 0x62, .flags = 0, .buf = data, .len = sizeof(data) };
1588
1589 div = (p->frequency + 35937500 + 31250) / 62500;
1590
1591 data[0] = (div >> 8) & 0x7f;
1592 data[1] = div & 0xff;
1593 data[2] = 0x85 | ((div >> 10) & 0x60);
1594 data[3] = (p->frequency < 174000000 ? 0x88 : p->frequency < 470000000 ? 0x84 : 0x81);
1595
1596 if (fe->ops.i2c_gate_ctrl)
1597 fe->ops.i2c_gate_ctrl(fe, 1);
1598 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1599 return -EIO;
1600 return 0;
1601 }
1602
1603 static struct ves1820_config alps_tdbe2_config = {
1604 .demod_address = 0x09,
1605 .xin = 57840000UL,
1606 .invert = 1,
1607 .selagc = VES1820_SELAGC_SIGNAMPERR,
1608 };
1609
1610
1611
1612
1613 static int grundig_29504_451_tuner_set_params(struct dvb_frontend *fe)
1614 {
1615 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1616 struct av7110* av7110 = fe->dvb->priv;
1617 u32 div;
1618 u8 data[4];
1619 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) };
1620
1621 div = p->frequency / 125;
1622 data[0] = (div >> 8) & 0x7f;
1623 data[1] = div & 0xff;
1624 data[2] = 0x8e;
1625 data[3] = 0x00;
1626
1627 if (fe->ops.i2c_gate_ctrl)
1628 fe->ops.i2c_gate_ctrl(fe, 1);
1629 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1630 return -EIO;
1631 return 0;
1632 }
1633
1634 static struct tda8083_config grundig_29504_451_config = {
1635 .demod_address = 0x68,
1636 };
1637
1638
1639
1640 static int philips_cd1516_tuner_set_params(struct dvb_frontend *fe)
1641 {
1642 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1643 struct av7110* av7110 = fe->dvb->priv;
1644 u32 div;
1645 u32 f = p->frequency;
1646 u8 data[4];
1647 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) };
1648
1649 div = (f + 36125000 + 31250) / 62500;
1650
1651 data[0] = (div >> 8) & 0x7f;
1652 data[1] = div & 0xff;
1653 data[2] = 0x8e;
1654 data[3] = (f < 174000000 ? 0xa1 : f < 470000000 ? 0x92 : 0x34);
1655
1656 if (fe->ops.i2c_gate_ctrl)
1657 fe->ops.i2c_gate_ctrl(fe, 1);
1658 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1659 return -EIO;
1660 return 0;
1661 }
1662
1663 static struct ves1820_config philips_cd1516_config = {
1664 .demod_address = 0x09,
1665 .xin = 57840000UL,
1666 .invert = 1,
1667 .selagc = VES1820_SELAGC_SIGNAMPERR,
1668 };
1669
1670
1671
1672 static int alps_tdlb7_tuner_set_params(struct dvb_frontend *fe)
1673 {
1674 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1675 struct av7110* av7110 = fe->dvb->priv;
1676 u32 div, pwr;
1677 u8 data[4];
1678 struct i2c_msg msg = { .addr = 0x60, .flags = 0, .buf = data, .len = sizeof(data) };
1679
1680 div = (p->frequency + 36200000) / 166666;
1681
1682 if (p->frequency <= 782000000)
1683 pwr = 1;
1684 else
1685 pwr = 2;
1686
1687 data[0] = (div >> 8) & 0x7f;
1688 data[1] = div & 0xff;
1689 data[2] = 0x85;
1690 data[3] = pwr << 6;
1691
1692 if (fe->ops.i2c_gate_ctrl)
1693 fe->ops.i2c_gate_ctrl(fe, 1);
1694 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1)
1695 return -EIO;
1696 return 0;
1697 }
1698
1699 static int alps_tdlb7_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
1700 {
1701 #if IS_ENABLED(CONFIG_DVB_SP8870)
1702 struct av7110* av7110 = fe->dvb->priv;
1703
1704 return request_firmware(fw, name, &av7110->dev->pci->dev);
1705 #else
1706 return -EINVAL;
1707 #endif
1708 }
1709
1710 static const struct sp8870_config alps_tdlb7_config = {
1711
1712 .demod_address = 0x71,
1713 .request_firmware = alps_tdlb7_request_firmware,
1714 };
1715
1716
1717 static u8 nexusca_stv0297_inittab[] = {
1718 0x80, 0x01,
1719 0x80, 0x00,
1720 0x81, 0x01,
1721 0x81, 0x00,
1722 0x00, 0x09,
1723 0x01, 0x69,
1724 0x03, 0x00,
1725 0x04, 0x00,
1726 0x07, 0x00,
1727 0x08, 0x00,
1728 0x20, 0x00,
1729 0x21, 0x40,
1730 0x22, 0x00,
1731 0x23, 0x00,
1732 0x24, 0x40,
1733 0x25, 0x88,
1734 0x30, 0xff,
1735 0x31, 0x00,
1736 0x32, 0xff,
1737 0x33, 0x00,
1738 0x34, 0x50,
1739 0x35, 0x7f,
1740 0x36, 0x00,
1741 0x37, 0x20,
1742 0x38, 0x00,
1743 0x40, 0x1c,
1744 0x41, 0xff,
1745 0x42, 0x29,
1746 0x43, 0x00,
1747 0x44, 0xff,
1748 0x45, 0x00,
1749 0x46, 0x00,
1750 0x49, 0x04,
1751 0x4a, 0x00,
1752 0x4b, 0x7b,
1753 0x52, 0x30,
1754 0x55, 0xae,
1755 0x56, 0x47,
1756 0x57, 0xe1,
1757 0x58, 0x3a,
1758 0x5a, 0x1e,
1759 0x5b, 0x34,
1760 0x60, 0x00,
1761 0x63, 0x00,
1762 0x64, 0x00,
1763 0x65, 0x00,
1764 0x66, 0x00,
1765 0x67, 0x00,
1766 0x68, 0x00,
1767 0x69, 0x00,
1768 0x6a, 0x02,
1769 0x6b, 0x00,
1770 0x70, 0xff,
1771 0x71, 0x00,
1772 0x72, 0x00,
1773 0x73, 0x00,
1774 0x74, 0x0c,
1775 0x80, 0x00,
1776 0x81, 0x00,
1777 0x82, 0x00,
1778 0x83, 0x00,
1779 0x84, 0x04,
1780 0x85, 0x80,
1781 0x86, 0x24,
1782 0x87, 0x78,
1783 0x88, 0x10,
1784 0x89, 0x00,
1785 0x90, 0x01,
1786 0x91, 0x01,
1787 0xa0, 0x04,
1788 0xa1, 0x00,
1789 0xa2, 0x00,
1790 0xb0, 0x91,
1791 0xb1, 0x0b,
1792 0xc0, 0x53,
1793 0xc1, 0x70,
1794 0xc2, 0x12,
1795 0xd0, 0x00,
1796 0xd1, 0x00,
1797 0xd2, 0x00,
1798 0xd3, 0x00,
1799 0xd4, 0x00,
1800 0xd5, 0x00,
1801 0xde, 0x00,
1802 0xdf, 0x00,
1803 0x61, 0x49,
1804 0x62, 0x0b,
1805 0x53, 0x08,
1806 0x59, 0x08,
1807 0xff, 0xff,
1808 };
1809
1810 static int nexusca_stv0297_tuner_set_params(struct dvb_frontend *fe)
1811 {
1812 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1813 struct av7110* av7110 = fe->dvb->priv;
1814 u32 div;
1815 u8 data[4];
1816 struct i2c_msg msg = { .addr = 0x63, .flags = 0, .buf = data, .len = sizeof(data) };
1817 struct i2c_msg readmsg = { .addr = 0x63, .flags = I2C_M_RD, .buf = data, .len = 1 };
1818 int i;
1819
1820 div = (p->frequency + 36150000 + 31250) / 62500;
1821
1822 data[0] = (div >> 8) & 0x7f;
1823 data[1] = div & 0xff;
1824 data[2] = 0xce;
1825
1826 if (p->frequency < 45000000)
1827 return -EINVAL;
1828 else if (p->frequency < 137000000)
1829 data[3] = 0x01;
1830 else if (p->frequency < 403000000)
1831 data[3] = 0x02;
1832 else if (p->frequency < 860000000)
1833 data[3] = 0x04;
1834 else
1835 return -EINVAL;
1836
1837 if (fe->ops.i2c_gate_ctrl)
1838 fe->ops.i2c_gate_ctrl(fe, 1);
1839 if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) {
1840 printk("nexusca: pll transfer failed!\n");
1841 return -EIO;
1842 }
1843
1844
1845 for(i = 0; i < 20; i++) {
1846 if (fe->ops.i2c_gate_ctrl)
1847 fe->ops.i2c_gate_ctrl(fe, 1);
1848 if (i2c_transfer(&av7110->i2c_adap, &readmsg, 1) == 1)
1849 if (data[0] & 0x40) break;
1850 msleep(10);
1851 }
1852
1853 return 0;
1854 }
1855
1856 static struct stv0297_config nexusca_stv0297_config = {
1857
1858 .demod_address = 0x1C,
1859 .inittab = nexusca_stv0297_inittab,
1860 .invert = 1,
1861 .stop_during_read = 1,
1862 };
1863
1864
1865
1866 static int grundig_29504_401_tuner_set_params(struct dvb_frontend *fe)
1867 {
1868 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1869 struct av7110* av7110 = fe->dvb->priv;
1870 u32 div;
1871 u8 cfg, cpump, band_select;
1872 u8 data[4];
1873 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) };
1874
1875 div = (36125000 + p->frequency) / 166666;
1876
1877 cfg = 0x88;
1878
1879 if (p->frequency < 175000000)
1880 cpump = 2;
1881 else if (p->frequency < 390000000)
1882 cpump = 1;
1883 else if (p->frequency < 470000000)
1884 cpump = 2;
1885 else if (p->frequency < 750000000)
1886 cpump = 1;
1887 else
1888 cpump = 3;
1889
1890 if (p->frequency < 175000000)
1891 band_select = 0x0e;
1892 else if (p->frequency < 470000000)
1893 band_select = 0x05;
1894 else
1895 band_select = 0x03;
1896
1897 data[0] = (div >> 8) & 0x7f;
1898 data[1] = div & 0xff;
1899 data[2] = ((div >> 10) & 0x60) | cfg;
1900 data[3] = (cpump << 6) | band_select;
1901
1902 if (fe->ops.i2c_gate_ctrl)
1903 fe->ops.i2c_gate_ctrl(fe, 1);
1904 if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) return -EIO;
1905 return 0;
1906 }
1907
1908 static struct l64781_config grundig_29504_401_config = {
1909 .demod_address = 0x55,
1910 };
1911
1912
1913
1914 static int av7110_fe_lock_fix(struct av7110 *av7110, enum fe_status status)
1915 {
1916 int ret = 0;
1917 int synced = (status & FE_HAS_LOCK) ? 1 : 0;
1918
1919 av7110->fe_status = status;
1920
1921 if (av7110->fe_synced == synced)
1922 return 0;
1923
1924 if (av7110->playing) {
1925 av7110->fe_synced = synced;
1926 return 0;
1927 }
1928
1929 if (mutex_lock_interruptible(&av7110->pid_mutex))
1930 return -ERESTARTSYS;
1931
1932 if (synced) {
1933 ret = SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO],
1934 av7110->pids[DMX_PES_AUDIO],
1935 av7110->pids[DMX_PES_TELETEXT], 0,
1936 av7110->pids[DMX_PES_PCR]);
1937 if (!ret)
1938 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
1939 } else {
1940 ret = SetPIDs(av7110, 0, 0, 0, 0, 0);
1941 if (!ret) {
1942 ret = av7110_fw_cmd(av7110, COMTYPE_PID_FILTER, FlushTSQueue, 0);
1943 if (!ret)
1944 ret = av7110_wait_msgstate(av7110, GPMQBusy);
1945 }
1946 }
1947
1948 if (!ret)
1949 av7110->fe_synced = synced;
1950
1951 mutex_unlock(&av7110->pid_mutex);
1952 return ret;
1953 }
1954
1955 static int av7110_fe_set_frontend(struct dvb_frontend *fe)
1956 {
1957 struct av7110* av7110 = fe->dvb->priv;
1958
1959 int ret = av7110_fe_lock_fix(av7110, 0);
1960 if (!ret)
1961 ret = av7110->fe_set_frontend(fe);
1962
1963 return ret;
1964 }
1965
1966 static int av7110_fe_init(struct dvb_frontend* fe)
1967 {
1968 struct av7110* av7110 = fe->dvb->priv;
1969
1970 int ret = av7110_fe_lock_fix(av7110, 0);
1971 if (!ret)
1972 ret = av7110->fe_init(fe);
1973 return ret;
1974 }
1975
1976 static int av7110_fe_read_status(struct dvb_frontend *fe,
1977 enum fe_status *status)
1978 {
1979 struct av7110* av7110 = fe->dvb->priv;
1980
1981
1982 int ret = av7110->fe_read_status(fe, status);
1983 if (!ret)
1984 if (((*status ^ av7110->fe_status) & FE_HAS_LOCK) && (*status & FE_HAS_LOCK))
1985 ret = av7110_fe_lock_fix(av7110, *status);
1986 return ret;
1987 }
1988
1989 static int av7110_fe_diseqc_reset_overload(struct dvb_frontend* fe)
1990 {
1991 struct av7110* av7110 = fe->dvb->priv;
1992
1993 int ret = av7110_fe_lock_fix(av7110, 0);
1994 if (!ret)
1995 ret = av7110->fe_diseqc_reset_overload(fe);
1996 return ret;
1997 }
1998
1999 static int av7110_fe_diseqc_send_master_cmd(struct dvb_frontend* fe,
2000 struct dvb_diseqc_master_cmd* cmd)
2001 {
2002 struct av7110* av7110 = fe->dvb->priv;
2003
2004 int ret = av7110_fe_lock_fix(av7110, 0);
2005 if (!ret) {
2006 av7110->saved_master_cmd = *cmd;
2007 ret = av7110->fe_diseqc_send_master_cmd(fe, cmd);
2008 }
2009 return ret;
2010 }
2011
2012 static int av7110_fe_diseqc_send_burst(struct dvb_frontend *fe,
2013 enum fe_sec_mini_cmd minicmd)
2014 {
2015 struct av7110* av7110 = fe->dvb->priv;
2016
2017 int ret = av7110_fe_lock_fix(av7110, 0);
2018 if (!ret) {
2019 av7110->saved_minicmd = minicmd;
2020 ret = av7110->fe_diseqc_send_burst(fe, minicmd);
2021 }
2022 return ret;
2023 }
2024
2025 static int av7110_fe_set_tone(struct dvb_frontend *fe,
2026 enum fe_sec_tone_mode tone)
2027 {
2028 struct av7110* av7110 = fe->dvb->priv;
2029
2030 int ret = av7110_fe_lock_fix(av7110, 0);
2031 if (!ret) {
2032 av7110->saved_tone = tone;
2033 ret = av7110->fe_set_tone(fe, tone);
2034 }
2035 return ret;
2036 }
2037
2038 static int av7110_fe_set_voltage(struct dvb_frontend *fe,
2039 enum fe_sec_voltage voltage)
2040 {
2041 struct av7110* av7110 = fe->dvb->priv;
2042
2043 int ret = av7110_fe_lock_fix(av7110, 0);
2044 if (!ret) {
2045 av7110->saved_voltage = voltage;
2046 ret = av7110->fe_set_voltage(fe, voltage);
2047 }
2048 return ret;
2049 }
2050
2051 static int av7110_fe_dishnetwork_send_legacy_command(struct dvb_frontend* fe, unsigned long cmd)
2052 {
2053 struct av7110* av7110 = fe->dvb->priv;
2054
2055 int ret = av7110_fe_lock_fix(av7110, 0);
2056 if (!ret)
2057 ret = av7110->fe_dishnetwork_send_legacy_command(fe, cmd);
2058 return ret;
2059 }
2060
2061 static void dvb_s_recover(struct av7110* av7110)
2062 {
2063 av7110_fe_init(av7110->fe);
2064
2065 av7110_fe_set_voltage(av7110->fe, av7110->saved_voltage);
2066 if (av7110->saved_master_cmd.msg_len) {
2067 msleep(20);
2068 av7110_fe_diseqc_send_master_cmd(av7110->fe, &av7110->saved_master_cmd);
2069 }
2070 msleep(20);
2071 av7110_fe_diseqc_send_burst(av7110->fe, av7110->saved_minicmd);
2072 msleep(20);
2073 av7110_fe_set_tone(av7110->fe, av7110->saved_tone);
2074
2075 av7110_fe_set_frontend(av7110->fe);
2076 }
2077
2078 static u8 read_pwm(struct av7110* av7110)
2079 {
2080 u8 b = 0xff;
2081 u8 pwm;
2082 struct i2c_msg msg[] = { { .addr = 0x50,.flags = 0,.buf = &b,.len = 1 },
2083 { .addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1} };
2084
2085 if ((i2c_transfer(&av7110->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
2086 pwm = 0x48;
2087
2088 return pwm;
2089 }
2090
2091 static int frontend_init(struct av7110 *av7110)
2092 {
2093 int ret;
2094
2095 if (av7110->dev->pci->subsystem_vendor == 0x110a) {
2096 switch(av7110->dev->pci->subsystem_device) {
2097 case 0x0000:
2098 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config,
2099 &av7110->i2c_adap, read_pwm(av7110));
2100 if (av7110->fe) {
2101 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2102 }
2103 break;
2104 }
2105
2106 } else if (av7110->dev->pci->subsystem_vendor == 0x13c2) {
2107 switch(av7110->dev->pci->subsystem_device) {
2108 case 0x0000:
2109 case 0x0003:
2110 case 0x1002:
2111
2112
2113 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2114 if (av7110->fe) {
2115 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2116 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2117 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2118 av7110->fe->ops.set_tone = av7110_set_tone;
2119 av7110->recover = dvb_s_recover;
2120 break;
2121 }
2122
2123
2124 av7110->fe = dvb_attach(stv0299_attach, &alps_bsru6_config, &av7110->i2c_adap);
2125 if (av7110->fe) {
2126 av7110->fe->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
2127 av7110->fe->tuner_priv = &av7110->i2c_adap;
2128
2129 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2130 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2131 av7110->fe->ops.set_tone = av7110_set_tone;
2132 av7110->recover = dvb_s_recover;
2133 break;
2134 }
2135
2136
2137 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2138 if (av7110->fe) {
2139 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2140 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2141 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2142 av7110->fe->ops.set_tone = av7110_set_tone;
2143 av7110->recover = dvb_s_recover;
2144 break;
2145 }
2146
2147
2148 switch(av7110->dev->pci->subsystem_device) {
2149 case 0x0000:
2150
2151 av7110->fe = dvb_attach(ves1820_attach, &philips_cd1516_config, &av7110->i2c_adap,
2152 read_pwm(av7110));
2153 if (av7110->fe) {
2154 av7110->fe->ops.tuner_ops.set_params = philips_cd1516_tuner_set_params;
2155 }
2156 break;
2157 case 0x0003:
2158
2159 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap,
2160 read_pwm(av7110));
2161 if (av7110->fe) {
2162 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2163 }
2164 break;
2165 }
2166 break;
2167
2168 case 0x0001:
2169 {
2170 struct dvb_frontend *fe;
2171
2172
2173 fe = dvb_attach(sp8870_attach, &alps_tdlb7_config, &av7110->i2c_adap);
2174 if (fe) {
2175 fe->ops.tuner_ops.set_params = alps_tdlb7_tuner_set_params;
2176 av7110->fe = fe;
2177 break;
2178 }
2179 }
2180 fallthrough;
2181
2182 case 0x0008:
2183
2184 av7110->fe = dvb_attach(l64781_attach, &grundig_29504_401_config, &av7110->i2c_adap);
2185 if (av7110->fe)
2186 av7110->fe->ops.tuner_ops.set_params = grundig_29504_401_tuner_set_params;
2187 break;
2188
2189 case 0x0002:
2190
2191 av7110->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &av7110->i2c_adap, read_pwm(av7110));
2192 if (av7110->fe) {
2193 av7110->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
2194 }
2195 break;
2196
2197 case 0x0004:
2198
2199 av7110->fe = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &av7110->i2c_adap);
2200 if (av7110->fe) {
2201 av7110->fe->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params;
2202 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2203 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2204 av7110->fe->ops.set_tone = av7110_set_tone;
2205 av7110->recover = dvb_s_recover;
2206 }
2207 break;
2208
2209 case 0x0006:
2210
2211 av7110->fe = dvb_attach(tda8083_attach, &grundig_29504_451_config, &av7110->i2c_adap);
2212 if (av7110->fe) {
2213 av7110->fe->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params;
2214 av7110->fe->ops.diseqc_send_master_cmd = av7110_diseqc_send_master_cmd;
2215 av7110->fe->ops.diseqc_send_burst = av7110_diseqc_send_burst;
2216 av7110->fe->ops.set_tone = av7110_set_tone;
2217 av7110->recover = dvb_s_recover;
2218 }
2219 break;
2220
2221 case 0x000A:
2222
2223 av7110->fe = dvb_attach(stv0297_attach, &nexusca_stv0297_config, &av7110->i2c_adap);
2224 if (av7110->fe) {
2225 av7110->fe->ops.tuner_ops.set_params = nexusca_stv0297_tuner_set_params;
2226
2227
2228 saa7146_setgpio(av7110->dev, 1, SAA7146_GPIO_OUTLO);
2229 saa7146_setgpio(av7110->dev, 3, SAA7146_GPIO_OUTLO);
2230
2231
2232 av7110->dev->i2c_bitrate = SAA7146_I2C_BUS_BIT_RATE_240;
2233 break;
2234 }
2235 break;
2236
2237 case 0x000E:
2238
2239 av7110->fe = dvb_attach(stv0299_attach, &alps_bsbe1_config, &av7110->i2c_adap);
2240 if (av7110->fe) {
2241 av7110->fe->ops.tuner_ops.set_params = alps_bsbe1_tuner_set_params;
2242 av7110->fe->tuner_priv = &av7110->i2c_adap;
2243
2244 if (dvb_attach(lnbp21_attach, av7110->fe, &av7110->i2c_adap, 0, 0) == NULL) {
2245 printk("dvb-ttpci: LNBP21 not found!\n");
2246 if (av7110->fe->ops.release)
2247 av7110->fe->ops.release(av7110->fe);
2248 av7110->fe = NULL;
2249 } else {
2250 av7110->fe->ops.dishnetwork_send_legacy_command = NULL;
2251 av7110->recover = dvb_s_recover;
2252 }
2253 }
2254 break;
2255 }
2256 }
2257
2258 if (!av7110->fe) {
2259
2260 ret = -ENOMEM;
2261 printk("dvb-ttpci: A frontend driver was not found for device [%04x:%04x] subsystem [%04x:%04x]\n",
2262 av7110->dev->pci->vendor,
2263 av7110->dev->pci->device,
2264 av7110->dev->pci->subsystem_vendor,
2265 av7110->dev->pci->subsystem_device);
2266 } else {
2267 FE_FUNC_OVERRIDE(av7110->fe->ops.init, av7110->fe_init, av7110_fe_init);
2268 FE_FUNC_OVERRIDE(av7110->fe->ops.read_status, av7110->fe_read_status, av7110_fe_read_status);
2269 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_reset_overload, av7110->fe_diseqc_reset_overload, av7110_fe_diseqc_reset_overload);
2270 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_master_cmd, av7110->fe_diseqc_send_master_cmd, av7110_fe_diseqc_send_master_cmd);
2271 FE_FUNC_OVERRIDE(av7110->fe->ops.diseqc_send_burst, av7110->fe_diseqc_send_burst, av7110_fe_diseqc_send_burst);
2272 FE_FUNC_OVERRIDE(av7110->fe->ops.set_tone, av7110->fe_set_tone, av7110_fe_set_tone);
2273 FE_FUNC_OVERRIDE(av7110->fe->ops.set_voltage, av7110->fe_set_voltage, av7110_fe_set_voltage);
2274 FE_FUNC_OVERRIDE(av7110->fe->ops.dishnetwork_send_legacy_command, av7110->fe_dishnetwork_send_legacy_command, av7110_fe_dishnetwork_send_legacy_command);
2275 FE_FUNC_OVERRIDE(av7110->fe->ops.set_frontend, av7110->fe_set_frontend, av7110_fe_set_frontend);
2276
2277 ret = dvb_register_frontend(&av7110->dvb_adapter, av7110->fe);
2278 if (ret < 0) {
2279 printk("av7110: Frontend registration failed!\n");
2280 dvb_frontend_detach(av7110->fe);
2281 av7110->fe = NULL;
2282 }
2283 }
2284 return ret;
2285 }
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347 static int av7110_attach(struct saa7146_dev* dev,
2348 struct saa7146_pci_extension_data *pci_ext)
2349 {
2350 const int length = TS_WIDTH * TS_HEIGHT;
2351 struct pci_dev *pdev = dev->pci;
2352 struct av7110 *av7110;
2353 struct task_struct *thread;
2354 int ret, count = 0;
2355
2356 dprintk(4, "dev: %p\n", dev);
2357
2358
2359
2360
2361 #define RPS_IRQ 0
2362
2363 if (budgetpatch == 1) {
2364 budgetpatch = 0;
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377 saa7146_write(dev, MC1, MASK_31);
2378
2379
2380
2381 saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO);
2382
2383 saa7146_write(dev, DD1_STREAM_B, 0);
2384
2385 saa7146_write(dev, DD1_INIT, 0x00000200);
2386 saa7146_write(dev, BRS_CTRL, 0x00000000);
2387 saa7146_write(dev, MC2,
2388 1 * (MASK_08 | MASK_24) |
2389 0 * (MASK_09 | MASK_25) |
2390 1 * (MASK_10 | MASK_26) |
2391 0 * (MASK_06 | MASK_22) |
2392 0 * (MASK_05 | MASK_21) |
2393 0 * (MASK_01 | MASK_15)
2394 );
2395
2396
2397 count = 0;
2398
2399 saa7146_write(dev, MC1, MASK_29);
2400
2401 saa7146_write(dev, RPS_TOV1, 0);
2402 WRITE_RPS1(CMD_PAUSE | EVT_VBI_B);
2403 WRITE_RPS1(CMD_WR_REG_MASK | (GPIO_CTRL>>2));
2404 WRITE_RPS1(GPIO3_MSK);
2405 WRITE_RPS1(SAA7146_GPIO_OUTLO<<24);
2406 #if RPS_IRQ
2407
2408 WRITE_RPS1(CMD_INTERRUPT);
2409 #endif
2410 WRITE_RPS1(CMD_STOP);
2411
2412 WRITE_RPS1(CMD_JUMP);
2413 WRITE_RPS1(dev->d_rps1.dma_handle);
2414
2415 #if RPS_IRQ
2416
2417
2418
2419
2420 saa7146_write(dev, EC1SSR, (0x03<<2) | 3 );
2421
2422 saa7146_write(dev, ECT1R, 0x3fff );
2423 #endif
2424
2425 saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle);
2426
2427 saa7146_write(dev, MC1, (MASK_13 | MASK_29 ));
2428
2429 mdelay(10);
2430
2431 saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI);
2432 mdelay(10);
2433
2434
2435
2436 if ((saa7146_read(dev, GPIO_CTRL) & 0x10000000) == 0) {
2437 budgetpatch = 1;
2438 printk("dvb-ttpci: BUDGET-PATCH DETECTED.\n");
2439 }
2440
2441 saa7146_write(dev, MC1, ( MASK_29 ));
2442 #if RPS_IRQ
2443 printk("dvb-ttpci: Event Counter 1 0x%04x\n", saa7146_read(dev, EC1R) & 0x3fff );
2444 #endif
2445 }
2446
2447
2448 av7110 = kzalloc(sizeof(struct av7110), GFP_KERNEL);
2449 if (!av7110) {
2450 dprintk(1, "out of memory\n");
2451 return -ENOMEM;
2452 }
2453
2454 av7110->card_name = (char*) pci_ext->ext_priv;
2455 av7110->dev = dev;
2456 dev->ext_priv = av7110;
2457
2458 ret = get_firmware(av7110);
2459 if (ret < 0)
2460 goto err_kfree_0;
2461
2462 ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,
2463 THIS_MODULE, &dev->pci->dev, adapter_nr);
2464 if (ret < 0)
2465 goto err_put_firmware_1;
2466
2467
2468
2469 saa7146_write(dev, GPIO_CTRL, 0x500000);
2470
2471 strscpy(av7110->i2c_adap.name, pci_ext->ext_priv,
2472 sizeof(av7110->i2c_adap.name));
2473
2474 saa7146_i2c_adapter_prepare(dev, &av7110->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120);
2475
2476 ret = i2c_add_adapter(&av7110->i2c_adap);
2477 if (ret < 0)
2478 goto err_dvb_unregister_adapter_2;
2479
2480 ttpci_eeprom_parse_mac(&av7110->i2c_adap,
2481 av7110->dvb_adapter.proposed_mac);
2482 ret = -ENOMEM;
2483
2484
2485 if (full_ts)
2486 av7110->full_ts = true;
2487
2488
2489 if (i2c_readreg(av7110, 0xaa, 0) == 0x4f && i2c_readreg(av7110, 0xaa, 1) == 0x45) {
2490 u8 flags = i2c_readreg(av7110, 0xaa, 2);
2491 if (flags != 0xff && (flags & 0x01))
2492 av7110->full_ts = true;
2493 }
2494
2495 if (av7110->full_ts) {
2496 printk(KERN_INFO "dvb-ttpci: full-ts mode enabled for saa7146 port B\n");
2497 spin_lock_init(&av7110->feedlock1);
2498 av7110->grabbing = saa7146_vmalloc_build_pgtable(pdev, length,
2499 &av7110->pt);
2500 if (!av7110->grabbing)
2501 goto err_i2c_del_3;
2502
2503 saa7146_write(dev, DD1_STREAM_B, 0x00000000);
2504 saa7146_write(dev, MC2, (MASK_10 | MASK_26));
2505
2506 saa7146_write(dev, DD1_INIT, 0x00000600);
2507 saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
2508
2509 saa7146_write(dev, BRS_CTRL, 0x60000000);
2510 saa7146_write(dev, MC2, MASK_08 | MASK_24);
2511
2512
2513 saa7146_write(dev, PCI_BT_V1, 0x001c0000 | (saa7146_read(dev, PCI_BT_V1) & ~0x001f0000));
2514 saa7146_write(dev, BASE_ODD3, 0);
2515 saa7146_write(dev, BASE_EVEN3, 0);
2516 saa7146_write(dev, PROT_ADDR3, TS_WIDTH * TS_HEIGHT);
2517 saa7146_write(dev, PITCH3, TS_WIDTH);
2518 saa7146_write(dev, BASE_PAGE3, av7110->pt.dma | ME1 | 0x90);
2519 saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT << 16) | TS_WIDTH);
2520 saa7146_write(dev, MC2, MASK_04 | MASK_20);
2521
2522 tasklet_setup(&av7110->vpe_tasklet, vpeirq);
2523
2524 } else if (budgetpatch) {
2525 spin_lock_init(&av7110->feedlock1);
2526 av7110->grabbing = saa7146_vmalloc_build_pgtable(pdev, length,
2527 &av7110->pt);
2528 if (!av7110->grabbing)
2529 goto err_i2c_del_3;
2530
2531 saa7146_write(dev, PCI_BT_V1, 0x1c1f101f);
2532 saa7146_write(dev, BCS_CTRL, 0x80400040);
2533
2534 saa7146_write(dev, DD1_STREAM_B, 0x00000000);
2535 saa7146_write(dev, DD1_INIT, 0x03000200);
2536 saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
2537 saa7146_write(dev, BRS_CTRL, 0x60000000);
2538 saa7146_write(dev, BASE_ODD3, 0);
2539 saa7146_write(dev, BASE_EVEN3, 0);
2540 saa7146_write(dev, PROT_ADDR3, TS_WIDTH * TS_HEIGHT);
2541 saa7146_write(dev, BASE_PAGE3, av7110->pt.dma | ME1 | 0x90);
2542
2543 saa7146_write(dev, PITCH3, TS_WIDTH);
2544 saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT << 16) | TS_WIDTH);
2545
2546
2547 saa7146_write(dev, MC2, 0x077c077c);
2548 saa7146_write(dev, GPIO_CTRL, 0x000000);
2549 #if RPS_IRQ
2550
2551
2552
2553
2554 saa7146_write(dev, EC1SSR, (0x03<<2) | 3 );
2555
2556 saa7146_write(dev, ECT1R, 0x3fff );
2557 #endif
2558
2559 count = 0;
2560
2561
2562 WRITE_RPS1(CMD_PAUSE | EVT_HS);
2563
2564 WRITE_RPS1(CMD_WR_REG_MASK | (GPIO_CTRL>>2));
2565 WRITE_RPS1(GPIO3_MSK);
2566 WRITE_RPS1(SAA7146_GPIO_OUTHI<<24);
2567 #if RPS_IRQ
2568
2569 WRITE_RPS1(CMD_INTERRUPT);
2570 #endif
2571
2572 WRITE_RPS1(CMD_PAUSE | RPS_INV | EVT_HS);
2573
2574 WRITE_RPS1(CMD_WR_REG_MASK | (GPIO_CTRL>>2));
2575 WRITE_RPS1(GPIO3_MSK);
2576 WRITE_RPS1(SAA7146_GPIO_OUTLO<<24);
2577 #if RPS_IRQ
2578
2579 WRITE_RPS1(CMD_INTERRUPT);
2580 #endif
2581
2582 WRITE_RPS1(CMD_JUMP);
2583 WRITE_RPS1(dev->d_rps1.dma_handle);
2584
2585
2586 saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO);
2587
2588 saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle);
2589
2590
2591
2592
2593
2594
2595
2596
2597 saa7146_write(dev, RPS_THRESH1, (TS_HEIGHT*1) | MASK_12 );
2598
2599
2600 saa7146_write(dev, MC1, (MASK_13 | MASK_29));
2601
2602
2603 tasklet_setup(&av7110->vpe_tasklet, vpeirq);
2604 } else {
2605 saa7146_write(dev, PCI_BT_V1, 0x1c00101f);
2606 saa7146_write(dev, BCS_CTRL, 0x80400040);
2607
2608
2609 saa7146_write(dev, DD1_STREAM_B, 0x00000000);
2610 saa7146_write(dev, DD1_INIT, 0x03000000);
2611 saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
2612
2613
2614 saa7146_write(dev, MC2, 0x077c077c);
2615 saa7146_write(dev, GPIO_CTRL, 0x000000);
2616 }
2617
2618 tasklet_setup(&av7110->debi_tasklet, debiirq);
2619 tasklet_setup(&av7110->gpio_tasklet, gpioirq);
2620
2621 mutex_init(&av7110->pid_mutex);
2622
2623
2624 spin_lock_init(&av7110->debilock);
2625 mutex_init(&av7110->dcomlock);
2626 av7110->debitype = -1;
2627
2628
2629 av7110->osdwin = 1;
2630 mutex_init(&av7110->osd_mutex);
2631
2632
2633 av7110->vidmode = tv_standard == 1 ? AV7110_VIDEO_MODE_NTSC
2634 : AV7110_VIDEO_MODE_PAL;
2635
2636
2637 init_waitqueue_head(&av7110->arm_wait);
2638 av7110->arm_thread = NULL;
2639
2640
2641 av7110->debi_virt = dma_alloc_coherent(&pdev->dev, 8192,
2642 &av7110->debi_bus, GFP_KERNEL);
2643 if (!av7110->debi_virt)
2644 goto err_saa71466_vfree_4;
2645
2646
2647 av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS);
2648 if (!av7110->iobuf)
2649 goto err_pci_free_5;
2650
2651 ret = av7110_av_init(av7110);
2652 if (ret < 0)
2653 goto err_iobuf_vfree_6;
2654
2655
2656 av7110->bmpbuf = av7110->iobuf+AVOUTLEN+AOUTLEN;
2657 init_waitqueue_head(&av7110->bmpq);
2658
2659 ret = av7110_ca_init(av7110);
2660 if (ret < 0)
2661 goto err_av7110_av_exit_7;
2662
2663
2664 ret = av7110_bootarm(av7110);
2665 if (ret < 0)
2666 goto err_av7110_ca_exit_8;
2667
2668 ret = av7110_firmversion(av7110);
2669 if (ret < 0)
2670 goto err_stop_arm_9;
2671
2672 if (FW_VERSION(av7110->arm_app)<0x2501)
2673 printk(KERN_WARNING
2674 "dvb-ttpci: Warning, firmware version 0x%04x is too old. System might be unstable!\n",
2675 FW_VERSION(av7110->arm_app));
2676
2677 thread = kthread_run(arm_thread, (void *) av7110, "arm_mon");
2678 if (IS_ERR(thread)) {
2679 ret = PTR_ERR(thread);
2680 goto err_stop_arm_9;
2681 }
2682 av7110->arm_thread = thread;
2683
2684
2685 av7110->mixer.volume_left = volume;
2686 av7110->mixer.volume_right = volume;
2687
2688 ret = av7110_register(av7110);
2689 if (ret < 0)
2690 goto err_arm_thread_stop_10;
2691
2692 init_av7110_av(av7110);
2693
2694
2695
2696
2697 ret = av7110_init_v4l(av7110);
2698 if (ret < 0)
2699 goto err_av7110_unregister_11;
2700
2701 av7110->dvb_adapter.priv = av7110;
2702 ret = frontend_init(av7110);
2703 if (ret < 0)
2704 goto err_av7110_exit_v4l_12;
2705
2706 mutex_init(&av7110->ioctl_mutex);
2707
2708 #if IS_ENABLED(CONFIG_DVB_AV7110_IR)
2709 av7110_ir_init(av7110);
2710 #endif
2711 printk(KERN_INFO "dvb-ttpci: found av7110-%d.\n", av7110_num);
2712 av7110_num++;
2713 out:
2714 return ret;
2715
2716 err_av7110_exit_v4l_12:
2717 av7110_exit_v4l(av7110);
2718 err_av7110_unregister_11:
2719 dvb_unregister(av7110);
2720 err_arm_thread_stop_10:
2721 av7110_arm_sync(av7110);
2722 err_stop_arm_9:
2723
2724 err_av7110_ca_exit_8:
2725 av7110_ca_exit(av7110);
2726 err_av7110_av_exit_7:
2727 av7110_av_exit(av7110);
2728 err_iobuf_vfree_6:
2729 vfree(av7110->iobuf);
2730 err_pci_free_5:
2731 dma_free_coherent(&pdev->dev, 8192, av7110->debi_virt,
2732 av7110->debi_bus);
2733 err_saa71466_vfree_4:
2734 if (av7110->grabbing)
2735 saa7146_vfree_destroy_pgtable(pdev, av7110->grabbing, &av7110->pt);
2736 err_i2c_del_3:
2737 i2c_del_adapter(&av7110->i2c_adap);
2738 err_dvb_unregister_adapter_2:
2739 dvb_unregister_adapter(&av7110->dvb_adapter);
2740 err_put_firmware_1:
2741 put_firmware(av7110);
2742 err_kfree_0:
2743 kfree(av7110);
2744 goto out;
2745 }
2746
2747 static int av7110_detach(struct saa7146_dev* saa)
2748 {
2749 struct av7110 *av7110 = saa->ext_priv;
2750 dprintk(4, "%p\n", av7110);
2751
2752 #if IS_ENABLED(CONFIG_DVB_AV7110_IR)
2753 av7110_ir_exit(av7110);
2754 #endif
2755 if (budgetpatch || av7110->full_ts) {
2756 if (budgetpatch) {
2757
2758 saa7146_write(saa, MC1, MASK_29);
2759
2760 saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTLO);
2761 }
2762 saa7146_write(saa, MC1, MASK_20);
2763 SAA7146_IER_DISABLE(saa, MASK_10);
2764 SAA7146_ISR_CLEAR(saa, MASK_10);
2765 msleep(50);
2766 tasklet_kill(&av7110->vpe_tasklet);
2767 saa7146_vfree_destroy_pgtable(saa->pci, av7110->grabbing, &av7110->pt);
2768 }
2769 av7110_exit_v4l(av7110);
2770
2771 av7110_arm_sync(av7110);
2772
2773 tasklet_kill(&av7110->debi_tasklet);
2774 tasklet_kill(&av7110->gpio_tasklet);
2775
2776 dvb_unregister(av7110);
2777
2778 SAA7146_IER_DISABLE(saa, MASK_19 | MASK_03);
2779 SAA7146_ISR_CLEAR(saa, MASK_19 | MASK_03);
2780
2781 av7110_ca_exit(av7110);
2782 av7110_av_exit(av7110);
2783
2784 vfree(av7110->iobuf);
2785 dma_free_coherent(&saa->pci->dev, 8192, av7110->debi_virt,
2786 av7110->debi_bus);
2787
2788 i2c_del_adapter(&av7110->i2c_adap);
2789
2790 dvb_unregister_adapter (&av7110->dvb_adapter);
2791
2792 av7110_num--;
2793
2794 put_firmware(av7110);
2795
2796 kfree(av7110);
2797
2798 saa->ext_priv = NULL;
2799
2800 return 0;
2801 }
2802
2803
2804 static void av7110_irq(struct saa7146_dev* dev, u32 *isr)
2805 {
2806 struct av7110 *av7110 = dev->ext_priv;
2807
2808
2809
2810
2811
2812
2813
2814 if (*isr & MASK_19) {
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831 SAA7146_IER_DISABLE(av7110->dev, MASK_19);
2832 SAA7146_ISR_CLEAR(av7110->dev, MASK_19);
2833 tasklet_schedule(&av7110->debi_tasklet);
2834 }
2835
2836 if (*isr & MASK_03) {
2837
2838 tasklet_schedule(&av7110->gpio_tasklet);
2839 }
2840
2841 if (*isr & MASK_10)
2842 tasklet_schedule(&av7110->vpe_tasklet);
2843 }
2844
2845
2846 static struct saa7146_extension av7110_extension_driver;
2847
2848 #define MAKE_AV7110_INFO(x_var,x_name) \
2849 static struct saa7146_pci_extension_data x_var = { \
2850 .ext_priv = x_name, \
2851 .ext = &av7110_extension_driver }
2852
2853 MAKE_AV7110_INFO(tts_1_X_fsc,"Technotrend/Hauppauge WinTV DVB-S rev1.X or Fujitsu Siemens DVB-C");
2854 MAKE_AV7110_INFO(ttt_1_X, "Technotrend/Hauppauge WinTV DVB-T rev1.X");
2855 MAKE_AV7110_INFO(ttc_1_X, "Technotrend/Hauppauge WinTV Nexus-CA rev1.X");
2856 MAKE_AV7110_INFO(ttc_2_X, "Technotrend/Hauppauge WinTV DVB-C rev2.X");
2857 MAKE_AV7110_INFO(tts_2_X, "Technotrend/Hauppauge WinTV Nexus-S rev2.X");
2858 MAKE_AV7110_INFO(tts_2_3, "Technotrend/Hauppauge WinTV Nexus-S rev2.3");
2859 MAKE_AV7110_INFO(tts_1_3se, "Technotrend/Hauppauge WinTV DVB-S rev1.3 SE");
2860 MAKE_AV7110_INFO(ttt, "Technotrend/Hauppauge DVB-T");
2861 MAKE_AV7110_INFO(fsc, "Fujitsu Siemens DVB-C");
2862 MAKE_AV7110_INFO(fss, "Fujitsu Siemens DVB-S rev1.6");
2863 MAKE_AV7110_INFO(gxs_1_3, "Galaxis DVB-S rev1.3");
2864
2865 static const struct pci_device_id pci_tbl[] = {
2866 MAKE_EXTENSION_PCI(fsc, 0x110a, 0x0000),
2867 MAKE_EXTENSION_PCI(tts_1_X_fsc, 0x13c2, 0x0000),
2868 MAKE_EXTENSION_PCI(ttt_1_X, 0x13c2, 0x0001),
2869 MAKE_EXTENSION_PCI(ttc_2_X, 0x13c2, 0x0002),
2870 MAKE_EXTENSION_PCI(tts_2_X, 0x13c2, 0x0003),
2871 MAKE_EXTENSION_PCI(gxs_1_3, 0x13c2, 0x0004),
2872 MAKE_EXTENSION_PCI(fss, 0x13c2, 0x0006),
2873 MAKE_EXTENSION_PCI(ttt, 0x13c2, 0x0008),
2874 MAKE_EXTENSION_PCI(ttc_1_X, 0x13c2, 0x000a),
2875 MAKE_EXTENSION_PCI(tts_2_3, 0x13c2, 0x000e),
2876 MAKE_EXTENSION_PCI(tts_1_3se, 0x13c2, 0x1002),
2877
2878
2879
2880
2881 {
2882 .vendor = 0,
2883 }
2884 };
2885
2886 MODULE_DEVICE_TABLE(pci, pci_tbl);
2887
2888
2889 static struct saa7146_extension av7110_extension_driver = {
2890 .name = "av7110",
2891 .flags = SAA7146_USE_I2C_IRQ,
2892
2893 .module = THIS_MODULE,
2894 .pci_tbl = &pci_tbl[0],
2895 .attach = av7110_attach,
2896 .detach = av7110_detach,
2897
2898 .irq_mask = MASK_19 | MASK_03 | MASK_10,
2899 .irq_func = av7110_irq,
2900 };
2901
2902
2903 static int __init av7110_init(void)
2904 {
2905 return saa7146_register_extension(&av7110_extension_driver);
2906 }
2907
2908
2909 static void __exit av7110_exit(void)
2910 {
2911 saa7146_unregister_extension(&av7110_extension_driver);
2912 }
2913
2914 module_init(av7110_init);
2915 module_exit(av7110_exit);
2916
2917 MODULE_DESCRIPTION("driver for the SAA7146 based AV110 PCI DVB cards by Siemens, Technotrend, Hauppauge");
2918 MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others");
2919 MODULE_LICENSE("GPL");