V4L/DVB (3351): adding support for knc1 Tv Star dvb-s

- Added knc1 tv star dvb-s support with philips tuner sd1878.

Signed-off-by: Regis Prevot <regis.prevot@anevia.com>
Signed-off-by: Michael Krufky <mkrufky@m1k.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by Regis Prevot and committed by Mauro Carvalho Chehab f8bf134d ac9ffb90

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