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