diff options
Diffstat (limited to 'drivers/media/dvb/frontends/mt312.c')
| -rw-r--r-- | drivers/media/dvb/frontends/mt312.c | 116 |
1 files changed, 44 insertions, 72 deletions
diff --git a/drivers/media/dvb/frontends/mt312.c b/drivers/media/dvb/frontends/mt312.c index ec4e641acc64..d3aea83cf218 100644 --- a/drivers/media/dvb/frontends/mt312.c +++ b/drivers/media/dvb/frontends/mt312.c | |||
| @@ -612,76 +612,6 @@ static void mt312_release(struct dvb_frontend* fe) | |||
| 612 | kfree(state); | 612 | kfree(state); |
| 613 | } | 613 | } |
| 614 | 614 | ||
| 615 | static struct dvb_frontend_ops vp310_mt312_ops; | ||
| 616 | |||
| 617 | struct dvb_frontend* vp310_attach(const struct mt312_config* config, | ||
| 618 | struct i2c_adapter* i2c) | ||
| 619 | { | ||
| 620 | struct mt312_state* state = NULL; | ||
| 621 | |||
| 622 | /* allocate memory for the internal state */ | ||
| 623 | state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL); | ||
| 624 | if (state == NULL) | ||
| 625 | goto error; | ||
| 626 | |||
| 627 | /* setup the state */ | ||
| 628 | state->config = config; | ||
| 629 | state->i2c = i2c; | ||
| 630 | memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops)); | ||
| 631 | strcpy(state->ops.info.name, "Zarlink VP310 DVB-S"); | ||
| 632 | |||
| 633 | /* check if the demod is there */ | ||
| 634 | if (mt312_readreg(state, ID, &state->id) < 0) | ||
| 635 | goto error; | ||
| 636 | if (state->id != ID_VP310) { | ||
| 637 | goto error; | ||
| 638 | } | ||
| 639 | |||
| 640 | /* create dvb_frontend */ | ||
| 641 | state->frequency = 90; | ||
| 642 | state->frontend.ops = &state->ops; | ||
| 643 | state->frontend.demodulator_priv = state; | ||
| 644 | return &state->frontend; | ||
| 645 | |||
| 646 | error: | ||
| 647 | kfree(state); | ||
| 648 | return NULL; | ||
| 649 | } | ||
| 650 | |||
| 651 | struct dvb_frontend* mt312_attach(const struct mt312_config* config, | ||
| 652 | struct i2c_adapter* i2c) | ||
| 653 | { | ||
| 654 | struct mt312_state* state = NULL; | ||
| 655 | |||
| 656 | /* allocate memory for the internal state */ | ||
| 657 | state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL); | ||
| 658 | if (state == NULL) | ||
| 659 | goto error; | ||
| 660 | |||
| 661 | /* setup the state */ | ||
| 662 | state->config = config; | ||
| 663 | state->i2c = i2c; | ||
| 664 | memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops)); | ||
| 665 | strcpy(state->ops.info.name, "Zarlink MT312 DVB-S"); | ||
| 666 | |||
| 667 | /* check if the demod is there */ | ||
| 668 | if (mt312_readreg(state, ID, &state->id) < 0) | ||
| 669 | goto error; | ||
| 670 | if (state->id != ID_MT312) { | ||
| 671 | goto error; | ||
| 672 | } | ||
| 673 | |||
| 674 | /* create dvb_frontend */ | ||
| 675 | state->frequency = 60; | ||
| 676 | state->frontend.ops = &state->ops; | ||
| 677 | state->frontend.demodulator_priv = state; | ||
| 678 | return &state->frontend; | ||
| 679 | |||
| 680 | error: | ||
| 681 | kfree(state); | ||
| 682 | return NULL; | ||
| 683 | } | ||
| 684 | |||
| 685 | static struct dvb_frontend_ops vp310_mt312_ops = { | 615 | static struct dvb_frontend_ops vp310_mt312_ops = { |
| 686 | 616 | ||
| 687 | .info = { | 617 | .info = { |
| @@ -720,6 +650,49 @@ static struct dvb_frontend_ops vp310_mt312_ops = { | |||
| 720 | .set_voltage = mt312_set_voltage, | 650 | .set_voltage = mt312_set_voltage, |
| 721 | }; | 651 | }; |
| 722 | 652 | ||
| 653 | struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, | ||
| 654 | struct i2c_adapter* i2c) | ||
| 655 | { | ||
| 656 | struct mt312_state* state = NULL; | ||
| 657 | |||
| 658 | /* allocate memory for the internal state */ | ||
| 659 | state = kmalloc(sizeof(struct mt312_state), GFP_KERNEL); | ||
| 660 | if (state == NULL) | ||
| 661 | goto error; | ||
| 662 | |||
| 663 | /* setup the state */ | ||
| 664 | state->config = config; | ||
| 665 | state->i2c = i2c; | ||
| 666 | memcpy(&state->ops, &vp310_mt312_ops, sizeof(struct dvb_frontend_ops)); | ||
| 667 | |||
| 668 | /* check if the demod is there */ | ||
| 669 | if (mt312_readreg(state, ID, &state->id) < 0) | ||
| 670 | goto error; | ||
| 671 | |||
| 672 | switch (state->id) { | ||
| 673 | case ID_VP310: | ||
| 674 | strcpy(state->ops.info.name, "Zarlink VP310 DVB-S"); | ||
| 675 | state->frequency = 90; | ||
| 676 | break; | ||
| 677 | case ID_MT312: | ||
| 678 | strcpy(state->ops.info.name, "Zarlink MT312 DVB-S"); | ||
| 679 | state->frequency = 60; | ||
| 680 | break; | ||
| 681 | default: | ||
| 682 | printk (KERN_WARNING "Only Zarlink VP310/MT312 are supported chips.\n"); | ||
| 683 | goto error; | ||
| 684 | } | ||
| 685 | |||
| 686 | /* create dvb_frontend */ | ||
| 687 | state->frontend.ops = &state->ops; | ||
| 688 | state->frontend.demodulator_priv = state; | ||
| 689 | return &state->frontend; | ||
| 690 | |||
| 691 | error: | ||
| 692 | kfree(state); | ||
| 693 | return NULL; | ||
| 694 | } | ||
| 695 | |||
| 723 | module_param(debug, int, 0644); | 696 | module_param(debug, int, 0644); |
| 724 | MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off)."); | 697 | MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off)."); |
| 725 | 698 | ||
| @@ -727,5 +700,4 @@ MODULE_DESCRIPTION("Zarlink VP310/MT312 DVB-S Demodulator driver"); | |||
| 727 | MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>"); | 700 | MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>"); |
| 728 | MODULE_LICENSE("GPL"); | 701 | MODULE_LICENSE("GPL"); |
| 729 | 702 | ||
| 730 | EXPORT_SYMBOL(mt312_attach); | 703 | EXPORT_SYMBOL(vp310_mt312_attach); |
| 731 | EXPORT_SYMBOL(vp310_attach); | ||
