irqchip: brcmstb-l2: Fix error handling of irq_of_parse_and_map
[cascardo/linux.git] / drivers / media / dvb-frontends / ds3000.c
1 /*
2     Montage Technology DS3000 - DVBS/S2 Demodulator driver
3     Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
4
5     Copyright (C) 2009-2012 TurboSight.com
6
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21
22 #include <linux/slab.h>
23 #include <linux/kernel.h>
24 #include <linux/module.h>
25 #include <linux/moduleparam.h>
26 #include <linux/init.h>
27 #include <linux/firmware.h>
28
29 #include "dvb_frontend.h"
30 #include "ts2020.h"
31 #include "ds3000.h"
32
33 static int debug;
34
35 #define dprintk(args...) \
36         do { \
37                 if (debug) \
38                         printk(args); \
39         } while (0)
40
41 /* as of March 2009 current DS3000 firmware version is 1.78 */
42 /* DS3000 FW v1.78 MD5: a32d17910c4f370073f9346e71d34b80 */
43 #define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds3000.fw"
44
45 #define DS3000_SAMPLE_RATE 96000 /* in kHz */
46
47 /* Register values to initialise the demod in DVB-S mode */
48 static u8 ds3000_dvbs_init_tab[] = {
49         0x23, 0x05,
50         0x08, 0x03,
51         0x0c, 0x00,
52         0x21, 0x54,
53         0x25, 0x82,
54         0x27, 0x31,
55         0x30, 0x08,
56         0x31, 0x40,
57         0x32, 0x32,
58         0x33, 0x35,
59         0x35, 0xff,
60         0x3a, 0x00,
61         0x37, 0x10,
62         0x38, 0x10,
63         0x39, 0x02,
64         0x42, 0x60,
65         0x4a, 0x40,
66         0x4b, 0x04,
67         0x4d, 0x91,
68         0x5d, 0xc8,
69         0x50, 0x77,
70         0x51, 0x77,
71         0x52, 0x36,
72         0x53, 0x36,
73         0x56, 0x01,
74         0x63, 0x43,
75         0x64, 0x30,
76         0x65, 0x40,
77         0x68, 0x26,
78         0x69, 0x4c,
79         0x70, 0x20,
80         0x71, 0x70,
81         0x72, 0x04,
82         0x73, 0x00,
83         0x70, 0x40,
84         0x71, 0x70,
85         0x72, 0x04,
86         0x73, 0x00,
87         0x70, 0x60,
88         0x71, 0x70,
89         0x72, 0x04,
90         0x73, 0x00,
91         0x70, 0x80,
92         0x71, 0x70,
93         0x72, 0x04,
94         0x73, 0x00,
95         0x70, 0xa0,
96         0x71, 0x70,
97         0x72, 0x04,
98         0x73, 0x00,
99         0x70, 0x1f,
100         0x76, 0x00,
101         0x77, 0xd1,
102         0x78, 0x0c,
103         0x79, 0x80,
104         0x7f, 0x04,
105         0x7c, 0x00,
106         0x80, 0x86,
107         0x81, 0xa6,
108         0x85, 0x04,
109         0xcd, 0xf4,
110         0x90, 0x33,
111         0xa0, 0x44,
112         0xc0, 0x18,
113         0xc3, 0x10,
114         0xc4, 0x08,
115         0xc5, 0x80,
116         0xc6, 0x80,
117         0xc7, 0x0a,
118         0xc8, 0x1a,
119         0xc9, 0x80,
120         0xfe, 0x92,
121         0xe0, 0xf8,
122         0xe6, 0x8b,
123         0xd0, 0x40,
124         0xf8, 0x20,
125         0xfa, 0x0f,
126         0xfd, 0x20,
127         0xad, 0x20,
128         0xae, 0x07,
129         0xb8, 0x00,
130 };
131
132 /* Register values to initialise the demod in DVB-S2 mode */
133 static u8 ds3000_dvbs2_init_tab[] = {
134         0x23, 0x0f,
135         0x08, 0x07,
136         0x0c, 0x00,
137         0x21, 0x54,
138         0x25, 0x82,
139         0x27, 0x31,
140         0x30, 0x08,
141         0x31, 0x32,
142         0x32, 0x32,
143         0x33, 0x35,
144         0x35, 0xff,
145         0x3a, 0x00,
146         0x37, 0x10,
147         0x38, 0x10,
148         0x39, 0x02,
149         0x42, 0x60,
150         0x4a, 0x80,
151         0x4b, 0x04,
152         0x4d, 0x81,
153         0x5d, 0x88,
154         0x50, 0x36,
155         0x51, 0x36,
156         0x52, 0x36,
157         0x53, 0x36,
158         0x63, 0x60,
159         0x64, 0x10,
160         0x65, 0x10,
161         0x68, 0x04,
162         0x69, 0x29,
163         0x70, 0x20,
164         0x71, 0x70,
165         0x72, 0x04,
166         0x73, 0x00,
167         0x70, 0x40,
168         0x71, 0x70,
169         0x72, 0x04,
170         0x73, 0x00,
171         0x70, 0x60,
172         0x71, 0x70,
173         0x72, 0x04,
174         0x73, 0x00,
175         0x70, 0x80,
176         0x71, 0x70,
177         0x72, 0x04,
178         0x73, 0x00,
179         0x70, 0xa0,
180         0x71, 0x70,
181         0x72, 0x04,
182         0x73, 0x00,
183         0x70, 0x1f,
184         0xa0, 0x44,
185         0xc0, 0x08,
186         0xc1, 0x10,
187         0xc2, 0x08,
188         0xc3, 0x10,
189         0xc4, 0x08,
190         0xc5, 0xf0,
191         0xc6, 0xf0,
192         0xc7, 0x0a,
193         0xc8, 0x1a,
194         0xc9, 0x80,
195         0xca, 0x23,
196         0xcb, 0x24,
197         0xce, 0x74,
198         0x90, 0x03,
199         0x76, 0x80,
200         0x77, 0x42,
201         0x78, 0x0a,
202         0x79, 0x80,
203         0xad, 0x40,
204         0xae, 0x07,
205         0x7f, 0xd4,
206         0x7c, 0x00,
207         0x80, 0xa8,
208         0x81, 0xda,
209         0x7c, 0x01,
210         0x80, 0xda,
211         0x81, 0xec,
212         0x7c, 0x02,
213         0x80, 0xca,
214         0x81, 0xeb,
215         0x7c, 0x03,
216         0x80, 0xba,
217         0x81, 0xdb,
218         0x85, 0x08,
219         0x86, 0x00,
220         0x87, 0x02,
221         0x89, 0x80,
222         0x8b, 0x44,
223         0x8c, 0xaa,
224         0x8a, 0x10,
225         0xba, 0x00,
226         0xf5, 0x04,
227         0xfe, 0x44,
228         0xd2, 0x32,
229         0xb8, 0x00,
230 };
231
232 struct ds3000_state {
233         struct i2c_adapter *i2c;
234         const struct ds3000_config *config;
235         struct dvb_frontend frontend;
236         /* previous uncorrected block counter for DVB-S2 */
237         u16 prevUCBS2;
238 };
239
240 static int ds3000_writereg(struct ds3000_state *state, int reg, int data)
241 {
242         u8 buf[] = { reg, data };
243         struct i2c_msg msg = { .addr = state->config->demod_address,
244                 .flags = 0, .buf = buf, .len = 2 };
245         int err;
246
247         dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
248
249         err = i2c_transfer(state->i2c, &msg, 1);
250         if (err != 1) {
251                 printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
252                          " value == 0x%02x)\n", __func__, err, reg, data);
253                 return -EREMOTEIO;
254         }
255
256         return 0;
257 }
258
259 static int ds3000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
260 {
261         struct ds3000_state *state = fe->demodulator_priv;
262
263         if (enable)
264                 ds3000_writereg(state, 0x03, 0x12);
265         else
266                 ds3000_writereg(state, 0x03, 0x02);
267
268         return 0;
269 }
270
271 /* I2C write for 8k firmware load */
272 static int ds3000_writeFW(struct ds3000_state *state, int reg,
273                                 const u8 *data, u16 len)
274 {
275         int i, ret = 0;
276         struct i2c_msg msg;
277         u8 *buf;
278
279         buf = kmalloc(33, GFP_KERNEL);
280         if (buf == NULL) {
281                 printk(KERN_ERR "Unable to kmalloc\n");
282                 return -ENOMEM;
283         }
284
285         *(buf) = reg;
286
287         msg.addr = state->config->demod_address;
288         msg.flags = 0;
289         msg.buf = buf;
290         msg.len = 33;
291
292         for (i = 0; i < len; i += 32) {
293                 memcpy(buf + 1, data + i, 32);
294
295                 dprintk("%s: write reg 0x%02x, len = %d\n", __func__, reg, len);
296
297                 ret = i2c_transfer(state->i2c, &msg, 1);
298                 if (ret != 1) {
299                         printk(KERN_ERR "%s: write error(err == %i, "
300                                 "reg == 0x%02x\n", __func__, ret, reg);
301                         ret = -EREMOTEIO;
302                         goto error;
303                 }
304         }
305         ret = 0;
306
307 error:
308         kfree(buf);
309
310         return ret;
311 }
312
313 static int ds3000_readreg(struct ds3000_state *state, u8 reg)
314 {
315         int ret;
316         u8 b0[] = { reg };
317         u8 b1[] = { 0 };
318         struct i2c_msg msg[] = {
319                 {
320                         .addr = state->config->demod_address,
321                         .flags = 0,
322                         .buf = b0,
323                         .len = 1
324                 }, {
325                         .addr = state->config->demod_address,
326                         .flags = I2C_M_RD,
327                         .buf = b1,
328                         .len = 1
329                 }
330         };
331
332         ret = i2c_transfer(state->i2c, msg, 2);
333
334         if (ret != 2) {
335                 printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
336                 return ret;
337         }
338
339         dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
340
341         return b1[0];
342 }
343
344 static int ds3000_load_firmware(struct dvb_frontend *fe,
345                                         const struct firmware *fw);
346
347 static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
348 {
349         struct ds3000_state *state = fe->demodulator_priv;
350         const struct firmware *fw;
351         int ret = 0;
352
353         dprintk("%s()\n", __func__);
354
355         ret = ds3000_readreg(state, 0xb2);
356         if (ret < 0)
357                 return ret;
358
359         /* Load firmware */
360         /* request the firmware, this will block until someone uploads it */
361         printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
362                                 DS3000_DEFAULT_FIRMWARE);
363         ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
364                                 state->i2c->dev.parent);
365         printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
366         if (ret) {
367                 printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
368                                 "found?)\n", __func__);
369                 return ret;
370         }
371
372         ret = ds3000_load_firmware(fe, fw);
373         if (ret)
374                 printk("%s: Writing firmware to device failed\n", __func__);
375
376         release_firmware(fw);
377
378         dprintk("%s: Firmware upload %s\n", __func__,
379                         ret == 0 ? "complete" : "failed");
380
381         return ret;
382 }
383
384 static int ds3000_load_firmware(struct dvb_frontend *fe,
385                                         const struct firmware *fw)
386 {
387         struct ds3000_state *state = fe->demodulator_priv;
388         int ret = 0;
389
390         dprintk("%s\n", __func__);
391         dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
392                         fw->size,
393                         fw->data[0],
394                         fw->data[1],
395                         fw->data[fw->size - 2],
396                         fw->data[fw->size - 1]);
397
398         /* Begin the firmware load process */
399         ds3000_writereg(state, 0xb2, 0x01);
400         /* write the entire firmware */
401         ret = ds3000_writeFW(state, 0xb0, fw->data, fw->size);
402         ds3000_writereg(state, 0xb2, 0x00);
403
404         return ret;
405 }
406
407 static int ds3000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
408 {
409         struct ds3000_state *state = fe->demodulator_priv;
410         u8 data;
411
412         dprintk("%s(%d)\n", __func__, voltage);
413
414         data = ds3000_readreg(state, 0xa2);
415         data |= 0x03; /* bit0 V/H, bit1 off/on */
416
417         switch (voltage) {
418         case SEC_VOLTAGE_18:
419                 data &= ~0x03;
420                 break;
421         case SEC_VOLTAGE_13:
422                 data &= ~0x03;
423                 data |= 0x01;
424                 break;
425         case SEC_VOLTAGE_OFF:
426                 break;
427         }
428
429         ds3000_writereg(state, 0xa2, data);
430
431         return 0;
432 }
433
434 static int ds3000_read_status(struct dvb_frontend *fe, fe_status_t* status)
435 {
436         struct ds3000_state *state = fe->demodulator_priv;
437         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
438         int lock;
439
440         *status = 0;
441
442         switch (c->delivery_system) {
443         case SYS_DVBS:
444                 lock = ds3000_readreg(state, 0xd1);
445                 if ((lock & 0x07) == 0x07)
446                         *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
447                                 FE_HAS_VITERBI | FE_HAS_SYNC |
448                                 FE_HAS_LOCK;
449
450                 break;
451         case SYS_DVBS2:
452                 lock = ds3000_readreg(state, 0x0d);
453                 if ((lock & 0x8f) == 0x8f)
454                         *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
455                                 FE_HAS_VITERBI | FE_HAS_SYNC |
456                                 FE_HAS_LOCK;
457
458                 break;
459         default:
460                 return 1;
461         }
462
463         if (state->config->set_lock_led)
464                 state->config->set_lock_led(fe, *status == 0 ? 0 : 1);
465
466         dprintk("%s: status = 0x%02x\n", __func__, lock);
467
468         return 0;
469 }
470
471 /* read DS3000 BER value */
472 static int ds3000_read_ber(struct dvb_frontend *fe, u32* ber)
473 {
474         struct ds3000_state *state = fe->demodulator_priv;
475         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
476         u8 data;
477         u32 ber_reading, lpdc_frames;
478
479         dprintk("%s()\n", __func__);
480
481         switch (c->delivery_system) {
482         case SYS_DVBS:
483                 /* set the number of bytes checked during
484                 BER estimation */
485                 ds3000_writereg(state, 0xf9, 0x04);
486                 /* read BER estimation status */
487                 data = ds3000_readreg(state, 0xf8);
488                 /* check if BER estimation is ready */
489                 if ((data & 0x10) == 0) {
490                         /* this is the number of error bits,
491                         to calculate the bit error rate
492                         divide to 8388608 */
493                         *ber = (ds3000_readreg(state, 0xf7) << 8) |
494                                 ds3000_readreg(state, 0xf6);
495                         /* start counting error bits */
496                         /* need to be set twice
497                         otherwise it fails sometimes */
498                         data |= 0x10;
499                         ds3000_writereg(state, 0xf8, data);
500                         ds3000_writereg(state, 0xf8, data);
501                 } else
502                         /* used to indicate that BER estimation
503                         is not ready, i.e. BER is unknown */
504                         *ber = 0xffffffff;
505                 break;
506         case SYS_DVBS2:
507                 /* read the number of LPDC decoded frames */
508                 lpdc_frames = (ds3000_readreg(state, 0xd7) << 16) |
509                                 (ds3000_readreg(state, 0xd6) << 8) |
510                                 ds3000_readreg(state, 0xd5);
511                 /* read the number of packets with bad CRC */
512                 ber_reading = (ds3000_readreg(state, 0xf8) << 8) |
513                                 ds3000_readreg(state, 0xf7);
514                 if (lpdc_frames > 750) {
515                         /* clear LPDC frame counters */
516                         ds3000_writereg(state, 0xd1, 0x01);
517                         /* clear bad packets counter */
518                         ds3000_writereg(state, 0xf9, 0x01);
519                         /* enable bad packets counter */
520                         ds3000_writereg(state, 0xf9, 0x00);
521                         /* enable LPDC frame counters */
522                         ds3000_writereg(state, 0xd1, 0x00);
523                         *ber = ber_reading;
524                 } else
525                         /* used to indicate that BER estimation is not ready,
526                         i.e. BER is unknown */
527                         *ber = 0xffffffff;
528                 break;
529         default:
530                 return 1;
531         }
532
533         return 0;
534 }
535
536 static int ds3000_read_signal_strength(struct dvb_frontend *fe,
537                                                 u16 *signal_strength)
538 {
539         if (fe->ops.tuner_ops.get_rf_strength)
540                 fe->ops.tuner_ops.get_rf_strength(fe, signal_strength);
541
542         return 0;
543 }
544
545 /* calculate DS3000 snr value in dB */
546 static int ds3000_read_snr(struct dvb_frontend *fe, u16 *snr)
547 {
548         struct ds3000_state *state = fe->demodulator_priv;
549         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
550         u8 snr_reading, snr_value;
551         u32 dvbs2_signal_reading, dvbs2_noise_reading, tmp;
552         static const u16 dvbs_snr_tab[] = { /* 20 x Table (rounded up) */
553                 0x0000, 0x1b13, 0x2aea, 0x3627, 0x3ede, 0x45fe, 0x4c03,
554                 0x513a, 0x55d4, 0x59f2, 0x5dab, 0x6111, 0x6431, 0x6717,
555                 0x69c9, 0x6c4e, 0x6eac, 0x70e8, 0x7304, 0x7505
556         };
557         static const u16 dvbs2_snr_tab[] = { /* 80 x Table (rounded up) */
558                 0x0000, 0x0bc2, 0x12a3, 0x1785, 0x1b4e, 0x1e65, 0x2103,
559                 0x2347, 0x2546, 0x2710, 0x28ae, 0x2a28, 0x2b83, 0x2cc5,
560                 0x2df1, 0x2f09, 0x3010, 0x3109, 0x31f4, 0x32d2, 0x33a6,
561                 0x3470, 0x3531, 0x35ea, 0x369b, 0x3746, 0x37ea, 0x3888,
562                 0x3920, 0x39b3, 0x3a42, 0x3acc, 0x3b51, 0x3bd3, 0x3c51,
563                 0x3ccb, 0x3d42, 0x3db6, 0x3e27, 0x3e95, 0x3f00, 0x3f68,
564                 0x3fcf, 0x4033, 0x4094, 0x40f4, 0x4151, 0x41ac, 0x4206,
565                 0x425e, 0x42b4, 0x4308, 0x435b, 0x43ac, 0x43fc, 0x444a,
566                 0x4497, 0x44e2, 0x452d, 0x4576, 0x45bd, 0x4604, 0x4649,
567                 0x468e, 0x46d1, 0x4713, 0x4755, 0x4795, 0x47d4, 0x4813,
568                 0x4851, 0x488d, 0x48c9, 0x4904, 0x493f, 0x4978, 0x49b1,
569                 0x49e9, 0x4a20, 0x4a57
570         };
571
572         dprintk("%s()\n", __func__);
573
574         switch (c->delivery_system) {
575         case SYS_DVBS:
576                 snr_reading = ds3000_readreg(state, 0xff);
577                 snr_reading /= 8;
578                 if (snr_reading == 0)
579                         *snr = 0x0000;
580                 else {
581                         if (snr_reading > 20)
582                                 snr_reading = 20;
583                         snr_value = dvbs_snr_tab[snr_reading - 1] * 10 / 23026;
584                         /* cook the value to be suitable for szap-s2
585                         human readable output */
586                         *snr = snr_value * 8 * 655;
587                 }
588                 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
589                                 snr_reading, *snr);
590                 break;
591         case SYS_DVBS2:
592                 dvbs2_noise_reading = (ds3000_readreg(state, 0x8c) & 0x3f) +
593                                 (ds3000_readreg(state, 0x8d) << 4);
594                 dvbs2_signal_reading = ds3000_readreg(state, 0x8e);
595                 tmp = dvbs2_signal_reading * dvbs2_signal_reading >> 1;
596                 if (tmp == 0) {
597                         *snr = 0x0000;
598                         return 0;
599                 }
600                 if (dvbs2_noise_reading == 0) {
601                         snr_value = 0x0013;
602                         /* cook the value to be suitable for szap-s2
603                         human readable output */
604                         *snr = 0xffff;
605                         return 0;
606                 }
607                 if (tmp > dvbs2_noise_reading) {
608                         snr_reading = tmp / dvbs2_noise_reading;
609                         if (snr_reading > 80)
610                                 snr_reading = 80;
611                         snr_value = dvbs2_snr_tab[snr_reading - 1] / 1000;
612                         /* cook the value to be suitable for szap-s2
613                         human readable output */
614                         *snr = snr_value * 5 * 655;
615                 } else {
616                         snr_reading = dvbs2_noise_reading / tmp;
617                         if (snr_reading > 80)
618                                 snr_reading = 80;
619                         *snr = -(dvbs2_snr_tab[snr_reading - 1] / 1000);
620                 }
621                 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
622                                 snr_reading, *snr);
623                 break;
624         default:
625                 return 1;
626         }
627
628         return 0;
629 }
630
631 /* read DS3000 uncorrected blocks */
632 static int ds3000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
633 {
634         struct ds3000_state *state = fe->demodulator_priv;
635         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
636         u8 data;
637         u16 _ucblocks;
638
639         dprintk("%s()\n", __func__);
640
641         switch (c->delivery_system) {
642         case SYS_DVBS:
643                 *ucblocks = (ds3000_readreg(state, 0xf5) << 8) |
644                                 ds3000_readreg(state, 0xf4);
645                 data = ds3000_readreg(state, 0xf8);
646                 /* clear packet counters */
647                 data &= ~0x20;
648                 ds3000_writereg(state, 0xf8, data);
649                 /* enable packet counters */
650                 data |= 0x20;
651                 ds3000_writereg(state, 0xf8, data);
652                 break;
653         case SYS_DVBS2:
654                 _ucblocks = (ds3000_readreg(state, 0xe2) << 8) |
655                                 ds3000_readreg(state, 0xe1);
656                 if (_ucblocks > state->prevUCBS2)
657                         *ucblocks = _ucblocks - state->prevUCBS2;
658                 else
659                         *ucblocks = state->prevUCBS2 - _ucblocks;
660                 state->prevUCBS2 = _ucblocks;
661                 break;
662         default:
663                 return 1;
664         }
665
666         return 0;
667 }
668
669 static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
670 {
671         struct ds3000_state *state = fe->demodulator_priv;
672         u8 data;
673
674         dprintk("%s(%d)\n", __func__, tone);
675         if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
676                 printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
677                 return -EINVAL;
678         }
679
680         data = ds3000_readreg(state, 0xa2);
681         data &= ~0xc0;
682         ds3000_writereg(state, 0xa2, data);
683
684         switch (tone) {
685         case SEC_TONE_ON:
686                 dprintk("%s: setting tone on\n", __func__);
687                 data = ds3000_readreg(state, 0xa1);
688                 data &= ~0x43;
689                 data |= 0x04;
690                 ds3000_writereg(state, 0xa1, data);
691                 break;
692         case SEC_TONE_OFF:
693                 dprintk("%s: setting tone off\n", __func__);
694                 data = ds3000_readreg(state, 0xa2);
695                 data |= 0x80;
696                 ds3000_writereg(state, 0xa2, data);
697                 break;
698         }
699
700         return 0;
701 }
702
703 static int ds3000_send_diseqc_msg(struct dvb_frontend *fe,
704                                 struct dvb_diseqc_master_cmd *d)
705 {
706         struct ds3000_state *state = fe->demodulator_priv;
707         int i;
708         u8 data;
709
710         /* Dump DiSEqC message */
711         dprintk("%s(", __func__);
712         for (i = 0 ; i < d->msg_len;) {
713                 dprintk("0x%02x", d->msg[i]);
714                 if (++i < d->msg_len)
715                         dprintk(", ");
716         }
717
718         /* enable DiSEqC message send pin */
719         data = ds3000_readreg(state, 0xa2);
720         data &= ~0xc0;
721         ds3000_writereg(state, 0xa2, data);
722
723         /* DiSEqC message */
724         for (i = 0; i < d->msg_len; i++)
725                 ds3000_writereg(state, 0xa3 + i, d->msg[i]);
726
727         data = ds3000_readreg(state, 0xa1);
728         /* clear DiSEqC message length and status,
729         enable DiSEqC message send */
730         data &= ~0xf8;
731         /* set DiSEqC mode, modulation active during 33 pulses,
732         set DiSEqC message length */
733         data |= ((d->msg_len - 1) << 3) | 0x07;
734         ds3000_writereg(state, 0xa1, data);
735
736         /* wait up to 150ms for DiSEqC transmission to complete */
737         for (i = 0; i < 15; i++) {
738                 data = ds3000_readreg(state, 0xa1);
739                 if ((data & 0x40) == 0)
740                         break;
741                 msleep(10);
742         }
743
744         /* DiSEqC timeout after 150ms */
745         if (i == 15) {
746                 data = ds3000_readreg(state, 0xa1);
747                 data &= ~0x80;
748                 data |= 0x40;
749                 ds3000_writereg(state, 0xa1, data);
750
751                 data = ds3000_readreg(state, 0xa2);
752                 data &= ~0xc0;
753                 data |= 0x80;
754                 ds3000_writereg(state, 0xa2, data);
755
756                 return 1;
757         }
758
759         data = ds3000_readreg(state, 0xa2);
760         data &= ~0xc0;
761         data |= 0x80;
762         ds3000_writereg(state, 0xa2, data);
763
764         return 0;
765 }
766
767 /* Send DiSEqC burst */
768 static int ds3000_diseqc_send_burst(struct dvb_frontend *fe,
769                                         fe_sec_mini_cmd_t burst)
770 {
771         struct ds3000_state *state = fe->demodulator_priv;
772         int i;
773         u8 data;
774
775         dprintk("%s()\n", __func__);
776
777         data = ds3000_readreg(state, 0xa2);
778         data &= ~0xc0;
779         ds3000_writereg(state, 0xa2, data);
780
781         /* DiSEqC burst */
782         if (burst == SEC_MINI_A)
783                 /* Unmodulated tone burst */
784                 ds3000_writereg(state, 0xa1, 0x02);
785         else if (burst == SEC_MINI_B)
786                 /* Modulated tone burst */
787                 ds3000_writereg(state, 0xa1, 0x01);
788         else
789                 return -EINVAL;
790
791         msleep(13);
792         for (i = 0; i < 5; i++) {
793                 data = ds3000_readreg(state, 0xa1);
794                 if ((data & 0x40) == 0)
795                         break;
796                 msleep(1);
797         }
798
799         if (i == 5) {
800                 data = ds3000_readreg(state, 0xa1);
801                 data &= ~0x80;
802                 data |= 0x40;
803                 ds3000_writereg(state, 0xa1, data);
804
805                 data = ds3000_readreg(state, 0xa2);
806                 data &= ~0xc0;
807                 data |= 0x80;
808                 ds3000_writereg(state, 0xa2, data);
809
810                 return 1;
811         }
812
813         data = ds3000_readreg(state, 0xa2);
814         data &= ~0xc0;
815         data |= 0x80;
816         ds3000_writereg(state, 0xa2, data);
817
818         return 0;
819 }
820
821 static void ds3000_release(struct dvb_frontend *fe)
822 {
823         struct ds3000_state *state = fe->demodulator_priv;
824
825         if (state->config->set_lock_led)
826                 state->config->set_lock_led(fe, 0);
827
828         dprintk("%s\n", __func__);
829         kfree(state);
830 }
831
832 static struct dvb_frontend_ops ds3000_ops;
833
834 struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
835                                     struct i2c_adapter *i2c)
836 {
837         struct ds3000_state *state = NULL;
838         int ret;
839
840         dprintk("%s\n", __func__);
841
842         /* allocate memory for the internal state */
843         state = kzalloc(sizeof(struct ds3000_state), GFP_KERNEL);
844         if (state == NULL) {
845                 printk(KERN_ERR "Unable to kmalloc\n");
846                 goto error2;
847         }
848
849         state->config = config;
850         state->i2c = i2c;
851         state->prevUCBS2 = 0;
852
853         /* check if the demod is present */
854         ret = ds3000_readreg(state, 0x00) & 0xfe;
855         if (ret != 0xe0) {
856                 printk(KERN_ERR "Invalid probe, probably not a DS3000\n");
857                 goto error3;
858         }
859
860         printk(KERN_INFO "DS3000 chip version: %d.%d attached.\n",
861                         ds3000_readreg(state, 0x02),
862                         ds3000_readreg(state, 0x01));
863
864         memcpy(&state->frontend.ops, &ds3000_ops,
865                         sizeof(struct dvb_frontend_ops));
866         state->frontend.demodulator_priv = state;
867         return &state->frontend;
868
869 error3:
870         kfree(state);
871 error2:
872         return NULL;
873 }
874 EXPORT_SYMBOL(ds3000_attach);
875
876 static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
877                                         s32 carrier_offset_khz)
878 {
879         struct ds3000_state *state = fe->demodulator_priv;
880         s32 tmp;
881
882         tmp = carrier_offset_khz;
883         tmp *= 65536;
884         tmp = (2 * tmp + DS3000_SAMPLE_RATE) / (2 * DS3000_SAMPLE_RATE);
885
886         if (tmp < 0)
887                 tmp += 65536;
888
889         ds3000_writereg(state, 0x5f, tmp >> 8);
890         ds3000_writereg(state, 0x5e, tmp & 0xff);
891
892         return 0;
893 }
894
895 static int ds3000_set_frontend(struct dvb_frontend *fe)
896 {
897         struct ds3000_state *state = fe->demodulator_priv;
898         struct dtv_frontend_properties *c = &fe->dtv_property_cache;
899
900         int i;
901         fe_status_t status;
902         s32 offset_khz;
903         u32 frequency;
904         u16 value;
905
906         dprintk("%s() ", __func__);
907
908         if (state->config->set_ts_params)
909                 state->config->set_ts_params(fe, 0);
910         /* Tune */
911         if (fe->ops.tuner_ops.set_params)
912                 fe->ops.tuner_ops.set_params(fe);
913
914         /* ds3000 global reset */
915         ds3000_writereg(state, 0x07, 0x80);
916         ds3000_writereg(state, 0x07, 0x00);
917         /* ds3000 build-in uC reset */
918         ds3000_writereg(state, 0xb2, 0x01);
919         /* ds3000 software reset */
920         ds3000_writereg(state, 0x00, 0x01);
921
922         switch (c->delivery_system) {
923         case SYS_DVBS:
924                 /* initialise the demod in DVB-S mode */
925                 for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
926                         ds3000_writereg(state,
927                                 ds3000_dvbs_init_tab[i],
928                                 ds3000_dvbs_init_tab[i + 1]);
929                 value = ds3000_readreg(state, 0xfe);
930                 value &= 0xc0;
931                 value |= 0x1b;
932                 ds3000_writereg(state, 0xfe, value);
933                 break;
934         case SYS_DVBS2:
935                 /* initialise the demod in DVB-S2 mode */
936                 for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
937                         ds3000_writereg(state,
938                                 ds3000_dvbs2_init_tab[i],
939                                 ds3000_dvbs2_init_tab[i + 1]);
940                 if (c->symbol_rate >= 30000000)
941                         ds3000_writereg(state, 0xfe, 0x54);
942                 else
943                         ds3000_writereg(state, 0xfe, 0x98);
944                 break;
945         default:
946                 return 1;
947         }
948
949         /* enable 27MHz clock output */
950         ds3000_writereg(state, 0x29, 0x80);
951         /* enable ac coupling */
952         ds3000_writereg(state, 0x25, 0x8a);
953
954         /* enhance symbol rate performance */
955         if ((c->symbol_rate / 1000) <= 5000) {
956                 value = 29777 / (c->symbol_rate / 1000) + 1;
957                 if (value % 2 != 0)
958                         value++;
959                 ds3000_writereg(state, 0xc3, 0x0d);
960                 ds3000_writereg(state, 0xc8, value);
961                 ds3000_writereg(state, 0xc4, 0x10);
962                 ds3000_writereg(state, 0xc7, 0x0e);
963         } else if ((c->symbol_rate / 1000) <= 10000) {
964                 value = 92166 / (c->symbol_rate / 1000) + 1;
965                 if (value % 2 != 0)
966                         value++;
967                 ds3000_writereg(state, 0xc3, 0x07);
968                 ds3000_writereg(state, 0xc8, value);
969                 ds3000_writereg(state, 0xc4, 0x09);
970                 ds3000_writereg(state, 0xc7, 0x12);
971         } else if ((c->symbol_rate / 1000) <= 20000) {
972                 value = 64516 / (c->symbol_rate / 1000) + 1;
973                 ds3000_writereg(state, 0xc3, value);
974                 ds3000_writereg(state, 0xc8, 0x0e);
975                 ds3000_writereg(state, 0xc4, 0x07);
976                 ds3000_writereg(state, 0xc7, 0x18);
977         } else {
978                 value = 129032 / (c->symbol_rate / 1000) + 1;
979                 ds3000_writereg(state, 0xc3, value);
980                 ds3000_writereg(state, 0xc8, 0x0a);
981                 ds3000_writereg(state, 0xc4, 0x05);
982                 ds3000_writereg(state, 0xc7, 0x24);
983         }
984
985         /* normalized symbol rate rounded to the closest integer */
986         value = (((c->symbol_rate / 1000) << 16) +
987                         (DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
988         ds3000_writereg(state, 0x61, value & 0x00ff);
989         ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
990
991         /* co-channel interference cancellation disabled */
992         ds3000_writereg(state, 0x56, 0x00);
993
994         /* equalizer disabled */
995         ds3000_writereg(state, 0x76, 0x00);
996
997         /*ds3000_writereg(state, 0x08, 0x03);
998         ds3000_writereg(state, 0xfd, 0x22);
999         ds3000_writereg(state, 0x08, 0x07);
1000         ds3000_writereg(state, 0xfd, 0x42);
1001         ds3000_writereg(state, 0x08, 0x07);*/
1002
1003         if (state->config->ci_mode) {
1004                 switch (c->delivery_system) {
1005                 case SYS_DVBS:
1006                 default:
1007                         ds3000_writereg(state, 0xfd, 0x80);
1008                 break;
1009                 case SYS_DVBS2:
1010                         ds3000_writereg(state, 0xfd, 0x01);
1011                         break;
1012                 }
1013         }
1014
1015         /* ds3000 out of software reset */
1016         ds3000_writereg(state, 0x00, 0x00);
1017         /* start ds3000 build-in uC */
1018         ds3000_writereg(state, 0xb2, 0x00);
1019
1020         if (fe->ops.tuner_ops.get_frequency) {
1021                 fe->ops.tuner_ops.get_frequency(fe, &frequency);
1022                 offset_khz = frequency - c->frequency;
1023                 ds3000_set_carrier_offset(fe, offset_khz);
1024         }
1025
1026         for (i = 0; i < 30 ; i++) {
1027                 ds3000_read_status(fe, &status);
1028                 if (status & FE_HAS_LOCK)
1029                         break;
1030
1031                 msleep(10);
1032         }
1033
1034         return 0;
1035 }
1036
1037 static int ds3000_tune(struct dvb_frontend *fe,
1038                         bool re_tune,
1039                         unsigned int mode_flags,
1040                         unsigned int *delay,
1041                         fe_status_t *status)
1042 {
1043         if (re_tune) {
1044                 int ret = ds3000_set_frontend(fe);
1045                 if (ret)
1046                         return ret;
1047         }
1048
1049         *delay = HZ / 5;
1050
1051         return ds3000_read_status(fe, status);
1052 }
1053
1054 static enum dvbfe_algo ds3000_get_algo(struct dvb_frontend *fe)
1055 {
1056         struct ds3000_state *state = fe->demodulator_priv;
1057
1058         if (state->config->set_lock_led)
1059                 state->config->set_lock_led(fe, 0);
1060
1061         dprintk("%s()\n", __func__);
1062         return DVBFE_ALGO_HW;
1063 }
1064
1065 /*
1066  * Initialise or wake up device
1067  *
1068  * Power config will reset and load initial firmware if required
1069  */
1070 static int ds3000_initfe(struct dvb_frontend *fe)
1071 {
1072         struct ds3000_state *state = fe->demodulator_priv;
1073         int ret;
1074
1075         dprintk("%s()\n", __func__);
1076         /* hard reset */
1077         ds3000_writereg(state, 0x08, 0x01 | ds3000_readreg(state, 0x08));
1078         msleep(1);
1079
1080         /* Load the firmware if required */
1081         ret = ds3000_firmware_ondemand(fe);
1082         if (ret != 0) {
1083                 printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
1084                 return ret;
1085         }
1086
1087         return 0;
1088 }
1089
1090 static struct dvb_frontend_ops ds3000_ops = {
1091         .delsys = { SYS_DVBS, SYS_DVBS2 },
1092         .info = {
1093                 .name = "Montage Technology DS3000",
1094                 .frequency_min = 950000,
1095                 .frequency_max = 2150000,
1096                 .frequency_stepsize = 1011, /* kHz for QPSK frontends */
1097                 .frequency_tolerance = 5000,
1098                 .symbol_rate_min = 1000000,
1099                 .symbol_rate_max = 45000000,
1100                 .caps = FE_CAN_INVERSION_AUTO |
1101                         FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1102                         FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
1103                         FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1104                         FE_CAN_2G_MODULATION |
1105                         FE_CAN_QPSK | FE_CAN_RECOVER
1106         },
1107
1108         .release = ds3000_release,
1109
1110         .init = ds3000_initfe,
1111         .i2c_gate_ctrl = ds3000_i2c_gate_ctrl,
1112         .read_status = ds3000_read_status,
1113         .read_ber = ds3000_read_ber,
1114         .read_signal_strength = ds3000_read_signal_strength,
1115         .read_snr = ds3000_read_snr,
1116         .read_ucblocks = ds3000_read_ucblocks,
1117         .set_voltage = ds3000_set_voltage,
1118         .set_tone = ds3000_set_tone,
1119         .diseqc_send_master_cmd = ds3000_send_diseqc_msg,
1120         .diseqc_send_burst = ds3000_diseqc_send_burst,
1121         .get_frontend_algo = ds3000_get_algo,
1122
1123         .set_frontend = ds3000_set_frontend,
1124         .tune = ds3000_tune,
1125 };
1126
1127 module_param(debug, int, 0644);
1128 MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
1129
1130 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
1131                         "DS3000 hardware");
1132 MODULE_AUTHOR("Konstantin Dimitrov <kosio.dimitrov@gmail.com>");
1133 MODULE_LICENSE("GPL");
1134 MODULE_FIRMWARE(DS3000_DEFAULT_FIRMWARE);