Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stb6100_proc.h
Go to the documentation of this file.
1 /*
2  STB6100 Silicon Tuner wrapper
3  Copyright (C)2009 Igor M. Liplianin ([email protected])
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 
20 static 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 
50 static 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 
80 static 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 
110 static 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 }