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