diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/media/dvb/frontends/dvb-pll.c | 17 | ||||
| -rw-r--r-- | drivers/media/dvb/frontends/dvb-pll.h | 1 | ||||
| -rw-r--r-- | drivers/media/dvb/ttpci/budget-av.c | 125 | ||||
| -rw-r--r-- | drivers/media/dvb/ttpci/budget.h | 1 |
4 files changed, 144 insertions, 0 deletions
diff --git a/drivers/media/dvb/frontends/dvb-pll.c b/drivers/media/dvb/frontends/dvb-pll.c index a3d57ce9dd12..757075f007c1 100644 --- a/drivers/media/dvb/frontends/dvb-pll.c +++ b/drivers/media/dvb/frontends/dvb-pll.c | |||
| @@ -345,6 +345,23 @@ struct dvb_pll_desc dvb_pll_tbmv30111in = { | |||
| 345 | }; | 345 | }; |
| 346 | EXPORT_SYMBOL(dvb_pll_tbmv30111in); | 346 | EXPORT_SYMBOL(dvb_pll_tbmv30111in); |
| 347 | 347 | ||
| 348 | /* | ||
| 349 | * Philips SD1878 Tuner. | ||
| 350 | */ | ||
| 351 | struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261 = { | ||
| 352 | .name = "Philips SD1878", | ||
| 353 | .min = 950000, | ||
| 354 | .max = 2150000, | ||
| 355 | .count = 4, | ||
| 356 | .entries = { | ||
| 357 | { 1250000, 499, 500, 0xc4, 0x00}, | ||
| 358 | { 1550000, 499, 500, 0xc4, 0x40}, | ||
| 359 | { 2050000, 499, 500, 0xc4, 0x80}, | ||
| 360 | { 2150000, 499, 500, 0xc4, 0xc0}, | ||
| 361 | }, | ||
| 362 | }; | ||
| 363 | EXPORT_SYMBOL(dvb_pll_philips_sd1878_tda8261); | ||
| 364 | |||
| 348 | /* ----------------------------------------------------------- */ | 365 | /* ----------------------------------------------------------- */ |
| 349 | /* code */ | 366 | /* code */ |
| 350 | 367 | ||
diff --git a/drivers/media/dvb/frontends/dvb-pll.h b/drivers/media/dvb/frontends/dvb-pll.h index 24d4d2e9acd8..f682c09189b3 100644 --- a/drivers/media/dvb/frontends/dvb-pll.h +++ b/drivers/media/dvb/frontends/dvb-pll.h | |||
| @@ -39,6 +39,7 @@ extern struct dvb_pll_desc dvb_pll_tded4; | |||
| 39 | extern struct dvb_pll_desc dvb_pll_tuv1236d; | 39 | extern struct dvb_pll_desc dvb_pll_tuv1236d; |
| 40 | extern struct dvb_pll_desc dvb_pll_tdhu2; | 40 | extern struct dvb_pll_desc dvb_pll_tdhu2; |
| 41 | extern struct dvb_pll_desc dvb_pll_tbmv30111in; | 41 | extern struct dvb_pll_desc dvb_pll_tbmv30111in; |
| 42 | extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261; | ||
| 42 | 43 | ||
| 43 | int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf, | 44 | int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf, |
| 44 | u32 freq, int bandwidth); | 45 | u32 freq, int bandwidth); |
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c index aa2645895769..1465c04e49aa 100644 --- a/drivers/media/dvb/ttpci/budget-av.c +++ b/drivers/media/dvb/ttpci/budget-av.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include "stv0299.h" | 37 | #include "stv0299.h" |
| 38 | #include "tda10021.h" | 38 | #include "tda10021.h" |
| 39 | #include "tda1004x.h" | 39 | #include "tda1004x.h" |
| 40 | #include "dvb-pll.h" | ||
| 40 | #include <media/saa7146_vv.h> | 41 | #include <media/saa7146_vv.h> |
| 41 | #include <linux/module.h> | 42 | #include <linux/module.h> |
| 42 | #include <linux/errno.h> | 43 | #include <linux/errno.h> |
| @@ -864,8 +865,117 @@ static struct tda1004x_config philips_tu1216_config = { | |||
| 864 | .request_firmware = philips_tu1216_request_firmware, | 865 | .request_firmware = philips_tu1216_request_firmware, |
| 865 | }; | 866 | }; |
| 866 | 867 | ||
| 868 | static u8 philips_sd1878_inittab[] = { | ||
| 869 | 0x01, 0x15, | ||
| 870 | 0x02, 0x30, | ||
| 871 | 0x03, 0x00, | ||
| 872 | 0x04, 0x7d, | ||
| 873 | 0x05, 0x35, | ||
| 874 | 0x06, 0x40, | ||
| 875 | 0x07, 0x00, | ||
| 876 | 0x08, 0x43, | ||
| 877 | 0x09, 0x02, | ||
| 878 | 0x0C, 0x51, | ||
| 879 | 0x0D, 0x82, | ||
| 880 | 0x0E, 0x23, | ||
| 881 | 0x10, 0x3f, | ||
| 882 | 0x11, 0x84, | ||
| 883 | 0x12, 0xb9, | ||
| 884 | 0x15, 0xc9, | ||
| 885 | 0x16, 0x19, | ||
| 886 | 0x17, 0x8c, | ||
| 887 | 0x18, 0x59, | ||
| 888 | 0x19, 0xf8, | ||
| 889 | 0x1a, 0xfe, | ||
| 890 | 0x1c, 0x7f, | ||
| 891 | 0x1d, 0x00, | ||
| 892 | 0x1e, 0x00, | ||
| 893 | 0x1f, 0x50, | ||
| 894 | 0x20, 0x00, | ||
| 895 | 0x21, 0x00, | ||
| 896 | 0x22, 0x00, | ||
| 897 | 0x23, 0x00, | ||
| 898 | 0x28, 0x00, | ||
| 899 | 0x29, 0x28, | ||
| 900 | 0x2a, 0x14, | ||
| 901 | 0x2b, 0x0f, | ||
| 902 | 0x2c, 0x09, | ||
| 903 | 0x2d, 0x09, | ||
| 904 | 0x31, 0x1f, | ||
| 905 | 0x32, 0x19, | ||
| 906 | 0x33, 0xfc, | ||
| 907 | 0x34, 0x93, | ||
| 908 | 0xff, 0xff | ||
| 909 | }; | ||
| 910 | |||
| 911 | static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe, | ||
| 912 | struct i2c_adapter *i2c, | ||
| 913 | struct dvb_frontend_parameters *params) | ||
| 914 | { | ||
| 915 | u8 buf[4]; | ||
| 916 | int rc; | ||
| 917 | struct i2c_msg tuner_msg = {.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)}; | ||
| 918 | |||
| 919 | if((params->frequency < 950000) || (params->frequency > 2150000)) | ||
| 920 | return -EINVAL; | ||
| 921 | |||
| 922 | rc=dvb_pll_configure(&dvb_pll_philips_sd1878_tda8261, buf, | ||
| 923 | params->frequency, 0); | ||
| 924 | if(rc < 0) return rc; | ||
| 867 | 925 | ||
| 926 | if(i2c_transfer(i2c, &tuner_msg, 1) != 1) | ||
| 927 | return -EIO; | ||
| 868 | 928 | ||
| 929 | return 0; | ||
| 930 | } | ||
| 931 | |||
| 932 | static int philips_sd1878_ci_set_symbol_rate(struct dvb_frontend *fe, | ||
| 933 | u32 srate, u32 ratio) | ||
| 934 | { | ||
| 935 | u8 aclk = 0; | ||
| 936 | u8 bclk = 0; | ||
| 937 | u8 m1; | ||
| 938 | |||
| 939 | aclk = 0xb5; | ||
| 940 | if (srate < 2000000) | ||
| 941 | bclk = 0x86; | ||
| 942 | else if (srate < 5000000) | ||
| 943 | bclk = 0x89; | ||
| 944 | else if (srate < 15000000) | ||
| 945 | bclk = 0x8f; | ||
| 946 | else if (srate < 45000000) | ||
| 947 | bclk = 0x95; | ||
| 948 | |||
| 949 | m1 = 0x14; | ||
| 950 | if (srate < 4000000) | ||
| 951 | m1 = 0x10; | ||
| 952 | |||
| 953 | stv0299_writereg(fe, 0x0e, 0x23); | ||
| 954 | stv0299_writereg(fe, 0x0f, 0x94); | ||
| 955 | stv0299_writereg(fe, 0x10, 0x39); | ||
| 956 | stv0299_writereg(fe, 0x13, aclk); | ||
| 957 | stv0299_writereg(fe, 0x14, bclk); | ||
| 958 | stv0299_writereg(fe, 0x15, 0xc9); | ||
| 959 | stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff); | ||
| 960 | stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff); | ||
| 961 | stv0299_writereg(fe, 0x21, (ratio) & 0xf0); | ||
| 962 | stv0299_writereg(fe, 0x0f, 0x80 | m1); | ||
| 963 | |||
| 964 | return 0; | ||
| 965 | } | ||
| 966 | |||
| 967 | static struct stv0299_config philips_sd1878_config = { | ||
| 968 | .demod_address = 0x68, | ||
| 969 | .inittab = philips_sd1878_inittab, | ||
| 970 | .mclk = 88000000UL, | ||
| 971 | .invert = 0, | ||
| 972 | .skip_reinit = 0, | ||
| 973 | .lock_output = STV0229_LOCKOUTPUT_1, | ||
| 974 | .volt13_op0_op1 = STV0299_VOLT13_OP0, | ||
| 975 | .min_delay_ms = 100, | ||
| 976 | .set_symbol_rate = philips_sd1878_ci_set_symbol_rate, | ||
| 977 | .pll_set = philips_sd1878_tda8261_pll_set, | ||
| 978 | }; | ||
| 869 | 979 | ||
| 870 | static u8 read_pwm(struct budget_av *budget_av) | 980 | static u8 read_pwm(struct budget_av *budget_av) |
| 871 | { | 981 | { |
| @@ -886,7 +996,10 @@ static u8 read_pwm(struct budget_av *budget_av) | |||
| 886 | #define SUBID_DVBS_KNC1_PLUS 0x0011 | 996 | #define SUBID_DVBS_KNC1_PLUS 0x0011 |
| 887 | #define SUBID_DVBS_TYPHOON 0x4f56 | 997 | #define SUBID_DVBS_TYPHOON 0x4f56 |
| 888 | #define SUBID_DVBS_CINERGY1200 0x1154 | 998 | #define SUBID_DVBS_CINERGY1200 0x1154 |
| 999 | #define SUBID_DVBS_CYNERGY1200N 0x1155 | ||
| 889 | 1000 | ||
| 1001 | #define SUBID_DVBS_TV_STAR 0x0014 | ||
| 1002 | #define SUBID_DVBS_TV_STAR_CI 0x0016 | ||
| 890 | #define SUBID_DVBC_KNC1 0x0020 | 1003 | #define SUBID_DVBC_KNC1 0x0020 |
| 891 | #define SUBID_DVBC_KNC1_PLUS 0x0021 | 1004 | #define SUBID_DVBC_KNC1_PLUS 0x0021 |
| 892 | #define SUBID_DVBC_CINERGY1200 0x1156 | 1005 | #define SUBID_DVBC_CINERGY1200 0x1156 |
| @@ -922,6 +1035,13 @@ static void frontend_init(struct budget_av *budget_av) | |||
| 922 | } | 1035 | } |
| 923 | break; | 1036 | break; |
| 924 | 1037 | ||
| 1038 | case SUBID_DVBS_TV_STAR: | ||
| 1039 | case SUBID_DVBS_TV_STAR_CI: | ||
| 1040 | case SUBID_DVBS_CYNERGY1200N: | ||
| 1041 | fe = stv0299_attach(&philips_sd1878_config, | ||
| 1042 | &budget_av->budget.i2c_adap); | ||
| 1043 | break; | ||
| 1044 | |||
| 925 | case SUBID_DVBS_KNC1_PLUS: | 1045 | case SUBID_DVBS_KNC1_PLUS: |
| 926 | case SUBID_DVBS_TYPHOON: | 1046 | case SUBID_DVBS_TYPHOON: |
| 927 | fe = stv0299_attach(&typhoon_config, | 1047 | fe = stv0299_attach(&typhoon_config, |
| @@ -1164,10 +1284,12 @@ static struct saa7146_extension budget_extension; | |||
| 1164 | MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S); | 1284 | MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S); |
| 1165 | MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C); | 1285 | MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C); |
| 1166 | MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T); | 1286 | MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T); |
| 1287 | MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR); | ||
| 1167 | MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP); | 1288 | MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP); |
| 1168 | MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP); | 1289 | MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP); |
| 1169 | MAKE_BUDGET_INFO(knc1tp, "KNC1 DVB-T Plus", BUDGET_KNC1TP); | 1290 | MAKE_BUDGET_INFO(knc1tp, "KNC1 DVB-T Plus", BUDGET_KNC1TP); |
| 1170 | MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S); | 1291 | MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S); |
| 1292 | MAKE_BUDGET_INFO(cin1200sn, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S); | ||
| 1171 | MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C); | 1293 | MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C); |
| 1172 | MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T); | 1294 | MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T); |
| 1173 | 1295 | ||
| @@ -1176,11 +1298,14 @@ static struct pci_device_id pci_tbl[] = { | |||
| 1176 | MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x0010), | 1298 | MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x0010), |
| 1177 | MAKE_EXTENSION_PCI(knc1s, 0x1894, 0x0010), | 1299 | MAKE_EXTENSION_PCI(knc1s, 0x1894, 0x0010), |
| 1178 | MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011), | 1300 | MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011), |
| 1301 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014), | ||
| 1302 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016), | ||
| 1179 | MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020), | 1303 | MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020), |
| 1180 | MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021), | 1304 | MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021), |
| 1181 | MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030), | 1305 | MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030), |
| 1182 | MAKE_EXTENSION_PCI(knc1tp, 0x1894, 0x0031), | 1306 | MAKE_EXTENSION_PCI(knc1tp, 0x1894, 0x0031), |
| 1183 | MAKE_EXTENSION_PCI(cin1200s, 0x153b, 0x1154), | 1307 | MAKE_EXTENSION_PCI(cin1200s, 0x153b, 0x1154), |
| 1308 | MAKE_EXTENSION_PCI(cin1200sn, 0x153b, 0x1155), | ||
| 1184 | MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156), | 1309 | MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156), |
| 1185 | MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157), | 1310 | MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157), |
| 1186 | { | 1311 | { |
diff --git a/drivers/media/dvb/ttpci/budget.h b/drivers/media/dvb/ttpci/budget.h index c8d48cfba277..c7bb63c4d98d 100644 --- a/drivers/media/dvb/ttpci/budget.h +++ b/drivers/media/dvb/ttpci/budget.h | |||
| @@ -95,6 +95,7 @@ static struct saa7146_pci_extension_data x_var = { \ | |||
| 95 | #define BUDGET_KNC1SP 11 | 95 | #define BUDGET_KNC1SP 11 |
| 96 | #define BUDGET_KNC1CP 12 | 96 | #define BUDGET_KNC1CP 12 |
| 97 | #define BUDGET_KNC1TP 13 | 97 | #define BUDGET_KNC1TP 13 |
| 98 | #define BUDGET_TVSTAR 14 | ||
| 98 | 99 | ||
| 99 | #define BUDGET_VIDEO_PORTA 0 | 100 | #define BUDGET_VIDEO_PORTA 0 |
| 100 | #define BUDGET_VIDEO_PORTB 1 | 101 | #define BUDGET_VIDEO_PORTB 1 |
