Merge branch 'next' into for-linus-3.0
[pandora-kernel.git] / drivers / media / radio / si4713-i2c.c
1 /*
2  * drivers/media/radio/si4713-i2c.c
3  *
4  * Silicon Labs Si4713 FM Radio Transmitter I2C commands.
5  *
6  * Copyright (c) 2009 Nokia Corporation
7  * Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23
24 #include <linux/mutex.h>
25 #include <linux/completion.h>
26 #include <linux/delay.h>
27 #include <linux/interrupt.h>
28 #include <linux/i2c.h>
29 #include <linux/slab.h>
30 #include <linux/gpio.h>
31 #include <linux/regulator/consumer.h>
32 #include <media/v4l2-device.h>
33 #include <media/v4l2-ioctl.h>
34 #include <media/v4l2-common.h>
35
36 #include "si4713-i2c.h"
37
38 /* module parameters */
39 static int debug;
40 module_param(debug, int, S_IRUGO | S_IWUSR);
41 MODULE_PARM_DESC(debug, "Debug level (0 - 2)");
42
43 MODULE_LICENSE("GPL");
44 MODULE_AUTHOR("Eduardo Valentin <eduardo.valentin@nokia.com>");
45 MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter");
46 MODULE_VERSION("0.0.1");
47
48 static const char *si4713_supply_names[SI4713_NUM_SUPPLIES] = {
49         "vio",
50         "vdd",
51 };
52
53 #define DEFAULT_RDS_PI                  0x00
54 #define DEFAULT_RDS_PTY                 0x00
55 #define DEFAULT_RDS_PS_NAME             ""
56 #define DEFAULT_RDS_RADIO_TEXT          DEFAULT_RDS_PS_NAME
57 #define DEFAULT_RDS_DEVIATION           0x00C8
58 #define DEFAULT_RDS_PS_REPEAT_COUNT     0x0003
59 #define DEFAULT_LIMITER_RTIME           0x1392
60 #define DEFAULT_LIMITER_DEV             0x102CA
61 #define DEFAULT_PILOT_FREQUENCY         0x4A38
62 #define DEFAULT_PILOT_DEVIATION         0x1A5E
63 #define DEFAULT_ACOMP_ATIME             0x0000
64 #define DEFAULT_ACOMP_RTIME             0xF4240L
65 #define DEFAULT_ACOMP_GAIN              0x0F
66 #define DEFAULT_ACOMP_THRESHOLD         (-0x28)
67 #define DEFAULT_MUTE                    0x01
68 #define DEFAULT_POWER_LEVEL             88
69 #define DEFAULT_FREQUENCY               8800
70 #define DEFAULT_PREEMPHASIS             FMPE_EU
71 #define DEFAULT_TUNE_RNL                0xFF
72
73 #define to_si4713_device(sd)    container_of(sd, struct si4713_device, sd)
74
75 /* frequency domain transformation (using times 10 to avoid floats) */
76 #define FREQDEV_UNIT    100000
77 #define FREQV4L2_MULTI  625
78 #define si4713_to_v4l2(f)       ((f * FREQDEV_UNIT) / FREQV4L2_MULTI)
79 #define v4l2_to_si4713(f)       ((f * FREQV4L2_MULTI) / FREQDEV_UNIT)
80 #define FREQ_RANGE_LOW                  7600
81 #define FREQ_RANGE_HIGH                 10800
82
83 #define MAX_ARGS 7
84
85 #define RDS_BLOCK                       8
86 #define RDS_BLOCK_CLEAR                 0x03
87 #define RDS_BLOCK_LOAD                  0x04
88 #define RDS_RADIOTEXT_2A                0x20
89 #define RDS_RADIOTEXT_BLK_SIZE          4
90 #define RDS_RADIOTEXT_INDEX_MAX         0x0F
91 #define RDS_CARRIAGE_RETURN             0x0D
92
93 #define rds_ps_nblocks(len)     ((len / RDS_BLOCK) + (len % RDS_BLOCK ? 1 : 0))
94
95 #define get_status_bit(p, b, m) (((p) & (m)) >> (b))
96 #define set_bits(p, v, b, m)    (((p) & ~(m)) | ((v) << (b)))
97
98 #define ATTACK_TIME_UNIT        500
99
100 #define POWER_OFF                       0x00
101 #define POWER_ON                        0x01
102
103 #define msb(x)                  ((u8)((u16) x >> 8))
104 #define lsb(x)                  ((u8)((u16) x &  0x00FF))
105 #define compose_u16(msb, lsb)   (((u16)msb << 8) | lsb)
106 #define check_command_failed(status)    (!(status & SI4713_CTS) || \
107                                         (status & SI4713_ERR))
108 /* mute definition */
109 #define set_mute(p)     ((p & 1) | ((p & 1) << 1));
110 #define get_mute(p)     (p & 0x01)
111
112 #ifdef DEBUG
113 #define DBG_BUFFER(device, message, buffer, size)                       \
114         {                                                               \
115                 int i;                                                  \
116                 char str[(size)*5];                                     \
117                 for (i = 0; i < size; i++)                              \
118                         sprintf(str + i * 5, " 0x%02x", buffer[i]);     \
119                 v4l2_dbg(2, debug, device, "%s:%s\n", message, str);    \
120         }
121 #else
122 #define DBG_BUFFER(device, message, buffer, size)
123 #endif
124
125 /*
126  * Values for limiter release time (sorted by second column)
127  *      device  release
128  *      value   time (us)
129  */
130 static long limiter_times[] = {
131         2000,   250,
132         1000,   500,
133         510,    1000,
134         255,    2000,
135         170,    3000,
136         127,    4020,
137         102,    5010,
138         85,     6020,
139         73,     7010,
140         64,     7990,
141         57,     8970,
142         51,     10030,
143         25,     20470,
144         17,     30110,
145         13,     39380,
146         10,     51190,
147         8,      63690,
148         7,      73140,
149         6,      85330,
150         5,      102390,
151 };
152
153 /*
154  * Values for audio compression release time (sorted by second column)
155  *      device  release
156  *      value   time (us)
157  */
158 static unsigned long acomp_rtimes[] = {
159         0,      100000,
160         1,      200000,
161         2,      350000,
162         3,      525000,
163         4,      1000000,
164 };
165
166 /*
167  * Values for preemphasis (sorted by second column)
168  *      device  preemphasis
169  *      value   value (v4l2)
170  */
171 static unsigned long preemphasis_values[] = {
172         FMPE_DISABLED,  V4L2_PREEMPHASIS_DISABLED,
173         FMPE_EU,        V4L2_PREEMPHASIS_50_uS,
174         FMPE_USA,       V4L2_PREEMPHASIS_75_uS,
175 };
176
177 static int usecs_to_dev(unsigned long usecs, unsigned long const array[],
178                         int size)
179 {
180         int i;
181         int rval = -EINVAL;
182
183         for (i = 0; i < size / 2; i++)
184                 if (array[(i * 2) + 1] >= usecs) {
185                         rval = array[i * 2];
186                         break;
187                 }
188
189         return rval;
190 }
191
192 static unsigned long dev_to_usecs(int value, unsigned long const array[],
193                         int size)
194 {
195         int i;
196         int rval = -EINVAL;
197
198         for (i = 0; i < size / 2; i++)
199                 if (array[i * 2] == value) {
200                         rval = array[(i * 2) + 1];
201                         break;
202                 }
203
204         return rval;
205 }
206
207 /* si4713_handler: IRQ handler, just complete work */
208 static irqreturn_t si4713_handler(int irq, void *dev)
209 {
210         struct si4713_device *sdev = dev;
211
212         v4l2_dbg(2, debug, &sdev->sd,
213                         "%s: sending signal to completion work.\n", __func__);
214         complete(&sdev->work);
215
216         return IRQ_HANDLED;
217 }
218
219 /*
220  * si4713_send_command - sends a command to si4713 and waits its response
221  * @sdev: si4713_device structure for the device we are communicating
222  * @command: command id
223  * @args: command arguments we are sending (up to 7)
224  * @argn: actual size of @args
225  * @response: buffer to place the expected response from the device (up to 15)
226  * @respn: actual size of @response
227  * @usecs: amount of time to wait before reading the response (in usecs)
228  */
229 static int si4713_send_command(struct si4713_device *sdev, const u8 command,
230                                 const u8 args[], const int argn,
231                                 u8 response[], const int respn, const int usecs)
232 {
233         struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
234         u8 data1[MAX_ARGS + 1];
235         int err;
236
237         if (!client->adapter)
238                 return -ENODEV;
239
240         /* First send the command and its arguments */
241         data1[0] = command;
242         memcpy(data1 + 1, args, argn);
243         DBG_BUFFER(&sdev->sd, "Parameters", data1, argn + 1);
244
245         err = i2c_master_send(client, data1, argn + 1);
246         if (err != argn + 1) {
247                 v4l2_err(&sdev->sd, "Error while sending command 0x%02x\n",
248                         command);
249                 return (err > 0) ? -EIO : err;
250         }
251
252         /* Wait response from interrupt */
253         if (!wait_for_completion_timeout(&sdev->work,
254                                 usecs_to_jiffies(usecs) + 1))
255                 v4l2_warn(&sdev->sd,
256                                 "(%s) Device took too much time to answer.\n",
257                                 __func__);
258
259         /* Then get the response */
260         err = i2c_master_recv(client, response, respn);
261         if (err != respn) {
262                 v4l2_err(&sdev->sd,
263                         "Error while reading response for command 0x%02x\n",
264                         command);
265                 return (err > 0) ? -EIO : err;
266         }
267
268         DBG_BUFFER(&sdev->sd, "Response", response, respn);
269         if (check_command_failed(response[0]))
270                 return -EBUSY;
271
272         return 0;
273 }
274
275 /*
276  * si4713_read_property - reads a si4713 property
277  * @sdev: si4713_device structure for the device we are communicating
278  * @prop: property identification number
279  * @pv: property value to be returned on success
280  */
281 static int si4713_read_property(struct si4713_device *sdev, u16 prop, u32 *pv)
282 {
283         int err;
284         u8 val[SI4713_GET_PROP_NRESP];
285         /*
286          *      .First byte = 0
287          *      .Second byte = property's MSB
288          *      .Third byte = property's LSB
289          */
290         const u8 args[SI4713_GET_PROP_NARGS] = {
291                 0x00,
292                 msb(prop),
293                 lsb(prop),
294         };
295
296         err = si4713_send_command(sdev, SI4713_CMD_GET_PROPERTY,
297                                   args, ARRAY_SIZE(args), val,
298                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
299
300         if (err < 0)
301                 return err;
302
303         *pv = compose_u16(val[2], val[3]);
304
305         v4l2_dbg(1, debug, &sdev->sd,
306                         "%s: property=0x%02x value=0x%02x status=0x%02x\n",
307                         __func__, prop, *pv, val[0]);
308
309         return err;
310 }
311
312 /*
313  * si4713_write_property - modifies a si4713 property
314  * @sdev: si4713_device structure for the device we are communicating
315  * @prop: property identification number
316  * @val: new value for that property
317  */
318 static int si4713_write_property(struct si4713_device *sdev, u16 prop, u16 val)
319 {
320         int rval;
321         u8 resp[SI4713_SET_PROP_NRESP];
322         /*
323          *      .First byte = 0
324          *      .Second byte = property's MSB
325          *      .Third byte = property's LSB
326          *      .Fourth byte = value's MSB
327          *      .Fifth byte = value's LSB
328          */
329         const u8 args[SI4713_SET_PROP_NARGS] = {
330                 0x00,
331                 msb(prop),
332                 lsb(prop),
333                 msb(val),
334                 lsb(val),
335         };
336
337         rval = si4713_send_command(sdev, SI4713_CMD_SET_PROPERTY,
338                                         args, ARRAY_SIZE(args),
339                                         resp, ARRAY_SIZE(resp),
340                                         DEFAULT_TIMEOUT);
341
342         if (rval < 0)
343                 return rval;
344
345         v4l2_dbg(1, debug, &sdev->sd,
346                         "%s: property=0x%02x value=0x%02x status=0x%02x\n",
347                         __func__, prop, val, resp[0]);
348
349         /*
350          * As there is no command response for SET_PROPERTY,
351          * wait Tcomp time to finish before proceed, in order
352          * to have property properly set.
353          */
354         msleep(TIMEOUT_SET_PROPERTY);
355
356         return rval;
357 }
358
359 /*
360  * si4713_powerup - Powers the device up
361  * @sdev: si4713_device structure for the device we are communicating
362  */
363 static int si4713_powerup(struct si4713_device *sdev)
364 {
365         int err;
366         u8 resp[SI4713_PWUP_NRESP];
367         /*
368          *      .First byte = Enabled interrupts and boot function
369          *      .Second byte = Input operation mode
370          */
371         const u8 args[SI4713_PWUP_NARGS] = {
372                 SI4713_PWUP_CTSIEN | SI4713_PWUP_GPO2OEN | SI4713_PWUP_FUNC_TX,
373                 SI4713_PWUP_OPMOD_ANALOG,
374         };
375
376         if (sdev->power_state)
377                 return 0;
378
379         err = regulator_bulk_enable(ARRAY_SIZE(sdev->supplies),
380                                     sdev->supplies);
381         if (err) {
382                 v4l2_err(&sdev->sd, "Failed to enable supplies: %d\n", err);
383                 return err;
384         }
385         if (gpio_is_valid(sdev->gpio_reset)) {
386                 udelay(50);
387                 gpio_set_value(sdev->gpio_reset, 1);
388         }
389
390         err = si4713_send_command(sdev, SI4713_CMD_POWER_UP,
391                                         args, ARRAY_SIZE(args),
392                                         resp, ARRAY_SIZE(resp),
393                                         TIMEOUT_POWER_UP);
394
395         if (!err) {
396                 v4l2_dbg(1, debug, &sdev->sd, "Powerup response: 0x%02x\n",
397                                 resp[0]);
398                 v4l2_dbg(1, debug, &sdev->sd, "Device in power up mode\n");
399                 sdev->power_state = POWER_ON;
400
401                 err = si4713_write_property(sdev, SI4713_GPO_IEN,
402                                                 SI4713_STC_INT | SI4713_CTS);
403         } else {
404                 if (gpio_is_valid(sdev->gpio_reset))
405                         gpio_set_value(sdev->gpio_reset, 0);
406                 err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies),
407                                              sdev->supplies);
408                 if (err)
409                         v4l2_err(&sdev->sd,
410                                  "Failed to disable supplies: %d\n", err);
411         }
412
413         return err;
414 }
415
416 /*
417  * si4713_powerdown - Powers the device down
418  * @sdev: si4713_device structure for the device we are communicating
419  */
420 static int si4713_powerdown(struct si4713_device *sdev)
421 {
422         int err;
423         u8 resp[SI4713_PWDN_NRESP];
424
425         if (!sdev->power_state)
426                 return 0;
427
428         err = si4713_send_command(sdev, SI4713_CMD_POWER_DOWN,
429                                         NULL, 0,
430                                         resp, ARRAY_SIZE(resp),
431                                         DEFAULT_TIMEOUT);
432
433         if (!err) {
434                 v4l2_dbg(1, debug, &sdev->sd, "Power down response: 0x%02x\n",
435                                 resp[0]);
436                 v4l2_dbg(1, debug, &sdev->sd, "Device in reset mode\n");
437                 if (gpio_is_valid(sdev->gpio_reset))
438                         gpio_set_value(sdev->gpio_reset, 0);
439                 err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies),
440                                              sdev->supplies);
441                 if (err)
442                         v4l2_err(&sdev->sd,
443                                  "Failed to disable supplies: %d\n", err);
444                 sdev->power_state = POWER_OFF;
445         }
446
447         return err;
448 }
449
450 /*
451  * si4713_checkrev - Checks if we are treating a device with the correct rev.
452  * @sdev: si4713_device structure for the device we are communicating
453  */
454 static int si4713_checkrev(struct si4713_device *sdev)
455 {
456         struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
457         int rval;
458         u8 resp[SI4713_GETREV_NRESP];
459
460         mutex_lock(&sdev->mutex);
461
462         rval = si4713_send_command(sdev, SI4713_CMD_GET_REV,
463                                         NULL, 0,
464                                         resp, ARRAY_SIZE(resp),
465                                         DEFAULT_TIMEOUT);
466
467         if (rval < 0)
468                 goto unlock;
469
470         if (resp[1] == SI4713_PRODUCT_NUMBER) {
471                 v4l2_info(&sdev->sd, "chip found @ 0x%02x (%s)\n",
472                                 client->addr << 1, client->adapter->name);
473         } else {
474                 v4l2_err(&sdev->sd, "Invalid product number\n");
475                 rval = -EINVAL;
476         }
477
478 unlock:
479         mutex_unlock(&sdev->mutex);
480         return rval;
481 }
482
483 /*
484  * si4713_wait_stc - Waits STC interrupt and clears status bits. Useful
485  *                   for TX_TUNE_POWER, TX_TUNE_FREQ and TX_TUNE_MEAS
486  * @sdev: si4713_device structure for the device we are communicating
487  * @usecs: timeout to wait for STC interrupt signal
488  */
489 static int si4713_wait_stc(struct si4713_device *sdev, const int usecs)
490 {
491         int err;
492         u8 resp[SI4713_GET_STATUS_NRESP];
493
494         /* Wait response from STC interrupt */
495         if (!wait_for_completion_timeout(&sdev->work,
496                         usecs_to_jiffies(usecs) + 1))
497                 v4l2_warn(&sdev->sd,
498                         "%s: device took too much time to answer (%d usec).\n",
499                                 __func__, usecs);
500
501         /* Clear status bits */
502         err = si4713_send_command(sdev, SI4713_CMD_GET_INT_STATUS,
503                                         NULL, 0,
504                                         resp, ARRAY_SIZE(resp),
505                                         DEFAULT_TIMEOUT);
506
507         if (err < 0)
508                 goto exit;
509
510         v4l2_dbg(1, debug, &sdev->sd,
511                         "%s: status bits: 0x%02x\n", __func__, resp[0]);
512
513         if (!(resp[0] & SI4713_STC_INT))
514                 err = -EIO;
515
516 exit:
517         return err;
518 }
519
520 /*
521  * si4713_tx_tune_freq - Sets the state of the RF carrier and sets the tuning
522  *                      frequency between 76 and 108 MHz in 10 kHz units and
523  *                      steps of 50 kHz.
524  * @sdev: si4713_device structure for the device we are communicating
525  * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz)
526  */
527 static int si4713_tx_tune_freq(struct si4713_device *sdev, u16 frequency)
528 {
529         int err;
530         u8 val[SI4713_TXFREQ_NRESP];
531         /*
532          *      .First byte = 0
533          *      .Second byte = frequency's MSB
534          *      .Third byte = frequency's LSB
535          */
536         const u8 args[SI4713_TXFREQ_NARGS] = {
537                 0x00,
538                 msb(frequency),
539                 lsb(frequency),
540         };
541
542         err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_FREQ,
543                                   args, ARRAY_SIZE(args), val,
544                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
545
546         if (err < 0)
547                 return err;
548
549         v4l2_dbg(1, debug, &sdev->sd,
550                         "%s: frequency=0x%02x status=0x%02x\n", __func__,
551                         frequency, val[0]);
552
553         err = si4713_wait_stc(sdev, TIMEOUT_TX_TUNE);
554         if (err < 0)
555                 return err;
556
557         return compose_u16(args[1], args[2]);
558 }
559
560 /*
561  * si4713_tx_tune_power - Sets the RF voltage level between 88 and 115 dBuV in
562  *                      1 dB units. A value of 0x00 indicates off. The command
563  *                      also sets the antenna tuning capacitance. A value of 0
564  *                      indicates autotuning, and a value of 1 - 191 indicates
565  *                      a manual override, which results in a tuning
566  *                      capacitance of 0.25 pF x @antcap.
567  * @sdev: si4713_device structure for the device we are communicating
568  * @power: tuning power (88 - 115 dBuV, unit/step 1 dB)
569  * @antcap: value of antenna tuning capacitor (0 - 191)
570  */
571 static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power,
572                                 u8 antcap)
573 {
574         int err;
575         u8 val[SI4713_TXPWR_NRESP];
576         /*
577          *      .First byte = 0
578          *      .Second byte = 0
579          *      .Third byte = power
580          *      .Fourth byte = antcap
581          */
582         const u8 args[SI4713_TXPWR_NARGS] = {
583                 0x00,
584                 0x00,
585                 power,
586                 antcap,
587         };
588
589         if (((power > 0) && (power < SI4713_MIN_POWER)) ||
590                 power > SI4713_MAX_POWER || antcap > SI4713_MAX_ANTCAP)
591                 return -EDOM;
592
593         err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_POWER,
594                                   args, ARRAY_SIZE(args), val,
595                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
596
597         if (err < 0)
598                 return err;
599
600         v4l2_dbg(1, debug, &sdev->sd,
601                         "%s: power=0x%02x antcap=0x%02x status=0x%02x\n",
602                         __func__, power, antcap, val[0]);
603
604         return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE_POWER);
605 }
606
607 /*
608  * si4713_tx_tune_measure - Enters receive mode and measures the received noise
609  *                      level in units of dBuV on the selected frequency.
610  *                      The Frequency must be between 76 and 108 MHz in 10 kHz
611  *                      units and steps of 50 kHz. The command also sets the
612  *                      antenna tuning capacitance. A value of 0 means
613  *                      autotuning, and a value of 1 to 191 indicates manual
614  *                      override.
615  * @sdev: si4713_device structure for the device we are communicating
616  * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz)
617  * @antcap: value of antenna tuning capacitor (0 - 191)
618  */
619 static int si4713_tx_tune_measure(struct si4713_device *sdev, u16 frequency,
620                                         u8 antcap)
621 {
622         int err;
623         u8 val[SI4713_TXMEA_NRESP];
624         /*
625          *      .First byte = 0
626          *      .Second byte = frequency's MSB
627          *      .Third byte = frequency's LSB
628          *      .Fourth byte = antcap
629          */
630         const u8 args[SI4713_TXMEA_NARGS] = {
631                 0x00,
632                 msb(frequency),
633                 lsb(frequency),
634                 antcap,
635         };
636
637         sdev->tune_rnl = DEFAULT_TUNE_RNL;
638
639         if (antcap > SI4713_MAX_ANTCAP)
640                 return -EDOM;
641
642         err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_MEASURE,
643                                   args, ARRAY_SIZE(args), val,
644                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
645
646         if (err < 0)
647                 return err;
648
649         v4l2_dbg(1, debug, &sdev->sd,
650                         "%s: frequency=0x%02x antcap=0x%02x status=0x%02x\n",
651                         __func__, frequency, antcap, val[0]);
652
653         return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE);
654 }
655
656 /*
657  * si4713_tx_tune_status- Returns the status of the tx_tune_freq, tx_tune_mea or
658  *                      tx_tune_power commands. This command return the current
659  *                      frequency, output voltage in dBuV, the antenna tunning
660  *                      capacitance value and the received noise level. The
661  *                      command also clears the stcint interrupt bit when the
662  *                      first bit of its arguments is high.
663  * @sdev: si4713_device structure for the device we are communicating
664  * @intack: 0x01 to clear the seek/tune complete interrupt status indicator.
665  * @frequency: returned frequency
666  * @power: returned power
667  * @antcap: returned antenna capacitance
668  * @noise: returned noise level
669  */
670 static int si4713_tx_tune_status(struct si4713_device *sdev, u8 intack,
671                                         u16 *frequency, u8 *power,
672                                         u8 *antcap, u8 *noise)
673 {
674         int err;
675         u8 val[SI4713_TXSTATUS_NRESP];
676         /*
677          *      .First byte = intack bit
678          */
679         const u8 args[SI4713_TXSTATUS_NARGS] = {
680                 intack & SI4713_INTACK_MASK,
681         };
682
683         err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_STATUS,
684                                   args, ARRAY_SIZE(args), val,
685                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
686
687         if (!err) {
688                 v4l2_dbg(1, debug, &sdev->sd,
689                         "%s: status=0x%02x\n", __func__, val[0]);
690                 *frequency = compose_u16(val[2], val[3]);
691                 sdev->frequency = *frequency;
692                 *power = val[5];
693                 *antcap = val[6];
694                 *noise = val[7];
695                 v4l2_dbg(1, debug, &sdev->sd, "%s: response: %d x 10 kHz "
696                                 "(power %d, antcap %d, rnl %d)\n", __func__,
697                                 *frequency, *power, *antcap, *noise);
698         }
699
700         return err;
701 }
702
703 /*
704  * si4713_tx_rds_buff - Loads the RDS group buffer FIFO or circular buffer.
705  * @sdev: si4713_device structure for the device we are communicating
706  * @mode: the buffer operation mode.
707  * @rdsb: RDS Block B
708  * @rdsc: RDS Block C
709  * @rdsd: RDS Block D
710  * @cbleft: returns the number of available circular buffer blocks minus the
711  *          number of used circular buffer blocks.
712  */
713 static int si4713_tx_rds_buff(struct si4713_device *sdev, u8 mode, u16 rdsb,
714                                 u16 rdsc, u16 rdsd, s8 *cbleft)
715 {
716         int err;
717         u8 val[SI4713_RDSBUFF_NRESP];
718
719         const u8 args[SI4713_RDSBUFF_NARGS] = {
720                 mode & SI4713_RDSBUFF_MODE_MASK,
721                 msb(rdsb),
722                 lsb(rdsb),
723                 msb(rdsc),
724                 lsb(rdsc),
725                 msb(rdsd),
726                 lsb(rdsd),
727         };
728
729         err = si4713_send_command(sdev, SI4713_CMD_TX_RDS_BUFF,
730                                   args, ARRAY_SIZE(args), val,
731                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
732
733         if (!err) {
734                 v4l2_dbg(1, debug, &sdev->sd,
735                         "%s: status=0x%02x\n", __func__, val[0]);
736                 *cbleft = (s8)val[2] - val[3];
737                 v4l2_dbg(1, debug, &sdev->sd, "%s: response: interrupts"
738                                 " 0x%02x cb avail: %d cb used %d fifo avail"
739                                 " %d fifo used %d\n", __func__, val[1],
740                                 val[2], val[3], val[4], val[5]);
741         }
742
743         return err;
744 }
745
746 /*
747  * si4713_tx_rds_ps - Loads the program service buffer.
748  * @sdev: si4713_device structure for the device we are communicating
749  * @psid: program service id to be loaded.
750  * @pschar: assumed 4 size char array to be loaded into the program service
751  */
752 static int si4713_tx_rds_ps(struct si4713_device *sdev, u8 psid,
753                                 unsigned char *pschar)
754 {
755         int err;
756         u8 val[SI4713_RDSPS_NRESP];
757
758         const u8 args[SI4713_RDSPS_NARGS] = {
759                 psid & SI4713_RDSPS_PSID_MASK,
760                 pschar[0],
761                 pschar[1],
762                 pschar[2],
763                 pschar[3],
764         };
765
766         err = si4713_send_command(sdev, SI4713_CMD_TX_RDS_PS,
767                                   args, ARRAY_SIZE(args), val,
768                                   ARRAY_SIZE(val), DEFAULT_TIMEOUT);
769
770         if (err < 0)
771                 return err;
772
773         v4l2_dbg(1, debug, &sdev->sd, "%s: status=0x%02x\n", __func__, val[0]);
774
775         return err;
776 }
777
778 static int si4713_set_power_state(struct si4713_device *sdev, u8 value)
779 {
780         int rval;
781
782         mutex_lock(&sdev->mutex);
783
784         if (value)
785                 rval = si4713_powerup(sdev);
786         else
787                 rval = si4713_powerdown(sdev);
788
789         mutex_unlock(&sdev->mutex);
790         return rval;
791 }
792
793 static int si4713_set_mute(struct si4713_device *sdev, u16 mute)
794 {
795         int rval = 0;
796
797         mute = set_mute(mute);
798
799         mutex_lock(&sdev->mutex);
800
801         if (sdev->power_state)
802                 rval = si4713_write_property(sdev,
803                                 SI4713_TX_LINE_INPUT_MUTE, mute);
804
805         if (rval >= 0)
806                 sdev->mute = get_mute(mute);
807
808         mutex_unlock(&sdev->mutex);
809
810         return rval;
811 }
812
813 static int si4713_set_rds_ps_name(struct si4713_device *sdev, char *ps_name)
814 {
815         int rval = 0, i;
816         u8 len = 0;
817
818         /* We want to clear the whole thing */
819         if (!strlen(ps_name))
820                 memset(ps_name, 0, MAX_RDS_PS_NAME + 1);
821
822         mutex_lock(&sdev->mutex);
823
824         if (sdev->power_state) {
825                 /* Write the new ps name and clear the padding */
826                 for (i = 0; i < MAX_RDS_PS_NAME; i += (RDS_BLOCK / 2)) {
827                         rval = si4713_tx_rds_ps(sdev, (i / (RDS_BLOCK / 2)),
828                                                 ps_name + i);
829                         if (rval < 0)
830                                 goto unlock;
831                 }
832
833                 /* Setup the size to be sent */
834                 if (strlen(ps_name))
835                         len = strlen(ps_name) - 1;
836                 else
837                         len = 1;
838
839                 rval = si4713_write_property(sdev,
840                                 SI4713_TX_RDS_PS_MESSAGE_COUNT,
841                                 rds_ps_nblocks(len));
842                 if (rval < 0)
843                         goto unlock;
844
845                 rval = si4713_write_property(sdev,
846                                 SI4713_TX_RDS_PS_REPEAT_COUNT,
847                                 DEFAULT_RDS_PS_REPEAT_COUNT * 2);
848                 if (rval < 0)
849                         goto unlock;
850         }
851
852         strncpy(sdev->rds_info.ps_name, ps_name, MAX_RDS_PS_NAME);
853
854 unlock:
855         mutex_unlock(&sdev->mutex);
856         return rval;
857 }
858
859 static int si4713_set_rds_radio_text(struct si4713_device *sdev, char *rt)
860 {
861         int rval = 0, i;
862         u16 t_index = 0;
863         u8 b_index = 0, cr_inserted = 0;
864         s8 left;
865
866         mutex_lock(&sdev->mutex);
867
868         if (!sdev->power_state)
869                 goto copy;
870
871         rval = si4713_tx_rds_buff(sdev, RDS_BLOCK_CLEAR, 0, 0, 0, &left);
872         if (rval < 0)
873                 goto unlock;
874
875         if (!strlen(rt))
876                 goto copy;
877
878         do {
879                 /* RDS spec says that if the last block isn't used,
880                  * then apply a carriage return
881                  */
882                 if (t_index < (RDS_RADIOTEXT_INDEX_MAX *
883                         RDS_RADIOTEXT_BLK_SIZE)) {
884                         for (i = 0; i < RDS_RADIOTEXT_BLK_SIZE; i++) {
885                                 if (!rt[t_index + i] || rt[t_index + i] ==
886                                         RDS_CARRIAGE_RETURN) {
887                                         rt[t_index + i] = RDS_CARRIAGE_RETURN;
888                                         cr_inserted = 1;
889                                         break;
890                                 }
891                         }
892                 }
893
894                 rval = si4713_tx_rds_buff(sdev, RDS_BLOCK_LOAD,
895                                 compose_u16(RDS_RADIOTEXT_2A, b_index++),
896                                 compose_u16(rt[t_index], rt[t_index + 1]),
897                                 compose_u16(rt[t_index + 2], rt[t_index + 3]),
898                                 &left);
899                 if (rval < 0)
900                         goto unlock;
901
902                 t_index += RDS_RADIOTEXT_BLK_SIZE;
903
904                 if (cr_inserted)
905                         break;
906         } while (left > 0);
907
908 copy:
909         strncpy(sdev->rds_info.radio_text, rt, MAX_RDS_RADIO_TEXT);
910
911 unlock:
912         mutex_unlock(&sdev->mutex);
913         return rval;
914 }
915
916 static int si4713_choose_econtrol_action(struct si4713_device *sdev, u32 id,
917                 u32 **shadow, s32 *bit, s32 *mask, u16 *property, int *mul,
918                 unsigned long **table, int *size)
919 {
920         s32 rval = 0;
921
922         switch (id) {
923         /* FM_TX class controls */
924         case V4L2_CID_RDS_TX_PI:
925                 *property = SI4713_TX_RDS_PI;
926                 *mul = 1;
927                 *shadow = &sdev->rds_info.pi;
928                 break;
929         case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
930                 *property = SI4713_TX_ACOMP_THRESHOLD;
931                 *mul = 1;
932                 *shadow = &sdev->acomp_info.threshold;
933                 break;
934         case V4L2_CID_AUDIO_COMPRESSION_GAIN:
935                 *property = SI4713_TX_ACOMP_GAIN;
936                 *mul = 1;
937                 *shadow = &sdev->acomp_info.gain;
938                 break;
939         case V4L2_CID_PILOT_TONE_FREQUENCY:
940                 *property = SI4713_TX_PILOT_FREQUENCY;
941                 *mul = 1;
942                 *shadow = &sdev->pilot_info.frequency;
943                 break;
944         case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
945                 *property = SI4713_TX_ACOMP_ATTACK_TIME;
946                 *mul = ATTACK_TIME_UNIT;
947                 *shadow = &sdev->acomp_info.attack_time;
948                 break;
949         case V4L2_CID_PILOT_TONE_DEVIATION:
950                 *property = SI4713_TX_PILOT_DEVIATION;
951                 *mul = 10;
952                 *shadow = &sdev->pilot_info.deviation;
953                 break;
954         case V4L2_CID_AUDIO_LIMITER_DEVIATION:
955                 *property = SI4713_TX_AUDIO_DEVIATION;
956                 *mul = 10;
957                 *shadow = &sdev->limiter_info.deviation;
958                 break;
959         case V4L2_CID_RDS_TX_DEVIATION:
960                 *property = SI4713_TX_RDS_DEVIATION;
961                 *mul = 1;
962                 *shadow = &sdev->rds_info.deviation;
963                 break;
964
965         case V4L2_CID_RDS_TX_PTY:
966                 *property = SI4713_TX_RDS_PS_MISC;
967                 *bit = 5;
968                 *mask = 0x1F << 5;
969                 *shadow = &sdev->rds_info.pty;
970                 break;
971         case V4L2_CID_AUDIO_LIMITER_ENABLED:
972                 *property = SI4713_TX_ACOMP_ENABLE;
973                 *bit = 1;
974                 *mask = 1 << 1;
975                 *shadow = &sdev->limiter_info.enabled;
976                 break;
977         case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
978                 *property = SI4713_TX_ACOMP_ENABLE;
979                 *bit = 0;
980                 *mask = 1 << 0;
981                 *shadow = &sdev->acomp_info.enabled;
982                 break;
983         case V4L2_CID_PILOT_TONE_ENABLED:
984                 *property = SI4713_TX_COMPONENT_ENABLE;
985                 *bit = 0;
986                 *mask = 1 << 0;
987                 *shadow = &sdev->pilot_info.enabled;
988                 break;
989
990         case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
991                 *property = SI4713_TX_LIMITER_RELEASE_TIME;
992                 *table = limiter_times;
993                 *size = ARRAY_SIZE(limiter_times);
994                 *shadow = &sdev->limiter_info.release_time;
995                 break;
996         case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
997                 *property = SI4713_TX_ACOMP_RELEASE_TIME;
998                 *table = acomp_rtimes;
999                 *size = ARRAY_SIZE(acomp_rtimes);
1000                 *shadow = &sdev->acomp_info.release_time;
1001                 break;
1002         case V4L2_CID_TUNE_PREEMPHASIS:
1003                 *property = SI4713_TX_PREEMPHASIS;
1004                 *table = preemphasis_values;
1005                 *size = ARRAY_SIZE(preemphasis_values);
1006                 *shadow = &sdev->preemphasis;
1007                 break;
1008
1009         default:
1010                 rval = -EINVAL;
1011         };
1012
1013         return rval;
1014 }
1015
1016 static int si4713_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
1017
1018 /* write string property */
1019 static int si4713_write_econtrol_string(struct si4713_device *sdev,
1020                                 struct v4l2_ext_control *control)
1021 {
1022         struct v4l2_queryctrl vqc;
1023         int len;
1024         s32 rval = 0;
1025
1026         vqc.id = control->id;
1027         rval = si4713_queryctrl(&sdev->sd, &vqc);
1028         if (rval < 0)
1029                 goto exit;
1030
1031         switch (control->id) {
1032         case V4L2_CID_RDS_TX_PS_NAME: {
1033                 char ps_name[MAX_RDS_PS_NAME + 1];
1034
1035                 len = control->size - 1;
1036                 if (len < 0 || len > MAX_RDS_PS_NAME) {
1037                         rval = -ERANGE;
1038                         goto exit;
1039                 }
1040                 rval = copy_from_user(ps_name, control->string, len);
1041                 if (rval) {
1042                         rval = -EFAULT;
1043                         goto exit;
1044                 }
1045                 ps_name[len] = '\0';
1046
1047                 if (strlen(ps_name) % vqc.step) {
1048                         rval = -ERANGE;
1049                         goto exit;
1050                 }
1051
1052                 rval = si4713_set_rds_ps_name(sdev, ps_name);
1053         }
1054                 break;
1055
1056         case V4L2_CID_RDS_TX_RADIO_TEXT: {
1057                 char radio_text[MAX_RDS_RADIO_TEXT + 1];
1058
1059                 len = control->size - 1;
1060                 if (len < 0 || len > MAX_RDS_RADIO_TEXT) {
1061                         rval = -ERANGE;
1062                         goto exit;
1063                 }
1064                 rval = copy_from_user(radio_text, control->string, len);
1065                 if (rval) {
1066                         rval = -EFAULT;
1067                         goto exit;
1068                 }
1069                 radio_text[len] = '\0';
1070
1071                 if (strlen(radio_text) % vqc.step) {
1072                         rval = -ERANGE;
1073                         goto exit;
1074                 }
1075
1076                 rval = si4713_set_rds_radio_text(sdev, radio_text);
1077         }
1078                 break;
1079
1080         default:
1081                 rval = -EINVAL;
1082                 break;
1083         };
1084
1085 exit:
1086         return rval;
1087 }
1088
1089 static int validate_range(struct v4l2_subdev *sd,
1090                                         struct v4l2_ext_control *control)
1091 {
1092         struct v4l2_queryctrl vqc;
1093         int rval;
1094
1095         vqc.id = control->id;
1096         rval = si4713_queryctrl(sd, &vqc);
1097         if (rval < 0)
1098                 goto exit;
1099
1100         if (control->value < vqc.minimum || control->value > vqc.maximum)
1101                 rval = -ERANGE;
1102
1103 exit:
1104         return rval;
1105 }
1106
1107 /* properties which use tx_tune_power*/
1108 static int si4713_write_econtrol_tune(struct si4713_device *sdev,
1109                                 struct v4l2_ext_control *control)
1110 {
1111         s32 rval = 0;
1112         u8 power, antcap;
1113
1114         rval = validate_range(&sdev->sd, control);
1115         if (rval < 0)
1116                 goto exit;
1117
1118         mutex_lock(&sdev->mutex);
1119
1120         switch (control->id) {
1121         case V4L2_CID_TUNE_POWER_LEVEL:
1122                 power = control->value;
1123                 antcap = sdev->antenna_capacitor;
1124                 break;
1125         case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1126                 power = sdev->power_level;
1127                 antcap = control->value;
1128                 break;
1129         default:
1130                 rval = -EINVAL;
1131                 goto unlock;
1132         };
1133
1134         if (sdev->power_state)
1135                 rval = si4713_tx_tune_power(sdev, power, antcap);
1136
1137         if (rval == 0) {
1138                 sdev->power_level = power;
1139                 sdev->antenna_capacitor = antcap;
1140         }
1141
1142 unlock:
1143         mutex_unlock(&sdev->mutex);
1144 exit:
1145         return rval;
1146 }
1147
1148 static int si4713_write_econtrol_integers(struct si4713_device *sdev,
1149                                         struct v4l2_ext_control *control)
1150 {
1151         s32 rval;
1152         u32 *shadow = NULL, val = 0;
1153         s32 bit = 0, mask = 0;
1154         u16 property = 0;
1155         int mul = 0;
1156         unsigned long *table = NULL;
1157         int size = 0;
1158
1159         rval = validate_range(&sdev->sd, control);
1160         if (rval < 0)
1161                 goto exit;
1162
1163         rval = si4713_choose_econtrol_action(sdev, control->id, &shadow, &bit,
1164                         &mask, &property, &mul, &table, &size);
1165         if (rval < 0)
1166                 goto exit;
1167
1168         val = control->value;
1169         if (mul) {
1170                 val = control->value / mul;
1171         } else if (table) {
1172                 rval = usecs_to_dev(control->value, table, size);
1173                 if (rval < 0)
1174                         goto exit;
1175                 val = rval;
1176                 rval = 0;
1177         }
1178
1179         mutex_lock(&sdev->mutex);
1180
1181         if (sdev->power_state) {
1182                 if (mask) {
1183                         rval = si4713_read_property(sdev, property, &val);
1184                         if (rval < 0)
1185                                 goto unlock;
1186                         val = set_bits(val, control->value, bit, mask);
1187                 }
1188
1189                 rval = si4713_write_property(sdev, property, val);
1190                 if (rval < 0)
1191                         goto unlock;
1192                 if (mask)
1193                         val = control->value;
1194         }
1195
1196         if (mul) {
1197                 *shadow = val * mul;
1198         } else if (table) {
1199                 rval = dev_to_usecs(val, table, size);
1200                 if (rval < 0)
1201                         goto unlock;
1202                 *shadow = rval;
1203                 rval = 0;
1204         } else {
1205                 *shadow = val;
1206         }
1207
1208 unlock:
1209         mutex_unlock(&sdev->mutex);
1210 exit:
1211         return rval;
1212 }
1213
1214 static int si4713_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f);
1215 static int si4713_s_modulator(struct v4l2_subdev *sd, struct v4l2_modulator *);
1216 /*
1217  * si4713_setup - Sets the device up with current configuration.
1218  * @sdev: si4713_device structure for the device we are communicating
1219  */
1220 static int si4713_setup(struct si4713_device *sdev)
1221 {
1222         struct v4l2_ext_control ctrl;
1223         struct v4l2_frequency f;
1224         struct v4l2_modulator vm;
1225         struct si4713_device *tmp;
1226         int rval = 0;
1227
1228         tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
1229         if (!tmp)
1230                 return -ENOMEM;
1231
1232         /* Get a local copy to avoid race */
1233         mutex_lock(&sdev->mutex);
1234         memcpy(tmp, sdev, sizeof(*sdev));
1235         mutex_unlock(&sdev->mutex);
1236
1237         ctrl.id = V4L2_CID_RDS_TX_PI;
1238         ctrl.value = tmp->rds_info.pi;
1239         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1240
1241         ctrl.id = V4L2_CID_AUDIO_COMPRESSION_THRESHOLD;
1242         ctrl.value = tmp->acomp_info.threshold;
1243         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1244
1245         ctrl.id = V4L2_CID_AUDIO_COMPRESSION_GAIN;
1246         ctrl.value = tmp->acomp_info.gain;
1247         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1248
1249         ctrl.id = V4L2_CID_PILOT_TONE_FREQUENCY;
1250         ctrl.value = tmp->pilot_info.frequency;
1251         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1252
1253         ctrl.id = V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME;
1254         ctrl.value = tmp->acomp_info.attack_time;
1255         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1256
1257         ctrl.id = V4L2_CID_PILOT_TONE_DEVIATION;
1258         ctrl.value = tmp->pilot_info.deviation;
1259         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1260
1261         ctrl.id = V4L2_CID_AUDIO_LIMITER_DEVIATION;
1262         ctrl.value = tmp->limiter_info.deviation;
1263         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1264
1265         ctrl.id = V4L2_CID_RDS_TX_DEVIATION;
1266         ctrl.value = tmp->rds_info.deviation;
1267         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1268
1269         ctrl.id = V4L2_CID_RDS_TX_PTY;
1270         ctrl.value = tmp->rds_info.pty;
1271         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1272
1273         ctrl.id = V4L2_CID_AUDIO_LIMITER_ENABLED;
1274         ctrl.value = tmp->limiter_info.enabled;
1275         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1276
1277         ctrl.id = V4L2_CID_AUDIO_COMPRESSION_ENABLED;
1278         ctrl.value = tmp->acomp_info.enabled;
1279         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1280
1281         ctrl.id = V4L2_CID_PILOT_TONE_ENABLED;
1282         ctrl.value = tmp->pilot_info.enabled;
1283         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1284
1285         ctrl.id = V4L2_CID_AUDIO_LIMITER_RELEASE_TIME;
1286         ctrl.value = tmp->limiter_info.release_time;
1287         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1288
1289         ctrl.id = V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME;
1290         ctrl.value = tmp->acomp_info.release_time;
1291         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1292
1293         ctrl.id = V4L2_CID_TUNE_PREEMPHASIS;
1294         ctrl.value = tmp->preemphasis;
1295         rval |= si4713_write_econtrol_integers(sdev, &ctrl);
1296
1297         ctrl.id = V4L2_CID_RDS_TX_PS_NAME;
1298         rval |= si4713_set_rds_ps_name(sdev, tmp->rds_info.ps_name);
1299
1300         ctrl.id = V4L2_CID_RDS_TX_RADIO_TEXT;
1301         rval |= si4713_set_rds_radio_text(sdev, tmp->rds_info.radio_text);
1302
1303         /* Device procedure needs to set frequency first */
1304         f.frequency = tmp->frequency ? tmp->frequency : DEFAULT_FREQUENCY;
1305         f.frequency = si4713_to_v4l2(f.frequency);
1306         rval |= si4713_s_frequency(&sdev->sd, &f);
1307
1308         ctrl.id = V4L2_CID_TUNE_POWER_LEVEL;
1309         ctrl.value = tmp->power_level;
1310         rval |= si4713_write_econtrol_tune(sdev, &ctrl);
1311
1312         ctrl.id = V4L2_CID_TUNE_ANTENNA_CAPACITOR;
1313         ctrl.value = tmp->antenna_capacitor;
1314         rval |= si4713_write_econtrol_tune(sdev, &ctrl);
1315
1316         vm.index = 0;
1317         if (tmp->stereo)
1318                 vm.txsubchans = V4L2_TUNER_SUB_STEREO;
1319         else
1320                 vm.txsubchans = V4L2_TUNER_SUB_MONO;
1321         if (tmp->rds_info.enabled)
1322                 vm.txsubchans |= V4L2_TUNER_SUB_RDS;
1323         si4713_s_modulator(&sdev->sd, &vm);
1324
1325         kfree(tmp);
1326
1327         return rval;
1328 }
1329
1330 /*
1331  * si4713_initialize - Sets the device up with default configuration.
1332  * @sdev: si4713_device structure for the device we are communicating
1333  */
1334 static int si4713_initialize(struct si4713_device *sdev)
1335 {
1336         int rval;
1337
1338         rval = si4713_set_power_state(sdev, POWER_ON);
1339         if (rval < 0)
1340                 goto exit;
1341
1342         rval = si4713_checkrev(sdev);
1343         if (rval < 0)
1344                 goto exit;
1345
1346         rval = si4713_set_power_state(sdev, POWER_OFF);
1347         if (rval < 0)
1348                 goto exit;
1349
1350         mutex_lock(&sdev->mutex);
1351
1352         sdev->rds_info.pi = DEFAULT_RDS_PI;
1353         sdev->rds_info.pty = DEFAULT_RDS_PTY;
1354         sdev->rds_info.deviation = DEFAULT_RDS_DEVIATION;
1355         strlcpy(sdev->rds_info.ps_name, DEFAULT_RDS_PS_NAME, MAX_RDS_PS_NAME);
1356         strlcpy(sdev->rds_info.radio_text, DEFAULT_RDS_RADIO_TEXT,
1357                                                         MAX_RDS_RADIO_TEXT);
1358         sdev->rds_info.enabled = 1;
1359
1360         sdev->limiter_info.release_time = DEFAULT_LIMITER_RTIME;
1361         sdev->limiter_info.deviation = DEFAULT_LIMITER_DEV;
1362         sdev->limiter_info.enabled = 1;
1363
1364         sdev->pilot_info.deviation = DEFAULT_PILOT_DEVIATION;
1365         sdev->pilot_info.frequency = DEFAULT_PILOT_FREQUENCY;
1366         sdev->pilot_info.enabled = 1;
1367
1368         sdev->acomp_info.release_time = DEFAULT_ACOMP_RTIME;
1369         sdev->acomp_info.attack_time = DEFAULT_ACOMP_ATIME;
1370         sdev->acomp_info.threshold = DEFAULT_ACOMP_THRESHOLD;
1371         sdev->acomp_info.gain = DEFAULT_ACOMP_GAIN;
1372         sdev->acomp_info.enabled = 1;
1373
1374         sdev->frequency = DEFAULT_FREQUENCY;
1375         sdev->preemphasis = DEFAULT_PREEMPHASIS;
1376         sdev->mute = DEFAULT_MUTE;
1377         sdev->power_level = DEFAULT_POWER_LEVEL;
1378         sdev->antenna_capacitor = 0;
1379         sdev->stereo = 1;
1380         sdev->tune_rnl = DEFAULT_TUNE_RNL;
1381
1382         mutex_unlock(&sdev->mutex);
1383
1384 exit:
1385         return rval;
1386 }
1387
1388 /* read string property */
1389 static int si4713_read_econtrol_string(struct si4713_device *sdev,
1390                                 struct v4l2_ext_control *control)
1391 {
1392         s32 rval = 0;
1393
1394         switch (control->id) {
1395         case V4L2_CID_RDS_TX_PS_NAME:
1396                 if (strlen(sdev->rds_info.ps_name) + 1 > control->size) {
1397                         control->size = MAX_RDS_PS_NAME + 1;
1398                         rval = -ENOSPC;
1399                         goto exit;
1400                 }
1401                 rval = copy_to_user(control->string, sdev->rds_info.ps_name,
1402                                         strlen(sdev->rds_info.ps_name) + 1);
1403                 if (rval)
1404                         rval = -EFAULT;
1405                 break;
1406
1407         case V4L2_CID_RDS_TX_RADIO_TEXT:
1408                 if (strlen(sdev->rds_info.radio_text) + 1 > control->size) {
1409                         control->size = MAX_RDS_RADIO_TEXT + 1;
1410                         rval = -ENOSPC;
1411                         goto exit;
1412                 }
1413                 rval = copy_to_user(control->string, sdev->rds_info.radio_text,
1414                                         strlen(sdev->rds_info.radio_text) + 1);
1415                 if (rval)
1416                         rval = -EFAULT;
1417                 break;
1418
1419         default:
1420                 rval = -EINVAL;
1421                 break;
1422         };
1423
1424 exit:
1425         return rval;
1426 }
1427
1428 /*
1429  * si4713_update_tune_status - update properties from tx_tune_status
1430  * command. Must be called with sdev->mutex held.
1431  * @sdev: si4713_device structure for the device we are communicating
1432  */
1433 static int si4713_update_tune_status(struct si4713_device *sdev)
1434 {
1435         int rval;
1436         u16 f = 0;
1437         u8 p = 0, a = 0, n = 0;
1438
1439         rval = si4713_tx_tune_status(sdev, 0x00, &f, &p, &a, &n);
1440
1441         if (rval < 0)
1442                 goto exit;
1443
1444         sdev->power_level = p;
1445         sdev->antenna_capacitor = a;
1446         sdev->tune_rnl = n;
1447
1448 exit:
1449         return rval;
1450 }
1451
1452 /* properties which use tx_tune_status */
1453 static int si4713_read_econtrol_tune(struct si4713_device *sdev,
1454                                 struct v4l2_ext_control *control)
1455 {
1456         s32 rval = 0;
1457
1458         mutex_lock(&sdev->mutex);
1459
1460         if (sdev->power_state) {
1461                 rval = si4713_update_tune_status(sdev);
1462                 if (rval < 0)
1463                         goto unlock;
1464         }
1465
1466         switch (control->id) {
1467         case V4L2_CID_TUNE_POWER_LEVEL:
1468                 control->value = sdev->power_level;
1469                 break;
1470         case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1471                 control->value = sdev->antenna_capacitor;
1472                 break;
1473         default:
1474                 rval = -EINVAL;
1475         };
1476
1477 unlock:
1478         mutex_unlock(&sdev->mutex);
1479         return rval;
1480 }
1481
1482 static int si4713_read_econtrol_integers(struct si4713_device *sdev,
1483                                 struct v4l2_ext_control *control)
1484 {
1485         s32 rval;
1486         u32 *shadow = NULL, val = 0;
1487         s32 bit = 0, mask = 0;
1488         u16 property = 0;
1489         int mul = 0;
1490         unsigned long *table = NULL;
1491         int size = 0;
1492
1493         rval = si4713_choose_econtrol_action(sdev, control->id, &shadow, &bit,
1494                         &mask, &property, &mul, &table, &size);
1495         if (rval < 0)
1496                 goto exit;
1497
1498         mutex_lock(&sdev->mutex);
1499
1500         if (sdev->power_state) {
1501                 rval = si4713_read_property(sdev, property, &val);
1502                 if (rval < 0)
1503                         goto unlock;
1504
1505                 /* Keep negative values for threshold */
1506                 if (control->id == V4L2_CID_AUDIO_COMPRESSION_THRESHOLD)
1507                         *shadow = (s16)val;
1508                 else if (mask)
1509                         *shadow = get_status_bit(val, bit, mask);
1510                 else if (mul)
1511                         *shadow = val * mul;
1512                 else
1513                         *shadow = dev_to_usecs(val, table, size);
1514         }
1515
1516         control->value = *shadow;
1517
1518 unlock:
1519         mutex_unlock(&sdev->mutex);
1520 exit:
1521         return rval;
1522 }
1523
1524 /*
1525  * Video4Linux Subdev Interface
1526  */
1527 /* si4713_s_ext_ctrls - set extended controls value */
1528 static int si4713_s_ext_ctrls(struct v4l2_subdev *sd,
1529                                 struct v4l2_ext_controls *ctrls)
1530 {
1531         struct si4713_device *sdev = to_si4713_device(sd);
1532         int i;
1533
1534         if (ctrls->ctrl_class != V4L2_CTRL_CLASS_FM_TX)
1535                 return -EINVAL;
1536
1537         for (i = 0; i < ctrls->count; i++) {
1538                 int err;
1539
1540                 switch ((ctrls->controls + i)->id) {
1541                 case V4L2_CID_RDS_TX_PS_NAME:
1542                 case V4L2_CID_RDS_TX_RADIO_TEXT:
1543                         err = si4713_write_econtrol_string(sdev,
1544                                                         ctrls->controls + i);
1545                         break;
1546                 case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1547                 case V4L2_CID_TUNE_POWER_LEVEL:
1548                         err = si4713_write_econtrol_tune(sdev,
1549                                                         ctrls->controls + i);
1550                         break;
1551                 default:
1552                         err = si4713_write_econtrol_integers(sdev,
1553                                                         ctrls->controls + i);
1554                 }
1555
1556                 if (err < 0) {
1557                         ctrls->error_idx = i;
1558                         return err;
1559                 }
1560         }
1561
1562         return 0;
1563 }
1564
1565 /* si4713_g_ext_ctrls - get extended controls value */
1566 static int si4713_g_ext_ctrls(struct v4l2_subdev *sd,
1567                                 struct v4l2_ext_controls *ctrls)
1568 {
1569         struct si4713_device *sdev = to_si4713_device(sd);
1570         int i;
1571
1572         if (ctrls->ctrl_class != V4L2_CTRL_CLASS_FM_TX)
1573                 return -EINVAL;
1574
1575         for (i = 0; i < ctrls->count; i++) {
1576                 int err;
1577
1578                 switch ((ctrls->controls + i)->id) {
1579                 case V4L2_CID_RDS_TX_PS_NAME:
1580                 case V4L2_CID_RDS_TX_RADIO_TEXT:
1581                         err = si4713_read_econtrol_string(sdev,
1582                                                         ctrls->controls + i);
1583                         break;
1584                 case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1585                 case V4L2_CID_TUNE_POWER_LEVEL:
1586                         err = si4713_read_econtrol_tune(sdev,
1587                                                         ctrls->controls + i);
1588                         break;
1589                 default:
1590                         err = si4713_read_econtrol_integers(sdev,
1591                                                         ctrls->controls + i);
1592                 }
1593
1594                 if (err < 0) {
1595                         ctrls->error_idx = i;
1596                         return err;
1597                 }
1598         }
1599
1600         return 0;
1601 }
1602
1603 /* si4713_queryctrl - enumerate control items */
1604 static int si4713_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
1605 {
1606         int rval = 0;
1607
1608         switch (qc->id) {
1609         /* User class controls */
1610         case V4L2_CID_AUDIO_MUTE:
1611                 rval = v4l2_ctrl_query_fill(qc, 0, 1, 1, DEFAULT_MUTE);
1612                 break;
1613         /* FM_TX class controls */
1614         case V4L2_CID_RDS_TX_PI:
1615                 rval = v4l2_ctrl_query_fill(qc, 0, 0xFFFF, 1, DEFAULT_RDS_PI);
1616                 break;
1617         case V4L2_CID_RDS_TX_PTY:
1618                 rval = v4l2_ctrl_query_fill(qc, 0, 31, 1, DEFAULT_RDS_PTY);
1619                 break;
1620         case V4L2_CID_RDS_TX_DEVIATION:
1621                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_RDS_DEVIATION,
1622                                                 10, DEFAULT_RDS_DEVIATION);
1623                 break;
1624         case V4L2_CID_RDS_TX_PS_NAME:
1625                 /*
1626                  * Report step as 8. From RDS spec, psname
1627                  * should be 8. But there are receivers which scroll strings
1628                  * sized as 8xN.
1629                  */
1630                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_RDS_PS_NAME, 8, 0);
1631                 break;
1632         case V4L2_CID_RDS_TX_RADIO_TEXT:
1633                 /*
1634                  * Report step as 32 (2A block). From RDS spec,
1635                  * radio text should be 32 for 2A block. But there are receivers
1636                  * which scroll strings sized as 32xN. Setting default to 32.
1637                  */
1638                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_RDS_RADIO_TEXT, 32, 0);
1639                 break;
1640
1641         case V4L2_CID_AUDIO_LIMITER_ENABLED:
1642                 rval = v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
1643                 break;
1644         case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1645                 rval = v4l2_ctrl_query_fill(qc, 250, MAX_LIMITER_RELEASE_TIME,
1646                                                 50, DEFAULT_LIMITER_RTIME);
1647                 break;
1648         case V4L2_CID_AUDIO_LIMITER_DEVIATION:
1649                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_LIMITER_DEVIATION,
1650                                                 10, DEFAULT_LIMITER_DEV);
1651                 break;
1652
1653         case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
1654                 rval = v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
1655                 break;
1656         case V4L2_CID_AUDIO_COMPRESSION_GAIN:
1657                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_ACOMP_GAIN, 1,
1658                                                 DEFAULT_ACOMP_GAIN);
1659                 break;
1660         case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
1661                 rval = v4l2_ctrl_query_fill(qc, MIN_ACOMP_THRESHOLD,
1662                                                 MAX_ACOMP_THRESHOLD, 1,
1663                                                 DEFAULT_ACOMP_THRESHOLD);
1664                 break;
1665         case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
1666                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_ACOMP_ATTACK_TIME,
1667                                                 500, DEFAULT_ACOMP_ATIME);
1668                 break;
1669         case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1670                 rval = v4l2_ctrl_query_fill(qc, 100000, MAX_ACOMP_RELEASE_TIME,
1671                                                 100000, DEFAULT_ACOMP_RTIME);
1672                 break;
1673
1674         case V4L2_CID_PILOT_TONE_ENABLED:
1675                 rval = v4l2_ctrl_query_fill(qc, 0, 1, 1, 1);
1676                 break;
1677         case V4L2_CID_PILOT_TONE_DEVIATION:
1678                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_PILOT_DEVIATION,
1679                                                 10, DEFAULT_PILOT_DEVIATION);
1680                 break;
1681         case V4L2_CID_PILOT_TONE_FREQUENCY:
1682                 rval = v4l2_ctrl_query_fill(qc, 0, MAX_PILOT_FREQUENCY,
1683                                                 1, DEFAULT_PILOT_FREQUENCY);
1684                 break;
1685
1686         case V4L2_CID_TUNE_PREEMPHASIS:
1687                 rval = v4l2_ctrl_query_fill(qc, V4L2_PREEMPHASIS_DISABLED,
1688                                                 V4L2_PREEMPHASIS_75_uS, 1,
1689                                                 V4L2_PREEMPHASIS_50_uS);
1690                 break;
1691         case V4L2_CID_TUNE_POWER_LEVEL:
1692                 rval = v4l2_ctrl_query_fill(qc, 0, 120, 1, DEFAULT_POWER_LEVEL);
1693                 break;
1694         case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1695                 rval = v4l2_ctrl_query_fill(qc, 0, 191, 1, 0);
1696                 break;
1697         default:
1698                 rval = -EINVAL;
1699                 break;
1700         };
1701
1702         return rval;
1703 }
1704
1705 /* si4713_g_ctrl - get the value of a control */
1706 static int si4713_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
1707 {
1708         struct si4713_device *sdev = to_si4713_device(sd);
1709         int rval = 0;
1710
1711         if (!sdev)
1712                 return -ENODEV;
1713
1714         mutex_lock(&sdev->mutex);
1715
1716         if (sdev->power_state) {
1717                 rval = si4713_read_property(sdev, SI4713_TX_LINE_INPUT_MUTE,
1718                                                 &sdev->mute);
1719
1720                 if (rval < 0)
1721                         goto unlock;
1722         }
1723
1724         switch (ctrl->id) {
1725         case V4L2_CID_AUDIO_MUTE:
1726                 ctrl->value = get_mute(sdev->mute);
1727                 break;
1728         }
1729
1730 unlock:
1731         mutex_unlock(&sdev->mutex);
1732         return rval;
1733 }
1734
1735 /* si4713_s_ctrl - set the value of a control */
1736 static int si4713_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
1737 {
1738         struct si4713_device *sdev = to_si4713_device(sd);
1739         int rval = 0;
1740
1741         if (!sdev)
1742                 return -ENODEV;
1743
1744         switch (ctrl->id) {
1745         case V4L2_CID_AUDIO_MUTE:
1746                 if (ctrl->value) {
1747                         rval = si4713_set_mute(sdev, ctrl->value);
1748                         if (rval < 0)
1749                                 goto exit;
1750
1751                         rval = si4713_set_power_state(sdev, POWER_DOWN);
1752                 } else {
1753                         rval = si4713_set_power_state(sdev, POWER_UP);
1754                         if (rval < 0)
1755                                 goto exit;
1756
1757                         rval = si4713_setup(sdev);
1758                         if (rval < 0)
1759                                 goto exit;
1760
1761                         rval = si4713_set_mute(sdev, ctrl->value);
1762                 }
1763                 break;
1764         }
1765
1766 exit:
1767         return rval;
1768 }
1769
1770 /* si4713_ioctl - deal with private ioctls (only rnl for now) */
1771 long si4713_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
1772 {
1773         struct si4713_device *sdev = to_si4713_device(sd);
1774         struct si4713_rnl *rnl = arg;
1775         u16 frequency;
1776         int rval = 0;
1777
1778         if (!arg)
1779                 return -EINVAL;
1780
1781         mutex_lock(&sdev->mutex);
1782         switch (cmd) {
1783         case SI4713_IOC_MEASURE_RNL:
1784                 frequency = v4l2_to_si4713(rnl->frequency);
1785
1786                 if (sdev->power_state) {
1787                         /* Set desired measurement frequency */
1788                         rval = si4713_tx_tune_measure(sdev, frequency, 0);
1789                         if (rval < 0)
1790                                 goto unlock;
1791                         /* get results from tune status */
1792                         rval = si4713_update_tune_status(sdev);
1793                         if (rval < 0)
1794                                 goto unlock;
1795                 }
1796                 rnl->rnl = sdev->tune_rnl;
1797                 break;
1798
1799         default:
1800                 /* nothing */
1801                 rval = -ENOIOCTLCMD;
1802         }
1803
1804 unlock:
1805         mutex_unlock(&sdev->mutex);
1806         return rval;
1807 }
1808
1809 static const struct v4l2_subdev_core_ops si4713_subdev_core_ops = {
1810         .queryctrl      = si4713_queryctrl,
1811         .g_ext_ctrls    = si4713_g_ext_ctrls,
1812         .s_ext_ctrls    = si4713_s_ext_ctrls,
1813         .g_ctrl         = si4713_g_ctrl,
1814         .s_ctrl         = si4713_s_ctrl,
1815         .ioctl          = si4713_ioctl,
1816 };
1817
1818 /* si4713_g_modulator - get modulator attributes */
1819 static int si4713_g_modulator(struct v4l2_subdev *sd, struct v4l2_modulator *vm)
1820 {
1821         struct si4713_device *sdev = to_si4713_device(sd);
1822         int rval = 0;
1823
1824         if (!sdev) {
1825                 rval = -ENODEV;
1826                 goto exit;
1827         }
1828
1829         if (vm->index > 0) {
1830                 rval = -EINVAL;
1831                 goto exit;
1832         }
1833
1834         strncpy(vm->name, "FM Modulator", 32);
1835         vm->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LOW |
1836                 V4L2_TUNER_CAP_RDS | V4L2_TUNER_CAP_RDS_CONTROLS;
1837
1838         /* Report current frequency range limits */
1839         vm->rangelow = si4713_to_v4l2(FREQ_RANGE_LOW);
1840         vm->rangehigh = si4713_to_v4l2(FREQ_RANGE_HIGH);
1841
1842         mutex_lock(&sdev->mutex);
1843
1844         if (sdev->power_state) {
1845                 u32 comp_en = 0;
1846
1847                 rval = si4713_read_property(sdev, SI4713_TX_COMPONENT_ENABLE,
1848                                                 &comp_en);
1849                 if (rval < 0)
1850                         goto unlock;
1851
1852                 sdev->stereo = get_status_bit(comp_en, 1, 1 << 1);
1853                 sdev->rds_info.enabled = get_status_bit(comp_en, 2, 1 << 2);
1854         }
1855
1856         /* Report current audio mode: mono or stereo */
1857         if (sdev->stereo)
1858                 vm->txsubchans = V4L2_TUNER_SUB_STEREO;
1859         else
1860                 vm->txsubchans = V4L2_TUNER_SUB_MONO;
1861
1862         /* Report rds feature status */
1863         if (sdev->rds_info.enabled)
1864                 vm->txsubchans |= V4L2_TUNER_SUB_RDS;
1865         else
1866                 vm->txsubchans &= ~V4L2_TUNER_SUB_RDS;
1867
1868 unlock:
1869         mutex_unlock(&sdev->mutex);
1870 exit:
1871         return rval;
1872 }
1873
1874 /* si4713_s_modulator - set modulator attributes */
1875 static int si4713_s_modulator(struct v4l2_subdev *sd, struct v4l2_modulator *vm)
1876 {
1877         struct si4713_device *sdev = to_si4713_device(sd);
1878         int rval = 0;
1879         u16 stereo, rds;
1880         u32 p;
1881
1882         if (!sdev)
1883                 return -ENODEV;
1884
1885         if (vm->index > 0)
1886                 return -EINVAL;
1887
1888         /* Set audio mode: mono or stereo */
1889         if (vm->txsubchans & V4L2_TUNER_SUB_STEREO)
1890                 stereo = 1;
1891         else if (vm->txsubchans & V4L2_TUNER_SUB_MONO)
1892                 stereo = 0;
1893         else
1894                 return -EINVAL;
1895
1896         rds = !!(vm->txsubchans & V4L2_TUNER_SUB_RDS);
1897
1898         mutex_lock(&sdev->mutex);
1899
1900         if (sdev->power_state) {
1901                 rval = si4713_read_property(sdev,
1902                                                 SI4713_TX_COMPONENT_ENABLE, &p);
1903                 if (rval < 0)
1904                         goto unlock;
1905
1906                 p = set_bits(p, stereo, 1, 1 << 1);
1907                 p = set_bits(p, rds, 2, 1 << 2);
1908
1909                 rval = si4713_write_property(sdev,
1910                                                 SI4713_TX_COMPONENT_ENABLE, p);
1911                 if (rval < 0)
1912                         goto unlock;
1913         }
1914
1915         sdev->stereo = stereo;
1916         sdev->rds_info.enabled = rds;
1917
1918 unlock:
1919         mutex_unlock(&sdev->mutex);
1920         return rval;
1921 }
1922
1923 /* si4713_g_frequency - get tuner or modulator radio frequency */
1924 static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f)
1925 {
1926         struct si4713_device *sdev = to_si4713_device(sd);
1927         int rval = 0;
1928
1929         f->type = V4L2_TUNER_RADIO;
1930
1931         mutex_lock(&sdev->mutex);
1932
1933         if (sdev->power_state) {
1934                 u16 freq;
1935                 u8 p, a, n;
1936
1937                 rval = si4713_tx_tune_status(sdev, 0x00, &freq, &p, &a, &n);
1938                 if (rval < 0)
1939                         goto unlock;
1940
1941                 sdev->frequency = freq;
1942         }
1943
1944         f->frequency = si4713_to_v4l2(sdev->frequency);
1945
1946 unlock:
1947         mutex_unlock(&sdev->mutex);
1948         return rval;
1949 }
1950
1951 /* si4713_s_frequency - set tuner or modulator radio frequency */
1952 static int si4713_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f)
1953 {
1954         struct si4713_device *sdev = to_si4713_device(sd);
1955         int rval = 0;
1956         u16 frequency = v4l2_to_si4713(f->frequency);
1957
1958         /* Check frequency range */
1959         if (frequency < FREQ_RANGE_LOW || frequency > FREQ_RANGE_HIGH)
1960                 return -EDOM;
1961
1962         mutex_lock(&sdev->mutex);
1963
1964         if (sdev->power_state) {
1965                 rval = si4713_tx_tune_freq(sdev, frequency);
1966                 if (rval < 0)
1967                         goto unlock;
1968                 frequency = rval;
1969                 rval = 0;
1970         }
1971         sdev->frequency = frequency;
1972         f->frequency = si4713_to_v4l2(frequency);
1973
1974 unlock:
1975         mutex_unlock(&sdev->mutex);
1976         return rval;
1977 }
1978
1979 static const struct v4l2_subdev_tuner_ops si4713_subdev_tuner_ops = {
1980         .g_frequency    = si4713_g_frequency,
1981         .s_frequency    = si4713_s_frequency,
1982         .g_modulator    = si4713_g_modulator,
1983         .s_modulator    = si4713_s_modulator,
1984 };
1985
1986 static const struct v4l2_subdev_ops si4713_subdev_ops = {
1987         .core           = &si4713_subdev_core_ops,
1988         .tuner          = &si4713_subdev_tuner_ops,
1989 };
1990
1991 /*
1992  * I2C driver interface
1993  */
1994 /* si4713_probe - probe for the device */
1995 static int si4713_probe(struct i2c_client *client,
1996                                         const struct i2c_device_id *id)
1997 {
1998         struct si4713_device *sdev;
1999         struct si4713_platform_data *pdata = client->dev.platform_data;
2000         int rval, i;
2001
2002         sdev = kzalloc(sizeof *sdev, GFP_KERNEL);
2003         if (!sdev) {
2004                 dev_err(&client->dev, "Failed to alloc video device.\n");
2005                 rval = -ENOMEM;
2006                 goto exit;
2007         }
2008
2009         sdev->gpio_reset = -1;
2010         if (pdata && gpio_is_valid(pdata->gpio_reset)) {
2011                 rval = gpio_request(pdata->gpio_reset, "si4713 reset");
2012                 if (rval) {
2013                         dev_err(&client->dev,
2014                                 "Failed to request gpio: %d\n", rval);
2015                         goto free_sdev;
2016                 }
2017                 sdev->gpio_reset = pdata->gpio_reset;
2018                 gpio_direction_output(sdev->gpio_reset, 0);
2019         }
2020
2021         for (i = 0; i < ARRAY_SIZE(sdev->supplies); i++)
2022                 sdev->supplies[i].supply = si4713_supply_names[i];
2023
2024         rval = regulator_bulk_get(&client->dev, ARRAY_SIZE(sdev->supplies),
2025                                   sdev->supplies);
2026         if (rval) {
2027                 dev_err(&client->dev, "Cannot get regulators: %d\n", rval);
2028                 goto free_gpio;
2029         }
2030
2031         v4l2_i2c_subdev_init(&sdev->sd, client, &si4713_subdev_ops);
2032
2033         mutex_init(&sdev->mutex);
2034         init_completion(&sdev->work);
2035
2036         if (client->irq) {
2037                 rval = request_irq(client->irq,
2038                         si4713_handler, IRQF_TRIGGER_FALLING | IRQF_DISABLED,
2039                         client->name, sdev);
2040                 if (rval < 0) {
2041                         v4l2_err(&sdev->sd, "Could not request IRQ\n");
2042                         goto put_reg;
2043                 }
2044                 v4l2_dbg(1, debug, &sdev->sd, "IRQ requested.\n");
2045         } else {
2046                 v4l2_warn(&sdev->sd, "IRQ not configured. Using timeouts.\n");
2047         }
2048
2049         rval = si4713_initialize(sdev);
2050         if (rval < 0) {
2051                 v4l2_err(&sdev->sd, "Failed to probe device information.\n");
2052                 goto free_irq;
2053         }
2054
2055         return 0;
2056
2057 free_irq:
2058         if (client->irq)
2059                 free_irq(client->irq, sdev);
2060 put_reg:
2061         regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies);
2062 free_gpio:
2063         if (gpio_is_valid(sdev->gpio_reset))
2064                 gpio_free(sdev->gpio_reset);
2065 free_sdev:
2066         kfree(sdev);
2067 exit:
2068         return rval;
2069 }
2070
2071 /* si4713_remove - remove the device */
2072 static int si4713_remove(struct i2c_client *client)
2073 {
2074         struct v4l2_subdev *sd = i2c_get_clientdata(client);
2075         struct si4713_device *sdev = to_si4713_device(sd);
2076
2077         if (sdev->power_state)
2078                 si4713_set_power_state(sdev, POWER_DOWN);
2079
2080         if (client->irq > 0)
2081                 free_irq(client->irq, sdev);
2082
2083         v4l2_device_unregister_subdev(sd);
2084         regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies);
2085         if (gpio_is_valid(sdev->gpio_reset))
2086                 gpio_free(sdev->gpio_reset);
2087         kfree(sdev);
2088
2089         return 0;
2090 }
2091
2092 /* si4713_i2c_driver - i2c driver interface */
2093 static const struct i2c_device_id si4713_id[] = {
2094         { "si4713" , 0 },
2095         { },
2096 };
2097 MODULE_DEVICE_TABLE(i2c, si4713_id);
2098
2099 static struct i2c_driver si4713_i2c_driver = {
2100         .driver         = {
2101                 .name   = "si4713",
2102         },
2103         .probe          = si4713_probe,
2104         .remove         = si4713_remove,
2105         .id_table       = si4713_id,
2106 };
2107
2108 /* Module Interface */
2109 static int __init si4713_module_init(void)
2110 {
2111         return i2c_add_driver(&si4713_i2c_driver);
2112 }
2113
2114 static void __exit si4713_module_exit(void)
2115 {
2116         i2c_del_driver(&si4713_i2c_driver);
2117 }
2118
2119 module_init(si4713_module_init);
2120 module_exit(si4713_module_exit);
2121