• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/media/dvb/frontends/
1/*
2	STB6100 Silicon Tuner wrapper
3	Copyright (C)2009 Igor M. Liplianin (liplianin@me.by)
4
5	This program is free software; you can redistribute it and/or modify
6	it under the terms of the GNU General Public License as published by
7	the Free Software Foundation; either version 2 of the License, or
8	(at your option) any later version.
9
10	This program is distributed in the hope that it will be useful,
11	but WITHOUT ANY WARRANTY; without even the implied warranty of
12	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13	GNU General Public License for more details.
14
15	You should have received a copy of the GNU General Public License
16	along with this program; if not, write to the Free Software
17	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*/
19
20static int stb6100_get_freq(struct dvb_frontend *fe, u32 *frequency)
21{
22	struct dvb_frontend_ops	*frontend_ops = NULL;
23	struct dvb_tuner_ops	*tuner_ops = NULL;
24	struct tuner_state	state;
25	int err = 0;
26
27	if (&fe->ops)
28		frontend_ops = &fe->ops;
29	if (&frontend_ops->tuner_ops)
30		tuner_ops = &frontend_ops->tuner_ops;
31	if (tuner_ops->get_state) {
32		if (frontend_ops->i2c_gate_ctrl)
33			frontend_ops->i2c_gate_ctrl(fe, 1);
34
35		err = tuner_ops->get_state(fe, DVBFE_TUNER_FREQUENCY, &state);
36		if (err < 0) {
37			printk(KERN_ERR "%s: Invalid parameter\n", __func__);
38			return err;
39		}
40
41		if (frontend_ops->i2c_gate_ctrl)
42			frontend_ops->i2c_gate_ctrl(fe, 0);
43
44		*frequency = state.frequency;
45	}
46
47	return 0;
48}
49
50static int stb6100_set_freq(struct dvb_frontend *fe, u32 frequency)
51{
52	struct dvb_frontend_ops	*frontend_ops = NULL;
53	struct dvb_tuner_ops	*tuner_ops = NULL;
54	struct tuner_state	state;
55	int err = 0;
56
57	state.frequency = frequency;
58	if (&fe->ops)
59		frontend_ops = &fe->ops;
60	if (&frontend_ops->tuner_ops)
61		tuner_ops = &frontend_ops->tuner_ops;
62	if (tuner_ops->set_state) {
63		if (frontend_ops->i2c_gate_ctrl)
64			frontend_ops->i2c_gate_ctrl(fe, 1);
65
66		err = tuner_ops->set_state(fe, DVBFE_TUNER_FREQUENCY, &state);
67		if (err < 0) {
68			printk(KERN_ERR "%s: Invalid parameter\n", __func__);
69			return err;
70		}
71
72		if (frontend_ops->i2c_gate_ctrl)
73			frontend_ops->i2c_gate_ctrl(fe, 0);
74
75	}
76
77	return 0;
78}
79
80static int stb6100_get_bandw(struct dvb_frontend *fe, u32 *bandwidth)
81{
82	struct dvb_frontend_ops	*frontend_ops = NULL;
83	struct dvb_tuner_ops	*tuner_ops = NULL;
84	struct tuner_state	state;
85	int err = 0;
86
87	if (&fe->ops)
88		frontend_ops = &fe->ops;
89	if (&frontend_ops->tuner_ops)
90		tuner_ops = &frontend_ops->tuner_ops;
91	if (tuner_ops->get_state) {
92		if (frontend_ops->i2c_gate_ctrl)
93			frontend_ops->i2c_gate_ctrl(fe, 1);
94
95		err = tuner_ops->get_state(fe, DVBFE_TUNER_BANDWIDTH, &state);
96		if (err < 0) {
97			printk(KERN_ERR "%s: Invalid parameter\n", __func__);
98			return err;
99		}
100
101		if (frontend_ops->i2c_gate_ctrl)
102			frontend_ops->i2c_gate_ctrl(fe, 0);
103
104		*bandwidth = state.bandwidth;
105	}
106
107	return 0;
108}
109
110static int stb6100_set_bandw(struct dvb_frontend *fe, u32 bandwidth)
111{
112	struct dvb_frontend_ops	*frontend_ops = NULL;
113	struct dvb_tuner_ops	*tuner_ops = NULL;
114	struct tuner_state	state;
115	int err = 0;
116
117	state.bandwidth = bandwidth;
118	if (&fe->ops)
119		frontend_ops = &fe->ops;
120	if (&frontend_ops->tuner_ops)
121		tuner_ops = &frontend_ops->tuner_ops;
122	if (tuner_ops->set_state) {
123		if (frontend_ops->i2c_gate_ctrl)
124			frontend_ops->i2c_gate_ctrl(fe, 1);
125
126		err = tuner_ops->set_state(fe, DVBFE_TUNER_BANDWIDTH, &state);
127		if (err < 0) {
128			printk(KERN_ERR "%s: Invalid parameter\n", __func__);
129			return err;
130		}
131
132		if (frontend_ops->i2c_gate_ctrl)
133			frontend_ops->i2c_gate_ctrl(fe, 0);
134
135	}
136
137	return 0;
138}
139