19a0bf528SMauro Carvalho Chehab /* 29a0bf528SMauro Carvalho Chehab * tdhd1.h - ALPS TDHD1-204A tuner support 39a0bf528SMauro Carvalho Chehab * 49a0bf528SMauro Carvalho Chehab * Copyright (C) 2008 Oliver Endriss <o.endriss@gmx.de> 59a0bf528SMauro Carvalho Chehab * 69a0bf528SMauro Carvalho Chehab * 79a0bf528SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or 89a0bf528SMauro Carvalho Chehab * modify it under the terms of the GNU General Public License 99a0bf528SMauro Carvalho Chehab * as published by the Free Software Foundation; either version 2 109a0bf528SMauro Carvalho Chehab * of the License, or (at your option) any later version. 119a0bf528SMauro Carvalho Chehab * 129a0bf528SMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 139a0bf528SMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 149a0bf528SMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 159a0bf528SMauro Carvalho Chehab * GNU General Public License for more details. 169a0bf528SMauro Carvalho Chehab * 179a0bf528SMauro Carvalho Chehab * You should have received a copy of the GNU General Public License 189a0bf528SMauro Carvalho Chehab * along with this program; if not, write to the Free Software 199a0bf528SMauro Carvalho Chehab * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 209a0bf528SMauro Carvalho Chehab * Or, point your browser to http://www.gnu.org/copyleft/gpl.html 219a0bf528SMauro Carvalho Chehab * 229a0bf528SMauro Carvalho Chehab * 23*991ce92fSMauro Carvalho Chehab * The project's page is at https://linuxtv.org 249a0bf528SMauro Carvalho Chehab */ 259a0bf528SMauro Carvalho Chehab 269a0bf528SMauro Carvalho Chehab #ifndef TDHD1_H 279a0bf528SMauro Carvalho Chehab #define TDHD1_H 289a0bf528SMauro Carvalho Chehab 299a0bf528SMauro Carvalho Chehab #include "tda1004x.h" 309a0bf528SMauro Carvalho Chehab 319a0bf528SMauro Carvalho Chehab static int alps_tdhd1_204_request_firmware(struct dvb_frontend *fe, const struct firmware **fw, char *name); 329a0bf528SMauro Carvalho Chehab 339a0bf528SMauro Carvalho Chehab static struct tda1004x_config alps_tdhd1_204a_config = { 349a0bf528SMauro Carvalho Chehab .demod_address = 0x8, 359a0bf528SMauro Carvalho Chehab .invert = 1, 369a0bf528SMauro Carvalho Chehab .invert_oclk = 0, 379a0bf528SMauro Carvalho Chehab .xtal_freq = TDA10046_XTAL_4M, 389a0bf528SMauro Carvalho Chehab .agc_config = TDA10046_AGC_DEFAULT, 399a0bf528SMauro Carvalho Chehab .if_freq = TDA10046_FREQ_3617, 409a0bf528SMauro Carvalho Chehab .request_firmware = alps_tdhd1_204_request_firmware 419a0bf528SMauro Carvalho Chehab }; 429a0bf528SMauro Carvalho Chehab 439a0bf528SMauro Carvalho Chehab static int alps_tdhd1_204a_tuner_set_params(struct dvb_frontend *fe) 449a0bf528SMauro Carvalho Chehab { 459a0bf528SMauro Carvalho Chehab struct dtv_frontend_properties *p = &fe->dtv_property_cache; 469a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c = fe->tuner_priv; 479a0bf528SMauro Carvalho Chehab u8 data[4]; 489a0bf528SMauro Carvalho Chehab struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = sizeof(data) }; 499a0bf528SMauro Carvalho Chehab u32 div; 509a0bf528SMauro Carvalho Chehab 519a0bf528SMauro Carvalho Chehab div = (p->frequency + 36166666) / 166666; 529a0bf528SMauro Carvalho Chehab 539a0bf528SMauro Carvalho Chehab data[0] = (div >> 8) & 0x7f; 549a0bf528SMauro Carvalho Chehab data[1] = div & 0xff; 559a0bf528SMauro Carvalho Chehab data[2] = 0x85; 569a0bf528SMauro Carvalho Chehab 579a0bf528SMauro Carvalho Chehab if (p->frequency >= 174000000 && p->frequency <= 230000000) 589a0bf528SMauro Carvalho Chehab data[3] = 0x02; 599a0bf528SMauro Carvalho Chehab else if (p->frequency >= 470000000 && p->frequency <= 823000000) 609a0bf528SMauro Carvalho Chehab data[3] = 0x0C; 619a0bf528SMauro Carvalho Chehab else if (p->frequency > 823000000 && p->frequency <= 862000000) 629a0bf528SMauro Carvalho Chehab data[3] = 0x8C; 639a0bf528SMauro Carvalho Chehab else 649a0bf528SMauro Carvalho Chehab return -EINVAL; 659a0bf528SMauro Carvalho Chehab 669a0bf528SMauro Carvalho Chehab if (fe->ops.i2c_gate_ctrl) 679a0bf528SMauro Carvalho Chehab fe->ops.i2c_gate_ctrl(fe, 1); 689a0bf528SMauro Carvalho Chehab if (i2c_transfer(i2c, &msg, 1) != 1) 699a0bf528SMauro Carvalho Chehab return -EIO; 709a0bf528SMauro Carvalho Chehab 719a0bf528SMauro Carvalho Chehab return 0; 729a0bf528SMauro Carvalho Chehab } 739a0bf528SMauro Carvalho Chehab 749a0bf528SMauro Carvalho Chehab #endif /* TDHD1_H */ 75