1*9a0bf528SMauro Carvalho Chehab /* 2*9a0bf528SMauro Carvalho Chehab * tdhd1.h - ALPS TDHD1-204A tuner support 3*9a0bf528SMauro Carvalho Chehab * 4*9a0bf528SMauro Carvalho Chehab * Copyright (C) 2008 Oliver Endriss <o.endriss@gmx.de> 5*9a0bf528SMauro Carvalho Chehab * 6*9a0bf528SMauro Carvalho Chehab * 7*9a0bf528SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or 8*9a0bf528SMauro Carvalho Chehab * modify it under the terms of the GNU General Public License 9*9a0bf528SMauro Carvalho Chehab * as published by the Free Software Foundation; either version 2 10*9a0bf528SMauro Carvalho Chehab * of the License, or (at your option) any later version. 11*9a0bf528SMauro Carvalho Chehab * 12*9a0bf528SMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 13*9a0bf528SMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 14*9a0bf528SMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*9a0bf528SMauro Carvalho Chehab * GNU General Public License for more details. 16*9a0bf528SMauro Carvalho Chehab * 17*9a0bf528SMauro Carvalho Chehab * You should have received a copy of the GNU General Public License 18*9a0bf528SMauro Carvalho Chehab * along with this program; if not, write to the Free Software 19*9a0bf528SMauro Carvalho Chehab * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20*9a0bf528SMauro Carvalho Chehab * Or, point your browser to http://www.gnu.org/copyleft/gpl.html 21*9a0bf528SMauro Carvalho Chehab * 22*9a0bf528SMauro Carvalho Chehab * 23*9a0bf528SMauro Carvalho Chehab * The project's page is at http://www.linuxtv.org 24*9a0bf528SMauro Carvalho Chehab */ 25*9a0bf528SMauro Carvalho Chehab 26*9a0bf528SMauro Carvalho Chehab #ifndef TDHD1_H 27*9a0bf528SMauro Carvalho Chehab #define TDHD1_H 28*9a0bf528SMauro Carvalho Chehab 29*9a0bf528SMauro Carvalho Chehab #include "tda1004x.h" 30*9a0bf528SMauro Carvalho Chehab 31*9a0bf528SMauro Carvalho Chehab static int alps_tdhd1_204_request_firmware(struct dvb_frontend *fe, const struct firmware **fw, char *name); 32*9a0bf528SMauro Carvalho Chehab 33*9a0bf528SMauro Carvalho Chehab static struct tda1004x_config alps_tdhd1_204a_config = { 34*9a0bf528SMauro Carvalho Chehab .demod_address = 0x8, 35*9a0bf528SMauro Carvalho Chehab .invert = 1, 36*9a0bf528SMauro Carvalho Chehab .invert_oclk = 0, 37*9a0bf528SMauro Carvalho Chehab .xtal_freq = TDA10046_XTAL_4M, 38*9a0bf528SMauro Carvalho Chehab .agc_config = TDA10046_AGC_DEFAULT, 39*9a0bf528SMauro Carvalho Chehab .if_freq = TDA10046_FREQ_3617, 40*9a0bf528SMauro Carvalho Chehab .request_firmware = alps_tdhd1_204_request_firmware 41*9a0bf528SMauro Carvalho Chehab }; 42*9a0bf528SMauro Carvalho Chehab 43*9a0bf528SMauro Carvalho Chehab static int alps_tdhd1_204a_tuner_set_params(struct dvb_frontend *fe) 44*9a0bf528SMauro Carvalho Chehab { 45*9a0bf528SMauro Carvalho Chehab struct dtv_frontend_properties *p = &fe->dtv_property_cache; 46*9a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c = fe->tuner_priv; 47*9a0bf528SMauro Carvalho Chehab u8 data[4]; 48*9a0bf528SMauro Carvalho Chehab struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) }; 49*9a0bf528SMauro Carvalho Chehab u32 div; 50*9a0bf528SMauro Carvalho Chehab 51*9a0bf528SMauro Carvalho Chehab div = (p->frequency + 36166666) / 166666; 52*9a0bf528SMauro Carvalho Chehab 53*9a0bf528SMauro Carvalho Chehab data[0] = (div >> 8) & 0x7f; 54*9a0bf528SMauro Carvalho Chehab data[1] = div & 0xff; 55*9a0bf528SMauro Carvalho Chehab data[2] = 0x85; 56*9a0bf528SMauro Carvalho Chehab 57*9a0bf528SMauro Carvalho Chehab if (p->frequency >= 174000000 && p->frequency <= 230000000) 58*9a0bf528SMauro Carvalho Chehab data[3] = 0x02; 59*9a0bf528SMauro Carvalho Chehab else if (p->frequency >= 470000000 && p->frequency <= 823000000) 60*9a0bf528SMauro Carvalho Chehab data[3] = 0x0C; 61*9a0bf528SMauro Carvalho Chehab else if (p->frequency > 823000000 && p->frequency <= 862000000) 62*9a0bf528SMauro Carvalho Chehab data[3] = 0x8C; 63*9a0bf528SMauro Carvalho Chehab else 64*9a0bf528SMauro Carvalho Chehab return -EINVAL; 65*9a0bf528SMauro Carvalho Chehab 66*9a0bf528SMauro Carvalho Chehab if (fe->ops.i2c_gate_ctrl) 67*9a0bf528SMauro Carvalho Chehab fe->ops.i2c_gate_ctrl(fe, 1); 68*9a0bf528SMauro Carvalho Chehab if (i2c_transfer(i2c, &msg, 1) != 1) 69*9a0bf528SMauro Carvalho Chehab return -EIO; 70*9a0bf528SMauro Carvalho Chehab 71*9a0bf528SMauro Carvalho Chehab return 0; 72*9a0bf528SMauro Carvalho Chehab } 73*9a0bf528SMauro Carvalho Chehab 74*9a0bf528SMauro Carvalho Chehab #endif /* TDHD1_H */ 75