1*9a0bf528SMauro Carvalho Chehab /* 2*9a0bf528SMauro Carvalho Chehab STB6100 Silicon Tuner 3*9a0bf528SMauro Carvalho Chehab Copyright (C) Manu Abraham (abraham.manu@gmail.com) 4*9a0bf528SMauro Carvalho Chehab 5*9a0bf528SMauro Carvalho Chehab Copyright (C) ST Microelectronics 6*9a0bf528SMauro Carvalho Chehab 7*9a0bf528SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 8*9a0bf528SMauro Carvalho Chehab it under the terms of the GNU General Public License as published by 9*9a0bf528SMauro Carvalho Chehab the Free Software Foundation; either version 2 of the License, or 10*9a0bf528SMauro Carvalho Chehab (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., 675 Mass Ave, Cambridge, MA 02139, USA. 20*9a0bf528SMauro Carvalho Chehab */ 21*9a0bf528SMauro Carvalho Chehab 22*9a0bf528SMauro Carvalho Chehab static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency) 23*9a0bf528SMauro Carvalho Chehab { 24*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = NULL; 25*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = NULL; 26*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 27*9a0bf528SMauro Carvalho Chehab int err = 0; 28*9a0bf528SMauro Carvalho Chehab 29*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 30*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 31*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 32*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 33*9a0bf528SMauro Carvalho Chehab if (tuner_ops->get_state) { 34*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &t_state)) < 0) { 35*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 36*9a0bf528SMauro Carvalho Chehab return err; 37*9a0bf528SMauro Carvalho Chehab } 38*9a0bf528SMauro Carvalho Chehab *frequency = t_state.frequency; 39*9a0bf528SMauro Carvalho Chehab } 40*9a0bf528SMauro Carvalho Chehab return 0; 41*9a0bf528SMauro Carvalho Chehab } 42*9a0bf528SMauro Carvalho Chehab 43*9a0bf528SMauro Carvalho Chehab static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency) 44*9a0bf528SMauro Carvalho Chehab { 45*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = NULL; 46*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = NULL; 47*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 48*9a0bf528SMauro Carvalho Chehab int err = 0; 49*9a0bf528SMauro Carvalho Chehab 50*9a0bf528SMauro Carvalho Chehab t_state.frequency = frequency; 51*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 52*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 53*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 54*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 55*9a0bf528SMauro Carvalho Chehab if (tuner_ops->set_state) { 56*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &t_state)) < 0) { 57*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 58*9a0bf528SMauro Carvalho Chehab return err; 59*9a0bf528SMauro Carvalho Chehab } 60*9a0bf528SMauro Carvalho Chehab } 61*9a0bf528SMauro Carvalho Chehab return 0; 62*9a0bf528SMauro Carvalho Chehab } 63*9a0bf528SMauro Carvalho Chehab 64*9a0bf528SMauro Carvalho Chehab static int stb6100_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 return 0; 83*9a0bf528SMauro Carvalho Chehab } 84*9a0bf528SMauro Carvalho Chehab 85*9a0bf528SMauro Carvalho Chehab static int stb6100_set_bandwidth(struct dvb_frontend *fe, u32 bandwidth) 86*9a0bf528SMauro Carvalho Chehab { 87*9a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = NULL; 88*9a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = NULL; 89*9a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 90*9a0bf528SMauro Carvalho Chehab int err = 0; 91*9a0bf528SMauro Carvalho Chehab 92*9a0bf528SMauro Carvalho Chehab t_state.bandwidth = bandwidth; 93*9a0bf528SMauro Carvalho Chehab if (&fe->ops) 94*9a0bf528SMauro Carvalho Chehab frontend_ops = &fe->ops; 95*9a0bf528SMauro Carvalho Chehab if (&frontend_ops->tuner_ops) 96*9a0bf528SMauro Carvalho Chehab tuner_ops = &frontend_ops->tuner_ops; 97*9a0bf528SMauro Carvalho Chehab if (tuner_ops->set_state) { 98*9a0bf528SMauro Carvalho Chehab if ((err = tuner_ops->set_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state)) < 0) { 99*9a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 100*9a0bf528SMauro Carvalho Chehab return err; 101*9a0bf528SMauro Carvalho Chehab } 102*9a0bf528SMauro Carvalho Chehab } 103*9a0bf528SMauro Carvalho Chehab return 0; 104*9a0bf528SMauro Carvalho Chehab } 105