Lines Matching defs:budget_ci
40 #define MODULE_NAME "budget_ci"
92 struct budget_ci {
105 struct budget_ci *budget_ci = container_of(ir, typeof(*budget_ci), ir);
106 struct rc_dev *dev = budget_ci->ir.dev;
107 u32 command = ttpci_budget_debiread(&budget_ci->budget, DEBINOSWAP, DEBIADDR_IR, 2, 1, 0) >> 8;
126 printk("budget_ci: received byte 0x%02x\n", command);
133 budget_ci->ir.have_command = true;
134 budget_ci->ir.ir_key = command & 0x3f;
139 if (!budget_ci->ir.have_command)
141 budget_ci->ir.have_command = false;
143 if (budget_ci->ir.rc5_device != IR_DEVICE_ANY &&
144 budget_ci->ir.rc5_device != (command & 0x1f))
147 if (budget_ci->ir.full_rc5) {
149 RC_SCANCODE_RC5(budget_ci->ir.rc5_device, budget_ci->ir.ir_key),
155 rc_keydown(dev, RC_PROTO_UNKNOWN, budget_ci->ir.ir_key,
159 static int msp430_ir_init(struct budget_ci *budget_ci)
161 struct saa7146_dev *saa = budget_ci->budget.dev;
167 printk(KERN_ERR "budget_ci: IR interface initialisation failed\n");
171 snprintf(budget_ci->ir.name, sizeof(budget_ci->ir.name),
173 snprintf(budget_ci->ir.phys, sizeof(budget_ci->ir.phys),
177 dev->device_name = budget_ci->ir.name;
178 dev->input_phys = budget_ci->ir.phys;
191 budget_ci->ir.rc5_device = IR_DEVICE_ANY;
193 budget_ci->ir.rc5_device = rc5_device;
196 switch (budget_ci->budget.dev->pci->subsystem_device) {
203 budget_ci->ir.full_rc5 = true;
206 budget_ci->ir.rc5_device = 0x1f;
221 if (!budget_ci->ir.full_rc5)
226 printk(KERN_ERR "budget_ci: could not init driver for IR device (code %d)\n", error);
231 budget_ci->ir.dev = dev;
233 tasklet_setup(&budget_ci->ir.msp430_irq_tasklet, msp430_ir_interrupt);
241 static void msp430_ir_deinit(struct budget_ci *budget_ci)
243 struct saa7146_dev *saa = budget_ci->budget.dev;
247 tasklet_kill(&budget_ci->ir.msp430_irq_tasklet);
249 rc_unregister_device(budget_ci->ir.dev);
254 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
259 return ttpci_budget_debiread(&budget_ci->budget, DEBICICAM,
265 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
270 return ttpci_budget_debiwrite(&budget_ci->budget, DEBICICAM,
276 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
281 return ttpci_budget_debiread(&budget_ci->budget, DEBICICAM,
287 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
292 return ttpci_budget_debiwrite(&budget_ci->budget, DEBICICAM,
298 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
299 struct saa7146_dev *saa = budget_ci->budget.dev;
304 if (budget_ci->ci_irq) {
308 budget_ci->slot_status = SLOTSTATUS_RESET;
309 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 0, 1, 0);
311 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1,
321 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
322 struct saa7146_dev *saa = budget_ci->budget.dev;
334 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
335 struct saa7146_dev *saa = budget_ci->budget.dev;
343 tmp = ttpci_budget_debiread(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 1, 0);
344 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1,
353 struct budget_ci *budget_ci = from_tasklet(budget_ci, t,
355 struct saa7146_dev *saa = budget_ci->budget.dev;
359 if (!budget_ci->budget.ci_present)
363 flags = ttpci_budget_debiread(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 1, 0);
369 if (budget_ci->slot_status & SLOTSTATUS_NONE) {
371 budget_ci->slot_status = SLOTSTATUS_PRESENT;
372 dvb_ca_en50221_camchange_irq(&budget_ci->ca, 0,
375 } else if (budget_ci->slot_status & SLOTSTATUS_RESET) {
377 budget_ci->slot_status = SLOTSTATUS_READY;
378 dvb_ca_en50221_camready_irq(&budget_ci->ca, 0);
380 } else if (budget_ci->slot_status & SLOTSTATUS_READY) {
382 dvb_ca_en50221_frda_irq(&budget_ci->ca, 0);
392 if (budget_ci->slot_status & SLOTSTATUS_OCCUPIED) {
394 budget_ci->slot_status = SLOTSTATUS_NONE;
395 dvb_ca_en50221_camchange_irq(&budget_ci->ca, 0,
403 struct budget_ci *budget_ci = (struct budget_ci *) ca->data;
407 if (!budget_ci->budget.ci_present)
411 flags = ttpci_budget_debiread(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 1, 0);
414 if (budget_ci->slot_status & SLOTSTATUS_NONE) {
415 budget_ci->slot_status = SLOTSTATUS_PRESENT;
419 if (budget_ci->slot_status & SLOTSTATUS_RESET) {
421 budget_ci->slot_status = SLOTSTATUS_READY;
425 budget_ci->slot_status = SLOTSTATUS_NONE;
428 if (budget_ci->slot_status != SLOTSTATUS_NONE) {
429 if (budget_ci->slot_status & SLOTSTATUS_READY) {
438 static int ciintf_init(struct budget_ci *budget_ci)
440 struct saa7146_dev *saa = budget_ci->budget.dev;
446 memset(&budget_ci->ca, 0, sizeof(struct dvb_ca_en50221));
452 ci_version = ttpci_budget_debiread(&budget_ci->budget, DEBICICTL, DEBIADDR_CIVERSION, 1, 1, 0);
459 flags = ttpci_budget_debiread(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 1, 0);
460 budget_ci->slot_status = SLOTSTATUS_NONE;
462 budget_ci->slot_status = SLOTSTATUS_PRESENT;
467 budget_ci->ci_irq = 0;
472 budget_ci->ci_irq = 1;
476 budget_ci->ca.owner = THIS_MODULE;
477 budget_ci->ca.read_attribute_mem = ciintf_read_attribute_mem;
478 budget_ci->ca.write_attribute_mem = ciintf_write_attribute_mem;
479 budget_ci->ca.read_cam_control = ciintf_read_cam_control;
480 budget_ci->ca.write_cam_control = ciintf_write_cam_control;
481 budget_ci->ca.slot_reset = ciintf_slot_reset;
482 budget_ci->ca.slot_shutdown = ciintf_slot_shutdown;
483 budget_ci->ca.slot_ts_enable = ciintf_slot_ts_enable;
484 budget_ci->ca.poll_slot_status = ciintf_poll_slot_status;
485 budget_ci->ca.data = budget_ci;
486 if ((result = dvb_ca_en50221_init(&budget_ci->budget.dvb_adapter,
487 &budget_ci->ca,
489 printk("budget_ci: CI interface detected, but initialisation failed.\n");
494 if (budget_ci->ci_irq) {
495 tasklet_setup(&budget_ci->ciintf_irq_tasklet, ciintf_interrupt);
496 if (budget_ci->slot_status != SLOTSTATUS_NONE) {
505 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1,
509 printk("budget_ci: CI interface initialised\n");
510 budget_ci->budget.ci_present = 1;
513 if (budget_ci->ci_irq) {
515 if (budget_ci->slot_status != SLOTSTATUS_NONE)
517 dvb_ca_en50221_camchange_irq(&budget_ci->ca, 0, flags);
527 static void ciintf_deinit(struct budget_ci *budget_ci)
529 struct saa7146_dev *saa = budget_ci->budget.dev;
532 if (budget_ci->ci_irq) {
535 tasklet_kill(&budget_ci->ciintf_irq_tasklet);
539 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, 0, 1, 0);
541 ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1,
548 dvb_ca_en50221_release(&budget_ci->ca);
556 struct budget_ci *budget_ci = (struct budget_ci *) dev->ext_priv;
558 dprintk(8, "dev: %p, budget_ci: %p\n", dev, budget_ci);
561 tasklet_schedule(&budget_ci->ir.msp430_irq_tasklet);
566 if ((*isr & MASK_03) && (budget_ci->budget.ci_present) && (budget_ci->ci_irq))
567 tasklet_schedule(&budget_ci->ciintf_irq_tasklet);
651 struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv;
679 if (i2c_transfer(&budget_ci->budget.i2c_adap, &msg, 1) != 1)
701 struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv;
704 struct i2c_msg tuner_msg = {.addr = budget_ci->tuner_pll_address,.flags = 0,.buf = td1316_init,.len =
710 if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1)
720 if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1) {
723 i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1);
732 struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv;
734 struct i2c_msg tuner_msg = {.addr = budget_ci->tuner_pll_address,.flags = 0,.buf = tuner_buf,.len = sizeof(tuner_buf) };
808 if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1)
818 struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv;
820 return request_firmware(fw, name, &budget_ci->budget.dev->pci->dev);
848 struct budget_ci *budget_ci = (struct budget_ci *) fe->dvb->priv;
850 struct i2c_msg tuner_msg = {.addr = budget_ci->tuner_pll_address,
906 if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1)
913 if (i2c_transfer(&budget_ci->budget.i2c_adap, &tuner_msg, 1) != 1)
1300 static void frontend_init(struct budget_ci *budget_ci)
1302 switch (budget_ci->budget.dev->pci->subsystem_device) {
1304 budget_ci->budget.dvb_frontend =
1305 dvb_attach(stv0299_attach, &alps_bsru6_config, &budget_ci->budget.i2c_adap);
1306 if (budget_ci->budget.dvb_frontend) {
1307 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params;
1308 budget_ci->budget.dvb_frontend->tuner_priv = &budget_ci->budget.i2c_adap;
1314 budget_ci->budget.dvb_frontend =
1315 dvb_attach(stv0299_attach, &philips_su1278_tt_config, &budget_ci->budget.i2c_adap);
1316 if (budget_ci->budget.dvb_frontend) {
1317 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = philips_su1278_tt_tuner_set_params;
1323 budget_ci->tuner_pll_address = 0x61;
1324 budget_ci->budget.dvb_frontend =
1325 dvb_attach(stv0297_attach, &dvbc_philips_tdm1316l_config, &budget_ci->budget.i2c_adap);
1326 if (budget_ci->budget.dvb_frontend) {
1327 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = dvbc_philips_tdm1316l_tuner_set_params;
1333 budget_ci->tuner_pll_address = 0x63;
1334 budget_ci->budget.dvb_frontend =
1335 dvb_attach(tda10045_attach, &philips_tdm1316l_config, &budget_ci->budget.i2c_adap);
1336 if (budget_ci->budget.dvb_frontend) {
1337 budget_ci->budget.dvb_frontend->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1338 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1344 budget_ci->tuner_pll_address = 0x60;
1345 budget_ci->budget.dvb_frontend =
1346 dvb_attach(tda10046_attach, &philips_tdm1316l_config_invert, &budget_ci->budget.i2c_adap);
1347 if (budget_ci->budget.dvb_frontend) {
1348 budget_ci->budget.dvb_frontend->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1349 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1355 budget_ci->budget.dvb_frontend = dvb_attach(stv0299_attach, &alps_bsbe1_config, &budget_ci->budget.i2c_adap);
1356 if (budget_ci->budget.dvb_frontend) {
1357 budget_ci->budget.dvb_frontend->ops.tuner_ops.set_params = alps_bsbe1_tuner_set_params;
1358 budget_ci->budget.dvb_frontend->tuner_priv = &budget_ci->budget.i2c_adap;
1360 budget_ci->budget.dvb_frontend->ops.dishnetwork_send_legacy_command = NULL;
1361 if (dvb_attach(lnbp21_attach, budget_ci->budget.dvb_frontend, &budget_ci->budget.i2c_adap, LNBP21_LLC, 0) == NULL) {
1363 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1364 budget_ci->budget.dvb_frontend = NULL;
1370 budget_ci->budget.dvb_frontend = dvb_attach(tda10023_attach, &tda10023_config, &budget_ci->budget.i2c_adap, 0x48);
1371 if (budget_ci->budget.dvb_frontend) {
1372 if (dvb_attach(tda827x_attach, budget_ci->budget.dvb_frontend, 0x61, &budget_ci->budget.i2c_adap, &tda827x_config) == NULL) {
1374 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1375 budget_ci->budget.dvb_frontend = NULL;
1381 budget_ci->budget.dvb_frontend = dvb_attach(stv0288_attach, &stv0288_bsbe1_d01a_config, &budget_ci->budget.i2c_adap);
1382 if (budget_ci->budget.dvb_frontend) {
1383 if (dvb_attach(stb6000_attach, budget_ci->budget.dvb_frontend, 0x63, &budget_ci->budget.i2c_adap)) {
1384 if (!dvb_attach(lnbp21_attach, budget_ci->budget.dvb_frontend, &budget_ci->budget.i2c_adap, 0, 0)) {
1386 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1387 budget_ci->budget.dvb_frontend = NULL;
1391 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1392 budget_ci->budget.dvb_frontend = NULL;
1410 saa7146_setgpio(budget_ci->budget.dev, 2, SAA7146_GPIO_OUTLO);
1414 saa7146_setgpio(budget_ci->budget.dev, 2, SAA7146_GPIO_OUTHI);
1421 budget_ci->budget.dvb_frontend = dvb_attach(stb0899_attach, &tt3200_config, &budget_ci->budget.i2c_adap);
1422 if (budget_ci->budget.dvb_frontend) {
1423 if (dvb_attach(stb6100_attach, budget_ci->budget.dvb_frontend, &tt3200_stb6100_config, &budget_ci->budget.i2c_adap)) {
1424 if (!dvb_attach(lnbp21_attach, budget_ci->budget.dvb_frontend, &budget_ci->budget.i2c_adap, 0, 0)) {
1426 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1427 budget_ci->budget.dvb_frontend = NULL;
1430 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1431 budget_ci->budget.dvb_frontend = NULL;
1438 if (budget_ci->budget.dvb_frontend == NULL) {
1440 budget_ci->budget.dev->pci->vendor,
1441 budget_ci->budget.dev->pci->device,
1442 budget_ci->budget.dev->pci->subsystem_vendor,
1443 budget_ci->budget.dev->pci->subsystem_device);
1446 (&budget_ci->budget.dvb_adapter, budget_ci->budget.dvb_frontend)) {
1448 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1449 budget_ci->budget.dvb_frontend = NULL;
1456 struct budget_ci *budget_ci;
1459 budget_ci = kzalloc(sizeof(struct budget_ci), GFP_KERNEL);
1460 if (!budget_ci) {
1465 dprintk(2, "budget_ci: %p\n", budget_ci);
1467 dev->ext_priv = budget_ci;
1469 err = ttpci_budget_init(&budget_ci->budget, dev, info, THIS_MODULE,
1474 err = msp430_ir_init(budget_ci);
1478 ciintf_init(budget_ci);
1480 budget_ci->budget.dvb_adapter.priv = budget_ci;
1481 frontend_init(budget_ci);
1483 ttpci_budget_init_hooks(&budget_ci->budget);
1488 ttpci_budget_deinit(&budget_ci->budget);
1490 kfree(budget_ci);
1497 struct budget_ci *budget_ci = (struct budget_ci *) dev->ext_priv;
1498 struct saa7146_dev *saa = budget_ci->budget.dev;
1501 if (budget_ci->budget.ci_present)
1502 ciintf_deinit(budget_ci);
1503 msp430_ir_deinit(budget_ci);
1504 if (budget_ci->budget.dvb_frontend) {
1505 dvb_unregister_frontend(budget_ci->budget.dvb_frontend);
1506 dvb_frontend_detach(budget_ci->budget.dvb_frontend);
1508 err = ttpci_budget_deinit(&budget_ci->budget);
1513 kfree(budget_ci);
1547 .name = "budget_ci dvb",