1*9a0bf528SMauro Carvalho Chehab /* 2*9a0bf528SMauro Carvalho Chehab TDA8261 8PSK/QPSK tuner driver 3*9a0bf528SMauro Carvalho Chehab Copyright (C) Manu Abraham (abraham.manu@gmail.com) 4*9a0bf528SMauro Carvalho Chehab 5*9a0bf528SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 6*9a0bf528SMauro Carvalho Chehab it under the terms of the GNU General Public License as published by 7*9a0bf528SMauro Carvalho Chehab the Free Software Foundation; either version 2 of the License, or 8*9a0bf528SMauro Carvalho Chehab (at your option) any later version. 9*9a0bf528SMauro Carvalho Chehab 10*9a0bf528SMauro Carvalho Chehab This program is distributed in the hope that it will be useful, 11*9a0bf528SMauro Carvalho Chehab but WITHOUT ANY WARRANTY; without even the implied warranty of 12*9a0bf528SMauro Carvalho Chehab MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*9a0bf528SMauro Carvalho Chehab GNU General Public License for more details. 14*9a0bf528SMauro Carvalho Chehab 15*9a0bf528SMauro Carvalho Chehab You should have received a copy of the GNU General Public License 16*9a0bf528SMauro Carvalho Chehab along with this program; if not, write to the Free Software 17*9a0bf528SMauro Carvalho Chehab Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18*9a0bf528SMauro Carvalho Chehab */ 19*9a0bf528SMauro Carvalho Chehab 20*9a0bf528SMauro Carvalho Chehab static int tda8261_get_frequency(struct dvb_frontend *fe, u32 *frequency) 21*9a0bf528SMauro Carvalho Chehab { 22*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = NULL; 23*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = NULL; 24*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 25*9a0bf528SMauro Carvalho Chehab int err = 0; 26*9a0bf528SMauro Carvalho Chehab 27*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 28*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 29*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 30*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 31*9a0bf528SMauro Carvalho Chehab if (tuner_ops->get_state) { 32*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &t_state)) < 0) { 33*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 34*9a0bf528SMauro Carvalho Chehab return err; 35*9a0bf528SMauro Carvalho Chehab } 36*9a0bf528SMauro Carvalho Chehab *frequency = t_state.frequency; 37*9a0bf528SMauro Carvalho Chehab printk("%s: Frequency=%d\n", __func__, t_state.frequency); 38*9a0bf528SMauro Carvalho Chehab } 39*9a0bf528SMauro Carvalho Chehab return 0; 40*9a0bf528SMauro Carvalho Chehab } 41*9a0bf528SMauro Carvalho Chehab 42*9a0bf528SMauro Carvalho Chehab static int tda8261_set_frequency(struct dvb_frontend *fe, u32 frequency) 43*9a0bf528SMauro Carvalho Chehab { 44*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = NULL; 45*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = NULL; 46*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 47*9a0bf528SMauro Carvalho Chehab int err = 0; 48*9a0bf528SMauro Carvalho Chehab 49*9a0bf528SMauro Carvalho Chehab t_state.frequency = frequency; 50*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 51*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 52*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 53*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 54*9a0bf528SMauro Carvalho Chehab if (tuner_ops->set_state) { 55*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &t_state)) < 0) { 56*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 57*9a0bf528SMauro Carvalho Chehab return err; 58*9a0bf528SMauro Carvalho Chehab } 59*9a0bf528SMauro Carvalho Chehab } 60*9a0bf528SMauro Carvalho Chehab printk("%s: Frequency=%d\n", __func__, t_state.frequency); 61*9a0bf528SMauro Carvalho Chehab return 0; 62*9a0bf528SMauro Carvalho Chehab } 63*9a0bf528SMauro Carvalho Chehab 64*9a0bf528SMauro Carvalho Chehab static int tda8261_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth) 65*9a0bf528SMauro Carvalho Chehab { 66*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = &fe->ops; 67*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 68*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 69*9a0bf528SMauro Carvalho Chehab int err = 0; 70*9a0bf528SMauro Carvalho Chehab 71*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 72*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 73*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 74*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 75*9a0bf528SMauro Carvalho Chehab if (tuner_ops->get_state) { 76*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state)) < 0) { 77*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 78*9a0bf528SMauro Carvalho Chehab return err; 79*9a0bf528SMauro Carvalho Chehab } 80*9a0bf528SMauro Carvalho Chehab *bandwidth = t_state.bandwidth; 81*9a0bf528SMauro Carvalho Chehab } 82*9a0bf528SMauro Carvalho Chehab printk("%s: Bandwidth=%d\n", __func__, t_state.bandwidth); 83*9a0bf528SMauro Carvalho Chehab return 0; 84*9a0bf528SMauro Carvalho Chehab } 85