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" 400cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu#include "xc4000.h" 41d1987d55a1eda774dfbab240a432607c17241d07Steven Toth#include "xc5000.h" 42ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong#include "max2165.h" 43b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth#include "tda10048.h" 4407b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky#include "tuner-xc2028.h" 45827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky#include "tuner-simple.h" 466676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth#include "dib7000p.h" 476676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth#include "dibx000_common.h" 48aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth#include "zl10353.h" 495a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "stv0900.h" 50f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin#include "stv0900_reg.h" 515a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "stv6110.h" 525a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "lnbh24.h" 5396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin#include "cx24116.h" 545a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "cimax2.h" 55493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong#include "lgs8gxx.h" 565a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "netup-eeprom.h" 575a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin#include "netup-init.h" 58a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky#include "lgdt3305.h" 59ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong#include "atbm8830.h" 6009ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin#include "ds3000.h" 6109ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin#include "cx23885-f300.h" 6278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin#include "altera-ci.h" 6378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin#include "stv0367.h" 64722c90eb761195c09b776314f331341095273204Stefan Ringel#include "drxk.h" 65722c90eb761195c09b776314f331341095273204Stefan Ringel#include "mt2063.h" 66d19770e5178a4bc49641711246360c25781d20a4Steven Toth 674513fc696e273d64ea32f2366748aed810316eccSteven Tothstatic unsigned int debug; 68d19770e5178a4bc49641711246360c25781d20a4Steven Toth 694513fc696e273d64ea32f2366748aed810316eccSteven Toth#define dprintk(level, fmt, arg...)\ 704513fc696e273d64ea32f2366748aed810316eccSteven Toth do { if (debug >= level)\ 714513fc696e273d64ea32f2366748aed810316eccSteven Toth printk(KERN_DEBUG "%s/0: " fmt, dev->name, ## arg);\ 724513fc696e273d64ea32f2366748aed810316eccSteven Toth } while (0) 73d19770e5178a4bc49641711246360c25781d20a4Steven Toth 74d19770e5178a4bc49641711246360c25781d20a4Steven Toth/* ------------------------------------------------------------------ */ 75d19770e5178a4bc49641711246360c25781d20a4Steven Toth 763ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkystatic unsigned int alt_tuner; 773ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkymodule_param(alt_tuner, int, 0644); 783ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael KrufkyMODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration"); 793ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 8078e92006f410a4044f8c1760c25ac9d11d259aa2Janne GrunauDVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 8178e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau 823ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky/* ------------------------------------------------------------------ */ 833ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 84d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic int dvb_buf_setup(struct videobuf_queue *q, 85d19770e5178a4bc49641711246360c25781d20a4Steven Toth unsigned int *count, unsigned int *size) 86d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 87d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 88d19770e5178a4bc49641711246360c25781d20a4Steven Toth 89d19770e5178a4bc49641711246360c25781d20a4Steven Toth port->ts_packet_size = 188 * 4; 90d19770e5178a4bc49641711246360c25781d20a4Steven Toth port->ts_packet_count = 32; 91d19770e5178a4bc49641711246360c25781d20a4Steven Toth 92d19770e5178a4bc49641711246360c25781d20a4Steven Toth *size = port->ts_packet_size * port->ts_packet_count; 93d19770e5178a4bc49641711246360c25781d20a4Steven Toth *count = 32; 94d19770e5178a4bc49641711246360c25781d20a4Steven Toth return 0; 95d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 96d19770e5178a4bc49641711246360c25781d20a4Steven Toth 9744a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufkystatic int dvb_buf_prepare(struct videobuf_queue *q, 9844a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky struct videobuf_buffer *vb, enum v4l2_field field) 99d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 100d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 1019c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth return cx23885_buf_prepare(q, port, (struct cx23885_buffer *)vb, field); 102d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 103d19770e5178a4bc49641711246360c25781d20a4Steven Toth 104d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic void dvb_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) 105d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 106d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_tsport *port = q->priv_data; 1079c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth cx23885_buf_queue(port, (struct cx23885_buffer *)vb); 108d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 109d19770e5178a4bc49641711246360c25781d20a4Steven Toth 11044a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufkystatic void dvb_buf_release(struct videobuf_queue *q, 11144a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky struct videobuf_buffer *vb) 112d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 1139c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth cx23885_free_buffer(q, (struct cx23885_buffer *)vb); 114d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 115d19770e5178a4bc49641711246360c25781d20a4Steven Toth 116a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehabstatic int cx23885_dvb_set_frontend(struct dvb_frontend *fe); 117a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab 11878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianinstatic void cx23885_dvb_gate_ctrl(struct cx23885_tsport *port, int open) 11978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin{ 12078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin struct videobuf_dvb_frontends *f; 12178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin struct videobuf_dvb_frontend *fe; 12278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 12378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin f = &port->frontends; 12478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 12578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (f->gate <= 1) /* undefined or fe0 */ 12678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe = videobuf_dvb_get_frontend(f, 1); 12778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin else 12878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe = videobuf_dvb_get_frontend(f, f->gate); 12978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 13078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (fe && fe->dvb.frontend && fe->dvb.frontend->ops.i2c_gate_ctrl) 13178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe->dvb.frontend->ops.i2c_gate_ctrl(fe->dvb.frontend, open); 132a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab 133a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab /* 134a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab * FIXME: Improve this path to avoid calling the 135a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab * cx23885_dvb_set_frontend() every time it passes here. 136a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab */ 137a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab cx23885_dvb_set_frontend(fe->dvb.frontend); 13878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin} 13978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 140d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic struct videobuf_queue_ops dvb_qops = { 141d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_setup = dvb_buf_setup, 142d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_prepare = dvb_buf_prepare, 143d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_queue = dvb_buf_queue, 144d19770e5178a4bc49641711246360c25781d20a4Steven Toth .buf_release = dvb_buf_release, 145d19770e5178a4bc49641711246360c25781d20a4Steven Toth}; 146d19770e5178a4bc49641711246360c25781d20a4Steven Toth 14786184e06da4b71fc24ae9505ec60ce95c098d0deSteven Tothstatic struct s5h1409_config hauppauge_generic_config = { 148d19770e5178a4bc49641711246360c25781d20a4Steven Toth .demod_address = 0x32 >> 1, 149d19770e5178a4bc49641711246360c25781d20a4Steven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 150fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .gpio = S5H1409_GPIO_ON, 1512b03238a79295aff30afc3d9a82afa617fd33971Michael Krufky .qam_if = 44000, 152fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .inversion = S5H1409_INVERSION_OFF, 153dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 154dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 155fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth}; 156fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth 157b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Tothstatic struct tda10048_config hauppauge_hvr1200_config = { 158b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .demod_address = 0x10 >> 1, 159b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .output_mode = TDA10048_SERIAL_OUTPUT, 160b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .fwbulkwritelen = TDA10048_BULKWRITE_200, 161484d9e0577c12f9c66a7eab799858ad9617da4bfSteven Toth .inversion = TDA10048_INVERSION_ON, 1628816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv6_if_freq_khz = TDA10048_IF_3300, 1638816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv7_if_freq_khz = TDA10048_IF_3800, 1648816bef53cfaf21fcce47fe5fd403d2e39ba6d2dSteven Toth .dtv8_if_freq_khz = TDA10048_IF_4300, 165484d9e0577c12f9c66a7eab799858ad9617da4bfSteven Toth .clk_freq_khz = TDA10048_CLK_16000, 166b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth}; 167b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 1686b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufkystatic struct tda10048_config hauppauge_hvr1210_config = { 1696b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .demod_address = 0x10 >> 1, 1706b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .output_mode = TDA10048_SERIAL_OUTPUT, 1716b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .fwbulkwritelen = TDA10048_BULKWRITE_200, 1726b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .inversion = TDA10048_INVERSION_ON, 173c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv6_if_freq_khz = TDA10048_IF_3300, 174c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv7_if_freq_khz = TDA10048_IF_3500, 175c27586e4d647c5c07c81e766d34ceef6ba5a316dMichael Krufky .dtv8_if_freq_khz = TDA10048_IF_4000, 1766b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .clk_freq_khz = TDA10048_CLK_16000, 1776b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky}; 1786b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 1793ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufkystatic struct s5h1409_config hauppauge_ezqam_config = { 1803ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .demod_address = 0x32 >> 1, 1813ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 1823ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .gpio = S5H1409_GPIO_OFF, 1833ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .qam_if = 4000, 1843ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky .inversion = S5H1409_INVERSION_ON, 185dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 186dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 1873ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky}; 1883ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 189fc959befe0f0e4647bb4e326e3ae55875401888aSteven Tothstatic struct s5h1409_config hauppauge_hvr1800lp_config = { 190fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .demod_address = 0x32 >> 1, 191fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 192d19770e5178a4bc49641711246360c25781d20a4Steven Toth .gpio = S5H1409_GPIO_OFF, 1932b03238a79295aff30afc3d9a82afa617fd33971Michael Krufky .qam_if = 44000, 194fe475163ff9680495af3b1b5b7633ea7a42e4185Steven Toth .inversion = S5H1409_INVERSION_OFF, 195dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 196dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 197d19770e5178a4bc49641711246360c25781d20a4Steven Toth}; 198d19770e5178a4bc49641711246360c25781d20a4Steven Toth 19907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufkystatic struct s5h1409_config hauppauge_hvr1500_config = { 20007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .demod_address = 0x32 >> 1, 20107b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 20207b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .gpio = S5H1409_GPIO_OFF, 20307b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .inversion = S5H1409_INVERSION_OFF, 204dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 205dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 20607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky}; 20707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky 20886184e06da4b71fc24ae9505ec60ce95c098d0deSteven Tothstatic struct mt2131_config hauppauge_generic_tunerconfig = { 209a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth 0x61 210a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth}; 211a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth 2129bc37caadffe8327683980b2323371691fa182e3Michael Krufkystatic struct lgdt330x_config fusionhdtv_5_express = { 2139bc37caadffe8327683980b2323371691fa182e3Michael Krufky .demod_address = 0x0e, 2149bc37caadffe8327683980b2323371691fa182e3Michael Krufky .demod_chip = LGDT3303, 2159bc37caadffe8327683980b2323371691fa182e3Michael Krufky .serial_mpeg = 0x40, 2169bc37caadffe8327683980b2323371691fa182e3Michael Krufky}; 2179bc37caadffe8327683980b2323371691fa182e3Michael Krufky 218d1987d55a1eda774dfbab240a432607c17241d07Steven Tothstatic struct s5h1409_config hauppauge_hvr1500q_config = { 219d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .demod_address = 0x32 >> 1, 220d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .output_mode = S5H1409_SERIAL_OUTPUT, 221d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .gpio = S5H1409_GPIO_ON, 222d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .qam_if = 44000, 223d1987d55a1eda774dfbab240a432607c17241d07Steven Toth .inversion = S5H1409_INVERSION_OFF, 224dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .status_mode = S5H1409_DEMODLOCKING, 225dfc1c08aab447d49230dacb390d3f2263584d28fSteven Toth .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 226d1987d55a1eda774dfbab240a432607c17241d07Steven Toth}; 227d1987d55a1eda774dfbab240a432607c17241d07Steven Toth 228335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufkystatic struct s5h1409_config dvico_s5h1409_config = { 229335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .demod_address = 0x32 >> 1, 230335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .output_mode = S5H1409_SERIAL_OUTPUT, 231335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .gpio = S5H1409_GPIO_ON, 232335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .qam_if = 44000, 233335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .inversion = S5H1409_INVERSION_OFF, 234335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .status_mode = S5H1409_DEMODLOCKING, 235335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 236335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky}; 237335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 23852b5045078b76ee86e210210601d45670eab22f1Michael Krufkystatic struct s5h1411_config dvico_s5h1411_config = { 23952b5045078b76ee86e210210601d45670eab22f1Michael Krufky .output_mode = S5H1411_SERIAL_OUTPUT, 24052b5045078b76ee86e210210601d45670eab22f1Michael Krufky .gpio = S5H1411_GPIO_ON, 24152b5045078b76ee86e210210601d45670eab22f1Michael Krufky .qam_if = S5H1411_IF_44000, 24252b5045078b76ee86e210210601d45670eab22f1Michael Krufky .vsb_if = S5H1411_IF_44000, 24352b5045078b76ee86e210210601d45670eab22f1Michael Krufky .inversion = S5H1411_INVERSION_OFF, 24452b5045078b76ee86e210210601d45670eab22f1Michael Krufky .status_mode = S5H1411_DEMODLOCKING, 24552b5045078b76ee86e210210601d45670eab22f1Michael Krufky .mpeg_timing = S5H1411_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 24652b5045078b76ee86e210210601d45670eab22f1Michael Krufky}; 24752b5045078b76ee86e210210601d45670eab22f1Michael Krufky 24819bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufkystatic struct s5h1411_config hcw_s5h1411_config = { 24919bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .output_mode = S5H1411_SERIAL_OUTPUT, 25019bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .gpio = S5H1411_GPIO_OFF, 25119bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .vsb_if = S5H1411_IF_44000, 25219bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .qam_if = S5H1411_IF_4000, 25319bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .inversion = S5H1411_INVERSION_ON, 25419bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .status_mode = S5H1411_DEMODLOCKING, 25519bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky .mpeg_timing = S5H1411_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 25619bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky}; 25719bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky 258d1987d55a1eda774dfbab240a432607c17241d07Steven Tothstatic struct xc5000_config hauppauge_hvr1500q_tunerconfig = { 259e12671cf0c3c8460dfa3ab945023803612827fb7Steven Toth .i2c_address = 0x61, 260e12671cf0c3c8460dfa3ab945023803612827fb7Steven Toth .if_khz = 5380, 261d1987d55a1eda774dfbab240a432607c17241d07Steven Toth}; 262d1987d55a1eda774dfbab240a432607c17241d07Steven Toth 263335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufkystatic struct xc5000_config dvico_xc5000_tunerconfig = { 264335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .i2c_address = 0x64, 265335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky .if_khz = 5380, 266335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky}; 267335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 2684041f1a58774249f5f26163e68b844521ece1fb4Michael Krufkystatic struct tda829x_config tda829x_no_probe = { 2694041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky .probe_tuner = TDA829X_DONT_PROBE, 2704041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky}; 2714041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky 272f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufkystatic struct tda18271_std_map hauppauge_tda18271_std_map = { 273c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .atsc_6 = { .if_freq = 5380, .agc_mode = 3, .std = 3, 274c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .if_lvl = 6, .rfagc_top = 0x37 }, 275c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 0, 276c0dc0c1122b585193dd6650c749e919542dd3e23Michael Krufky .if_lvl = 6, .rfagc_top = 0x37 }, 277f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky}; 278f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky 279b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufkystatic struct tda18271_std_map hauppauge_hvr1200_tda18271_std_map = { 280b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_6 = { .if_freq = 3300, .agc_mode = 3, .std = 4, 281b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 282b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_7 = { .if_freq = 3800, .agc_mode = 3, .std = 5, 283b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 284b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .dvbt_8 = { .if_freq = 4300, .agc_mode = 3, .std = 6, 285b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .if_lvl = 1, .rfagc_top = 0x37, }, 286b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky}; 287b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky 288f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufkystatic struct tda18271_config hauppauge_tda18271_config = { 289f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky .std_map = &hauppauge_tda18271_std_map, 290f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky .gate = TDA18271_GATE_ANALOG, 29104a68baa20d8faa0fb5f2924a1169280961be643Michael Krufky .output_opt = TDA18271_OUTPUT_LT_OFF, 292f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky}; 293f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky 294b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Tothstatic struct tda18271_config hauppauge_hvr1200_tuner_config = { 295b34cdc36c4aad10cf4eaadacf067835d6a622f1bMichael Krufky .std_map = &hauppauge_hvr1200_tda18271_std_map, 296b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth .gate = TDA18271_GATE_ANALOG, 29704a68baa20d8faa0fb5f2924a1169280961be643Michael Krufky .output_opt = TDA18271_OUTPUT_LT_OFF, 298b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth}; 299b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 3006b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufkystatic struct tda18271_config hauppauge_hvr1210_tuner_config = { 3016b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky .gate = TDA18271_GATE_DIGITAL, 30204a68baa20d8faa0fb5f2924a1169280961be643Michael Krufky .output_opt = TDA18271_OUTPUT_LT_OFF, 3036b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky}; 3046b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 305247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct tda18271_std_map hauppauge_hvr127x_std_map = { 306a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 4, 307a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .if_lvl = 1, .rfagc_top = 0x58 }, 308a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 5, 309a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .if_lvl = 1, .rfagc_top = 0x58 }, 310a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 311a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 312247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct tda18271_config hauppauge_hvr127x_config = { 313247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky .std_map = &hauppauge_hvr127x_std_map, 31404a68baa20d8faa0fb5f2924a1169280961be643Michael Krufky .output_opt = TDA18271_OUTPUT_LT_OFF, 315a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 316a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 317247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufkystatic struct lgdt3305_config hauppauge_lgdt3305_config = { 318a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .i2c_addr = 0x0e, 319a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .mpeg_mode = LGDT3305_MPEG_SERIAL, 320a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE, 321a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .tpvalid_polarity = LGDT3305_TP_VALID_HIGH, 322a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .deny_i2c_rptr = 1, 323a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .spectral_inversion = 1, 324a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .qam_if_khz = 4000, 325a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky .vsb_if_khz = 3250, 326a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky}; 327a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 328b1721d0da266b4af8cb4419473b4ca36206ab200Harvey Harrisonstatic struct dibx000_agc_config xc3028_agc_config = { 3296676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth BAND_VHF | BAND_UHF, /* band_caps */ 3306676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3316676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth /* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=0, 3326676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_inv_pwm1=0, P_agc_inv_pwm2=0, 3336676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_inh_dc_rv_est=0, P_agc_time_est=3, P_agc_freeze=0, 3346676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * P_agc_nb_est=2, P_agc_write=0 3356676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth */ 3366676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (0 << 15) | (0 << 14) | (0 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | 3376676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0), /* setup */ 3386676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3396676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 712, /* inv_gain */ 3406676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 21, /* time_stabiliz */ 3416676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3426676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* alpha_level */ 3436676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 118, /* thlock */ 3446676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3456676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* wbd_inv */ 3466676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 2867, /* wbd_ref */ 3476676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* wbd_sel */ 3486676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 2, /* wbd_alpha */ 3496676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3506676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_max */ 3516676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_min */ 3526676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 39718, /* agc2_max */ 3536676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 9930, /* agc2_min */ 3546676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt1 */ 3556676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt2 */ 3566676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_pt3 */ 3576676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_slope1 */ 3586676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc1_slope2 */ 3596676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* agc2_pt1 */ 3606676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 128, /* agc2_pt2 */ 3616676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 29, /* agc2_slope1 */ 3626676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 29, /* agc2_slope2 */ 3636676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3646676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 17, /* alpha_mant */ 3656676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 27, /* alpha_exp */ 3666676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 23, /* beta_mant */ 3676676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 51, /* beta_exp */ 3686676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3696676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* perform_agc_softsplit */ 3706676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 3716676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3726676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth/* PLL Configuration for COFDM BW_MHz = 8.000000 3736676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth * With external clock = 30.000000 */ 374b1721d0da266b4af8cb4419473b4ca36206ab200Harvey Harrisonstatic struct dibx000_bandwidth_config xc3028_bw_config = { 3756676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 60000, /* internal */ 3766676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 30000, /* sampling */ 3776676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* pll_cfg: prediv */ 3786676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 8, /* pll_cfg: ratio */ 3796676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3, /* pll_cfg: range */ 3806676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* pll_cfg: reset */ 3816676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* pll_cfg: bypass */ 3826676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: refdiv */ 3836676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: bypclk_div */ 3846676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* misc: IO_CLK_en_core */ 3856676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 1, /* misc: ADClkSrc */ 3866676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0, /* misc: modulo */ 3876676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (3 << 14) | (1 << 12) | (524 << 0), /* sad_cfg: refsel, sel, freq_15k */ 3886676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth (1 << 25) | 5816102, /* ifreq = 5.200000 MHz */ 3896676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 20452225, /* timf */ 3906676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 30000000 /* xtal_hz */ 3916676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 3926676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3936676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Tothstatic struct dib7000p_config hauppauge_hvr1400_dib7000_config = { 3946676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .output_mpeg2_in_188_bytes = 1, 3956676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .hostbus_diversity = 1, 3966676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .tuner_is_baseband = 0, 3976676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .update_lna = NULL, 3986676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 3996676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc_config_count = 1, 4006676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc = &xc3028_agc_config, 4016676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .bw = &xc3028_bw_config, 4026676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 4036676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS, 4046676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_val = DIB7000P_GPIO_DEFAULT_VALUES, 4056676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS, 4066676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 4076676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .pwm_freq_div = 0, 4086676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .agc_control = NULL, 4096676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .spur_protect = 0, 4106676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 4116676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .output_mode = OUTMODE_MPEG2_SERIAL, 4126676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth}; 4136676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 414aef2d186e381816733fa15d67ad63bd99254cb9eSteven Tothstatic struct zl10353_config dvico_fusionhdtv_xc3028 = { 415aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .demod_address = 0x0f, 416aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .if2 = 45600, 417aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .no_tuner = 1, 418d4dc673da9a94716ca2410306c1b36b5faf6c4ccChristopher Pascoe .disable_i2c_gate_ctrl = 1, 419aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth}; 420aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 421f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianinstatic struct stv0900_reg stv0900_ts_regs[] = { 422f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_TSGENERAL, 0x00 }, 423f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSSPEED, 0x40 }, 424f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSSPEED, 0x40 }, 425f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGM, 0xc0 }, 426f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGM, 0xc0 }, 427f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGH, 0xe0 }, 428f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGH, 0xe0 }, 429f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P1_TSCFGL, 0x20 }, 430f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { R0900_P2_TSCFGL, 0x20 }, 431f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin { 0xffff, 0xff }, /* terminate */ 432f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin}; 433f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin 4345a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv0900_config netup_stv0900_config = { 4355a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .demod_address = 0x68, 43629372a8daec4c1dca83e294006488b1d47dd965cIgor M. Liplianin .demod_mode = 1, /* dual */ 437644c7ef0b9a9c4f4dec4a44249b7047452654722Abylay Ospan .xtal = 8000000, 4385a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */ 4395a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .diseqc_mode = 2,/* 2/3 PWM */ 440f867c3f4eab1d5006df4f3734fab1134feffbebaIgor M. Liplianin .ts_config_regs = stv0900_ts_regs, 4415a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun1_maddress = 0,/* 0x60 */ 4425a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun2_maddress = 3,/* 0x63 */ 4435a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun1_adc = 1,/* 1 Vpp */ 4445a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .tun2_adc = 1,/* 1 Vpp */ 4455a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4465a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 4475a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv6110_config netup_stv6110_tunerconfig_a = { 4485a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .i2c_address = 0x60, 449644c7ef0b9a9c4f4dec4a44249b7047452654722Abylay Ospan .mclk = 16000000, 450644c7ef0b9a9c4f4dec4a44249b7047452654722Abylay Ospan .clk_div = 1, 451873688cd30294412e185ba39f8487e3eed0f692dAbylay Ospan .gain = 8, /* +16 dB - maximum gain */ 4525a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4535a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 4545a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianinstatic struct stv6110_config netup_stv6110_tunerconfig_b = { 4555a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin .i2c_address = 0x63, 456644c7ef0b9a9c4f4dec4a44249b7047452654722Abylay Ospan .mclk = 16000000, 457644c7ef0b9a9c4f4dec4a44249b7047452654722Abylay Ospan .clk_div = 1, 458873688cd30294412e185ba39f8487e3eed0f692dAbylay Ospan .gain = 8, /* +16 dB - maximum gain */ 4595a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin}; 4605a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 46196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianinstatic struct cx24116_config tbs_cx24116_config = { 46209ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin .demod_address = 0x55, 46396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin}; 46496318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 46509ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianinstatic struct ds3000_config tevii_ds3000_config = { 46609ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin .demod_address = 0x68, 467579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin}; 468579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 469c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianinstatic struct cx24116_config dvbworld_cx24116_config = { 470c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin .demod_address = 0x05, 471c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin}; 472c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin 473493b7127aa56d0a5c041797639bf543d96f6261bDavid Wongstatic struct lgs8gxx_config mygica_x8506_lgs8gl5_config = { 474493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .prod = LGS8GXX_PROD_LGS8GL5, 475493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .demod_address = 0x19, 476493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .serial_ts = 0, 477493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ts_clk_pol = 1, 478493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ts_clk_gated = 1, 479493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_clk_freq = 30400, /* 30.4 MHz */ 480493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_freq = 5380, /* 5.38 MHz */ 481493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_neg_center = 1, 482493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .ext_adc = 0, 483493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .adc_signed = 0, 484493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_neg_edge = 0, 485493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong}; 486493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong 487493b7127aa56d0a5c041797639bf543d96f6261bDavid Wongstatic struct xc5000_config mygica_x8506_xc5000_config = { 488493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .i2c_address = 0x61, 489493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong .if_khz = 5380, 490493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong}; 491493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong 492a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehabstatic int cx23885_dvb_set_frontend(struct dvb_frontend *fe) 493f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky{ 494a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab struct dtv_frontend_properties *p = &fe->dtv_property_cache; 495f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky struct cx23885_tsport *port = fe->dvb->priv; 496f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky struct cx23885_dev *dev = port->dev; 497f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 498f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky switch (dev->board) { 499f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1275: 500a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab switch (p->modulation) { 501f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case VSB_8: 502f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky cx23885_gpio_clear(dev, GPIO_5); 503f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 504f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case QAM_64: 505f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky case QAM_256: 506f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky default: 507f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky cx23885_gpio_set(dev, GPIO_5); 508f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 509f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky } 510f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky break; 5116f0d8c020ecff4acb959627109d3b81ded211b70David T.L. Wong case CX23885_BOARD_MYGICA_X8506: 5126f0d8c020ecff4acb959627109d3b81ded211b70David T.L. Wong case CX23885_BOARD_MAGICPRO_PROHDTVE2: 5136f0d8c020ecff4acb959627109d3b81ded211b70David T.L. Wong /* Select Digital TV */ 5146f0d8c020ecff4acb959627109d3b81ded211b70David T.L. Wong cx23885_gpio_set(dev, GPIO_0); 5156f0d8c020ecff4acb959627109d3b81ded211b70David T.L. Wong break; 516f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky } 5175bdd39621eb139630683b52c8e71202a2cc08291Michael Krufky return 0; 518f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky} 519f35b9e8039c04f0cb9fe3a051ce941b1524a8798Michael Krufky 5202365b2d307ee0323062c674ea0495584085e8c24David Wongstatic struct lgs8gxx_config magicpro_prohdtve2_lgs8g75_config = { 5212365b2d307ee0323062c674ea0495584085e8c24David Wong .prod = LGS8GXX_PROD_LGS8G75, 5222365b2d307ee0323062c674ea0495584085e8c24David Wong .demod_address = 0x19, 5232365b2d307ee0323062c674ea0495584085e8c24David Wong .serial_ts = 0, 5242365b2d307ee0323062c674ea0495584085e8c24David Wong .ts_clk_pol = 1, 5252365b2d307ee0323062c674ea0495584085e8c24David Wong .ts_clk_gated = 1, 5262365b2d307ee0323062c674ea0495584085e8c24David Wong .if_clk_freq = 30400, /* 30.4 MHz */ 5272365b2d307ee0323062c674ea0495584085e8c24David Wong .if_freq = 6500, /* 6.50 MHz */ 5282365b2d307ee0323062c674ea0495584085e8c24David Wong .if_neg_center = 1, 5292365b2d307ee0323062c674ea0495584085e8c24David Wong .ext_adc = 0, 5302365b2d307ee0323062c674ea0495584085e8c24David Wong .adc_signed = 1, 5312365b2d307ee0323062c674ea0495584085e8c24David Wong .adc_vpp = 2, /* 1.6 Vpp */ 5322365b2d307ee0323062c674ea0495584085e8c24David Wong .if_neg_edge = 1, 5332365b2d307ee0323062c674ea0495584085e8c24David Wong}; 5342365b2d307ee0323062c674ea0495584085e8c24David Wong 5352365b2d307ee0323062c674ea0495584085e8c24David Wongstatic struct xc5000_config magicpro_prohdtve2_xc5000_config = { 5362365b2d307ee0323062c674ea0495584085e8c24David Wong .i2c_address = 0x61, 5372365b2d307ee0323062c674ea0495584085e8c24David Wong .if_khz = 6500, 5382365b2d307ee0323062c674ea0495584085e8c24David Wong}; 5392365b2d307ee0323062c674ea0495584085e8c24David Wong 540ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wongstatic struct atbm8830_config mygica_x8558pro_atbm8830_cfg1 = { 541ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .prod = ATBM8830_PROD_8830, 542ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .demod_address = 0x44, 543ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .serial_ts = 0, 544ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .ts_sampling_edge = 1, 545ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .ts_clk_gated = 0, 546ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .osc_clk_freq = 30400, /* in kHz */ 547ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .if_freq = 0, /* zero IF */ 548ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .zif_swap_iq = 1, 549c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_min = 0x2E, 550c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_max = 0xFF, 551c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_hold_loop = 0, 552ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong}; 553ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong 554ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wongstatic struct max2165_config mygic_x8558pro_max2165_cfg1 = { 555ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .i2c_address = 0x60, 556ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .osc_clk = 20 557ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong}; 558ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong 559ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wongstatic struct atbm8830_config mygica_x8558pro_atbm8830_cfg2 = { 560ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .prod = ATBM8830_PROD_8830, 561ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .demod_address = 0x44, 562ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .serial_ts = 1, 563ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .ts_sampling_edge = 1, 564ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .ts_clk_gated = 0, 565ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .osc_clk_freq = 30400, /* in kHz */ 566ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .if_freq = 0, /* zero IF */ 567ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .zif_swap_iq = 1, 568c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_min = 0x2E, 569c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_max = 0xFF, 570c245c75c41b9693bcbd6c95e25af324188b4dce1David Wong .agc_hold_loop = 0, 571ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong}; 572ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong 573ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wongstatic struct max2165_config mygic_x8558pro_max2165_cfg2 = { 574ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .i2c_address = 0x60, 575ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong .osc_clk = 20 576ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong}; 57778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianinstatic struct stv0367_config netup_stv0367_config[] = { 57878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin { 57978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .demod_address = 0x1c, 58078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .xtal = 27000000, 58178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_khz = 4500, 58278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_iq_mode = 0, 58378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .ts_mode = 1, 58478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .clk_pol = 0, 58578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin }, { 58678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .demod_address = 0x1d, 58778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .xtal = 27000000, 58878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_khz = 4500, 58978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_iq_mode = 0, 59078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .ts_mode = 1, 59178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .clk_pol = 0, 59278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin }, 59378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin}; 59478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 59578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianinstatic struct xc5000_config netup_xc5000_config[] = { 59678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin { 59778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .i2c_address = 0x61, 59878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_khz = 4500, 59978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin }, { 60078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .i2c_address = 0x64, 60178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .if_khz = 4500, 60278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin }, 60378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin}; 60478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 605722c90eb761195c09b776314f331341095273204Stefan Ringelstatic struct drxk_config terratec_drxk_config[] = { 606722c90eb761195c09b776314f331341095273204Stefan Ringel { 607722c90eb761195c09b776314f331341095273204Stefan Ringel .adr = 0x29, 608722c90eb761195c09b776314f331341095273204Stefan Ringel .no_i2c_bridge = 1, 609722c90eb761195c09b776314f331341095273204Stefan Ringel }, { 610722c90eb761195c09b776314f331341095273204Stefan Ringel .adr = 0x2a, 611722c90eb761195c09b776314f331341095273204Stefan Ringel .no_i2c_bridge = 1, 612722c90eb761195c09b776314f331341095273204Stefan Ringel }, 613722c90eb761195c09b776314f331341095273204Stefan Ringel}; 614722c90eb761195c09b776314f331341095273204Stefan Ringel 615722c90eb761195c09b776314f331341095273204Stefan Ringelstatic struct mt2063_config terratec_mt2063_config[] = { 616722c90eb761195c09b776314f331341095273204Stefan Ringel { 617722c90eb761195c09b776314f331341095273204Stefan Ringel .tuner_address = 0x60, 618722c90eb761195c09b776314f331341095273204Stefan Ringel }, { 619722c90eb761195c09b776314f331341095273204Stefan Ringel .tuner_address = 0x67, 620722c90eb761195c09b776314f331341095273204Stefan Ringel }, 621722c90eb761195c09b776314f331341095273204Stefan Ringel}; 622722c90eb761195c09b776314f331341095273204Stefan Ringel 62378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianinint netup_altera_fpga_rw(void *device, int flag, int data, int read) 62478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin{ 62578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin struct cx23885_dev *dev = (struct cx23885_dev *)device; 62678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin unsigned long timeout = jiffies + msecs_to_jiffies(1); 627d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan uint32_t mem = 0; 62878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 629d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem = cx_read(MC417_RWD); 63078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (read) 63178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin cx_set(MC417_OEN, ALT_DATA); 63278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin else { 63378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin cx_clear(MC417_OEN, ALT_DATA);/* D0-D7 out */ 63478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin mem &= ~ALT_DATA; 63578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin mem |= (data & ALT_DATA); 63678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin } 63778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 63878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (flag) 639d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem |= ALT_AD_RG; 64078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin else 641d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem &= ~ALT_AD_RG; 64278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 643d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem &= ~ALT_CS; 64478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (read) 645d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem = (mem & ~ALT_RD) | ALT_WR; 64678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin else 647d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan mem = (mem & ~ALT_WR) | ALT_RD; 648d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan 649d164460f897e2ae8c48ca28c763bb1233d180e7eAbylay Ospan cx_write(MC417_RWD, mem); /* start RW cycle */ 65078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 65178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin for (;;) { 65278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin mem = cx_read(MC417_RWD); 65378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if ((mem & ALT_RDY) == 0) 65478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin break; 65578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (time_after(jiffies, timeout)) 65678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin break; 65778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin udelay(1); 65878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin } 65978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 66078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin cx_set(MC417_RWD, ALT_RD | ALT_WR | ALT_CS); 66178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (read) 66278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin return mem & ALT_DATA; 66378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 66478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin return 0; 66578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin}; 666ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong 667d19770e5178a4bc49641711246360c25781d20a4Steven Tothstatic int dvb_register(struct cx23885_tsport *port) 668d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 669d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_dev *dev = port->dev; 670493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong struct cx23885_i2c *i2c_bus = NULL, *i2c_bus2 = NULL; 67178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin struct videobuf_dvb_frontend *fe0, *fe1 = NULL; 67278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin int mfe_shared = 0; /* bus not shared by default */ 6735a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin int ret; 674363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 675f972e0bd9361594071d3e68e2342c53b51a1d42bDarron Broad /* Get the first frontend */ 67692abe9ee374599179033f039b095864a9cf74593Darron Broad fe0 = videobuf_dvb_get_frontend(&port->frontends, 1); 677363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (!fe0) 678363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth return -EINVAL; 679d19770e5178a4bc49641711246360c25781d20a4Steven Toth 680d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* init struct videobuf_dvb */ 681363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.name = dev->name; 682d19770e5178a4bc49641711246360c25781d20a4Steven Toth 68378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* multi-frontend gate control is undefined or defaults to fe0 */ 68478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin port->frontends.gate = 0; 68578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 68678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* Sets the gate control callback to be used by i2c command calls */ 68778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin port->gate_ctrl = cx23885_dvb_gate_ctrl; 68878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 689d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* init frontend */ 690d19770e5178a4bc49641711246360c25781d20a4Steven Toth switch (dev->board) { 691a77743bc2d29197d48a6f4ae9f8f9e0f0b0ba5d7Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1250: 692f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 693363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 69486184e06da4b71fc24ae9505ec60ce95c098d0deSteven Toth &hauppauge_generic_config, 695f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 696363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 697363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 698f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap, 69986184e06da4b71fc24ae9505ec60ce95c098d0deSteven Toth &hauppauge_generic_tunerconfig, 0); 700d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 701d19770e5178a4bc49641711246360c25781d20a4Steven Toth break; 702a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1270: 703d099becb0bd7ee01a13d58371b4ea5a2f7052c04Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1275: 704a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky i2c_bus = &dev->i2c_bus[0]; 705a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky fe0->dvb.frontend = dvb_attach(lgdt3305_attach, 706247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky &hauppauge_lgdt3305_config, 707a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky &i2c_bus->i2c_adap); 708a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky if (fe0->dvb.frontend != NULL) { 709a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 710a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 711247bc54053df81ede8de32074384c74b0e2eb79bMichael Krufky &hauppauge_hvr127x_config); 712a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky } 713a5dbf45766a378cc00f341f7179befab1edae573Michael Krufky break; 71419bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1255: 71519bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky i2c_bus = &dev->i2c_bus[0]; 71619bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky fe0->dvb.frontend = dvb_attach(s5h1411_attach, 71719bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &hcw_s5h1411_config, 71819bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &i2c_bus->i2c_adap); 71919bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky if (fe0->dvb.frontend != NULL) { 72019bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 72119bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 72219bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky &hauppauge_tda18271_config); 72319bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky } 72419bc57968cc854c7da4846c21b3ef2a39e43f97dMichael Krufky break; 7253ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1800: 7263ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky i2c_bus = &dev->i2c_bus[0]; 72792abe9ee374599179033f039b095864a9cf74593Darron Broad switch (alt_tuner) { 7283ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case 1: 729363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = 7303ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky dvb_attach(s5h1409_attach, 7313ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_ezqam_config, 7323ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap); 733363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 734363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda829x_attach, fe0->dvb.frontend, 7353ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &dev->i2c_bus[1].i2c_adap, 0x42, 7364041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky &tda829x_no_probe); 737363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 7384041f1a58774249f5f26163e68b844521ece1fb4Michael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 739f21e0d7f0513e743b14df3197fdeeb9a9b7edbb2Michael Krufky &hauppauge_tda18271_config); 7403ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky } 7413ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 7423ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky case 0: 7433ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky default: 744363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = 7453ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky dvb_attach(s5h1409_attach, 7463ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_generic_config, 7473ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap); 748363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 749363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 7503ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &i2c_bus->i2c_adap, 7513ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky &hauppauge_generic_tunerconfig, 0); 7523ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 7533ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky } 7543ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky break; 755fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 756f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 757363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 758fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth &hauppauge_hvr1800lp_config, 759f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 760363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 761363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(mt2131_attach, fe0->dvb.frontend, 762f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap, 763fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth &hauppauge_generic_tunerconfig, 0); 764fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth } 765fc959befe0f0e4647bb4e326e3ae55875401888aSteven Toth break; 7669bc37caadffe8327683980b2323371691fa182e3Michael Krufky case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: 767f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky i2c_bus = &dev->i2c_bus[0]; 768363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(lgdt330x_attach, 7699bc37caadffe8327683980b2323371691fa182e3Michael Krufky &fusionhdtv_5_express, 770f139fa71c03d80c1d1ee60aa4b0a3ec7a14d45f9Michael Krufky &i2c_bus->i2c_adap); 771363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 772363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(simple_tuner_attach, fe0->dvb.frontend, 773827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky &i2c_bus->i2c_adap, 0x61, 774827855d39761889aecc7c29385d9c4989b43d01dMichael Krufky TUNER_LG_TDVS_H06XF); 7759bc37caadffe8327683980b2323371691fa182e3Michael Krufky } 7769bc37caadffe8327683980b2323371691fa182e3Michael Krufky break; 777d1987d55a1eda774dfbab240a432607c17241d07Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 778d1987d55a1eda774dfbab240a432607c17241d07Steven Toth i2c_bus = &dev->i2c_bus[1]; 779363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 780d1987d55a1eda774dfbab240a432607c17241d07Steven Toth &hauppauge_hvr1500q_config, 781d1987d55a1eda774dfbab240a432607c17241d07Steven Toth &dev->i2c_bus[0].i2c_adap); 782363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 783363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(xc5000_attach, fe0->dvb.frontend, 78430650961907368b1077cade35455fe931b14da6bMichael Krufky &i2c_bus->i2c_adap, 78530650961907368b1077cade35455fe931b14da6bMichael Krufky &hauppauge_hvr1500q_tunerconfig); 786d1987d55a1eda774dfbab240a432607c17241d07Steven Toth break; 78707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1500: 78807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky i2c_bus = &dev->i2c_bus[1]; 789363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 79007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky &hauppauge_hvr1500_config, 79107b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky &dev->i2c_bus[0].i2c_adap); 792363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 79307b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky struct dvb_frontend *fe; 79407b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky struct xc2028_config cfg = { 79507b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .i2c_adap = &i2c_bus->i2c_adap, 79607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .i2c_addr = 0x61, 79707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky }; 79807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky static struct xc2028_ctrl ctl = { 799ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 80007b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky .max_len = 64, 80152c3d29cfa2fa02f525a01abf28abf48f49801bfSteven Toth .demod = XC3028_FE_OREN538, 80207b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky }; 80307b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky 80407b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky fe = dvb_attach(xc2028_attach, 805363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend, &cfg); 80607b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 80707b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky fe->ops.tuner_ops.set_config(fe, &ctl); 80807b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky } 80907b4a835d42d6d59e84cbafdc8b7090f97d7b67aMichael Krufky break; 810b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1200: 811a780a31cee55e01e7b479244e7907ba842c120a0Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1700: 812b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth i2c_bus = &dev->i2c_bus[0]; 813363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(tda10048_attach, 814b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &hauppauge_hvr1200_config, 815b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &i2c_bus->i2c_adap); 816363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 817363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda829x_attach, fe0->dvb.frontend, 818b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &dev->i2c_bus[1].i2c_adap, 0x42, 819b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &tda829x_no_probe); 820363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 821b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth 0x60, &dev->i2c_bus[1].i2c_adap, 822b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth &hauppauge_hvr1200_tuner_config); 8236b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky } 8246b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky break; 8256b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1210: 8266b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky i2c_bus = &dev->i2c_bus[0]; 8276b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky fe0->dvb.frontend = dvb_attach(tda10048_attach, 8286b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &hauppauge_hvr1210_config, 8296b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &i2c_bus->i2c_adap); 8306b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky if (fe0->dvb.frontend != NULL) { 8316b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky dvb_attach(tda18271_attach, fe0->dvb.frontend, 8326b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky 0x60, &dev->i2c_bus[1].i2c_adap, 8336b926eca9824568b18825d3eade5fb39e3b5a9fbMichael Krufky &hauppauge_hvr1210_tuner_config); 834b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth } 835b3ea01668907bdb32b0c690d28f9f2b1298bd258Steven Toth break; 8366676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1400: 8376676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth i2c_bus = &dev->i2c_bus[0]; 838363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(dib7000p_attach, 8396676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth &i2c_bus->i2c_adap, 8406676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 0x12, &hauppauge_hvr1400_dib7000_config); 841363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 8426676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth struct dvb_frontend *fe; 8436676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth struct xc2028_config cfg = { 8446676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .i2c_adap = &dev->i2c_bus[1].i2c_adap, 8456676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .i2c_addr = 0x64, 8466676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth }; 8476676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth static struct xc2028_ctrl ctl = { 848ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC3028L_DEFAULT_FIRMWARE, 8496676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth .max_len = 64, 8509bed77ee2fb46b74782d0d9d14b92e9d07f3df6eMauro Carvalho Chehab .demod = XC3028_FE_DIBCOM52, 8519c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth /* This is true for all demods with 8529c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth v36 firmware? */ 8530975fc68719c75cbe14132c6f0dead57cd4d5210Mauro Carvalho Chehab .type = XC2028_D2633, 8546676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth }; 8556676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth 8566676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth fe = dvb_attach(xc2028_attach, 857363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend, &cfg); 8586676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 8596676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 8606676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth } 8616676237398d0c2e61e5a3a27e0951f60d6ef6fe3Steven Toth break; 862335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP: 863335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky i2c_bus = &dev->i2c_bus[port->nr - 1]; 864335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky 865363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1409_attach, 866335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky &dvico_s5h1409_config, 867335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky &i2c_bus->i2c_adap); 868363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend == NULL) 869363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(s5h1411_attach, 87052b5045078b76ee86e210210601d45670eab22f1Michael Krufky &dvico_s5h1411_config, 87152b5045078b76ee86e210210601d45670eab22f1Michael Krufky &i2c_bus->i2c_adap); 872363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) 873363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth dvb_attach(xc5000_attach, fe0->dvb.frontend, 87430650961907368b1077cade35455fe931b14da6bMichael Krufky &i2c_bus->i2c_adap, 87530650961907368b1077cade35455fe931b14da6bMichael Krufky &dvico_xc5000_tunerconfig); 876335377b73dd0b0af1fbd283ceae6fcb87a747885Michael Krufky break; 877aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: { 878aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth i2c_bus = &dev->i2c_bus[port->nr - 1]; 879aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 880363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(zl10353_attach, 881aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &dvico_fusionhdtv_xc3028, 882aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &i2c_bus->i2c_adap); 883363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 884aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth struct dvb_frontend *fe; 885aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth struct xc2028_config cfg = { 886aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .i2c_adap = &i2c_bus->i2c_adap, 887aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .i2c_addr = 0x61, 888aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth }; 889aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth static struct xc2028_ctrl ctl = { 890ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 891aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .max_len = 64, 892aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth .demod = XC3028_FE_ZARLINK456, 893aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth }; 894aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth 895363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, 896aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth &cfg); 897aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 898aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 899aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth } 900aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth break; 901aef2d186e381816733fa15d67ad63bd99254cb9eSteven Toth } 9024c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 9039bb1b7e879091f09fc677dca10c5e132b68a9da3Igor M. Liplianin case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 90434e383dd13edf402e87bf0a87f4a19b193b4bd7aVladimir Geroy case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 9054c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth i2c_bus = &dev->i2c_bus[0]; 9064c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth 907363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend = dvb_attach(zl10353_attach, 9084c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &dvico_fusionhdtv_xc3028, 9094c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &i2c_bus->i2c_adap); 910363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend != NULL) { 9114c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth struct dvb_frontend *fe; 9124c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth struct xc2028_config cfg = { 9134c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .i2c_adap = &dev->i2c_bus[1].i2c_adap, 9144c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .i2c_addr = 0x61, 9154c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth }; 9164c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth static struct xc2028_ctrl ctl = { 917ef80bfeb30f82fb718731a3323a75ae08396a4eaMichael Krufky .fname = XC2028_DEFAULT_FIRMWARE, 9184c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .max_len = 64, 9194c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth .demod = XC3028_FE_ZARLINK456, 9204c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth }; 9214c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth 922363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, 9234c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth &cfg); 9244c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) 9254c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth fe->ops.tuner_ops.set_config(fe, &ctl); 9264c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth } 9274c56b04af67211c4311dd9961ce5aba86b96ba9cSteven Toth break; 9280cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 9290cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu i2c_bus = &dev->i2c_bus[0]; 9300cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu 9310cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu fe0->dvb.frontend = dvb_attach(zl10353_attach, 9320cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu &dvico_fusionhdtv_xc3028, 9330cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu &i2c_bus->i2c_adap); 9340cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu if (fe0->dvb.frontend != NULL) { 9350cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu struct dvb_frontend *fe; 9360cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu struct xc4000_config cfg = { 9370cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu .i2c_address = 0x61, 9380cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu .default_pm = 0, 9390cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu .dvb_amplitude = 134, 9400cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu .set_smoothedcvbs = 1, 9410cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu .if_khz = 4560 9420cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu }; 9430cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu 9440cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu fe = dvb_attach(xc4000_attach, fe0->dvb.frontend, 9450cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu &dev->i2c_bus[1].i2c_adap, &cfg); 946a7c8aadad39428b64d26c3971d967f8314e2397dMiroslav Slugen if (!fe) { 947a7c8aadad39428b64d26c3971d967f8314e2397dMiroslav Slugen printk(KERN_ERR "%s/2: xc4000 attach failed\n", 948a7c8aadad39428b64d26c3971d967f8314e2397dMiroslav Slugen dev->name); 949a7c8aadad39428b64d26c3971d967f8314e2397dMiroslav Slugen goto frontend_detach; 950a7c8aadad39428b64d26c3971d967f8314e2397dMiroslav Slugen } 9510cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu } 9520cf8af57f1865148efcb40a43ddd04d5a709820eistvan_v@mailbox.hu break; 95396318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin case CX23885_BOARD_TBS_6920: 95409ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin i2c_bus = &dev->i2c_bus[1]; 95596318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 95696318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin fe0->dvb.frontend = dvb_attach(cx24116_attach, 95709ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin &tbs_cx24116_config, 95809ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin &i2c_bus->i2c_adap); 95996318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin if (fe0->dvb.frontend != NULL) 96009ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin fe0->dvb.frontend->ops.set_voltage = f300_set_voltage; 96196318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin 96296318d0cca02a91b22a2e1a1097ffeea0b3becaeIgor M. Liplianin break; 963579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin case CX23885_BOARD_TEVII_S470: 964579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin i2c_bus = &dev->i2c_bus[1]; 965579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 96609ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin fe0->dvb.frontend = dvb_attach(ds3000_attach, 96709ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin &tevii_ds3000_config, 96809ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin &i2c_bus->i2c_adap); 969579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin if (fe0->dvb.frontend != NULL) 97009ea33e5c696958e8b1ae6d5ab184476b16592f1Igor M. Liplianin fe0->dvb.frontend->ops.set_voltage = f300_set_voltage; 971579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin 972579943f5487baa7f9fd8e3189a4f357d6b06c76dIgor M. Liplianin break; 973c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin case CX23885_BOARD_DVBWORLD_2005: 974c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin i2c_bus = &dev->i2c_bus[1]; 975c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin 976c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin fe0->dvb.frontend = dvb_attach(cx24116_attach, 977c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin &dvbworld_cx24116_config, 978c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin &i2c_bus->i2c_adap); 979c9b8b04b267f9a7e472daa06cdf6d4963d503d1fIgor M. Liplianin break; 9805a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 9815a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin i2c_bus = &dev->i2c_bus[0]; 9825a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin switch (port->nr) { 9835a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* port B */ 9845a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case 1: 9855a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend = dvb_attach(stv0900_attach, 9865a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv0900_config, 9875a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 0); 9885a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (fe0->dvb.frontend != NULL) { 9895a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (dvb_attach(stv6110_attach, 9905a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 9915a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv6110_tunerconfig_a, 9925a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap)) { 9935a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (!dvb_attach(lnbh24_attach, 9945a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 9955a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 9969329fb5b731cd535a7c7d0690d30e872f29a33d3Abylay Ospan LNBH24_PCL | LNBH24_TTX, 9979329fb5b731cd535a7c7d0690d30e872f29a33d3Abylay Ospan LNBH24_TEN, 0x09)) 9985a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin printk(KERN_ERR 9995a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin "No LNBH24 found!\n"); 10005a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 10015a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 10025a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 10035a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 10045a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* port C */ 10055a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case 2: 10065a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend = dvb_attach(stv0900_attach, 10075a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv0900_config, 10085a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 1); 10095a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (fe0->dvb.frontend != NULL) { 10105a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (dvb_attach(stv6110_attach, 10115a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 10125a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &netup_stv6110_tunerconfig_b, 10135a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap)) { 10145a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin if (!dvb_attach(lnbh24_attach, 10155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin fe0->dvb.frontend, 10165a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin &i2c_bus->i2c_adap, 10179329fb5b731cd535a7c7d0690d30e872f29a33d3Abylay Ospan LNBH24_PCL | LNBH24_TTX, 10189329fb5b731cd535a7c7d0690d30e872f29a33d3Abylay Ospan LNBH24_TEN, 0x0a)) 10195a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin printk(KERN_ERR 10205a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin "No LNBH24 found!\n"); 10215a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 10225a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 10235a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 10245a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 10255a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 10265a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 1027493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong case CX23885_BOARD_MYGICA_X8506: 1028493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong i2c_bus = &dev->i2c_bus[0]; 1029493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong i2c_bus2 = &dev->i2c_bus[1]; 1030493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong fe0->dvb.frontend = dvb_attach(lgs8gxx_attach, 1031493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &mygica_x8506_lgs8gl5_config, 1032493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &i2c_bus->i2c_adap); 1033493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong if (fe0->dvb.frontend != NULL) { 1034493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong dvb_attach(xc5000_attach, 1035493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong fe0->dvb.frontend, 1036493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &i2c_bus2->i2c_adap, 1037493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong &mygica_x8506_xc5000_config); 1038493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong } 1039493b7127aa56d0a5c041797639bf543d96f6261bDavid Wong break; 10402365b2d307ee0323062c674ea0495584085e8c24David Wong case CX23885_BOARD_MAGICPRO_PROHDTVE2: 10412365b2d307ee0323062c674ea0495584085e8c24David Wong i2c_bus = &dev->i2c_bus[0]; 10422365b2d307ee0323062c674ea0495584085e8c24David Wong i2c_bus2 = &dev->i2c_bus[1]; 10432365b2d307ee0323062c674ea0495584085e8c24David Wong fe0->dvb.frontend = dvb_attach(lgs8gxx_attach, 10442365b2d307ee0323062c674ea0495584085e8c24David Wong &magicpro_prohdtve2_lgs8g75_config, 10452365b2d307ee0323062c674ea0495584085e8c24David Wong &i2c_bus->i2c_adap); 10462365b2d307ee0323062c674ea0495584085e8c24David Wong if (fe0->dvb.frontend != NULL) { 10472365b2d307ee0323062c674ea0495584085e8c24David Wong dvb_attach(xc5000_attach, 10482365b2d307ee0323062c674ea0495584085e8c24David Wong fe0->dvb.frontend, 10492365b2d307ee0323062c674ea0495584085e8c24David Wong &i2c_bus2->i2c_adap, 10502365b2d307ee0323062c674ea0495584085e8c24David Wong &magicpro_prohdtve2_xc5000_config); 10512365b2d307ee0323062c674ea0495584085e8c24David Wong } 10522365b2d307ee0323062c674ea0495584085e8c24David Wong break; 10531369738023900302ef9677c90c4da873b5593ee7Steven Toth case CX23885_BOARD_HAUPPAUGE_HVR1850: 1054350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth i2c_bus = &dev->i2c_bus[0]; 1055350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth fe0->dvb.frontend = dvb_attach(s5h1411_attach, 1056350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth &hcw_s5h1411_config, 1057350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth &i2c_bus->i2c_adap); 1058350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth if (fe0->dvb.frontend != NULL) 1059350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 1060350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth 0x60, &dev->i2c_bus[0].i2c_adap, 1061350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth &hauppauge_tda18271_config); 1062350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth 1063350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth tda18271_attach(&dev->ts1.analog_fe, 1064350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth 0x60, &dev->i2c_bus[1].i2c_adap, 1065350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth &hauppauge_tda18271_config); 1066350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth 1067350451375d6d8e9b124eacad67e221a0fdff0ac9Steven Toth break; 1068aee0b24c05f6e9615115748a8ea5042d8ee0e6a0Michael Krufky case CX23885_BOARD_HAUPPAUGE_HVR1290: 10691369738023900302ef9677c90c4da873b5593ee7Steven Toth i2c_bus = &dev->i2c_bus[0]; 10701369738023900302ef9677c90c4da873b5593ee7Steven Toth fe0->dvb.frontend = dvb_attach(s5h1411_attach, 10711369738023900302ef9677c90c4da873b5593ee7Steven Toth &hcw_s5h1411_config, 10721369738023900302ef9677c90c4da873b5593ee7Steven Toth &i2c_bus->i2c_adap); 10731369738023900302ef9677c90c4da873b5593ee7Steven Toth if (fe0->dvb.frontend != NULL) 10741369738023900302ef9677c90c4da873b5593ee7Steven Toth dvb_attach(tda18271_attach, fe0->dvb.frontend, 10751369738023900302ef9677c90c4da873b5593ee7Steven Toth 0x60, &dev->i2c_bus[0].i2c_adap, 10761369738023900302ef9677c90c4da873b5593ee7Steven Toth &hauppauge_tda18271_config); 10771369738023900302ef9677c90c4da873b5593ee7Steven Toth break; 1078ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong case CX23885_BOARD_MYGICA_X8558PRO: 1079ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong switch (port->nr) { 1080ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong /* port B */ 1081ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong case 1: 1082ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong i2c_bus = &dev->i2c_bus[0]; 1083ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong fe0->dvb.frontend = dvb_attach(atbm8830_attach, 1084ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &mygica_x8558pro_atbm8830_cfg1, 1085ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &i2c_bus->i2c_adap); 1086ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong if (fe0->dvb.frontend != NULL) { 1087ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong dvb_attach(max2165_attach, 1088ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong fe0->dvb.frontend, 1089ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &i2c_bus->i2c_adap, 1090ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &mygic_x8558pro_max2165_cfg1); 1091ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong } 1092ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong break; 1093ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong /* port C */ 1094ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong case 2: 1095ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong i2c_bus = &dev->i2c_bus[1]; 1096ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong fe0->dvb.frontend = dvb_attach(atbm8830_attach, 1097ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &mygica_x8558pro_atbm8830_cfg2, 1098ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &i2c_bus->i2c_adap); 1099ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong if (fe0->dvb.frontend != NULL) { 1100ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong dvb_attach(max2165_attach, 1101ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong fe0->dvb.frontend, 1102ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &i2c_bus->i2c_adap, 1103ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong &mygic_x8558pro_max2165_cfg2); 1104ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong } 1105ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong break; 1106ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong } 1107ea5697fe9ed6a1d534de436eff3138041e3c8aa9David T. L. Wong break; 110878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 110978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin i2c_bus = &dev->i2c_bus[0]; 111078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin mfe_shared = 1;/* MFE */ 111178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin port->frontends.gate = 0;/* not clear for me yet */ 111278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* ports B, C */ 111378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* MFE frontend 1 DVB-T */ 111478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe0->dvb.frontend = dvb_attach(stv0367ter_attach, 111578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &netup_stv0367_config[port->nr - 1], 111678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &i2c_bus->i2c_adap); 11174174ebf5ebd7a09589ff8ff3bc3246ea0a9bd356Abylay Ospan if (fe0->dvb.frontend != NULL) { 111878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (NULL == dvb_attach(xc5000_attach, 111978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe0->dvb.frontend, 112078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &i2c_bus->i2c_adap, 112178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &netup_xc5000_config[port->nr - 1])) 112278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin goto frontend_detach; 11234174ebf5ebd7a09589ff8ff3bc3246ea0a9bd356Abylay Ospan /* load xc5000 firmware */ 11244174ebf5ebd7a09589ff8ff3bc3246ea0a9bd356Abylay Ospan fe0->dvb.frontend->ops.tuner_ops.init(fe0->dvb.frontend); 11254174ebf5ebd7a09589ff8ff3bc3246ea0a9bd356Abylay Ospan } 112678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* MFE frontend 2 */ 112778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1 = videobuf_dvb_get_frontend(&port->frontends, 2); 112878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (fe1 == NULL) 112978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin goto frontend_detach; 113078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* DVB-C init */ 113178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1->dvb.frontend = dvb_attach(stv0367cab_attach, 113278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &netup_stv0367_config[port->nr - 1], 113378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &i2c_bus->i2c_adap); 113478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (fe1->dvb.frontend != NULL) { 113578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1->dvb.frontend->id = 1; 113678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (NULL == dvb_attach(xc5000_attach, 113778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1->dvb.frontend, 113878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &i2c_bus->i2c_adap, 113978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &netup_xc5000_config[port->nr - 1])) 114078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin goto frontend_detach; 114178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin } 114278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin break; 1143722c90eb761195c09b776314f331341095273204Stefan Ringel case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 1144722c90eb761195c09b776314f331341095273204Stefan Ringel i2c_bus = &dev->i2c_bus[0]; 1145722c90eb761195c09b776314f331341095273204Stefan Ringel i2c_bus2 = &dev->i2c_bus[1]; 1146722c90eb761195c09b776314f331341095273204Stefan Ringel 1147722c90eb761195c09b776314f331341095273204Stefan Ringel switch (port->nr) { 1148722c90eb761195c09b776314f331341095273204Stefan Ringel /* port b */ 1149722c90eb761195c09b776314f331341095273204Stefan Ringel case 1: 1150722c90eb761195c09b776314f331341095273204Stefan Ringel fe0->dvb.frontend = dvb_attach(drxk_attach, 1151722c90eb761195c09b776314f331341095273204Stefan Ringel &terratec_drxk_config[0], 1152722c90eb761195c09b776314f331341095273204Stefan Ringel &i2c_bus->i2c_adap); 1153722c90eb761195c09b776314f331341095273204Stefan Ringel if (fe0->dvb.frontend != NULL) { 1154722c90eb761195c09b776314f331341095273204Stefan Ringel if (!dvb_attach(mt2063_attach, 1155722c90eb761195c09b776314f331341095273204Stefan Ringel fe0->dvb.frontend, 1156722c90eb761195c09b776314f331341095273204Stefan Ringel &terratec_mt2063_config[0], 1157722c90eb761195c09b776314f331341095273204Stefan Ringel &i2c_bus2->i2c_adap)) 1158722c90eb761195c09b776314f331341095273204Stefan Ringel goto frontend_detach; 1159722c90eb761195c09b776314f331341095273204Stefan Ringel } 1160722c90eb761195c09b776314f331341095273204Stefan Ringel break; 1161722c90eb761195c09b776314f331341095273204Stefan Ringel /* port c */ 1162722c90eb761195c09b776314f331341095273204Stefan Ringel case 2: 1163722c90eb761195c09b776314f331341095273204Stefan Ringel fe0->dvb.frontend = dvb_attach(drxk_attach, 1164722c90eb761195c09b776314f331341095273204Stefan Ringel &terratec_drxk_config[1], 1165722c90eb761195c09b776314f331341095273204Stefan Ringel &i2c_bus->i2c_adap); 1166722c90eb761195c09b776314f331341095273204Stefan Ringel if (fe0->dvb.frontend != NULL) { 1167722c90eb761195c09b776314f331341095273204Stefan Ringel if (!dvb_attach(mt2063_attach, 1168722c90eb761195c09b776314f331341095273204Stefan Ringel fe0->dvb.frontend, 1169722c90eb761195c09b776314f331341095273204Stefan Ringel &terratec_mt2063_config[1], 1170722c90eb761195c09b776314f331341095273204Stefan Ringel &i2c_bus2->i2c_adap)) 1171722c90eb761195c09b776314f331341095273204Stefan Ringel goto frontend_detach; 1172722c90eb761195c09b776314f331341095273204Stefan Ringel } 1173722c90eb761195c09b776314f331341095273204Stefan Ringel break; 1174722c90eb761195c09b776314f331341095273204Stefan Ringel } 1175722c90eb761195c09b776314f331341095273204Stefan Ringel break; 1176d19770e5178a4bc49641711246360c25781d20a4Steven Toth default: 11779c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " 11789c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth " isn't supported yet\n", 1179d19770e5178a4bc49641711246360c25781d20a4Steven Toth dev->name); 1180d19770e5178a4bc49641711246360c25781d20a4Steven Toth break; 1181d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 118278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 118378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if ((NULL == fe0->dvb.frontend) || (fe1 && NULL == fe1->dvb.frontend)) { 11849c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_ERR "%s: frontend initialization failed\n", 118578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin dev->name); 118678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin goto frontend_detach; 1187d19770e5178a4bc49641711246360c25781d20a4Steven Toth } 118878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 1189d7cba043d7ec840d67bd5143779d1febe7d83407Michael Krufky /* define general-purpose callback pointer */ 1190363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend->callback = cx23885_tuner_callback; 119178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (fe1) 119278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1->dvb.frontend->callback = cx23885_tuner_callback; 119378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin#if 0 119478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin /* Ensure all frontends negotiate bus access */ 119578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe0->dvb.frontend->ops.ts_bus_ctrl = cx23885_dvb_bus_ctrl; 119678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin if (fe1) 119778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin fe1->dvb.frontend->ops.ts_bus_ctrl = cx23885_dvb_bus_ctrl; 119878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin#endif 1199d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1200d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* Put the analog decoder in standby to keep it quiet */ 1201622b828ab795580903e79acb33fb44f5c9ce7b0fLaurent Pinchart call_all(dev, core, s_power, 0); 1202d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1203363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth if (fe0->dvb.frontend->ops.analog_ops.standby) 1204363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend); 12053ba71d2194500d1a9fef1b8491b9e0c168e7d46eMichael Krufky 1206d19770e5178a4bc49641711246360c25781d20a4Steven Toth /* register everything */ 12075a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin ret = videobuf_dvb_register_bus(&port->frontends, THIS_MODULE, port, 120878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin &dev->pci->dev, adapter_nr, mfe_shared, 1209a7d44baaed0a8c7d4c4fb47938455cb3fc2bb1ebMauro Carvalho Chehab NULL); 1210bee30192feeba6d69db45434e7818d532d1b8d33Abylay Ospan if (ret) 121178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin goto frontend_detach; 1212363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 12135a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin /* init CI & MAC */ 12145a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin switch (dev->board) { 12155a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: { 12165a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin static struct netup_card_info cinfo; 12175a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 12185a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin netup_get_card_info(&dev->i2c_bus[0].i2c_adap, &cinfo); 12195a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin memcpy(port->frontends.adapter.proposed_mac, 12205a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin cinfo.port[port->nr - 1].mac, 6); 1221be39515758f382e8b1d0d0012cd59008e9970dechartleys printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=%pM\n", 1222be39515758f382e8b1d0d0012cd59008e9970dechartleys port->nr, port->frontends.adapter.proposed_mac); 12235a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 12245a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin netup_ci_init(port); 12255a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin break; 12265a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 122778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: { 122878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin struct altera_ci_config netup_ci_cfg = { 122978db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .dev = dev,/* magic number to identify*/ 123078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .adapter = &port->frontends.adapter,/* for CI */ 123178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .demux = &fe0->dvb.demux,/* for hw pid filter */ 123278db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin .fpga_rw = netup_altera_fpga_rw, 123378db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin }; 123478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 123578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin altera_ci_init(&netup_ci_cfg, port->nr); 123678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin break; 123778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin } 123816bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier case CX23885_BOARD_TEVII_S470: { 123916bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier u8 eeprom[256]; /* 24C02 i2c eeprom */ 124016bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier 124116bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier if (port->nr != 1) 124216bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier break; 124316bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier 124416bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier /* Read entire EEPROM */ 124516bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; 124616bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); 12475cac1f665fd18c75c9914ecd3fe808cebfe639f0Andy Shevchenko printk(KERN_INFO "TeVii S470 MAC= %pM\n", eeprom + 0xa0); 124816bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xa0, 6); 124916bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier break; 125016bfdaa41be85512432212382f2600fcdf7c1c37Pierre Gronlier } 12515a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin } 12525a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 12535a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin return ret; 125478db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 125578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianinfrontend_detach: 125678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin port->gate_ctrl = NULL; 125778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin videobuf_dvb_dealloc_frontends(&port->frontends); 125878db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin return -EINVAL; 1259d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 1260d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1261d19770e5178a4bc49641711246360c25781d20a4Steven Tothint cx23885_dvb_register(struct cx23885_tsport *port) 1262d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 1263363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 1264363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth struct videobuf_dvb_frontend *fe0; 1265d19770e5178a4bc49641711246360c25781d20a4Steven Toth struct cx23885_dev *dev = port->dev; 1266eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth int err, i; 1267eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth 1268eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* Here we need to allocate the correct number of frontends, 1269af901ca181d92aac3a7dc265144a9081a86d8f39André Goddard Rosa * as reflected in the cards struct. The reality is that currently 1270eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * no cx23885 boards support this - yet. But, if we don't modify this 1271eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * code then the second frontend would never be allocated (later) 1272eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * and fail with error before the attach in dvb_register(). 1273eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * Without these changes we risk an OOPS later. The changes here 1274eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * are for safety, and should provide a good foundation for the 1275eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * future addition of any multi-frontend cx23885 based boards. 1276eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth */ 1277eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth printk(KERN_INFO "%s() allocating %d frontend(s)\n", __func__, 1278eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth port->num_frontends); 1279d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1280eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth for (i = 1; i <= port->num_frontends; i++) { 128196b7a1a838fb5b8746fc22f4ff3cef358bf59f35Darron Broad if (videobuf_dvb_alloc_frontend( 12829c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth &port->frontends, i) == NULL) { 1283eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth printk(KERN_ERR "%s() failed to alloc\n", __func__); 1284eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth return -ENOMEM; 1285eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth } 1286eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth 1287eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth fe0 = videobuf_dvb_get_frontend(&port->frontends, i); 1288eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth if (!fe0) 1289eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth err = -EINVAL; 1290363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 1291eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dprintk(1, "%s\n", __func__); 12929c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth dprintk(1, " ->probed by Card=%d Name=%s, PCI %02x:%02x\n", 1293eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->board, 1294eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->name, 1295eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->pci_bus, 1296eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth dev->pci_slot); 1297d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1298eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth err = -ENODEV; 1299d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1300eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* dvb stuff */ 1301eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* We have to init the queue for each frontend on a port. */ 13029c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_INFO "%s: cx23885 based dvb card\n", dev->name); 13039c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth videobuf_queue_sg_init(&fe0->dvb.dvbq, &dvb_qops, 13049c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth &dev->pci->dev, &port->slock, 130544a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_TOP, 130608bff03ed697a583612b62a6ac566bd5bce98012Hans Verkuil sizeof(struct cx23885_buffer), port, NULL); 1307eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth } 1308d19770e5178a4bc49641711246360c25781d20a4Steven Toth err = dvb_register(port); 1309d19770e5178a4bc49641711246360c25781d20a4Steven Toth if (err != 0) 13109c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth printk(KERN_ERR "%s() dvb_register failed err = %d\n", 13119c8ced511e154faf1a7af3f1abdfff45dccbe54aSteven Toth __func__, err); 1312d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1313d19770e5178a4bc49641711246360c25781d20a4Steven Toth return err; 1314d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 1315d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1316d19770e5178a4bc49641711246360c25781d20a4Steven Tothint cx23885_dvb_unregister(struct cx23885_tsport *port) 1317d19770e5178a4bc49641711246360c25781d20a4Steven Toth{ 1318363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth struct videobuf_dvb_frontend *fe0; 1319363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth 1320eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth /* FIXME: in an error condition where the we have 1321eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * an expected number of frontends (attach problem) 1322eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * then this might not clean up correctly, if 1 1323eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * is invalid. 1324eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * This comment only applies to future boards IF they 1325eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth * implement MFE support. 1326eb0c58bb1325593840af0e7fbb4dbc654e756591Steven Toth */ 132792abe9ee374599179033f039b095864a9cf74593Darron Broad fe0 = videobuf_dvb_get_frontend(&port->frontends, 1); 1328e66131cee501ee720b7b58a4b87073b8fbaaaba6Abylay Ospan if (fe0 && fe0->dvb.frontend) 1329363c35fc448943c3d6121332d28bcda2d2fbf87cSteven Toth videobuf_dvb_unregister_bus(&port->frontends); 1330d19770e5178a4bc49641711246360c25781d20a4Steven Toth 1331afd96668d8491f762e35c16ce65781da820a67faHans Verkuil switch (port->dev->board) { 1332afd96668d8491f762e35c16ce65781da820a67faHans Verkuil case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 1333afd96668d8491f762e35c16ce65781da820a67faHans Verkuil netup_ci_exit(port); 1334afd96668d8491f762e35c16ce65781da820a67faHans Verkuil break; 133578db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 133678db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin altera_ci_release(port->dev, port->nr); 133778db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin break; 1338afd96668d8491f762e35c16ce65781da820a67faHans Verkuil } 13395a23b0762c9095e137ce9a559cc7c37b2f8fd083Igor M. Liplianin 134078db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin port->gate_ctrl = NULL; 134178db854757aa4110f9c6873d1529b851037a3405Igor M. Liplianin 1342d19770e5178a4bc49641711246360c25781d20a4Steven Toth return 0; 1343d19770e5178a4bc49641711246360c25781d20a4Steven Toth} 134444a6481dcd9ec835bbd608b1b2ee47ee62c7e1d8Michael Krufky 1345