19a0bf528SMauro Carvalho Chehab /* 29a0bf528SMauro Carvalho Chehab STB6100 Silicon Tuner 39a0bf528SMauro Carvalho Chehab Copyright (C) Manu Abraham (abraham.manu@gmail.com) 49a0bf528SMauro Carvalho Chehab 59a0bf528SMauro Carvalho Chehab Copyright (C) ST Microelectronics 69a0bf528SMauro Carvalho Chehab 79a0bf528SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 89a0bf528SMauro Carvalho Chehab it under the terms of the GNU General Public License as published by 99a0bf528SMauro Carvalho Chehab the Free Software Foundation; either version 2 of the License, or 109a0bf528SMauro Carvalho Chehab (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., 675 Mass Ave, Cambridge, MA 02139, USA. 209a0bf528SMauro Carvalho Chehab */ 219a0bf528SMauro Carvalho Chehab 229a0bf528SMauro Carvalho Chehab static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency) 239a0bf528SMauro Carvalho Chehab { 2420721185SEmil Goode struct dvb_frontend_ops *frontend_ops = &fe->ops; 2520721185SEmil Goode struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 269a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 279a0bf528SMauro Carvalho Chehab int err = 0; 289a0bf528SMauro Carvalho Chehab 299a0bf528SMauro Carvalho Chehab if (tuner_ops->get_state) { 30*8f73b481SEmil Goode err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &t_state); 31*8f73b481SEmil Goode if (err < 0) { 329a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 339a0bf528SMauro Carvalho Chehab return err; 349a0bf528SMauro Carvalho Chehab } 359a0bf528SMauro Carvalho Chehab *frequency = t_state.frequency; 369a0bf528SMauro Carvalho Chehab } 379a0bf528SMauro Carvalho Chehab return 0; 389a0bf528SMauro Carvalho Chehab } 399a0bf528SMauro Carvalho Chehab 409a0bf528SMauro Carvalho Chehab static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency) 419a0bf528SMauro Carvalho Chehab { 4220721185SEmil Goode struct dvb_frontend_ops *frontend_ops = &fe->ops; 4320721185SEmil Goode struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 449a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 459a0bf528SMauro Carvalho Chehab int err = 0; 469a0bf528SMauro Carvalho Chehab 479a0bf528SMauro Carvalho Chehab t_state.frequency = frequency; 4820721185SEmil Goode 499a0bf528SMauro Carvalho Chehab if (tuner_ops->set_state) { 50*8f73b481SEmil Goode err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &t_state); 51*8f73b481SEmil Goode if (err < 0) { 529a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 539a0bf528SMauro Carvalho Chehab return err; 549a0bf528SMauro Carvalho Chehab } 559a0bf528SMauro Carvalho Chehab } 569a0bf528SMauro Carvalho Chehab return 0; 579a0bf528SMauro Carvalho Chehab } 589a0bf528SMauro Carvalho Chehab 599a0bf528SMauro Carvalho Chehab static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth) 609a0bf528SMauro Carvalho Chehab { 619a0bf528SMauro Carvalho Chehab struct dvb_frontend_ops *frontend_ops = &fe->ops; 629a0bf528SMauro Carvalho Chehab struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 639a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 649a0bf528SMauro Carvalho Chehab int err = 0; 659a0bf528SMauro Carvalho Chehab 669a0bf528SMauro Carvalho Chehab if (tuner_ops->get_state) { 67*8f73b481SEmil Goode err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state); 68*8f73b481SEmil Goode if (err < 0) { 699a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 709a0bf528SMauro Carvalho Chehab return err; 719a0bf528SMauro Carvalho Chehab } 729a0bf528SMauro Carvalho Chehab *bandwidth = t_state.bandwidth; 739a0bf528SMauro Carvalho Chehab } 749a0bf528SMauro Carvalho Chehab return 0; 759a0bf528SMauro Carvalho Chehab } 769a0bf528SMauro Carvalho Chehab 779a0bf528SMauro Carvalho Chehab static int stb6100_set_bandwidth(struct dvb_frontend *fe, u32 bandwidth) 789a0bf528SMauro Carvalho Chehab { 7920721185SEmil Goode struct dvb_frontend_ops *frontend_ops = &fe->ops; 8020721185SEmil Goode struct dvb_tuner_ops *tuner_ops = &frontend_ops->tuner_ops; 819a0bf528SMauro Carvalho Chehab struct tuner_state t_state; 829a0bf528SMauro Carvalho Chehab int err = 0; 839a0bf528SMauro Carvalho Chehab 849a0bf528SMauro Carvalho Chehab t_state.bandwidth = bandwidth; 8520721185SEmil Goode 869a0bf528SMauro Carvalho Chehab if (tuner_ops->set_state) { 87*8f73b481SEmil Goode err = tuner_ops->set_state(fe, DVBFE_TUNER_BANDWIDTH, &t_state); 88*8f73b481SEmil Goode if (err < 0) { 899a0bf528SMauro Carvalho Chehab printk("%s: Invalid parameter\n", __func__); 909a0bf528SMauro Carvalho Chehab return err; 919a0bf528SMauro Carvalho Chehab } 929a0bf528SMauro Carvalho Chehab } 939a0bf528SMauro Carvalho Chehab return 0; 949a0bf528SMauro Carvalho Chehab } 95