xref: /openbmc/linux/drivers/media/dvb-frontends/stb6100_cfg.h (revision 8f73b481b959dc5fcc04b6ceca6739494ab148dc)
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