aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/frontends/cx24123.c
diff options
context:
space:
mode:
authorVadim Catana <skystar@moldova.cc>2006-01-09 12:25:08 -0500
committerMauro Carvalho Chehab <mchehab@brturbo.com.br>2006-01-09 12:25:08 -0500
commit1c956a3ac087b7590296f5a0be2cdab2666158cd (patch)
tree6816932312c50640beec0ab807a26dd04fbc2845 /drivers/media/dvb/frontends/cx24123.c
parente3b152bc9ee2b7f841565dc93a042f527cf3116c (diff)
DVB (2451): Add support for KWorld DVB-S 100, based on the same chips as Hauppauge
- Add support for KWorld DVB-S 100, based on the same chips as Hauppauge Nova-S Plus (CX23883/CX24123/CX24109), without the Intersil ISL6421, which is used for LNB control. - LNB voltage and tone are controled by LNBDC and LNBTone bits from register 0x29 of the CX24123 demodulator. - The MO_GP0_IO register from CX23883 is used to turn LNB power on and off. Signed-off-by: Vadim Catana <skystar@moldova.cc> Acked-by: Johannes Stezenbach <js@linuxtv.org> Signed-off-by: Michael Krufky <mkrufky@m1k.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Diffstat (limited to 'drivers/media/dvb/frontends/cx24123.c')
-rw-r--r--drivers/media/dvb/frontends/cx24123.c98
1 files changed, 77 insertions, 21 deletions
diff --git a/drivers/media/dvb/frontends/cx24123.c b/drivers/media/dvb/frontends/cx24123.c
index cfb7d2edd5a9..3e230fc59cac 100644
--- a/drivers/media/dvb/frontends/cx24123.c
+++ b/drivers/media/dvb/frontends/cx24123.c
@@ -3,6 +3,8 @@
3 3
4 Copyright (C) 2005 Steven Toth <stoth@hauppauge.com> 4 Copyright (C) 2005 Steven Toth <stoth@hauppauge.com>
5 5
6 Support for KWorld DVB-S 100 by Vadim Catana <skystar@moldova.cc>
7
6 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 10 the Free Software Foundation; either version 2 of the License, or
@@ -573,7 +575,8 @@ static int cx24123_initfe(struct dvb_frontend* fe)
573 state->config->pll_init(fe); 575 state->config->pll_init(fe);
574 576
575 /* Configure the LNB for 14V */ 577 /* Configure the LNB for 14V */
576 cx24123_writelnbreg(state, 0x0, 0x2a); 578 if (state->config->use_isl6421)
579 cx24123_writelnbreg(state, 0x0, 0x2a);
577 580
578 return 0; 581 return 0;
579} 582}
@@ -583,18 +586,49 @@ static int cx24123_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage
583 struct cx24123_state *state = fe->demodulator_priv; 586 struct cx24123_state *state = fe->demodulator_priv;
584 u8 val; 587 u8 val;
585 588
586 val = cx24123_readlnbreg(state, 0x0); 589 switch (state->config->use_isl6421) {
587 590
588 switch (voltage) { 591 case 1:
589 case SEC_VOLTAGE_13: 592
590 return cx24123_writelnbreg(state, 0x0, val & 0x32); /* V 13v */ 593 val = cx24123_readlnbreg(state, 0x0);
591 case SEC_VOLTAGE_18: 594
592 return cx24123_writelnbreg(state, 0x0, val | 0x04); /* H 18v */ 595 switch (voltage) {
593 case SEC_VOLTAGE_OFF: 596 case SEC_VOLTAGE_13:
594 return cx24123_writelnbreg(state, 0x0, val & 0x30); 597 return cx24123_writelnbreg(state, 0x0, val & 0x32); /* V 13v */
595 default: 598 case SEC_VOLTAGE_18:
596 return -EINVAL; 599 return cx24123_writelnbreg(state, 0x0, val | 0x04); /* H 18v */
597 }; 600 case SEC_VOLTAGE_OFF:
601 return cx24123_writelnbreg(state, 0x0, val & 0x30);
602 default:
603 return -EINVAL;
604 };
605
606 case 0:
607
608 val = cx24123_readreg(state, 0x29);
609
610 switch (voltage) {
611 case SEC_VOLTAGE_13:
612 dprintk("%s: setting voltage 13V\n", __FUNCTION__);
613 if (state->config->enable_lnb_voltage)
614 state->config->enable_lnb_voltage(fe, 1);
615 return cx24123_writereg(state, 0x29, val | 0x80);
616 case SEC_VOLTAGE_18:
617 dprintk("%s: setting voltage 18V\n", __FUNCTION__);
618 if (state->config->enable_lnb_voltage)
619 state->config->enable_lnb_voltage(fe, 1);
620 return cx24123_writereg(state, 0x29, val & 0x7f);
621 case SEC_VOLTAGE_OFF:
622 dprintk("%s: setting voltage off\n", __FUNCTION__);
623 if (state->config->enable_lnb_voltage)
624 state->config->enable_lnb_voltage(fe, 0);
625 return 0;
626 default:
627 return -EINVAL;
628 };
629 }
630
631 return 0;
598} 632}
599 633
600static int cx24123_send_diseqc_msg(struct dvb_frontend* fe, 634static int cx24123_send_diseqc_msg(struct dvb_frontend* fe,
@@ -729,17 +763,39 @@ static int cx24123_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
729 struct cx24123_state *state = fe->demodulator_priv; 763 struct cx24123_state *state = fe->demodulator_priv;
730 u8 val; 764 u8 val;
731 765
732 val = cx24123_readlnbreg(state, 0x0); 766 switch (state->config->use_isl6421) {
767 case 1:
768
769 val = cx24123_readlnbreg(state, 0x0);
733 770
734 switch (tone) { 771 switch (tone) {
735 case SEC_TONE_ON: 772 case SEC_TONE_ON:
736 return cx24123_writelnbreg(state, 0x0, val | 0x10); 773 return cx24123_writelnbreg(state, 0x0, val | 0x10);
737 case SEC_TONE_OFF: 774 case SEC_TONE_OFF:
738 return cx24123_writelnbreg(state, 0x0, val & 0x2f); 775 return cx24123_writelnbreg(state, 0x0, val & 0x2f);
739 default: 776 default:
740 printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone); 777 printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone);
741 return -EINVAL; 778 return -EINVAL;
779 }
780
781 case 0:
782
783 val = cx24123_readreg(state, 0x29);
784
785 switch (tone) {
786 case SEC_TONE_ON:
787 dprintk("%s: setting tone on\n", __FUNCTION__);
788 return cx24123_writereg(state, 0x29, val | 0x10);
789 case SEC_TONE_OFF:
790 dprintk("%s: setting tone off\n",__FUNCTION__);
791 return cx24123_writereg(state, 0x29, val & 0xef);
792 default:
793 printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone);
794 return -EINVAL;
795 }
742 } 796 }
797
798 return 0;
743} 799}
744 800
745static void cx24123_release(struct dvb_frontend* fe) 801static void cx24123_release(struct dvb_frontend* fe)