21 #include <linux/module.h>
23 #include <linux/slab.h>
24 #include <linux/types.h>
28 static int ix2505v_debug;
29 #define dprintk(level, args...) do { \
30 if (ix2505v_debug & level) \
31 printk(KERN_DEBUG "ix2505v: " args); \
34 #define deb_info(args...) dprintk(0x01, args)
35 #define deb_i2c(args...) dprintk(0x02, args)
75 return (ret == 1) ? (
int) b2[0] : -1;
81 { .
addr = state->
config->tuner_address, .flags = 0,
82 .buf =
buf, .len = count },
90 deb_i2c(
"%s: i2c error, ret=%d\n", __func__, ret);
143 if ((frequency < fe->
ops.info.frequency_min)
144 || (frequency > fe->
ops.info.frequency_max))
147 if (state->
config->tuner_gain)
148 gain = (state->
config->tuner_gain < 4)
149 ? state->
config->tuner_gain : 0;
153 if (state->
config->tuner_chargepump)
154 cc = state->
config->tuner_chargepump;
161 div_factor = (frequency * ref) / 40;
162 x = div_factor /
psc;
164 A = ((x - (N * 100)) *
psc) / 100;
166 data[0] = ((gain & 0x3) << 5) | (N >> 3);
167 data[1] = (N << 5) | (A & 0x1f);
168 data[2] = 0x81 | ((cc & 0x3) << 5) ;
170 deb_info(
"Frq=%d x=%d N=%d A=%d\n", frequency, x, N, A);
172 if (frequency <= 1065000)
173 local_osc = (6 << 5) | 2;
174 else if (frequency <= 1170000)
175 local_osc = (7 << 5) | 2;
176 else if (frequency <= 1300000)
177 local_osc = (1 << 5);
178 else if (frequency <= 1445000)
179 local_osc = (2 << 5);
180 else if (frequency <= 1607000)
181 local_osc = (3 << 5);
182 else if (frequency <= 1778000)
183 local_osc = (4 << 5);
184 else if (frequency <= 1942000)
185 local_osc = (5 << 5);
187 local_osc = (6 << 5);
193 else if (b_w <= 12000)
195 else if (b_w <= 14000)
197 else if (b_w <= 16000)
199 else if (b_w <= 18000)
201 else if (b_w <= 20000)
203 else if (b_w <= 22000)
205 else if (b_w <= 24000)
207 else if (b_w <= 26000)
209 else if (b_w <= 28000)
214 deb_info(
"Osc=%x b_w=%x lpf=%x\n", local_osc, b_w, lpf);
215 deb_info(
"Data 0=[%x%x%x%x]\n", data[0], data[1], data[2], data[3]);
217 if (fe->
ops.i2c_gate_ctrl)
218 fe->
ops.i2c_gate_ctrl(fe, 1);
221 ret |= ix2505v_write(state, data, len);
225 if (fe->
ops.i2c_gate_ctrl)
226 fe->
ops.i2c_gate_ctrl(fe, 1);
229 ret |= ix2505v_write(state, &data[2], len);
233 data[2] |= ((lpf >> 2) & 0x3) << 3;
234 data[3] |= (lpf & 0x3) << 2;
236 deb_info(
"Data 2=[%x%x]\n", data[2], data[3]);
238 if (fe->
ops.i2c_gate_ctrl)
239 fe->
ops.i2c_gate_ctrl(fe, 1);
242 ret |= ix2505v_write(state, &data[2], len);
244 if (state->
config->min_delay_ms)
252 static int ix2505v_get_frequency(
struct dvb_frontend *fe,
u32 *frequency)
263 .name =
"Sharp IX2505V (B0017)",
264 .frequency_min = 950000,
265 .frequency_max = 2175000
267 .release = ix2505v_release,
268 .set_params = ix2505v_set_params,
269 .get_frequency = ix2505v_get_frequency,
279 if (
NULL == config) {
280 deb_i2c(
"%s: no config ", __func__);
291 if (state->
config->tuner_write_only) {
292 if (fe->
ops.i2c_gate_ctrl)
293 fe->
ops.i2c_gate_ctrl(fe, 1);
295 ret = ix2505v_read_status_reg(state);
298 deb_i2c(
"%s: No IX2505V found\n", __func__);
302 if (fe->
ops.i2c_gate_ctrl)
303 fe->
ops.i2c_gate_ctrl(fe, 0);
308 memcpy(&fe->
ops.tuner_ops, &ix2505v_tuner_ops,
310 deb_i2c(
"%s: initialization (%s addr=0x%02x) ok\n",