xref: /openbmc/linux/drivers/media/dvb-frontends/stb6100_cfg.h (revision 65f0f686de9fcbad7dadcedae94de77ab8b558b7)
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 
22*65f0f686SMauro Carvalho Chehab #include <linux/dvb/frontend.h>
23*65f0f686SMauro Carvalho Chehab #include "dvb_frontend.h"
24*65f0f686SMauro Carvalho Chehab 
259a0bf528SMauro Carvalho Chehab static int stb6100_get_frequency(struct dvb_frontend *fe, u32 *frequency)
269a0bf528SMauro Carvalho Chehab {
2720721185SEmil Goode 	struct dvb_frontend_ops	*frontend_ops = &fe->ops;
2820721185SEmil Goode 	struct dvb_tuner_ops	*tuner_ops = &frontend_ops->tuner_ops;
299a0bf528SMauro Carvalho Chehab 	int err = 0;
309a0bf528SMauro Carvalho Chehab 
31*65f0f686SMauro Carvalho Chehab 	if (tuner_ops->get_frequency) {
32*65f0f686SMauro Carvalho Chehab 		err = tuner_ops->get_frequency(fe, frequency);
338f73b481SEmil Goode 		if (err < 0) {
349a0bf528SMauro Carvalho Chehab 			printk("%s: Invalid parameter\n", __func__);
359a0bf528SMauro Carvalho Chehab 			return err;
369a0bf528SMauro Carvalho Chehab 		}
379a0bf528SMauro Carvalho Chehab 	}
389a0bf528SMauro Carvalho Chehab 	return 0;
399a0bf528SMauro Carvalho Chehab }
409a0bf528SMauro Carvalho Chehab 
419a0bf528SMauro Carvalho Chehab static int stb6100_set_frequency(struct dvb_frontend *fe, u32 frequency)
429a0bf528SMauro Carvalho Chehab {
4320721185SEmil Goode 	struct dvb_frontend_ops	*frontend_ops = &fe->ops;
4420721185SEmil Goode 	struct dvb_tuner_ops	*tuner_ops = &frontend_ops->tuner_ops;
45*65f0f686SMauro Carvalho Chehab 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
46*65f0f686SMauro Carvalho Chehab 	u32 bw = c->bandwidth_hz;
479a0bf528SMauro Carvalho Chehab 	int err = 0;
489a0bf528SMauro Carvalho Chehab 
49*65f0f686SMauro Carvalho Chehab 	c->frequency = frequency;
50*65f0f686SMauro Carvalho Chehab 	c->bandwidth_hz = 0;		/* Don't adjust the bandwidth */
5120721185SEmil Goode 
52*65f0f686SMauro Carvalho Chehab 	if (tuner_ops->set_params) {
53*65f0f686SMauro Carvalho Chehab 		err = tuner_ops->set_params(fe);
54*65f0f686SMauro Carvalho Chehab 		c->bandwidth_hz = bw;
558f73b481SEmil Goode 		if (err < 0) {
569a0bf528SMauro Carvalho Chehab 			printk("%s: Invalid parameter\n", __func__);
579a0bf528SMauro Carvalho Chehab 			return err;
589a0bf528SMauro Carvalho Chehab 		}
599a0bf528SMauro Carvalho Chehab 	}
609a0bf528SMauro Carvalho Chehab 	return 0;
619a0bf528SMauro Carvalho Chehab }
629a0bf528SMauro Carvalho Chehab 
639a0bf528SMauro Carvalho Chehab static int stb6100_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
649a0bf528SMauro Carvalho Chehab {
659a0bf528SMauro Carvalho Chehab 	struct dvb_frontend_ops	*frontend_ops = &fe->ops;
669a0bf528SMauro Carvalho Chehab 	struct dvb_tuner_ops	*tuner_ops = &frontend_ops->tuner_ops;
679a0bf528SMauro Carvalho Chehab 	int err = 0;
689a0bf528SMauro Carvalho Chehab 
69*65f0f686SMauro Carvalho Chehab 	if (tuner_ops->get_bandwidth) {
70*65f0f686SMauro Carvalho Chehab 		err = tuner_ops->get_bandwidth(fe, bandwidth);
718f73b481SEmil Goode 		if (err < 0) {
729a0bf528SMauro Carvalho Chehab 			printk("%s: Invalid parameter\n", __func__);
739a0bf528SMauro Carvalho Chehab 			return err;
749a0bf528SMauro Carvalho Chehab 		}
759a0bf528SMauro Carvalho Chehab 	}
769a0bf528SMauro Carvalho Chehab 	return 0;
779a0bf528SMauro Carvalho Chehab }
789a0bf528SMauro Carvalho Chehab 
799a0bf528SMauro Carvalho Chehab static int stb6100_set_bandwidth(struct dvb_frontend *fe, u32 bandwidth)
809a0bf528SMauro Carvalho Chehab {
8120721185SEmil Goode 	struct dvb_frontend_ops	*frontend_ops = &fe->ops;
8220721185SEmil Goode 	struct dvb_tuner_ops	*tuner_ops = &frontend_ops->tuner_ops;
83*65f0f686SMauro Carvalho Chehab 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
84*65f0f686SMauro Carvalho Chehab 	u32 freq = c->frequency;
859a0bf528SMauro Carvalho Chehab 	int err = 0;
869a0bf528SMauro Carvalho Chehab 
87*65f0f686SMauro Carvalho Chehab 	c->bandwidth_hz = bandwidth;
88*65f0f686SMauro Carvalho Chehab 	c->frequency = 0;		/* Don't adjust the frequency */
8920721185SEmil Goode 
90*65f0f686SMauro Carvalho Chehab 	if (tuner_ops->set_params) {
91*65f0f686SMauro Carvalho Chehab 		err = tuner_ops->set_params(fe);
92*65f0f686SMauro Carvalho Chehab 		c->frequency = freq;
938f73b481SEmil Goode 		if (err < 0) {
949a0bf528SMauro Carvalho Chehab 			printk("%s: Invalid parameter\n", __func__);
959a0bf528SMauro Carvalho Chehab 			return err;
969a0bf528SMauro Carvalho Chehab 		}
979a0bf528SMauro Carvalho Chehab 	}
989a0bf528SMauro Carvalho Chehab 	return 0;
999a0bf528SMauro Carvalho Chehab }
100