Lines Matching +full:vsync +full:- +full:len

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * budget-patch.c: driver for Budget Patch,
4 * hardware modification of DVB-S cards enabling full TS
31 MAKE_BUDGET_INFO(ttbp, "TT-Budget/Patch DVB-S 1.x PCI", BUDGET_PATCH);
32 //MAKE_BUDGET_INFO(satel,"TT-Budget/Patch SATELCO PCI", BUDGET_TT_HW_DISEQC);
42 /* those lines are for budget-patch to be tried
44 ** behaviour of VSYNC generated by rps1.
49 struct saa7146_dev *dev=budget->dev; in gpio_Set22K()
60 struct saa7146_dev *dev=budget->dev; in DiseqcSendBit()
75 for (i=7; i>=0; i--) { in DiseqcSendByte()
84 static int SendDiSEqCMsg (struct budget *budget, int len, u8 *msg, unsigned long burst) in SendDiSEqCMsg() argument
86 struct saa7146_dev *dev=budget->dev; in SendDiSEqCMsg()
94 for (i=0; i<len; i++) in SendDiSEqCMsg()
99 if (burst!=-1) { in SendDiSEqCMsg()
118 struct budget* budget = (struct budget*) fe->dvb->priv; in budget_set_tone()
130 return -EINVAL; in budget_set_tone()
138 struct budget* budget = (struct budget*) fe->dvb->priv; in budget_diseqc_send_master_cmd()
140 SendDiSEqCMsg (budget, cmd->msg_len, cmd->msg, 0); in budget_diseqc_send_master_cmd()
148 struct budget* budget = (struct budget*) fe->dvb->priv; in budget_diseqc_send_burst()
184 static int av7110_send_diseqc_msg(struct budget_patch *budget, int len, u8 *msg, int burst) in av7110_send_diseqc_msg() argument
192 if (len>10) in av7110_send_diseqc_msg()
193 len=10; in av7110_send_diseqc_msg()
195 buf[1] = len+2; in av7110_send_diseqc_msg()
196 buf[2] = len; in av7110_send_diseqc_msg()
198 if (burst != -1) in av7110_send_diseqc_msg()
203 for (i=0; i<len; i++) in av7110_send_diseqc_msg()
213 struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; in budget_patch_set_tone()
225 return -EINVAL; in budget_patch_set_tone()
233 struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; in budget_patch_diseqc_send_master_cmd()
235 av7110_send_diseqc_msg (budget, cmd->msg_len, cmd->msg, 0); in budget_patch_diseqc_send_master_cmd()
243 struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; in budget_patch_diseqc_send_burst()
252 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in alps_bsrv2_tuner_set_params()
253 struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; in alps_bsrv2_tuner_set_params()
256 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf) }; in alps_bsrv2_tuner_set_params()
257 u32 div = (p->frequency + 479500) / 125; in alps_bsrv2_tuner_set_params()
259 if (p->frequency > 2000000) in alps_bsrv2_tuner_set_params()
261 else if (p->frequency > 1800000) in alps_bsrv2_tuner_set_params()
263 else if (p->frequency > 1600000) in alps_bsrv2_tuner_set_params()
265 else if (p->frequency > 1200000) in alps_bsrv2_tuner_set_params()
267 else if (p->frequency >= 1100000) in alps_bsrv2_tuner_set_params()
279 if (fe->ops.i2c_gate_ctrl) in alps_bsrv2_tuner_set_params()
280 fe->ops.i2c_gate_ctrl(fe, 1); in alps_bsrv2_tuner_set_params()
281 if (i2c_transfer (&budget->i2c_adap, &msg, 1) != 1) in alps_bsrv2_tuner_set_params()
282 return -EIO; in alps_bsrv2_tuner_set_params()
294 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in grundig_29504_451_tuner_set_params()
295 struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; in grundig_29504_451_tuner_set_params()
298 struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) }; in grundig_29504_451_tuner_set_params()
300 div = p->frequency / 125; in grundig_29504_451_tuner_set_params()
306 if (fe->ops.i2c_gate_ctrl) in grundig_29504_451_tuner_set_params()
307 fe->ops.i2c_gate_ctrl(fe, 1); in grundig_29504_451_tuner_set_params()
308 if (i2c_transfer (&budget->i2c_adap, &msg, 1) != 1) in grundig_29504_451_tuner_set_params()
309 return -EIO; in grundig_29504_451_tuner_set_params()
319 switch(budget->dev->pci->subsystem_device) { in frontend_init()
320 case 0x0000: // Hauppauge/TT WinTV DVB-S rev1.X in frontend_init()
324 budget->dvb_frontend = dvb_attach(ves1x93_attach, &alps_bsrv2_config, &budget->i2c_adap); in frontend_init()
325 if (budget->dvb_frontend) { in frontend_init()
326 budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsrv2_tuner_set_params; in frontend_init()
327 budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_patch_diseqc_send_master_cmd; in frontend_init()
328 budget->dvb_frontend->ops.diseqc_send_burst = budget_patch_diseqc_send_burst; in frontend_init()
329 budget->dvb_frontend->ops.set_tone = budget_patch_set_tone; in frontend_init()
334 budget->dvb_frontend = dvb_attach(stv0299_attach, &alps_bsru6_config, &budget->i2c_adap); in frontend_init()
335 if (budget->dvb_frontend) { in frontend_init()
336 budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; in frontend_init()
337 budget->dvb_frontend->tuner_priv = &budget->i2c_adap; in frontend_init()
339 budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd; in frontend_init()
340 budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst; in frontend_init()
341 budget->dvb_frontend->ops.set_tone = budget_set_tone; in frontend_init()
345 // Try the grundig 29504-451 in frontend_init()
346 budget->dvb_frontend = dvb_attach(tda8083_attach, &grundig_29504_451_config, &budget->i2c_adap); in frontend_init()
347 if (budget->dvb_frontend) { in frontend_init()
348 budget->dvb_frontend->ops.tuner_ops.set_params = grundig_29504_451_tuner_set_params; in frontend_init()
349 budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd; in frontend_init()
350 budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst; in frontend_init()
351 budget->dvb_frontend->ops.set_tone = budget_set_tone; in frontend_init()
357 if (budget->dvb_frontend == NULL) { in frontend_init()
358 …printk("dvb-ttpci: A frontend driver was not found for device [%04x:%04x] subsystem [%04x:%04x]\n", in frontend_init()
359 budget->dev->pci->vendor, in frontend_init()
360 budget->dev->pci->device, in frontend_init()
361 budget->dev->pci->subsystem_vendor, in frontend_init()
362 budget->dev->pci->subsystem_device); in frontend_init()
364 if (dvb_register_frontend(&budget->dvb_adapter, budget->dvb_frontend)) { in frontend_init()
365 printk("budget-av: Frontend registration failed!\n"); in frontend_init()
366 dvb_frontend_detach(budget->dvb_frontend); in frontend_init()
367 budget->dvb_frontend = NULL; in frontend_init()
391 // port B VSYNC at rising edge in budget_patch_attach()
392 saa7146_write(dev, DD1_INIT, 0x00000200); // have this in budget-core too! in budget_patch_attach()
449 // use 0x03 to track RPS1 interrupts - increase by 1 every gpio3 is toggled in budget_patch_attach()
450 // use 0x15 to track VPE interrupts - increase by 1 every vpeirq() is called in budget_patch_attach()
455 // Fix VSYNC level in budget_patch_attach()
458 saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle); in budget_patch_attach()
478 printk("budget-patch not detected or saa7146 in non-default state.\n" in budget_patch_attach()
482 printk("BUDGET-PATCH DETECTED.\n"); in budget_patch_attach()
493 ** (74HCT4040, LVC74) for the generation of this VSYNC signal, in budget_patch_attach()
494 ** which seems that can be done perfectly without this :-)). in budget_patch_attach()
499 ** GPIO3 is in budget-patch hardware connected to port B VSYNC in budget_patch_attach()
504 ** I think HS is raised high on the beginning of the n-th line in budget_patch_attach()
505 ** and remains high until this n-th line that triggered in budget_patch_attach()
506 ** it is completely received. When the reception of n-th line in budget_patch_attach()
510 ** port B VSYNC pin. Any changing of port B VSYNC will in budget_patch_attach()
512 ** It depends on the phase and frequency of VSYNC and in budget_patch_attach()
515 ** numbers are 0-7, see datasheet) in budget_patch_attach()
524 ** (Va at rising edge of VS Fa = HS x VS-failing forced toggle) in budget_patch_attach()
525 ** and a VSYNC phase that occurs in the middle of DMA transfer in budget_patch_attach()
533 ** counting in this budget-patch.c in budget_patch_attach()
539 ** generate 3 interrupts per 25-Hz DMA frame of 2*188*512 bytes in budget_patch_attach()
546 ** this means VSYNC line is not connected in the hardware. in budget_patch_attach()
548 ** The same behaviour of missing VSYNC can be duplicated on budget in budget_patch_attach()
578 WRITE_RPS1(dev->d_rps1.dma_handle); in budget_patch_attach()
580 // Fix VSYNC level in budget_patch_attach()
583 saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle); in budget_patch_attach()
586 return -ENOMEM; in budget_patch_attach()
599 // NUM_LINE_BYTE3 in budget-core.c. If NUM_LINE_BYTE in budget_patch_attach()
604 saa7146_write(dev, RPS_THRESH1, budget->buffer_height | MASK_12 ); in budget_patch_attach()
611 dev->ext_priv = budget; in budget_patch_attach()
613 budget->dvb_adapter.priv = budget; in budget_patch_attach()
623 struct budget_patch *budget = (struct budget_patch*) dev->ext_priv; in budget_patch_detach()
626 if (budget->dvb_frontend) { in budget_patch_detach()
627 dvb_unregister_frontend(budget->dvb_frontend); in budget_patch_detach()
628 dvb_frontend_detach(budget->dvb_frontend); in budget_patch_detach()
665 MODULE_DESCRIPTION("Driver for full TS modified DVB-S SAA7146+AV7110 based so-called Budget Patch c…