cx23885-dvb.c revision 1369738023900302ef9677c90c4da873b5593ee7
1d19770e5178a4bc49641711246360c25781d20a4Steven Toth/* 2d19770e5178a4bc49641711246360c25781d20a4Steven Toth * Driver for the Conexant CX23885 PCIe bridge 3d19770e5178a4bc49641711246360c25781d20a4Steven Toth * 46d8976164dd7d10d25fe940b8546265f60ad52cdSteven Toth * Copyright (c) 2006 Steven Toth <stoth@linuxtv.org> 5d19770e5178a4bc49641711246360c25781d20a4Steven Toth * 6d19770e5178a4bc49641711246360c25781d20a4Steven Toth * This program is free software; you can redistribute it and/or modify 7d19770e5178a4bc49641711246360c25781d20a4Steven Toth * it under the terms of the GNU General Public License as published by 8d19770e5178a4bc49641711246360c25781d20a4Steven Toth * the Free Software Foundation; either version 2 of the License, or 9d19770e5178a4bc49641711246360c25781d20a4Steven Toth * (at your option) any later version. 10d19770e5178a4bc49641711246360c25781d20a4Steven Toth * 11d19770e5178a4bc49641711246360c25781d20a4Steven Toth * This program is distributed in the hope that it will be useful, 12d19770e5178a4bc49641711246360c25781d20a4Steven Toth * but WITHOUT ANY WARRANTY; without even the implied warranty of 13d19770e5178a4bc49641711246360c25781d20a4Steven Toth * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14d19770e5178a4bc49641711246360c25781d20a4Steven Toth * 15d19770e5178a4bc49641711246360c25781d20a4Steven Toth * GNU General Public License for more details. 16d19770e5178a4bc49641711246360c25781d20a4Steven Toth * 17d19770e5178a4bc49641711246360c25781d20a4Steven Toth * You should have received a copy of the GNU General Public License 18d19770e5178a4bc49641711246360c25781d20a4Steven Toth * along with this program; if not, write to the Free Software 19d19770e5178a4bc49641711246360c25781d20a4Steven Toth * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20d19770e5178a4bc49641711246360c25781d20a4Steven Toth */ 21d19770e5178a4bc49641711246360c25781d20a4Steven Toth 22d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/module.h> 23d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/init.h> 24d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/device.h> 25d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/fs.h> 26d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/kthread.h> 27d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/file.h> 28d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <linux/suspend.h> 29d19770e5178a4bc49641711246360c25781d20a4Steven Toth 30d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include "cx23885.h" 31d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include <media/v4l2-common.h> 32d19770e5178a4bc49641711246360c25781d20a4Steven Toth 335a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "dvb_ca_en50221.h" 34d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include "s5h1409.h" 3552b5045078b76ee86e210210601d45670eab22f1Michael Krufky#include "s5h1411.h" 36d19770e5178a4bc49641711246360c25781d20a4Steven Toth#include "mt2131.h" 373ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky#include "tda8290.h" 384041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky#include "tda18271.h" 399bc37caadffe8327683980b2323371691fa182e3Michael Krufky#include "lgdt330x.h" 40d1987d55a1eda774dfbab240a432607c17241d07Steven Toth#include "xc5000.h" 41b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth#include "tda10048.h" 4207b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky#include "tuner-xc2028.h" 43827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky#include "tuner-simple.h" 446676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth#include "dib7000p.h" 456676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth#include "dibx000_common.h" 46aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth#include "zl10353.h" 475a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "stv0900.h" 48f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin#include "stv0900_reg.h" 495a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "stv6110.h" 505a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "lnbh24.h" 5196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin#include "cx24116.h" 525a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "cimax2.h" 53493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong#include "lgs8gxx.h" 545a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "netup-eeprom.h" 555a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "netup-init.h" 56a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky#include "lgdt3305.h" 57d19770e5178a4bc49641711246360c25781d20a4Steven Toth 584513fc696e273d64ea32f2366748aed810316eccSteven Tothstatic unsigned int debug; 59d19770e5178a4bc49641711246360c25781d20a4Steven Toth 604513fc696e273d64ea32f2366748aed810316eccSteven Toth#define dprintk(level, fmt, arg...)\ 614513fc696e273d64ea32f2366748aed810316eccSteven Toth do { if (debug >= level)\ 624513fc696e273d64ea32f2366748aed810316eccSteven Toth printk(KERN_DEBUG "%s/0: " fmt, dev->name, ## arg);\ 634513fc696e273d64ea32f2366748aed810316eccSteven Toth } while (0) 64d19770e5178a4bc49641711246360c25781d20a4Steven Toth 65d19770e5178a4bc49641711246360c25781d20a4Steven Toth/* ------------------------------------------------------------------ */ 66d19770e5178a4bc49641711246360c25781d20a4Steven Toth 673ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkystatic unsigned int alt_tuner; 683ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkymodule_param(alt_tuner, int, 0644); 693ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael KrufkyMODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration"); 703ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 7178e92006f410a4044f8c1760c25ac9d11d259aa2Janne GrunauDVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 7278e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau 733ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky/* ------------------------------------------------------------------ */ 743ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 75d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic int dvb_buf_setup(struct videobuf_queue *q, 76d19770e5178a4bc49641711246360c25781d20a4Steven Toth unsigned int *count, unsigned int *size) 77d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 78d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 79d19770e5178a4bc49641711246360c25781d20a4Steven Toth 80d19770e5178a4bc49641711246360c25781d20a4Steven Toth port->ts_packet_size = 188 * 4; 81d19770e5178a4bc49641711246360c25781d20a4Steven Toth port->ts_packet_count = 32; 82d19770e5178a4bc49641711246360c25781d20a4Steven Toth 83d19770e5178a4bc49641711246360c25781d20a4Steven Toth *size = port->ts_packet_size * port->ts_packet_count; 84d19770e5178a4bc49641711246360c25781d20a4Steven Toth *count = 32; 85d19770e5178a4bc49641711246360c25781d20a4Steven Toth return 0; 86d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 87d19770e5178a4bc49641711246360c25781d20a4Steven Toth 8844a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufkystatic int dvb_buf_prepare(struct videobuf_queue *q, 8944a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky struct videobuf_buffer *vb, enum v4l2_field field) 90d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 91d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 929c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth return cx23885_buf_prepare(q, port, (struct cx23885_buffer *)vb, field); 93d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 94d19770e5178a4bc49641711246360c25781d20a4Steven Toth 95d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic void dvb_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) 96d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 97d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 989c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth cx23885_buf_queue(port, (struct cx23885_buffer *)vb); 99d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 100d19770e5178a4bc49641711246360c25781d20a4Steven Toth 10144a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufkystatic void dvb_buf_release(struct videobuf_queue *q, 10244a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky struct videobuf_buffer *vb) 103d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 1049c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth cx23885_free_buffer(q, (struct cx23885_buffer *)vb); 105d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 106d19770e5178a4bc49641711246360c25781d20a4Steven Toth 107d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic struct videobuf_queue_ops dvb_qops = { 108d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_setup = dvb_buf_setup, 109d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_prepare = dvb_buf_prepare, 110d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_queue = dvb_buf_queue, 111d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_release = dvb_buf_release, 112d19770e5178a4bc49641711246360c25781d20a4Steven Toth}; 113d19770e5178a4bc49641711246360c25781d20a4Steven Toth 11486184e06da4b71fc24ae9505ec60ce95c098d0deSteven Tothstatic struct s5h1409_config hauppauge_generic_config = { 115d19770e5178a4bc49641711246360c25781d20a4Steven Toth .demod_address = 0x32 >> 1, 116d19770e5178a4bc49641711246360c25781d20a4Steven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 117fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .gpio = S5H1409_GPIO_ON, 1182b03238a79295aff30afc3d9a82afa617fd33971Michael Krufky .qam_if = 44000, 119fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .inversion = S5H1409_INVERSION_OFF, 120dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 121dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 122fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth}; 123fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth 124b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Tothstatic struct tda10048_config hauppauge_hvr1200_config = { 125b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .demod_address = 0x10 >> 1, 126b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .output_mode = TDA10048_SERIAL_OUTPUT, 127b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .fwbulkwritelen = TDA10048_BULKWRITE_200, 128484d9e0577c12f9c66a7eab799858ad9617da4bfSteven Toth .inversion = TDA10048_INVERSION_ON, 1298816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv6_if_freq_khz = TDA10048_IF_3300, 1308816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv7_if_freq_khz = TDA10048_IF_3800, 1318816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv8_if_freq_khz = TDA10048_IF_4300, 132484d9e0577c12f9c66a7eab799858ad9617da4bfSteven Toth .clk_freq_khz = TDA10048_CLK_16000, 133b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth}; 134b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 1356b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufkystatic struct tda10048_config hauppauge_hvr1210_config = { 1366b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .demod_address = 0x10 >> 1, 1376b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .output_mode = TDA10048_SERIAL_OUTPUT, 1386b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .fwbulkwritelen = TDA10048_BULKWRITE_200, 1396b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .inversion = TDA10048_INVERSION_ON, 140c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv6_if_freq_khz = TDA10048_IF_3300, 141c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv7_if_freq_khz = TDA10048_IF_3500, 142c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv8_if_freq_khz = TDA10048_IF_4000, 1436b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .clk_freq_khz = TDA10048_CLK_16000, 1446b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky}; 1456b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 1463ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkystatic struct s5h1409_config hauppauge_ezqam_config = { 1473ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .demod_address = 0x32 >> 1, 1483ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 1493ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .gpio = S5H1409_GPIO_OFF, 1503ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .qam_if = 4000, 1513ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .inversion = S5H1409_INVERSION_ON, 152dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 153dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 1543ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky}; 1553ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 156fc959befe0f0e4647bb4e326e3ae55875401888aSteven Tothstatic struct s5h1409_config hauppauge_hvr1800lp_config = { 157fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .demod_address = 0x32 >> 1, 158fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 159d19770e5178a4bc49641711246360c25781d20a4Steven Toth .gpio = S5H1409_GPIO_OFF, 1602b03238a79295aff30afc3d9a82afa617fd33971Michael Krufky .qam_if = 44000, 161fe475163ff9680495af3b1b5b7633ea7a42e4185Steven Toth .inversion = S5H1409_INVERSION_OFF, 162dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 163dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 164d19770e5178a4bc49641711246360c25781d20a4Steven Toth}; 165d19770e5178a4bc49641711246360c25781d20a4Steven Toth 16607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufkystatic struct s5h1409_config hauppauge_hvr1500_config = { 16707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .demod_address = 0x32 >> 1, 16807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 16907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .gpio = S5H1409_GPIO_OFF, 17007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .inversion = S5H1409_INVERSION_OFF, 171dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 172dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 17307b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky}; 17407b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky 17586184e06da4b71fc24ae9505ec60ce95c098d0deSteven Tothstatic struct mt2131_config hauppauge_generic_tunerconfig = { 176a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth 0x61 177a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth}; 178a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth 1799bc37caadffe8327683980b2323371691fa182e3Michael Krufkystatic struct lgdt330x_config fusionhdtv_5_express = { 1809bc37caadffe8327683980b2323371691fa182e3Michael Krufky .demod_address = 0x0e, 1819bc37caadffe8327683980b2323371691fa182e3Michael Krufky .demod_chip = LGDT3303, 1829bc37caadffe8327683980b2323371691fa182e3Michael Krufky .serial_mpeg = 0x40, 1839bc37caadffe8327683980b2323371691fa182e3Michael Krufky}; 1849bc37caadffe8327683980b2323371691fa182e3Michael Krufky 185d1987d55a1eda774dfbab240a432607c17241d07Steven Tothstatic struct s5h1409_config hauppauge_hvr1500q_config = { 186d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .demod_address = 0x32 >> 1, 187d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 188d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .gpio = S5H1409_GPIO_ON, 189d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .qam_if = 44000, 190d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .inversion = S5H1409_INVERSION_OFF, 191dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 192dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 193d1987d55a1eda774dfbab240a432607c17241d07Steven Toth}; 194d1987d55a1eda774dfbab240a432607c17241d07Steven Toth 195335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufkystatic struct s5h1409_config dvico_s5h1409_config = { 196335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .demod_address = 0x32 >> 1, 197335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 198335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .gpio = S5H1409_GPIO_ON, 199335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .qam_if = 44000, 200335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .inversion = S5H1409_INVERSION_OFF, 201335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .status_mode = S5H1409_DEMODLOCKING, 202335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 203335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky}; 204335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 20552b5045078b76ee86e210210601d45670eab22f1Michael Krufkystatic struct s5h1411_config dvico_s5h1411_config = { 20652b5045078b76ee86e210210601d45670eab22f1Michael Krufky .output_mode = S5H1411_SERIAL_OUTPUT, 20752b5045078b76ee86e210210601d45670eab22f1Michael Krufky .gpio = S5H1411_GPIO_ON, 20852b5045078b76ee86e210210601d45670eab22f1Michael Krufky .qam_if = S5H1411_IF_44000, 20952b5045078b76ee86e210210601d45670eab22f1Michael Krufky .vsb_if = S5H1411_IF_44000, 21052b5045078b76ee86e210210601d45670eab22f1Michael Krufky .inversion = S5H1411_INVERSION_OFF, 21152b5045078b76ee86e210210601d45670eab22f1Michael Krufky .status_mode = S5H1411_DEMODLOCKING, 21252b5045078b76ee86e210210601d45670eab22f1Michael Krufky .mpeg_timing = S5H1411_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 21352b5045078b76ee86e210210601d45670eab22f1Michael Krufky}; 21452b5045078b76ee86e210210601d45670eab22f1Michael Krufky 21519bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufkystatic struct s5h1411_config hcw_s5h1411_config = { 21619bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .output_mode = S5H1411_SERIAL_OUTPUT, 21719bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .gpio = S5H1411_GPIO_OFF, 21819bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .vsb_if = S5H1411_IF_44000, 21919bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .qam_if = S5H1411_IF_4000, 22019bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .inversion = S5H1411_INVERSION_ON, 22119bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .status_mode = S5H1411_DEMODLOCKING, 22219bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .mpeg_timing = S5H1411_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 22319bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky}; 22419bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky 225d1987d55a1eda774dfbab240a432607c17241d07Steven Tothstatic struct xc5000_config hauppauge_hvr1500q_tunerconfig = { 226e12671cf0c3c8460dfa3ab945023803612827fb7Steven Toth .i2c_address = 0x61, 227e12671cf0c3c8460dfa3ab945023803612827fb7Steven Toth .if_khz = 5380, 228d1987d55a1eda774dfbab240a432607c17241d07Steven Toth}; 229d1987d55a1eda774dfbab240a432607c17241d07Steven Toth 230335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufkystatic struct xc5000_config dvico_xc5000_tunerconfig = { 231335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .i2c_address = 0x64, 232335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .if_khz = 5380, 233335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky}; 234335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 2354041f1a58774249f5f26163e68b844521ece1fb4Michael Krufkystatic struct tda829x_config tda829x_no_probe = { 2364041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky .probe_tuner = TDA829X_DONT_PROBE, 2374041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky}; 2384041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky 239f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufkystatic struct tda18271_std_map hauppauge_tda18271_std_map = { 240c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .atsc_6 = { .if_freq = 5380, .agc_mode = 3, .std = 3, 241c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .if_lvl = 6, .rfagc_top = 0x37 }, 242c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 0, 243c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .if_lvl = 6, .rfagc_top = 0x37 }, 244f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky}; 245f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky 246b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufkystatic struct tda18271_std_map hauppauge_hvr1200_tda18271_std_map = { 247b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_6 = { .if_freq = 3300, .agc_mode = 3, .std = 4, 248b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 249b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_7 = { .if_freq = 3800, .agc_mode = 3, .std = 5, 250b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 251b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_8 = { .if_freq = 4300, .agc_mode = 3, .std = 6, 252b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 253b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky}; 254b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky 255f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufkystatic struct tda18271_config hauppauge_tda18271_config = { 256f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky .std_map = &hauppauge_tda18271_std_map, 257f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky .gate = TDA18271_GATE_ANALOG, 258f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky}; 259f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky 260b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Tothstatic struct tda18271_config hauppauge_hvr1200_tuner_config = { 261b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .std_map = &hauppauge_hvr1200_tda18271_std_map, 262b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .gate = TDA18271_GATE_ANALOG, 263b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth}; 264b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 2656b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufkystatic struct tda18271_config hauppauge_hvr1210_tuner_config = { 2666b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .gate = TDA18271_GATE_DIGITAL, 2676b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky}; 2686b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 269247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct tda18271_std_map hauppauge_hvr127x_std_map = { 270a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 4, 271a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .if_lvl = 1, .rfagc_top = 0x58 }, 272a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 5, 273a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .if_lvl = 1, .rfagc_top = 0x58 }, 274a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 275a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 276247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct tda18271_config hauppauge_hvr127x_config = { 277247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky .std_map = &hauppauge_hvr127x_std_map, 278a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 279a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 280247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct lgdt3305_config hauppauge_lgdt3305_config = { 281a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .i2c_addr = 0x0e, 282a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .mpeg_mode = LGDT3305_MPEG_SERIAL, 283a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE, 284a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .tpvalid_polarity = LGDT3305_TP_VALID_HIGH, 285a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .deny_i2c_rptr = 1, 286a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .spectral_inversion = 1, 287a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .qam_if_khz = 4000, 288a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .vsb_if_khz = 3250, 289a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 290a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 291b1721d0da266b4af8cb4419473b4ca36206ab200Harvey Harrisonstatic struct dibx000_agc_config xc3028_agc_config = { 2926676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth BAND_VHF | BAND_UHF, /* band_caps */ 2936676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 2946676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth /* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=0, 2956676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_inv_pwm1=0, P_agc_inv_pwm2=0, 2966676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_inh_dc_rv_est=0, P_agc_time_est=3, P_agc_freeze=0, 2976676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_nb_est=2, P_agc_write=0 2986676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth */ 2996676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (0 << 15) | (0 << 14) | (0 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | 3006676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), /* setup */ 3016676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3026676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 712, /* inv_gain */ 3036676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 21, /* time_stabiliz */ 3046676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3056676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* alpha_level */ 3066676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 118, /* thlock */ 3076676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3086676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* wbd_inv */ 3096676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 2867, /* wbd_ref */ 3106676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* wbd_sel */ 3116676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 2, /* wbd_alpha */ 3126676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3136676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_max */ 3146676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_min */ 3156676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 39718, /* agc2_max */ 3166676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 9930, /* agc2_min */ 3176676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt1 */ 3186676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt2 */ 3196676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt3 */ 3206676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_slope1 */ 3216676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_slope2 */ 3226676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc2_pt1 */ 3236676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 128, /* agc2_pt2 */ 3246676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 29, /* agc2_slope1 */ 3256676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 29, /* agc2_slope2 */ 3266676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3276676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 17, /* alpha_mant */ 3286676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 27, /* alpha_exp */ 3296676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 23, /* beta_mant */ 3306676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 51, /* beta_exp */ 3316676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3326676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* perform_agc_softsplit */ 3336676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 3346676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3356676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth/* PLL Configuration for COFDM BW_MHz = 8.000000 3366676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * With external clock = 30.000000 */ 337b1721d0da266b4af8cb4419473b4ca36206ab200Harvey Harrisonstatic struct dibx000_bandwidth_config xc3028_bw_config = { 3386676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 60000, /* internal */ 3396676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 30000, /* sampling */ 3406676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* pll_cfg: prediv */ 3416676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 8, /* pll_cfg: ratio */ 3426676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3, /* pll_cfg: range */ 3436676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* pll_cfg: reset */ 3446676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* pll_cfg: bypass */ 3456676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: refdiv */ 3466676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: bypclk_div */ 3476676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* misc: IO_CLK_en_core */ 3486676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* misc: ADClkSrc */ 3496676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: modulo */ 3506676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (3 << 14) | (1 << 12) | (524 << 0), /* sad_cfg: refsel, sel, freq_15k */ 3516676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (1 << 25) | 5816102, /* ifreq = 5.200000 MHz */ 3526676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 20452225, /* timf */ 3536676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 30000000 /* xtal_hz */ 3546676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 3556676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3566676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Tothstatic struct dib7000p_config hauppauge_hvr1400_dib7000_config = { 3576676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .output_mpeg2_in_188_bytes = 1, 3586676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .hostbus_diversity = 1, 3596676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .tuner_is_baseband = 0, 3606676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .update_lna = NULL, 3616676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3626676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc_config_count = 1, 3636676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc = &xc3028_agc_config, 3646676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .bw = &xc3028_bw_config, 3656676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3666676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS, 3676676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_val = DIB7000P_GPIO_DEFAULT_VALUES, 3686676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS, 3696676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3706676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .pwm_freq_div = 0, 3716676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc_control = NULL, 3726676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .spur_protect = 0, 3736676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3746676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .output_mode = OUTMODE_MPEG2_SERIAL, 3756676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 3766676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 377aef2d186e381816733fa15d67ad63bd99254cb9eSteven Tothstatic struct zl10353_config dvico_fusionhdtv_xc3028 = { 378aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .demod_address = 0x0f, 379aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .if2 = 45600, 380aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .no_tuner = 1, 381d4dc673da9a94716ca2410306c1b36b5faf6c4ccChristopher Pascoe .disable_i2c_gate_ctrl = 1, 382aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth}; 383aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 384f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianinstatic struct stv0900_reg stv0900_ts_regs[] = { 385f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_TSGENERAL, 0x00 }, 386f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSSPEED, 0x40 }, 387f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSSPEED, 0x40 }, 388f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGM, 0xc0 }, 389f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGM, 0xc0 }, 390f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGH, 0xe0 }, 391f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGH, 0xe0 }, 392f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGL, 0x20 }, 393f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGL, 0x20 }, 394f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { 0xffff, 0xff }, /* terminate */ 395f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin}; 396f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin 3975a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv0900_config netup_stv0900_config = { 3985a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .demod_address = 0x68, 3995a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .xtal = 27000000, 4005a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */ 4015a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .diseqc_mode = 2,/* 2/3 PWM */ 402f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin .ts_config_regs = stv0900_ts_regs, 4035a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun1_maddress = 0,/* 0x60 */ 4045a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun2_maddress = 3,/* 0x63 */ 4055a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun1_adc = 1,/* 1 Vpp */ 4065a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun2_adc = 1,/* 1 Vpp */ 4075a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4085a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 4095a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv6110_config netup_stv6110_tunerconfig_a = { 4105a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .i2c_address = 0x60, 4115a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .mclk = 27000000, 4125a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .iq_wiring = 0, 4135a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4145a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 4155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv6110_config netup_stv6110_tunerconfig_b = { 4165a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .i2c_address = 0x63, 4175a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .mclk = 27000000, 4185a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .iq_wiring = 1, 4195a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4205a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 42196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianinstatic int tbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) 42296318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin{ 42396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin struct cx23885_tsport *port = fe->dvb->priv; 42496318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin struct cx23885_dev *dev = port->dev; 42596318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 42696318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin if (voltage == SEC_VOLTAGE_18) 42796318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin cx_write(MC417_RWD, 0x00001e00);/* GPIO-13 high */ 42896318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin else if (voltage == SEC_VOLTAGE_13) 42996318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin cx_write(MC417_RWD, 0x00001a00);/* GPIO-13 low */ 43096318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin else 43196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin cx_write(MC417_RWD, 0x00001800);/* GPIO-12 low */ 43296318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin return 0; 43396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin} 43496318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 43596318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianinstatic struct cx24116_config tbs_cx24116_config = { 43696318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin .demod_address = 0x05, 43796318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin}; 43896318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 439579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianinstatic struct cx24116_config tevii_cx24116_config = { 440579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin .demod_address = 0x55, 441579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin}; 442579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 443c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianinstatic struct cx24116_config dvbworld_cx24116_config = { 444c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin .demod_address = 0x05, 445c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin}; 446c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin 447493b7127aa56d0a5c041797639bf543d96f6261bDavid Wongstatic struct lgs8gxx_config mygica_x8506_lgs8gl5_config = { 448493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .prod = LGS8GXX_PROD_LGS8GL5, 449493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .demod_address = 0x19, 450493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .serial_ts = 0, 451493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ts_clk_pol = 1, 452493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ts_clk_gated = 1, 453493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_clk_freq = 30400, /* 30.4 MHz */ 454493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_freq = 5380, /* 5.38 MHz */ 455493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_neg_center = 1, 456493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ext_adc = 0, 457493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .adc_signed = 0, 458493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_neg_edge = 0, 459493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong}; 460493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong 461493b7127aa56d0a5c041797639bf543d96f6261bDavid Wongstatic struct xc5000_config mygica_x8506_xc5000_config = { 462493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .i2c_address = 0x61, 463493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_khz = 5380, 464493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong}; 465493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong 466f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufkystatic int cx23885_dvb_set_frontend(struct dvb_frontend *fe, 467f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky struct dvb_frontend_parameters *param) 468f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky{ 469f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky struct cx23885_tsport *port = fe->dvb->priv; 470f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky struct cx23885_dev *dev = port->dev; 471f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 472f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky switch (dev->board) { 473f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1275: 474f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky switch (param->u.vsb.modulation) { 475f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case VSB_8: 476f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky cx23885_gpio_clear(dev, GPIO_5); 477f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 478f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case QAM_64: 479f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case QAM_256: 480f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky default: 481f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky cx23885_gpio_set(dev, GPIO_5); 482f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 483f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky } 484f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 485f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky } 486f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky return (port->set_frontend_save) ? 487f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky port->set_frontend_save(fe, param) : -ENODEV; 488f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky} 489f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 4902365b2d307ee0323062c674ea0495584085e8c24David Wongstatic struct lgs8gxx_config magicpro_prohdtve2_lgs8g75_config = { 4912365b2d307ee0323062c674ea0495584085e8c24David Wong .prod = LGS8GXX_PROD_LGS8G75, 4922365b2d307ee0323062c674ea0495584085e8c24David Wong .demod_address = 0x19, 4932365b2d307ee0323062c674ea0495584085e8c24David Wong .serial_ts = 0, 4942365b2d307ee0323062c674ea0495584085e8c24David Wong .ts_clk_pol = 1, 4952365b2d307ee0323062c674ea0495584085e8c24David Wong .ts_clk_gated = 1, 4962365b2d307ee0323062c674ea0495584085e8c24David Wong .if_clk_freq = 30400, /* 30.4 MHz */ 4972365b2d307ee0323062c674ea0495584085e8c24David Wong .if_freq = 6500, /* 6.50 MHz */ 4982365b2d307ee0323062c674ea0495584085e8c24David Wong .if_neg_center = 1, 4992365b2d307ee0323062c674ea0495584085e8c24David Wong .ext_adc = 0, 5002365b2d307ee0323062c674ea0495584085e8c24David Wong .adc_signed = 1, 5012365b2d307ee0323062c674ea0495584085e8c24David Wong .adc_vpp = 2, /* 1.6 Vpp */ 5022365b2d307ee0323062c674ea0495584085e8c24David Wong .if_neg_edge = 1, 5032365b2d307ee0323062c674ea0495584085e8c24David Wong}; 5042365b2d307ee0323062c674ea0495584085e8c24David Wong 5052365b2d307ee0323062c674ea0495584085e8c24David Wongstatic struct xc5000_config magicpro_prohdtve2_xc5000_config = { 5062365b2d307ee0323062c674ea0495584085e8c24David Wong .i2c_address = 0x61, 5072365b2d307ee0323062c674ea0495584085e8c24David Wong .if_khz = 6500, 5082365b2d307ee0323062c674ea0495584085e8c24David Wong}; 5092365b2d307ee0323062c674ea0495584085e8c24David Wong 510d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic int dvb_register(struct cx23885_tsport *port) 511d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 512d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_dev *dev = port->dev; 513493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong struct cx23885_i2c *i2c_bus = NULL, *i2c_bus2 = NULL; 514363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth struct videobuf_dvb_frontend *fe0; 5155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin int ret; 516363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 517f972e0bd9361594071d3e68e2342c53b51a1d42bDarron Broad /* Get the first frontend */ 51892abe9ee374599179033f039b095864a9cf74593Darron Broad fe0 = videobuf_dvb_get_frontend(&port->frontends, 1); 519363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (!fe0) 520363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth return -EINVAL; 521d19770e5178a4bc49641711246360c25781d20a4Steven Toth 522d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* init struct videobuf_dvb */ 523363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.name = dev->name; 524d19770e5178a4bc49641711246360c25781d20a4Steven Toth 525d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* init frontend */ 526d19770e5178a4bc49641711246360c25781d20a4Steven Toth switch (dev->board) { 527a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1250: 528f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 529363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 53086184e06da4b71fc24ae9505ec60ce95c098d0deSteven Toth &hauppauge_generic_config, 531f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 532363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 533363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 534f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap, 53586184e06da4b71fc24ae9505ec60ce95c098d0deSteven Toth &hauppauge_generic_tunerconfig, 0); 536d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 537d19770e5178a4bc49641711246360c25781d20a4Steven Toth break; 538a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1270: 539d099becb0bd7ee01a13d58371b4ea5a2f7052c04Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1275: 540a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky i2c_bus = &dev->i2c_bus[0]; 541a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky fe0->dvb.frontend = dvb_attach(lgdt3305_attach, 542247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky &hauppauge_lgdt3305_config, 543a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky &i2c_bus->i2c_adap); 544a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky if (fe0->dvb.frontend != NULL) { 545a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 546a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 547247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky &hauppauge_hvr127x_config); 548a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky } 549f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 550b179bc4579f67c6f1df524c48b28cacf0c7a1b91Michael Krufky /* FIXME: temporary hack */ 551f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky /* define bridge override to set_frontend */ 552f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky port->set_frontend_save = fe0->dvb.frontend->ops.set_frontend; 553f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky fe0->dvb.frontend->ops.set_frontend = cx23885_dvb_set_frontend; 554f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 555a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky break; 55619bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1255: 55719bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky i2c_bus = &dev->i2c_bus[0]; 55819bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky fe0->dvb.frontend = dvb_attach(s5h1411_attach, 55919bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &hcw_s5h1411_config, 56019bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &i2c_bus->i2c_adap); 56119bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky if (fe0->dvb.frontend != NULL) { 56219bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 56319bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 56419bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &hauppauge_tda18271_config); 56519bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky } 56619bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky break; 5673ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1800: 5683ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky i2c_bus = &dev->i2c_bus[0]; 56992abe9ee374599179033f039b095864a9cf74593Darron Broad switch (alt_tuner) { 5703ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case 1: 571363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = 5723ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky dvb_attach(s5h1409_attach, 5733ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_ezqam_config, 5743ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap); 575363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 576363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda829x_attach, fe0->dvb.frontend, 5773ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &dev->i2c_bus[1].i2c_adap, 0x42, 5784041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky &tda829x_no_probe); 579363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 5804041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 581f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky &hauppauge_tda18271_config); 5823ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky } 5833ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 5843ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case 0: 5853ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky default: 586363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = 5873ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky dvb_attach(s5h1409_attach, 5883ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_generic_config, 5893ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap); 590363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 591363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 5923ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap, 5933ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_generic_tunerconfig, 0); 5943ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 5953ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky } 5963ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 597fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 598f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 599363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 600fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth &hauppauge_hvr1800lp_config, 601f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 602363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 603363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 604f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap, 605fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth &hauppauge_generic_tunerconfig, 0); 606fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth } 607fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth break; 6089bc37caadffe8327683980b2323371691fa182e3Michael Krufky case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: 609f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 610363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(lgdt330x_attach, 6119bc37caadffe8327683980b2323371691fa182e3Michael Krufky &fusionhdtv_5_express, 612f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 613363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 614363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(simple_tuner_attach, fe0->dvb.frontend, 615827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky &i2c_bus->i2c_adap, 0x61, 616827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky TUNER_LG_TDVS_H06XF); 6179bc37caadffe8327683980b2323371691fa182e3Michael Krufky } 6189bc37caadffe8327683980b2323371691fa182e3Michael Krufky break; 619d1987d55a1eda774dfbab240a432607c17241d07Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 620d1987d55a1eda774dfbab240a432607c17241d07Steven Toth i2c_bus = &dev->i2c_bus[1]; 621363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 622d1987d55a1eda774dfbab240a432607c17241d07Steven Toth &hauppauge_hvr1500q_config, 623d1987d55a1eda774dfbab240a432607c17241d07Steven Toth &dev->i2c_bus[0].i2c_adap); 624363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 625363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(xc5000_attach, fe0->dvb.frontend, 62630650961907368b1077cade35455fe931b14da6bMichael Krufky &i2c_bus->i2c_adap, 62730650961907368b1077cade35455fe931b14da6bMichael Krufky &hauppauge_hvr1500q_tunerconfig); 628d1987d55a1eda774dfbab240a432607c17241d07Steven Toth break; 62907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1500: 63007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky i2c_bus = &dev->i2c_bus[1]; 631363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 63207b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky &hauppauge_hvr1500_config, 63307b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky &dev->i2c_bus[0].i2c_adap); 634363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 63507b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky struct dvb_frontend *fe; 63607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky struct xc2028_config cfg = { 63707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .i2c_adap = &i2c_bus->i2c_adap, 63807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .i2c_addr = 0x61, 63907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky }; 64007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky static struct xc2028_ctrl ctl = { 641ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 64207b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .max_len = 64, 64352c3d29cfa2fa02f525a01abf28abf48f49801bfSteven Toth .demod = XC3028_FE_OREN538, 64407b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky }; 64507b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky 64607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky fe = dvb_attach(xc2028_attach, 647363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend, &cfg); 64807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 64907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky fe->ops.tuner_ops.set_config(fe, &ctl); 65007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky } 65107b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky break; 652b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1200: 653a780a31cee55e01e7b479244e7907ba842c120a0Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1700: 654b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth i2c_bus = &dev->i2c_bus[0]; 655363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(tda10048_attach, 656b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &hauppauge_hvr1200_config, 657b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &i2c_bus->i2c_adap); 658363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 659363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda829x_attach, fe0->dvb.frontend, 660b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &dev->i2c_bus[1].i2c_adap, 0x42, 661b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &tda829x_no_probe); 662363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 663b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 0x60, &dev->i2c_bus[1].i2c_adap, 664b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &hauppauge_hvr1200_tuner_config); 6656b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky } 6666b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky break; 6676b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1210: 6686b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky i2c_bus = &dev->i2c_bus[0]; 6696b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky fe0->dvb.frontend = dvb_attach(tda10048_attach, 6706b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &hauppauge_hvr1210_config, 6716b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &i2c_bus->i2c_adap); 6726b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky if (fe0->dvb.frontend != NULL) { 6736b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 6746b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 6756b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &hauppauge_hvr1210_tuner_config); 676b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth } 677b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth break; 6786676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1400: 6796676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth i2c_bus = &dev->i2c_bus[0]; 680363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(dib7000p_attach, 6816676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth &i2c_bus->i2c_adap, 6826676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0x12, &hauppauge_hvr1400_dib7000_config); 683363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 6846676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth struct dvb_frontend *fe; 6856676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth struct xc2028_config cfg = { 6866676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .i2c_adap = &dev->i2c_bus[1].i2c_adap, 6876676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .i2c_addr = 0x64, 6886676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth }; 6896676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth static struct xc2028_ctrl ctl = { 690ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC3028L_DEFAULT_FIRMWARE, 6916676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .max_len = 64, 6926676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .demod = 5000, 6939c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth /* This is true for all demods with 6949c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth v36 firmware? */ 6950975fc68719c75cbe14132c6f0dead57cd4d5210Mauro Carvalho Chehab .type = XC2028_D2633, 6966676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth }; 6976676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 6986676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth fe = dvb_attach(xc2028_attach, 699363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend, &cfg); 7006676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 7016676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 7026676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth } 7036676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth break; 704335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP: 705335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky i2c_bus = &dev->i2c_bus[port->nr - 1]; 706335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 707363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 708335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky &dvico_s5h1409_config, 709335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky &i2c_bus->i2c_adap); 710363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend == NULL) 711363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1411_attach, 71252b5045078b76ee86e210210601d45670eab22f1Michael Krufky &dvico_s5h1411_config, 71352b5045078b76ee86e210210601d45670eab22f1Michael Krufky &i2c_bus->i2c_adap); 714363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 715363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(xc5000_attach, fe0->dvb.frontend, 71630650961907368b1077cade35455fe931b14da6bMichael Krufky &i2c_bus->i2c_adap, 71730650961907368b1077cade35455fe931b14da6bMichael Krufky &dvico_xc5000_tunerconfig); 718335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky break; 719aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: { 720aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth i2c_bus = &dev->i2c_bus[port->nr - 1]; 721aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 722363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(zl10353_attach, 723aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &dvico_fusionhdtv_xc3028, 724aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &i2c_bus->i2c_adap); 725363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 726aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth struct dvb_frontend *fe; 727aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth struct xc2028_config cfg = { 728aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .i2c_adap = &i2c_bus->i2c_adap, 729aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .i2c_addr = 0x61, 730aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth }; 731aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth static struct xc2028_ctrl ctl = { 732ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 733aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .max_len = 64, 734aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .demod = XC3028_FE_ZARLINK456, 735aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth }; 736aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 737363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, 738aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &cfg); 739aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 740aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 741aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth } 742aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth break; 743aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth } 7444c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 7459bb1b7e879091f09fc677dca10c5e132b68a9da3Igor M. Liplianin case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 7464c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth i2c_bus = &dev->i2c_bus[0]; 7474c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth 748363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(zl10353_attach, 7494c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &dvico_fusionhdtv_xc3028, 7504c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &i2c_bus->i2c_adap); 751363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 7524c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth struct dvb_frontend *fe; 7534c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth struct xc2028_config cfg = { 7544c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .i2c_adap = &dev->i2c_bus[1].i2c_adap, 7554c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .i2c_addr = 0x61, 7564c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth }; 7574c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth static struct xc2028_ctrl ctl = { 758ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 7594c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .max_len = 64, 7604c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .demod = XC3028_FE_ZARLINK456, 7614c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth }; 7624c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth 763363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, 7644c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &cfg); 7654c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 7664c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 7674c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth } 7684c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth break; 76996318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin case CX23885_BOARD_TBS_6920: 77096318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin i2c_bus = &dev->i2c_bus[0]; 77196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 77296318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin fe0->dvb.frontend = dvb_attach(cx24116_attach, 77396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin &tbs_cx24116_config, 77496318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin &i2c_bus->i2c_adap); 77596318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin if (fe0->dvb.frontend != NULL) 77696318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin fe0->dvb.frontend->ops.set_voltage = tbs_set_voltage; 77796318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 77896318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin break; 779579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin case CX23885_BOARD_TEVII_S470: 780579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin i2c_bus = &dev->i2c_bus[1]; 781579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 782579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin fe0->dvb.frontend = dvb_attach(cx24116_attach, 783579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin &tevii_cx24116_config, 784579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin &i2c_bus->i2c_adap); 785579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin if (fe0->dvb.frontend != NULL) 786579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin fe0->dvb.frontend->ops.set_voltage = tbs_set_voltage; 787579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 788579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin break; 789c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin case CX23885_BOARD_DVBWORLD_2005: 790c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin i2c_bus = &dev->i2c_bus[1]; 791c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin 792c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin fe0->dvb.frontend = dvb_attach(cx24116_attach, 793c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin &dvbworld_cx24116_config, 794c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin &i2c_bus->i2c_adap); 795c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin break; 7965a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 7975a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin i2c_bus = &dev->i2c_bus[0]; 7985a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin switch (port->nr) { 7995a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* port B */ 8005a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case 1: 8015a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend = dvb_attach(stv0900_attach, 8025a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv0900_config, 8035a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 0); 8045a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (fe0->dvb.frontend != NULL) { 8055a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (dvb_attach(stv6110_attach, 8065a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 8075a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv6110_tunerconfig_a, 8085a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap)) { 8095a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (!dvb_attach(lnbh24_attach, 8105a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 8115a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 8120cde9b2533d6fe79307173f24209228aaf34bc98Igor M. Liplianin LNBH24_PCL, 8130cde9b2533d6fe79307173f24209228aaf34bc98Igor M. Liplianin LNBH24_TTX, 0x09)) 8145a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin printk(KERN_ERR 8155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin "No LNBH24 found!\n"); 8165a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 8175a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 8185a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 8195a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 8205a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* port C */ 8215a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case 2: 8225a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend = dvb_attach(stv0900_attach, 8235a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv0900_config, 8245a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 1); 8255a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (fe0->dvb.frontend != NULL) { 8265a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (dvb_attach(stv6110_attach, 8275a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 8285a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv6110_tunerconfig_b, 8295a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap)) { 8305a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (!dvb_attach(lnbh24_attach, 8315a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 8325a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 8330cde9b2533d6fe79307173f24209228aaf34bc98Igor M. Liplianin LNBH24_PCL, 8340cde9b2533d6fe79307173f24209228aaf34bc98Igor M. Liplianin LNBH24_TTX, 0x0a)) 8355a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin printk(KERN_ERR 8365a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin "No LNBH24 found!\n"); 8375a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 8385a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 8395a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 8405a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 8415a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 8425a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 843493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong case CX23885_BOARD_MYGICA_X8506: 844493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong i2c_bus = &dev->i2c_bus[0]; 845493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong i2c_bus2 = &dev->i2c_bus[1]; 846493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong fe0->dvb.frontend = dvb_attach(lgs8gxx_attach, 847493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &mygica_x8506_lgs8gl5_config, 848493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &i2c_bus->i2c_adap); 849493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong if (fe0->dvb.frontend != NULL) { 850493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong dvb_attach(xc5000_attach, 851493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong fe0->dvb.frontend, 852493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &i2c_bus2->i2c_adap, 853493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &mygica_x8506_xc5000_config); 854493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong } 855493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong break; 8562365b2d307ee0323062c674ea0495584085e8c24David Wong case CX23885_BOARD_MAGICPRO_PROHDTVE2: 8572365b2d307ee0323062c674ea0495584085e8c24David Wong i2c_bus = &dev->i2c_bus[0]; 8582365b2d307ee0323062c674ea0495584085e8c24David Wong i2c_bus2 = &dev->i2c_bus[1]; 8592365b2d307ee0323062c674ea0495584085e8c24David Wong fe0->dvb.frontend = dvb_attach(lgs8gxx_attach, 8602365b2d307ee0323062c674ea0495584085e8c24David Wong &magicpro_prohdtve2_lgs8g75_config, 8612365b2d307ee0323062c674ea0495584085e8c24David Wong &i2c_bus->i2c_adap); 8622365b2d307ee0323062c674ea0495584085e8c24David Wong if (fe0->dvb.frontend != NULL) { 8632365b2d307ee0323062c674ea0495584085e8c24David Wong dvb_attach(xc5000_attach, 8642365b2d307ee0323062c674ea0495584085e8c24David Wong fe0->dvb.frontend, 8652365b2d307ee0323062c674ea0495584085e8c24David Wong &i2c_bus2->i2c_adap, 8662365b2d307ee0323062c674ea0495584085e8c24David Wong &magicpro_prohdtve2_xc5000_config); 8672365b2d307ee0323062c674ea0495584085e8c24David Wong } 8682365b2d307ee0323062c674ea0495584085e8c24David Wong break; 8691369738023900302ef9677c90c4da873b5593ee7Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1850: 8701369738023900302ef9677c90c4da873b5593ee7Steven Toth i2c_bus = &dev->i2c_bus[0]; 8711369738023900302ef9677c90c4da873b5593ee7Steven Toth fe0->dvb.frontend = dvb_attach(s5h1411_attach, 8721369738023900302ef9677c90c4da873b5593ee7Steven Toth &hcw_s5h1411_config, 8731369738023900302ef9677c90c4da873b5593ee7Steven Toth &i2c_bus->i2c_adap); 8741369738023900302ef9677c90c4da873b5593ee7Steven Toth if (fe0->dvb.frontend != NULL) 8751369738023900302ef9677c90c4da873b5593ee7Steven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 8761369738023900302ef9677c90c4da873b5593ee7Steven Toth 0x60, &dev->i2c_bus[0].i2c_adap, 8771369738023900302ef9677c90c4da873b5593ee7Steven Toth &hauppauge_tda18271_config); 8781369738023900302ef9677c90c4da873b5593ee7Steven Toth break; 8791369738023900302ef9677c90c4da873b5593ee7Steven Toth 880d19770e5178a4bc49641711246360c25781d20a4Steven Toth default: 8819c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " 8829c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth " isn't supported yet\n", 883d19770e5178a4bc49641711246360c25781d20a4Steven Toth dev->name); 884d19770e5178a4bc49641711246360c25781d20a4Steven Toth break; 885d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 886363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (NULL == fe0->dvb.frontend) { 8879c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_ERR "%s: frontend initialization failed\n", 8889c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth dev->name); 889d19770e5178a4bc49641711246360c25781d20a4Steven Toth return -1; 890d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 891d7cba043d7ec840d67bd5143779d1febe7d83407Michael Krufky /* define general-purpose callback pointer */ 892363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend->callback = cx23885_tuner_callback; 893d19770e5178a4bc49641711246360c25781d20a4Steven Toth 894d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* Put the analog decoder in standby to keep it quiet */ 8957c9fc9d50f97c9a6733ff1a22b6e31bcd91778e2Hans Verkuil call_all(dev, tuner, s_standby); 896d19770e5178a4bc49641711246360c25781d20a4Steven Toth 897363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend->ops.analog_ops.standby) 898363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend); 8993ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 900d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* register everything */ 9015a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin ret = videobuf_dvb_register_bus(&port->frontends, THIS_MODULE, port, 90259b1842da1c6f33ad2e8da82d3dfb3445751d964Darron Broad &dev->pci->dev, adapter_nr, 0); 903363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 9045a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* init CI & MAC */ 9055a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin switch (dev->board) { 9065a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: { 9075a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin static struct netup_card_info cinfo; 9085a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 9095a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin netup_get_card_info(&dev->i2c_bus[0].i2c_adap, &cinfo); 9105a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin memcpy(port->frontends.adapter.proposed_mac, 9115a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin cinfo.port[port->nr - 1].mac, 6); 9125a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=" 9135a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin "%02X:%02X:%02X:%02X:%02X:%02X\n", 9145a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->nr, 9155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[0], 9165a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[1], 9175a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[2], 9185a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[3], 9195a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[4], 9205a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin port->frontends.adapter.proposed_mac[5]); 9215a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 9225a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin netup_ci_init(port); 9235a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 9245a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 9255a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 9265a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 9275a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin return ret; 928d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 929d19770e5178a4bc49641711246360c25781d20a4Steven Toth 930d19770e5178a4bc49641711246360c25781d20a4Steven Tothint cx23885_dvb_register(struct cx23885_tsport *port) 931d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 932363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 933363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth struct videobuf_dvb_frontend *fe0; 934d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_dev *dev = port->dev; 935eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth int err, i; 936eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth 937eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* Here we need to allocate the correct number of frontends, 938eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * as reflected in the cards struct. The reality is that currrently 939eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * no cx23885 boards support this - yet. But, if we don't modify this 940eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * code then the second frontend would never be allocated (later) 941eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * and fail with error before the attach in dvb_register(). 942eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * Without these changes we risk an OOPS later. The changes here 943eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * are for safety, and should provide a good foundation for the 944eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * future addition of any multi-frontend cx23885 based boards. 945eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth */ 946eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth printk(KERN_INFO "%s() allocating %d frontend(s)\n", __func__, 947eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth port->num_frontends); 948d19770e5178a4bc49641711246360c25781d20a4Steven Toth 949eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth for (i = 1; i <= port->num_frontends; i++) { 95096b7a1a838fb5b8746fc22f4ff3cef358bf59f35Darron Broad if (videobuf_dvb_alloc_frontend( 9519c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth &port->frontends, i) == NULL) { 952eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth printk(KERN_ERR "%s() failed to alloc\n", __func__); 953eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth return -ENOMEM; 954eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth } 955eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth 956eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth fe0 = videobuf_dvb_get_frontend(&port->frontends, i); 957eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth if (!fe0) 958eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth err = -EINVAL; 959363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 960eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dprintk(1, "%s\n", __func__); 9619c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth dprintk(1, " ->probed by Card=%d Name=%s, PCI %02x:%02x\n", 962eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->board, 963eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->name, 964eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->pci_bus, 965eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->pci_slot); 966d19770e5178a4bc49641711246360c25781d20a4Steven Toth 967eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth err = -ENODEV; 968d19770e5178a4bc49641711246360c25781d20a4Steven Toth 969eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* dvb stuff */ 970eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* We have to init the queue for each frontend on a port. */ 9719c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_INFO "%s: cx23885 based dvb card\n", dev->name); 9729c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth videobuf_queue_sg_init(&fe0->dvb.dvbq, &dvb_qops, 9739c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth &dev->pci->dev, &port->slock, 97444a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_TOP, 97544a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky sizeof(struct cx23885_buffer), port); 976eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth } 977d19770e5178a4bc49641711246360c25781d20a4Steven Toth err = dvb_register(port); 978d19770e5178a4bc49641711246360c25781d20a4Steven Toth if (err != 0) 9799c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_ERR "%s() dvb_register failed err = %d\n", 9809c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth __func__, err); 981d19770e5178a4bc49641711246360c25781d20a4Steven Toth 982d19770e5178a4bc49641711246360c25781d20a4Steven Toth return err; 983d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 984d19770e5178a4bc49641711246360c25781d20a4Steven Toth 985d19770e5178a4bc49641711246360c25781d20a4Steven Tothint cx23885_dvb_unregister(struct cx23885_tsport *port) 986d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 987363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth struct videobuf_dvb_frontend *fe0; 988363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 989eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* FIXME: in an error condition where the we have 990eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * an expected number of frontends (attach problem) 991eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * then this might not clean up correctly, if 1 992eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * is invalid. 993eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * This comment only applies to future boards IF they 994eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * implement MFE support. 995eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth */ 99692abe9ee374599179033f039b095864a9cf74593Darron Broad fe0 = videobuf_dvb_get_frontend(&port->frontends, 1); 9979c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth if (fe0->dvb.frontend) 998363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth videobuf_dvb_unregister_bus(&port->frontends); 999d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1000afd96668d8491f762e35c16ce65781da820a67faHans Verkuil switch (port->dev->board) { 1001afd96668d8491f762e35c16ce65781da820a67faHans Verkuil case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 1002afd96668d8491f762e35c16ce65781da820a67faHans Verkuil netup_ci_exit(port); 1003afd96668d8491f762e35c16ce65781da820a67faHans Verkuil break; 1004afd96668d8491f762e35c16ce65781da820a67faHans Verkuil } 10055a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 1006d19770e5178a4bc49641711246360c25781d20a4Steven Toth return 0; 1007d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 100844a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky 1009