1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * drivers/media/radio/si4713-i2c.c
4 *
5 * Silicon Labs Si4713 FM Radio Transmitter I2C commands.
6 *
7 * Copyright (c) 2009 Nokia Corporation
8 * Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
9 */
10
11#include <linux/completion.h>
12#include <linux/delay.h>
13#include <linux/err.h>
14#include <linux/interrupt.h>
15#include <linux/i2c.h>
16#include <linux/slab.h>
17#include <linux/gpio/consumer.h>
18#include <linux/module.h>
19#include <media/v4l2-device.h>
20#include <media/v4l2-ioctl.h>
21#include <media/v4l2-common.h>
22
23#include "si4713.h"
24
25/* module parameters */
26static int debug;
27module_param(debug, int, S_IRUGO | S_IWUSR);
28MODULE_PARM_DESC(debug, "Debug level (0 - 2)");
29
30MODULE_LICENSE("GPL");
31MODULE_AUTHOR("Eduardo Valentin <eduardo.valentin@nokia.com>");
32MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter");
33MODULE_VERSION("0.0.1");
34
35#define DEFAULT_RDS_PI			0x00
36#define DEFAULT_RDS_PTY			0x00
37#define DEFAULT_RDS_DEVIATION		0x00C8
38#define DEFAULT_RDS_PS_REPEAT_COUNT	0x0003
39#define DEFAULT_LIMITER_RTIME		0x1392
40#define DEFAULT_LIMITER_DEV		0x102CA
41#define DEFAULT_PILOT_FREQUENCY		0x4A38
42#define DEFAULT_PILOT_DEVIATION		0x1A5E
43#define DEFAULT_ACOMP_ATIME		0x0000
44#define DEFAULT_ACOMP_RTIME		0xF4240L
45#define DEFAULT_ACOMP_GAIN		0x0F
46#define DEFAULT_ACOMP_THRESHOLD		(-0x28)
47#define DEFAULT_MUTE			0x01
48#define DEFAULT_POWER_LEVEL		88
49#define DEFAULT_FREQUENCY		8800
50#define DEFAULT_PREEMPHASIS		FMPE_EU
51#define DEFAULT_TUNE_RNL		0xFF
52
53#define to_si4713_device(sd)	container_of(sd, struct si4713_device, sd)
54
55/* frequency domain transformation (using times 10 to avoid floats) */
56#define FREQDEV_UNIT	100000
57#define FREQV4L2_MULTI	625
58#define si4713_to_v4l2(f)	((f * FREQDEV_UNIT) / FREQV4L2_MULTI)
59#define v4l2_to_si4713(f)	((f * FREQV4L2_MULTI) / FREQDEV_UNIT)
60#define FREQ_RANGE_LOW			7600
61#define FREQ_RANGE_HIGH			10800
62
63#define MAX_ARGS 7
64
65#define RDS_BLOCK			8
66#define RDS_BLOCK_CLEAR			0x03
67#define RDS_BLOCK_LOAD			0x04
68#define RDS_RADIOTEXT_2A		0x20
69#define RDS_RADIOTEXT_BLK_SIZE		4
70#define RDS_RADIOTEXT_INDEX_MAX		0x0F
71#define RDS_CARRIAGE_RETURN		0x0D
72
73#define rds_ps_nblocks(len)	((len / RDS_BLOCK) + (len % RDS_BLOCK ? 1 : 0))
74
75#define get_status_bit(p, b, m)	(((p) & (m)) >> (b))
76#define set_bits(p, v, b, m)	(((p) & ~(m)) | ((v) << (b)))
77
78#define ATTACK_TIME_UNIT	500
79
80#define POWER_OFF			0x00
81#define POWER_ON			0x01
82
83#define msb(x)                  ((u8)((u16) x >> 8))
84#define lsb(x)                  ((u8)((u16) x &  0x00FF))
85#define compose_u16(msb, lsb)	(((u16)msb << 8) | lsb)
86#define check_command_failed(status)	(!(status & SI4713_CTS) || \
87					(status & SI4713_ERR))
88/* mute definition */
89#define set_mute(p)	(((p) & 1) | (((p) & 1) << 1))
90
91#ifdef DEBUG
92#define DBG_BUFFER(device, message, buffer, size)			\
93	{								\
94		int i;							\
95		char str[(size)*5];					\
96		for (i = 0; i < size; i++)				\
97			sprintf(str + i * 5, " 0x%02x", buffer[i]);	\
98		v4l2_dbg(2, debug, device, "%s:%s\n", message, str);	\
99	}
100#else
101#define DBG_BUFFER(device, message, buffer, size)
102#endif
103
104/*
105 * Values for limiter release time (sorted by second column)
106 *	device	release
107 *	value	time (us)
108 */
109static long limiter_times[] = {
110	2000,	250,
111	1000,	500,
112	510,	1000,
113	255,	2000,
114	170,	3000,
115	127,	4020,
116	102,	5010,
117	85,	6020,
118	73,	7010,
119	64,	7990,
120	57,	8970,
121	51,	10030,
122	25,	20470,
123	17,	30110,
124	13,	39380,
125	10,	51190,
126	8,	63690,
127	7,	73140,
128	6,	85330,
129	5,	102390,
130};
131
132/*
133 * Values for audio compression release time (sorted by second column)
134 *	device	release
135 *	value	time (us)
136 */
137static unsigned long acomp_rtimes[] = {
138	0,	100000,
139	1,	200000,
140	2,	350000,
141	3,	525000,
142	4,	1000000,
143};
144
145/*
146 * Values for preemphasis (sorted by second column)
147 *	device	preemphasis
148 *	value	value (v4l2)
149 */
150static unsigned long preemphasis_values[] = {
151	FMPE_DISABLED,	V4L2_PREEMPHASIS_DISABLED,
152	FMPE_EU,	V4L2_PREEMPHASIS_50_uS,
153	FMPE_USA,	V4L2_PREEMPHASIS_75_uS,
154};
155
156static int usecs_to_dev(unsigned long usecs, unsigned long const array[],
157			int size)
158{
159	int i;
160	int rval = -EINVAL;
161
162	for (i = 0; i < size / 2; i++)
163		if (array[(i * 2) + 1] >= usecs) {
164			rval = array[i * 2];
165			break;
166		}
167
168	return rval;
169}
170
171/* si4713_handler: IRQ handler, just complete work */
172static irqreturn_t si4713_handler(int irq, void *dev)
173{
174	struct si4713_device *sdev = dev;
175
176	v4l2_dbg(2, debug, &sdev->sd,
177			"%s: sending signal to completion work.\n", __func__);
178	complete(&sdev->work);
179
180	return IRQ_HANDLED;
181}
182
183/*
184 * si4713_send_command - sends a command to si4713 and waits its response
185 * @sdev: si4713_device structure for the device we are communicating
186 * @command: command id
187 * @args: command arguments we are sending (up to 7)
188 * @argn: actual size of @args
189 * @response: buffer to place the expected response from the device (up to 15)
190 * @respn: actual size of @response
191 * @usecs: amount of time to wait before reading the response (in usecs)
192 */
193static int si4713_send_command(struct si4713_device *sdev, const u8 command,
194				const u8 args[], const int argn,
195				u8 response[], const int respn, const int usecs)
196{
197	struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
198	unsigned long until_jiffies;
199	u8 data1[MAX_ARGS + 1];
200	int err;
201
202	if (!client->adapter)
203		return -ENODEV;
204
205	/* First send the command and its arguments */
206	data1[0] = command;
207	memcpy(data1 + 1, args, argn);
208	DBG_BUFFER(&sdev->sd, "Parameters", data1, argn + 1);
209
210	err = i2c_master_send(client, data1, argn + 1);
211	if (err != argn + 1) {
212		v4l2_err(&sdev->sd, "Error while sending command 0x%02x\n",
213			command);
214		return err < 0 ? err : -EIO;
215	}
216
217	until_jiffies = jiffies + usecs_to_jiffies(usecs) + 1;
218
219	/* Wait response from interrupt */
220	if (client->irq) {
221		if (!wait_for_completion_timeout(&sdev->work,
222				usecs_to_jiffies(usecs) + 1))
223			v4l2_warn(&sdev->sd,
224				"(%s) Device took too much time to answer.\n",
225				__func__);
226	}
227
228	do {
229		err = i2c_master_recv(client, response, respn);
230		if (err != respn) {
231			v4l2_err(&sdev->sd,
232				"Error %d while reading response for command 0x%02x\n",
233				err, command);
234			return err < 0 ? err : -EIO;
235		}
236
237		DBG_BUFFER(&sdev->sd, "Response", response, respn);
238		if (!check_command_failed(response[0]))
239			return 0;
240
241		if (client->irq)
242			return -EBUSY;
243		if (usecs <= 1000)
244			usleep_range(usecs, 1000);
245		else
246			usleep_range(1000, 2000);
247	} while (time_is_after_jiffies(until_jiffies));
248
249	return -EBUSY;
250}
251
252/*
253 * si4713_read_property - reads a si4713 property
254 * @sdev: si4713_device structure for the device we are communicating
255 * @prop: property identification number
256 * @pv: property value to be returned on success
257 */
258static int si4713_read_property(struct si4713_device *sdev, u16 prop, u32 *pv)
259{
260	int err;
261	u8 val[SI4713_GET_PROP_NRESP];
262	/*
263	 *	.First byte = 0
264	 *	.Second byte = property's MSB
265	 *	.Third byte = property's LSB
266	 */
267	const u8 args[SI4713_GET_PROP_NARGS] = {
268		0x00,
269		msb(prop),
270		lsb(prop),
271	};
272
273	err = si4713_send_command(sdev, SI4713_CMD_GET_PROPERTY,
274				  args, ARRAY_SIZE(args), val,
275				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
276
277	if (err < 0)
278		return err;
279
280	*pv = compose_u16(val[2], val[3]);
281
282	v4l2_dbg(1, debug, &sdev->sd,
283			"%s: property=0x%02x value=0x%02x status=0x%02x\n",
284			__func__, prop, *pv, val[0]);
285
286	return err;
287}
288
289/*
290 * si4713_write_property - modifies a si4713 property
291 * @sdev: si4713_device structure for the device we are communicating
292 * @prop: property identification number
293 * @val: new value for that property
294 */
295static int si4713_write_property(struct si4713_device *sdev, u16 prop, u16 val)
296{
297	int rval;
298	u8 resp[SI4713_SET_PROP_NRESP];
299	/*
300	 *	.First byte = 0
301	 *	.Second byte = property's MSB
302	 *	.Third byte = property's LSB
303	 *	.Fourth byte = value's MSB
304	 *	.Fifth byte = value's LSB
305	 */
306	const u8 args[SI4713_SET_PROP_NARGS] = {
307		0x00,
308		msb(prop),
309		lsb(prop),
310		msb(val),
311		lsb(val),
312	};
313
314	rval = si4713_send_command(sdev, SI4713_CMD_SET_PROPERTY,
315					args, ARRAY_SIZE(args),
316					resp, ARRAY_SIZE(resp),
317					DEFAULT_TIMEOUT);
318
319	if (rval < 0)
320		return rval;
321
322	v4l2_dbg(1, debug, &sdev->sd,
323			"%s: property=0x%02x value=0x%02x status=0x%02x\n",
324			__func__, prop, val, resp[0]);
325
326	/*
327	 * As there is no command response for SET_PROPERTY,
328	 * wait Tcomp time to finish before proceed, in order
329	 * to have property properly set.
330	 */
331	msleep(TIMEOUT_SET_PROPERTY);
332
333	return rval;
334}
335
336/*
337 * si4713_powerup - Powers the device up
338 * @sdev: si4713_device structure for the device we are communicating
339 */
340static int si4713_powerup(struct si4713_device *sdev)
341{
342	struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
343	int err;
344	u8 resp[SI4713_PWUP_NRESP];
345	/*
346	 *	.First byte = Enabled interrupts and boot function
347	 *	.Second byte = Input operation mode
348	 */
349	u8 args[SI4713_PWUP_NARGS] = {
350		SI4713_PWUP_GPO2OEN | SI4713_PWUP_FUNC_TX,
351		SI4713_PWUP_OPMOD_ANALOG,
352	};
353
354	if (sdev->power_state)
355		return 0;
356
357	if (sdev->vdd) {
358		err = regulator_enable(sdev->vdd);
359		if (err) {
360			v4l2_err(&sdev->sd, "Failed to enable vdd: %d\n", err);
361			return err;
362		}
363	}
364
365	if (sdev->vio) {
366		err = regulator_enable(sdev->vio);
367		if (err) {
368			v4l2_err(&sdev->sd, "Failed to enable vio: %d\n", err);
369			return err;
370		}
371	}
372
373	if (sdev->gpio_reset) {
374		udelay(50);
375		gpiod_set_value(sdev->gpio_reset, 1);
376	}
377
378	if (client->irq)
379		args[0] |= SI4713_PWUP_CTSIEN;
380
381	err = si4713_send_command(sdev, SI4713_CMD_POWER_UP,
382					args, ARRAY_SIZE(args),
383					resp, ARRAY_SIZE(resp),
384					TIMEOUT_POWER_UP);
385
386	if (!err) {
387		v4l2_dbg(1, debug, &sdev->sd, "Powerup response: 0x%02x\n",
388				resp[0]);
389		v4l2_dbg(1, debug, &sdev->sd, "Device in power up mode\n");
390		sdev->power_state = POWER_ON;
391
392		if (client->irq)
393			err = si4713_write_property(sdev, SI4713_GPO_IEN,
394						SI4713_STC_INT | SI4713_CTS);
395		return err;
396	}
397	gpiod_set_value(sdev->gpio_reset, 0);
398
399
400	if (sdev->vdd) {
401		err = regulator_disable(sdev->vdd);
402		if (err)
403			v4l2_err(&sdev->sd, "Failed to disable vdd: %d\n", err);
404	}
405
406	if (sdev->vio) {
407		err = regulator_disable(sdev->vio);
408		if (err)
409			v4l2_err(&sdev->sd, "Failed to disable vio: %d\n", err);
410	}
411
412	return err;
413}
414
415/*
416 * si4713_powerdown - Powers the device down
417 * @sdev: si4713_device structure for the device we are communicating
418 */
419static int si4713_powerdown(struct si4713_device *sdev)
420{
421	int err;
422	u8 resp[SI4713_PWDN_NRESP];
423
424	if (!sdev->power_state)
425		return 0;
426
427	err = si4713_send_command(sdev, SI4713_CMD_POWER_DOWN,
428					NULL, 0,
429					resp, ARRAY_SIZE(resp),
430					DEFAULT_TIMEOUT);
431
432	if (!err) {
433		v4l2_dbg(1, debug, &sdev->sd, "Power down response: 0x%02x\n",
434				resp[0]);
435		v4l2_dbg(1, debug, &sdev->sd, "Device in reset mode\n");
436		if (sdev->gpio_reset)
437			gpiod_set_value(sdev->gpio_reset, 0);
438
439		if (sdev->vdd) {
440			err = regulator_disable(sdev->vdd);
441			if (err) {
442				v4l2_err(&sdev->sd,
443					"Failed to disable vdd: %d\n", err);
444			}
445		}
446
447		if (sdev->vio) {
448			err = regulator_disable(sdev->vio);
449			if (err) {
450				v4l2_err(&sdev->sd,
451					"Failed to disable vio: %d\n", err);
452			}
453		}
454		sdev->power_state = POWER_OFF;
455	}
456
457	return err;
458}
459
460/*
461 * si4713_checkrev - Checks if we are treating a device with the correct rev.
462 * @sdev: si4713_device structure for the device we are communicating
463 */
464static int si4713_checkrev(struct si4713_device *sdev)
465{
466	struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
467	int rval;
468	u8 resp[SI4713_GETREV_NRESP];
469
470	rval = si4713_send_command(sdev, SI4713_CMD_GET_REV,
471					NULL, 0,
472					resp, ARRAY_SIZE(resp),
473					DEFAULT_TIMEOUT);
474
475	if (rval < 0)
476		return rval;
477
478	if (resp[1] == SI4713_PRODUCT_NUMBER) {
479		v4l2_info(&sdev->sd, "chip found @ 0x%02x (%s)\n",
480				client->addr << 1, client->adapter->name);
481	} else {
482		v4l2_err(&sdev->sd, "Invalid product number 0x%X\n", resp[1]);
483		rval = -EINVAL;
484	}
485	return rval;
486}
487
488/*
489 * si4713_wait_stc - Waits STC interrupt and clears status bits. Useful
490 *		     for TX_TUNE_POWER, TX_TUNE_FREQ and TX_TUNE_MEAS
491 * @sdev: si4713_device structure for the device we are communicating
492 * @usecs: timeout to wait for STC interrupt signal
493 */
494static int si4713_wait_stc(struct si4713_device *sdev, const int usecs)
495{
496	struct i2c_client *client = v4l2_get_subdevdata(&sdev->sd);
497	u8 resp[SI4713_GET_STATUS_NRESP];
498	unsigned long start_jiffies = jiffies;
499	int err;
500
501	if (client->irq &&
502	    !wait_for_completion_timeout(&sdev->work, usecs_to_jiffies(usecs) + 1))
503		v4l2_warn(&sdev->sd,
504			"(%s) Device took too much time to answer.\n", __func__);
505
506	for (;;) {
507		/* Clear status bits */
508		err = si4713_send_command(sdev, SI4713_CMD_GET_INT_STATUS,
509				NULL, 0,
510				resp, ARRAY_SIZE(resp),
511				DEFAULT_TIMEOUT);
512		/* The USB device returns errors when it waits for the
513		 * STC bit to be set. Hence polling */
514		if (err >= 0) {
515			v4l2_dbg(1, debug, &sdev->sd,
516				"%s: status bits: 0x%02x\n", __func__, resp[0]);
517
518			if (resp[0] & SI4713_STC_INT)
519				return 0;
520		}
521		if (jiffies_to_usecs(jiffies - start_jiffies) > usecs)
522			return err < 0 ? err : -EIO;
523		/* We sleep here for 3-4 ms in order to avoid flooding the device
524		 * with USB requests. The si4713 USB driver was developed
525		 * by reverse engineering the Windows USB driver. The windows
526		 * driver also has a ~2.5 ms delay between responses. */
527		usleep_range(3000, 4000);
528	}
529}
530
531/*
532 * si4713_tx_tune_freq - Sets the state of the RF carrier and sets the tuning
533 *			frequency between 76 and 108 MHz in 10 kHz units and
534 *			steps of 50 kHz.
535 * @sdev: si4713_device structure for the device we are communicating
536 * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz)
537 */
538static int si4713_tx_tune_freq(struct si4713_device *sdev, u16 frequency)
539{
540	int err;
541	u8 val[SI4713_TXFREQ_NRESP];
542	/*
543	 *	.First byte = 0
544	 *	.Second byte = frequency's MSB
545	 *	.Third byte = frequency's LSB
546	 */
547	const u8 args[SI4713_TXFREQ_NARGS] = {
548		0x00,
549		msb(frequency),
550		lsb(frequency),
551	};
552
553	err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_FREQ,
554				  args, ARRAY_SIZE(args), val,
555				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
556
557	if (err < 0)
558		return err;
559
560	v4l2_dbg(1, debug, &sdev->sd,
561			"%s: frequency=0x%02x status=0x%02x\n", __func__,
562			frequency, val[0]);
563
564	err = si4713_wait_stc(sdev, TIMEOUT_TX_TUNE);
565	if (err < 0)
566		return err;
567
568	return compose_u16(args[1], args[2]);
569}
570
571/*
572 * si4713_tx_tune_power - Sets the RF voltage level between 88 and 120 dBuV in
573 *			1 dB units. A value of 0x00 indicates off. The command
574 *			also sets the antenna tuning capacitance. A value of 0
575 *			indicates autotuning, and a value of 1 - 191 indicates
576 *			a manual override, which results in a tuning
577 *			capacitance of 0.25 pF x @antcap.
578 * @sdev: si4713_device structure for the device we are communicating
579 * @power: tuning power (88 - 120 dBuV, unit/step 1 dB)
580 * @antcap: value of antenna tuning capacitor (0 - 191)
581 */
582static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power,
583				u8 antcap)
584{
585	int err;
586	u8 val[SI4713_TXPWR_NRESP];
587	/*
588	 *	.First byte = 0
589	 *	.Second byte = 0
590	 *	.Third byte = power
591	 *	.Fourth byte = antcap
592	 */
593	u8 args[SI4713_TXPWR_NARGS] = {
594		0x00,
595		0x00,
596		power,
597		antcap,
598	};
599
600	/* Map power values 1-87 to MIN_POWER (88) */
601	if (power > 0 && power < SI4713_MIN_POWER)
602		args[2] = power = SI4713_MIN_POWER;
603
604	err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_POWER,
605				  args, ARRAY_SIZE(args), val,
606				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
607
608	if (err < 0)
609		return err;
610
611	v4l2_dbg(1, debug, &sdev->sd,
612			"%s: power=0x%02x antcap=0x%02x status=0x%02x\n",
613			__func__, power, antcap, val[0]);
614
615	return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE_POWER);
616}
617
618/*
619 * si4713_tx_tune_measure - Enters receive mode and measures the received noise
620 *			level in units of dBuV on the selected frequency.
621 *			The Frequency must be between 76 and 108 MHz in 10 kHz
622 *			units and steps of 50 kHz. The command also sets the
623 *			antenna	tuning capacitance. A value of 0 means
624 *			autotuning, and a value of 1 to 191 indicates manual
625 *			override.
626 * @sdev: si4713_device structure for the device we are communicating
627 * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz)
628 * @antcap: value of antenna tuning capacitor (0 - 191)
629 */
630static int si4713_tx_tune_measure(struct si4713_device *sdev, u16 frequency,
631					u8 antcap)
632{
633	int err;
634	u8 val[SI4713_TXMEA_NRESP];
635	/*
636	 *	.First byte = 0
637	 *	.Second byte = frequency's MSB
638	 *	.Third byte = frequency's LSB
639	 *	.Fourth byte = antcap
640	 */
641	const u8 args[SI4713_TXMEA_NARGS] = {
642		0x00,
643		msb(frequency),
644		lsb(frequency),
645		antcap,
646	};
647
648	sdev->tune_rnl = DEFAULT_TUNE_RNL;
649
650	if (antcap > SI4713_MAX_ANTCAP)
651		return -EDOM;
652
653	err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_MEASURE,
654				  args, ARRAY_SIZE(args), val,
655				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
656
657	if (err < 0)
658		return err;
659
660	v4l2_dbg(1, debug, &sdev->sd,
661			"%s: frequency=0x%02x antcap=0x%02x status=0x%02x\n",
662			__func__, frequency, antcap, val[0]);
663
664	return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE);
665}
666
667/*
668 * si4713_tx_tune_status- Returns the status of the tx_tune_freq, tx_tune_mea or
669 *			tx_tune_power commands. This command return the current
670 *			frequency, output voltage in dBuV, the antenna tunning
671 *			capacitance value and the received noise level. The
672 *			command also clears the stcint interrupt bit when the
673 *			first bit of its arguments is high.
674 * @sdev: si4713_device structure for the device we are communicating
675 * @intack: 0x01 to clear the seek/tune complete interrupt status indicator.
676 * @frequency: returned frequency
677 * @power: returned power
678 * @antcap: returned antenna capacitance
679 * @noise: returned noise level
680 */
681static int si4713_tx_tune_status(struct si4713_device *sdev, u8 intack,
682					u16 *frequency,	u8 *power,
683					u8 *antcap, u8 *noise)
684{
685	int err;
686	u8 val[SI4713_TXSTATUS_NRESP];
687	/*
688	 *	.First byte = intack bit
689	 */
690	const u8 args[SI4713_TXSTATUS_NARGS] = {
691		intack & SI4713_INTACK_MASK,
692	};
693
694	err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_STATUS,
695				  args, ARRAY_SIZE(args), val,
696				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
697
698	if (!err) {
699		v4l2_dbg(1, debug, &sdev->sd,
700			"%s: status=0x%02x\n", __func__, val[0]);
701		*frequency = compose_u16(val[2], val[3]);
702		sdev->frequency = *frequency;
703		*power = val[5];
704		*antcap = val[6];
705		*noise = val[7];
706		v4l2_dbg(1, debug, &sdev->sd,
707			 "%s: response: %d x 10 kHz (power %d, antcap %d, rnl %d)\n",
708			 __func__, *frequency, *power, *antcap, *noise);
709	}
710
711	return err;
712}
713
714/*
715 * si4713_tx_rds_buff - Loads the RDS group buffer FIFO or circular buffer.
716 * @sdev: si4713_device structure for the device we are communicating
717 * @mode: the buffer operation mode.
718 * @rdsb: RDS Block B
719 * @rdsc: RDS Block C
720 * @rdsd: RDS Block D
721 * @cbleft: returns the number of available circular buffer blocks minus the
722 *          number of used circular buffer blocks.
723 */
724static int si4713_tx_rds_buff(struct si4713_device *sdev, u8 mode, u16 rdsb,
725				u16 rdsc, u16 rdsd, s8 *cbleft)
726{
727	int err;
728	u8 val[SI4713_RDSBUFF_NRESP];
729
730	const u8 args[SI4713_RDSBUFF_NARGS] = {
731		mode & SI4713_RDSBUFF_MODE_MASK,
732		msb(rdsb),
733		lsb(rdsb),
734		msb(rdsc),
735		lsb(rdsc),
736		msb(rdsd),
737		lsb(rdsd),
738	};
739
740	err = si4713_send_command(sdev, SI4713_CMD_TX_RDS_BUFF,
741				  args, ARRAY_SIZE(args), val,
742				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
743
744	if (!err) {
745		v4l2_dbg(1, debug, &sdev->sd,
746			"%s: status=0x%02x\n", __func__, val[0]);
747		*cbleft = (s8)val[2] - val[3];
748		v4l2_dbg(1, debug, &sdev->sd,
749			 "%s: response: interrupts 0x%02x cb avail: %d cb used %d fifo avail %d fifo used %d\n",
750			 __func__, val[1], val[2], val[3], val[4], val[5]);
751	}
752
753	return err;
754}
755
756/*
757 * si4713_tx_rds_ps - Loads the program service buffer.
758 * @sdev: si4713_device structure for the device we are communicating
759 * @psid: program service id to be loaded.
760 * @pschar: assumed 4 size char array to be loaded into the program service
761 */
762static int si4713_tx_rds_ps(struct si4713_device *sdev, u8 psid,
763				unsigned char *pschar)
764{
765	int err;
766	u8 val[SI4713_RDSPS_NRESP];
767
768	const u8 args[SI4713_RDSPS_NARGS] = {
769		psid & SI4713_RDSPS_PSID_MASK,
770		pschar[0],
771		pschar[1],
772		pschar[2],
773		pschar[3],
774	};
775
776	err = si4713_send_command(sdev, SI4713_CMD_TX_RDS_PS,
777				  args, ARRAY_SIZE(args), val,
778				  ARRAY_SIZE(val), DEFAULT_TIMEOUT);
779
780	if (err < 0)
781		return err;
782
783	v4l2_dbg(1, debug, &sdev->sd, "%s: status=0x%02x\n", __func__, val[0]);
784
785	return err;
786}
787
788static int si4713_set_power_state(struct si4713_device *sdev, u8 value)
789{
790	if (value)
791		return si4713_powerup(sdev);
792	return si4713_powerdown(sdev);
793}
794
795static int si4713_set_mute(struct si4713_device *sdev, u16 mute)
796{
797	int rval = 0;
798
799	mute = set_mute(mute);
800
801	if (sdev->power_state)
802		rval = si4713_write_property(sdev,
803				SI4713_TX_LINE_INPUT_MUTE, mute);
804
805	return rval;
806}
807
808static int si4713_set_rds_ps_name(struct si4713_device *sdev, char *ps_name)
809{
810	int rval = 0, i;
811	u8 len = 0;
812
813	/* We want to clear the whole thing */
814	if (!strlen(ps_name))
815		memset(ps_name, 0, MAX_RDS_PS_NAME + 1);
816
817	if (sdev->power_state) {
818		/* Write the new ps name and clear the padding */
819		for (i = 0; i < MAX_RDS_PS_NAME; i += (RDS_BLOCK / 2)) {
820			rval = si4713_tx_rds_ps(sdev, (i / (RDS_BLOCK / 2)),
821						ps_name + i);
822			if (rval < 0)
823				return rval;
824		}
825
826		/* Setup the size to be sent */
827		if (strlen(ps_name))
828			len = strlen(ps_name) - 1;
829		else
830			len = 1;
831
832		rval = si4713_write_property(sdev,
833				SI4713_TX_RDS_PS_MESSAGE_COUNT,
834				rds_ps_nblocks(len));
835		if (rval < 0)
836			return rval;
837
838		rval = si4713_write_property(sdev,
839				SI4713_TX_RDS_PS_REPEAT_COUNT,
840				DEFAULT_RDS_PS_REPEAT_COUNT * 2);
841		if (rval < 0)
842			return rval;
843	}
844
845	return rval;
846}
847
848static int si4713_set_rds_radio_text(struct si4713_device *sdev, const char *rt)
849{
850	static const char cr[RDS_RADIOTEXT_BLK_SIZE] = { RDS_CARRIAGE_RETURN, 0 };
851	int rval = 0, i;
852	u16 t_index = 0;
853	u8 b_index = 0, cr_inserted = 0;
854	s8 left;
855
856	if (!sdev->power_state)
857		return rval;
858
859	rval = si4713_tx_rds_buff(sdev, RDS_BLOCK_CLEAR, 0, 0, 0, &left);
860	if (rval < 0)
861		return rval;
862
863	if (!strlen(rt))
864		return rval;
865
866	do {
867		/* RDS spec says that if the last block isn't used,
868		 * then apply a carriage return
869		 */
870		if (t_index < (RDS_RADIOTEXT_INDEX_MAX * RDS_RADIOTEXT_BLK_SIZE)) {
871			for (i = 0; i < RDS_RADIOTEXT_BLK_SIZE; i++) {
872				if (!rt[t_index + i] ||
873				    rt[t_index + i] == RDS_CARRIAGE_RETURN) {
874					rt = cr;
875					cr_inserted = 1;
876					break;
877				}
878			}
879		}
880
881		rval = si4713_tx_rds_buff(sdev, RDS_BLOCK_LOAD,
882				compose_u16(RDS_RADIOTEXT_2A, b_index++),
883				compose_u16(rt[t_index], rt[t_index + 1]),
884				compose_u16(rt[t_index + 2], rt[t_index + 3]),
885				&left);
886		if (rval < 0)
887			return rval;
888
889		t_index += RDS_RADIOTEXT_BLK_SIZE;
890
891		if (cr_inserted)
892			break;
893	} while (left > 0);
894
895	return rval;
896}
897
898/*
899 * si4713_update_tune_status - update properties from tx_tune_status
900 * command. Must be called with sdev->mutex held.
901 * @sdev: si4713_device structure for the device we are communicating
902 */
903static int si4713_update_tune_status(struct si4713_device *sdev)
904{
905	int rval;
906	u16 f = 0;
907	u8 p = 0, a = 0, n = 0;
908
909	rval = si4713_tx_tune_status(sdev, 0x00, &f, &p, &a, &n);
910
911	if (rval < 0)
912		goto exit;
913
914/*	TODO: check that power_level and antenna_capacitor really are not
915	changed by the hardware. If they are, then these controls should become
916	volatiles.
917	sdev->power_level = p;
918	sdev->antenna_capacitor = a;*/
919	sdev->tune_rnl = n;
920
921exit:
922	return rval;
923}
924
925static int si4713_choose_econtrol_action(struct si4713_device *sdev, u32 id,
926		s32 *bit, s32 *mask, u16 *property, int *mul,
927		unsigned long **table, int *size)
928{
929	s32 rval = 0;
930
931	switch (id) {
932	/* FM_TX class controls */
933	case V4L2_CID_RDS_TX_PI:
934		*property = SI4713_TX_RDS_PI;
935		*mul = 1;
936		break;
937	case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
938		*property = SI4713_TX_ACOMP_THRESHOLD;
939		*mul = 1;
940		break;
941	case V4L2_CID_AUDIO_COMPRESSION_GAIN:
942		*property = SI4713_TX_ACOMP_GAIN;
943		*mul = 1;
944		break;
945	case V4L2_CID_PILOT_TONE_FREQUENCY:
946		*property = SI4713_TX_PILOT_FREQUENCY;
947		*mul = 1;
948		break;
949	case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
950		*property = SI4713_TX_ACOMP_ATTACK_TIME;
951		*mul = ATTACK_TIME_UNIT;
952		break;
953	case V4L2_CID_PILOT_TONE_DEVIATION:
954		*property = SI4713_TX_PILOT_DEVIATION;
955		*mul = 10;
956		break;
957	case V4L2_CID_AUDIO_LIMITER_DEVIATION:
958		*property = SI4713_TX_AUDIO_DEVIATION;
959		*mul = 10;
960		break;
961	case V4L2_CID_RDS_TX_DEVIATION:
962		*property = SI4713_TX_RDS_DEVIATION;
963		*mul = 1;
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		break;
971	case V4L2_CID_RDS_TX_DYNAMIC_PTY:
972		*property = SI4713_TX_RDS_PS_MISC;
973		*bit = 15;
974		*mask = 1 << 15;
975		break;
976	case V4L2_CID_RDS_TX_COMPRESSED:
977		*property = SI4713_TX_RDS_PS_MISC;
978		*bit = 14;
979		*mask = 1 << 14;
980		break;
981	case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:
982		*property = SI4713_TX_RDS_PS_MISC;
983		*bit = 13;
984		*mask = 1 << 13;
985		break;
986	case V4L2_CID_RDS_TX_MONO_STEREO:
987		*property = SI4713_TX_RDS_PS_MISC;
988		*bit = 12;
989		*mask = 1 << 12;
990		break;
991	case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:
992		*property = SI4713_TX_RDS_PS_MISC;
993		*bit = 10;
994		*mask = 1 << 10;
995		break;
996	case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT:
997		*property = SI4713_TX_RDS_PS_MISC;
998		*bit = 4;
999		*mask = 1 << 4;
1000		break;
1001	case V4L2_CID_RDS_TX_MUSIC_SPEECH:
1002		*property = SI4713_TX_RDS_PS_MISC;
1003		*bit = 3;
1004		*mask = 1 << 3;
1005		break;
1006	case V4L2_CID_AUDIO_LIMITER_ENABLED:
1007		*property = SI4713_TX_ACOMP_ENABLE;
1008		*bit = 1;
1009		*mask = 1 << 1;
1010		break;
1011	case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
1012		*property = SI4713_TX_ACOMP_ENABLE;
1013		*bit = 0;
1014		*mask = 1 << 0;
1015		break;
1016	case V4L2_CID_PILOT_TONE_ENABLED:
1017		*property = SI4713_TX_COMPONENT_ENABLE;
1018		*bit = 0;
1019		*mask = 1 << 0;
1020		break;
1021
1022	case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1023		*property = SI4713_TX_LIMITER_RELEASE_TIME;
1024		*table = limiter_times;
1025		*size = ARRAY_SIZE(limiter_times);
1026		break;
1027	case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1028		*property = SI4713_TX_ACOMP_RELEASE_TIME;
1029		*table = acomp_rtimes;
1030		*size = ARRAY_SIZE(acomp_rtimes);
1031		break;
1032	case V4L2_CID_TUNE_PREEMPHASIS:
1033		*property = SI4713_TX_PREEMPHASIS;
1034		*table = preemphasis_values;
1035		*size = ARRAY_SIZE(preemphasis_values);
1036		break;
1037
1038	default:
1039		rval = -EINVAL;
1040		break;
1041	}
1042
1043	return rval;
1044}
1045
1046static int si4713_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *f);
1047static int si4713_s_modulator(struct v4l2_subdev *sd, const struct v4l2_modulator *);
1048/*
1049 * si4713_setup - Sets the device up with current configuration.
1050 * @sdev: si4713_device structure for the device we are communicating
1051 */
1052static int si4713_setup(struct si4713_device *sdev)
1053{
1054	struct v4l2_frequency f;
1055	struct v4l2_modulator vm;
1056	int rval;
1057
1058	/* Device procedure needs to set frequency first */
1059	f.tuner = 0;
1060	f.frequency = sdev->frequency ? sdev->frequency : DEFAULT_FREQUENCY;
1061	f.frequency = si4713_to_v4l2(f.frequency);
1062	rval = si4713_s_frequency(&sdev->sd, &f);
1063
1064	vm.index = 0;
1065	if (sdev->stereo)
1066		vm.txsubchans = V4L2_TUNER_SUB_STEREO;
1067	else
1068		vm.txsubchans = V4L2_TUNER_SUB_MONO;
1069	if (sdev->rds_enabled)
1070		vm.txsubchans |= V4L2_TUNER_SUB_RDS;
1071	si4713_s_modulator(&sdev->sd, &vm);
1072
1073	return rval;
1074}
1075
1076/*
1077 * si4713_initialize - Sets the device up with default configuration.
1078 * @sdev: si4713_device structure for the device we are communicating
1079 */
1080static int si4713_initialize(struct si4713_device *sdev)
1081{
1082	int rval;
1083
1084	rval = si4713_set_power_state(sdev, POWER_ON);
1085	if (rval < 0)
1086		return rval;
1087
1088	rval = si4713_checkrev(sdev);
1089	if (rval < 0)
1090		return rval;
1091
1092	rval = si4713_set_power_state(sdev, POWER_OFF);
1093	if (rval < 0)
1094		return rval;
1095
1096	sdev->frequency = DEFAULT_FREQUENCY;
1097	sdev->stereo = 1;
1098	sdev->tune_rnl = DEFAULT_TUNE_RNL;
1099	return 0;
1100}
1101
1102/* si4713_s_ctrl - set the value of a control */
1103static int si4713_s_ctrl(struct v4l2_ctrl *ctrl)
1104{
1105	struct si4713_device *sdev =
1106		container_of(ctrl->handler, struct si4713_device, ctrl_handler);
1107	u32 val = 0;
1108	s32 bit = 0, mask = 0;
1109	u16 property = 0;
1110	int mul = 0;
1111	unsigned long *table = NULL;
1112	int size = 0;
1113	bool force = false;
1114	int c;
1115	int ret = 0;
1116
1117	if (ctrl->id != V4L2_CID_AUDIO_MUTE)
1118		return -EINVAL;
1119	if (ctrl->is_new) {
1120		if (ctrl->val) {
1121			ret = si4713_set_mute(sdev, ctrl->val);
1122			if (!ret)
1123				ret = si4713_set_power_state(sdev, POWER_DOWN);
1124			return ret;
1125		}
1126		ret = si4713_set_power_state(sdev, POWER_UP);
1127		if (!ret)
1128			ret = si4713_set_mute(sdev, ctrl->val);
1129		if (!ret)
1130			ret = si4713_setup(sdev);
1131		if (ret)
1132			return ret;
1133		force = true;
1134	}
1135
1136	if (!sdev->power_state)
1137		return 0;
1138
1139	for (c = 1; !ret && c < ctrl->ncontrols; c++) {
1140		ctrl = ctrl->cluster[c];
1141
1142		if (!force && !ctrl->is_new)
1143			continue;
1144
1145		switch (ctrl->id) {
1146		case V4L2_CID_RDS_TX_PS_NAME:
1147			ret = si4713_set_rds_ps_name(sdev, ctrl->p_new.p_char);
1148			break;
1149
1150		case V4L2_CID_RDS_TX_RADIO_TEXT:
1151			ret = si4713_set_rds_radio_text(sdev, ctrl->p_new.p_char);
1152			break;
1153
1154		case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1155			/* don't handle this control if we force setting all
1156			 * controls since in that case it will be handled by
1157			 * V4L2_CID_TUNE_POWER_LEVEL. */
1158			if (force)
1159				break;
1160			fallthrough;
1161		case V4L2_CID_TUNE_POWER_LEVEL:
1162			ret = si4713_tx_tune_power(sdev,
1163				sdev->tune_pwr_level->val, sdev->tune_ant_cap->val);
1164			if (!ret) {
1165				/* Make sure we don't set this twice */
1166				sdev->tune_ant_cap->is_new = false;
1167				sdev->tune_pwr_level->is_new = false;
1168			}
1169			break;
1170
1171		case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:
1172		case V4L2_CID_RDS_TX_ALT_FREQS:
1173			if (sdev->rds_alt_freqs_enable->val) {
1174				val = sdev->rds_alt_freqs->p_new.p_u32[0];
1175				val = val / 100 - 876 + 0xe101;
1176			} else {
1177				val = 0xe0e0;
1178			}
1179			ret = si4713_write_property(sdev, SI4713_TX_RDS_PS_AF, val);
1180			break;
1181
1182		default:
1183			ret = si4713_choose_econtrol_action(sdev, ctrl->id, &bit,
1184					&mask, &property, &mul, &table, &size);
1185			if (ret < 0)
1186				break;
1187
1188			val = ctrl->val;
1189			if (mul) {
1190				val = val / mul;
1191			} else if (table) {
1192				ret = usecs_to_dev(val, table, size);
1193				if (ret < 0)
1194					break;
1195				val = ret;
1196				ret = 0;
1197			}
1198
1199			if (mask) {
1200				ret = si4713_read_property(sdev, property, &val);
1201				if (ret < 0)
1202					break;
1203				val = set_bits(val, ctrl->val, bit, mask);
1204			}
1205
1206			ret = si4713_write_property(sdev, property, val);
1207			if (ret < 0)
1208				break;
1209			if (mask)
1210				val = ctrl->val;
1211			break;
1212		}
1213	}
1214
1215	return ret;
1216}
1217
1218/* si4713_ioctl - deal with private ioctls (only rnl for now) */
1219static long si4713_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
1220{
1221	struct si4713_device *sdev = to_si4713_device(sd);
1222	struct si4713_rnl *rnl = arg;
1223	u16 frequency;
1224	int rval = 0;
1225
1226	if (!arg)
1227		return -EINVAL;
1228
1229	switch (cmd) {
1230	case SI4713_IOC_MEASURE_RNL:
1231		frequency = v4l2_to_si4713(rnl->frequency);
1232
1233		if (sdev->power_state) {
1234			/* Set desired measurement frequency */
1235			rval = si4713_tx_tune_measure(sdev, frequency, 0);
1236			if (rval < 0)
1237				return rval;
1238			/* get results from tune status */
1239			rval = si4713_update_tune_status(sdev);
1240			if (rval < 0)
1241				return rval;
1242		}
1243		rnl->rnl = sdev->tune_rnl;
1244		break;
1245
1246	default:
1247		/* nothing */
1248		rval = -ENOIOCTLCMD;
1249	}
1250
1251	return rval;
1252}
1253
1254/* si4713_g_modulator - get modulator attributes */
1255static int si4713_g_modulator(struct v4l2_subdev *sd, struct v4l2_modulator *vm)
1256{
1257	struct si4713_device *sdev = to_si4713_device(sd);
1258	int rval = 0;
1259
1260	if (!sdev)
1261		return -ENODEV;
1262
1263	if (vm->index > 0)
1264		return -EINVAL;
1265
1266	strscpy(vm->name, "FM Modulator", sizeof(vm->name));
1267	vm->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LOW |
1268		V4L2_TUNER_CAP_RDS | V4L2_TUNER_CAP_RDS_CONTROLS;
1269
1270	/* Report current frequency range limits */
1271	vm->rangelow = si4713_to_v4l2(FREQ_RANGE_LOW);
1272	vm->rangehigh = si4713_to_v4l2(FREQ_RANGE_HIGH);
1273
1274	if (sdev->power_state) {
1275		u32 comp_en = 0;
1276
1277		rval = si4713_read_property(sdev, SI4713_TX_COMPONENT_ENABLE,
1278						&comp_en);
1279		if (rval < 0)
1280			return rval;
1281
1282		sdev->stereo = get_status_bit(comp_en, 1, 1 << 1);
1283	}
1284
1285	/* Report current audio mode: mono or stereo */
1286	if (sdev->stereo)
1287		vm->txsubchans = V4L2_TUNER_SUB_STEREO;
1288	else
1289		vm->txsubchans = V4L2_TUNER_SUB_MONO;
1290
1291	/* Report rds feature status */
1292	if (sdev->rds_enabled)
1293		vm->txsubchans |= V4L2_TUNER_SUB_RDS;
1294	else
1295		vm->txsubchans &= ~V4L2_TUNER_SUB_RDS;
1296
1297	return rval;
1298}
1299
1300/* si4713_s_modulator - set modulator attributes */
1301static int si4713_s_modulator(struct v4l2_subdev *sd, const struct v4l2_modulator *vm)
1302{
1303	struct si4713_device *sdev = to_si4713_device(sd);
1304	int rval = 0;
1305	u16 stereo, rds;
1306	u32 p;
1307
1308	if (!sdev)
1309		return -ENODEV;
1310
1311	if (vm->index > 0)
1312		return -EINVAL;
1313
1314	/* Set audio mode: mono or stereo */
1315	if (vm->txsubchans & V4L2_TUNER_SUB_STEREO)
1316		stereo = 1;
1317	else if (vm->txsubchans & V4L2_TUNER_SUB_MONO)
1318		stereo = 0;
1319	else
1320		return -EINVAL;
1321
1322	rds = !!(vm->txsubchans & V4L2_TUNER_SUB_RDS);
1323
1324	if (sdev->power_state) {
1325		rval = si4713_read_property(sdev,
1326						SI4713_TX_COMPONENT_ENABLE, &p);
1327		if (rval < 0)
1328			return rval;
1329
1330		p = set_bits(p, stereo, 1, 1 << 1);
1331		p = set_bits(p, rds, 2, 1 << 2);
1332
1333		rval = si4713_write_property(sdev,
1334						SI4713_TX_COMPONENT_ENABLE, p);
1335		if (rval < 0)
1336			return rval;
1337	}
1338
1339	sdev->stereo = stereo;
1340	sdev->rds_enabled = rds;
1341
1342	return rval;
1343}
1344
1345/* si4713_g_frequency - get tuner or modulator radio frequency */
1346static int si4713_g_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *f)
1347{
1348	struct si4713_device *sdev = to_si4713_device(sd);
1349	int rval = 0;
1350
1351	if (f->tuner)
1352		return -EINVAL;
1353
1354	if (sdev->power_state) {
1355		u16 freq;
1356		u8 p, a, n;
1357
1358		rval = si4713_tx_tune_status(sdev, 0x00, &freq, &p, &a, &n);
1359		if (rval < 0)
1360			return rval;
1361
1362		sdev->frequency = freq;
1363	}
1364
1365	f->frequency = si4713_to_v4l2(sdev->frequency);
1366
1367	return rval;
1368}
1369
1370/* si4713_s_frequency - set tuner or modulator radio frequency */
1371static int si4713_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *f)
1372{
1373	struct si4713_device *sdev = to_si4713_device(sd);
1374	int rval = 0;
1375	u16 frequency = v4l2_to_si4713(f->frequency);
1376
1377	if (f->tuner)
1378		return -EINVAL;
1379
1380	/* Check frequency range */
1381	frequency = clamp_t(u16, frequency, FREQ_RANGE_LOW, FREQ_RANGE_HIGH);
1382
1383	if (sdev->power_state) {
1384		rval = si4713_tx_tune_freq(sdev, frequency);
1385		if (rval < 0)
1386			return rval;
1387		frequency = rval;
1388		rval = 0;
1389	}
1390	sdev->frequency = frequency;
1391
1392	return rval;
1393}
1394
1395static const struct v4l2_ctrl_ops si4713_ctrl_ops = {
1396	.s_ctrl = si4713_s_ctrl,
1397};
1398
1399static const struct v4l2_subdev_core_ops si4713_subdev_core_ops = {
1400	.ioctl		= si4713_ioctl,
1401};
1402
1403static const struct v4l2_subdev_tuner_ops si4713_subdev_tuner_ops = {
1404	.g_frequency	= si4713_g_frequency,
1405	.s_frequency	= si4713_s_frequency,
1406	.g_modulator	= si4713_g_modulator,
1407	.s_modulator	= si4713_s_modulator,
1408};
1409
1410static const struct v4l2_subdev_ops si4713_subdev_ops = {
1411	.core		= &si4713_subdev_core_ops,
1412	.tuner		= &si4713_subdev_tuner_ops,
1413};
1414
1415static const struct v4l2_ctrl_config si4713_alt_freqs_ctrl = {
1416	.id = V4L2_CID_RDS_TX_ALT_FREQS,
1417	.type = V4L2_CTRL_TYPE_U32,
1418	.min = 87600,
1419	.max = 107900,
1420	.step = 100,
1421	.def = 87600,
1422	.dims = { 1 },
1423	.elem_size = sizeof(u32),
1424};
1425
1426/*
1427 * I2C driver interface
1428 */
1429/* si4713_probe - probe for the device */
1430static int si4713_probe(struct i2c_client *client)
1431{
1432	struct si4713_device *sdev;
1433	struct v4l2_ctrl_handler *hdl;
1434	struct si4713_platform_data *pdata = client->dev.platform_data;
1435	struct device_node *np = client->dev.of_node;
1436	struct radio_si4713_platform_data si4713_pdev_pdata;
1437	struct platform_device *si4713_pdev;
1438	int rval;
1439
1440	sdev = devm_kzalloc(&client->dev, sizeof(*sdev), GFP_KERNEL);
1441	if (!sdev) {
1442		dev_err(&client->dev, "Failed to alloc video device.\n");
1443		rval = -ENOMEM;
1444		goto exit;
1445	}
1446
1447	sdev->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset",
1448						   GPIOD_OUT_LOW);
1449	if (IS_ERR(sdev->gpio_reset)) {
1450		rval = PTR_ERR(sdev->gpio_reset);
1451		dev_err(&client->dev, "Failed to request gpio: %d\n", rval);
1452		goto exit;
1453	}
1454
1455	sdev->vdd = devm_regulator_get_optional(&client->dev, "vdd");
1456	if (IS_ERR(sdev->vdd)) {
1457		rval = PTR_ERR(sdev->vdd);
1458		if (rval == -EPROBE_DEFER)
1459			goto exit;
1460
1461		dev_dbg(&client->dev, "no vdd regulator found: %d\n", rval);
1462		sdev->vdd = NULL;
1463	}
1464
1465	sdev->vio = devm_regulator_get_optional(&client->dev, "vio");
1466	if (IS_ERR(sdev->vio)) {
1467		rval = PTR_ERR(sdev->vio);
1468		if (rval == -EPROBE_DEFER)
1469			goto exit;
1470
1471		dev_dbg(&client->dev, "no vio regulator found: %d\n", rval);
1472		sdev->vio = NULL;
1473	}
1474
1475	v4l2_i2c_subdev_init(&sdev->sd, client, &si4713_subdev_ops);
1476
1477	init_completion(&sdev->work);
1478
1479	hdl = &sdev->ctrl_handler;
1480	v4l2_ctrl_handler_init(hdl, 20);
1481	sdev->mute = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1482			V4L2_CID_AUDIO_MUTE, 0, 1, 1, DEFAULT_MUTE);
1483
1484	sdev->rds_pi = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1485			V4L2_CID_RDS_TX_PI, 0, 0xffff, 1, DEFAULT_RDS_PI);
1486	sdev->rds_pty = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1487			V4L2_CID_RDS_TX_PTY, 0, 31, 1, DEFAULT_RDS_PTY);
1488	sdev->rds_compressed = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1489			V4L2_CID_RDS_TX_COMPRESSED, 0, 1, 1, 0);
1490	sdev->rds_art_head = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1491			V4L2_CID_RDS_TX_ARTIFICIAL_HEAD, 0, 1, 1, 0);
1492	sdev->rds_stereo = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1493			V4L2_CID_RDS_TX_MONO_STEREO, 0, 1, 1, 1);
1494	sdev->rds_tp = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1495			V4L2_CID_RDS_TX_TRAFFIC_PROGRAM, 0, 1, 1, 0);
1496	sdev->rds_ta = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1497			V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT, 0, 1, 1, 0);
1498	sdev->rds_ms = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1499			V4L2_CID_RDS_TX_MUSIC_SPEECH, 0, 1, 1, 1);
1500	sdev->rds_dyn_pty = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1501			V4L2_CID_RDS_TX_DYNAMIC_PTY, 0, 1, 1, 0);
1502	sdev->rds_alt_freqs_enable = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1503			V4L2_CID_RDS_TX_ALT_FREQS_ENABLE, 0, 1, 1, 0);
1504	sdev->rds_alt_freqs = v4l2_ctrl_new_custom(hdl, &si4713_alt_freqs_ctrl, NULL);
1505	sdev->rds_deviation = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1506			V4L2_CID_RDS_TX_DEVIATION, 0, MAX_RDS_DEVIATION,
1507			10, DEFAULT_RDS_DEVIATION);
1508	/*
1509	 * Report step as 8. From RDS spec, psname
1510	 * should be 8. But there are receivers which scroll strings
1511	 * sized as 8xN.
1512	 */
1513	sdev->rds_ps_name = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1514			V4L2_CID_RDS_TX_PS_NAME, 0, MAX_RDS_PS_NAME, 8, 0);
1515	/*
1516	 * Report step as 32 (2A block). From RDS spec,
1517	 * radio text should be 32 for 2A block. But there are receivers
1518	 * which scroll strings sized as 32xN. Setting default to 32.
1519	 */
1520	sdev->rds_radio_text = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1521			V4L2_CID_RDS_TX_RADIO_TEXT, 0, MAX_RDS_RADIO_TEXT, 32, 0);
1522
1523	sdev->limiter_enabled = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1524			V4L2_CID_AUDIO_LIMITER_ENABLED, 0, 1, 1, 1);
1525	sdev->limiter_release_time = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1526			V4L2_CID_AUDIO_LIMITER_RELEASE_TIME, 250,
1527			MAX_LIMITER_RELEASE_TIME, 10, DEFAULT_LIMITER_RTIME);
1528	sdev->limiter_deviation = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1529			V4L2_CID_AUDIO_LIMITER_DEVIATION, 0,
1530			MAX_LIMITER_DEVIATION, 10, DEFAULT_LIMITER_DEV);
1531
1532	sdev->compression_enabled = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1533			V4L2_CID_AUDIO_COMPRESSION_ENABLED, 0, 1, 1, 1);
1534	sdev->compression_gain = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1535			V4L2_CID_AUDIO_COMPRESSION_GAIN, 0, MAX_ACOMP_GAIN, 1,
1536			DEFAULT_ACOMP_GAIN);
1537	sdev->compression_threshold = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1538			V4L2_CID_AUDIO_COMPRESSION_THRESHOLD,
1539			MIN_ACOMP_THRESHOLD, MAX_ACOMP_THRESHOLD, 1,
1540			DEFAULT_ACOMP_THRESHOLD);
1541	sdev->compression_attack_time = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1542			V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME, 0,
1543			MAX_ACOMP_ATTACK_TIME, 500, DEFAULT_ACOMP_ATIME);
1544	sdev->compression_release_time = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1545			V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME, 100000,
1546			MAX_ACOMP_RELEASE_TIME, 100000, DEFAULT_ACOMP_RTIME);
1547
1548	sdev->pilot_tone_enabled = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1549			V4L2_CID_PILOT_TONE_ENABLED, 0, 1, 1, 1);
1550	sdev->pilot_tone_deviation = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1551			V4L2_CID_PILOT_TONE_DEVIATION, 0, MAX_PILOT_DEVIATION,
1552			10, DEFAULT_PILOT_DEVIATION);
1553	sdev->pilot_tone_freq = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1554			V4L2_CID_PILOT_TONE_FREQUENCY, 0, MAX_PILOT_FREQUENCY,
1555			1, DEFAULT_PILOT_FREQUENCY);
1556
1557	sdev->tune_preemphasis = v4l2_ctrl_new_std_menu(hdl, &si4713_ctrl_ops,
1558			V4L2_CID_TUNE_PREEMPHASIS,
1559			V4L2_PREEMPHASIS_75_uS, 0, V4L2_PREEMPHASIS_50_uS);
1560	sdev->tune_pwr_level = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1561			V4L2_CID_TUNE_POWER_LEVEL, 0, SI4713_MAX_POWER,
1562			1, DEFAULT_POWER_LEVEL);
1563	sdev->tune_ant_cap = v4l2_ctrl_new_std(hdl, &si4713_ctrl_ops,
1564			V4L2_CID_TUNE_ANTENNA_CAPACITOR, 0, SI4713_MAX_ANTCAP,
1565			1, 0);
1566
1567	if (hdl->error) {
1568		rval = hdl->error;
1569		goto free_ctrls;
1570	}
1571	v4l2_ctrl_cluster(29, &sdev->mute);
1572	sdev->sd.ctrl_handler = hdl;
1573
1574	if (client->irq) {
1575		rval = devm_request_irq(&client->dev, client->irq,
1576			si4713_handler, IRQF_TRIGGER_FALLING,
1577			client->name, sdev);
1578		if (rval < 0) {
1579			v4l2_err(&sdev->sd, "Could not request IRQ\n");
1580			goto free_ctrls;
1581		}
1582		v4l2_dbg(1, debug, &sdev->sd, "IRQ requested.\n");
1583	} else {
1584		v4l2_warn(&sdev->sd, "IRQ not configured. Using timeouts.\n");
1585	}
1586
1587	rval = si4713_initialize(sdev);
1588	if (rval < 0) {
1589		v4l2_err(&sdev->sd, "Failed to probe device information.\n");
1590		goto free_ctrls;
1591	}
1592
1593	if (!np && (!pdata || !pdata->is_platform_device))
1594		return 0;
1595
1596	si4713_pdev = platform_device_alloc("radio-si4713", -1);
1597	if (!si4713_pdev) {
1598		rval = -ENOMEM;
1599		goto put_main_pdev;
1600	}
1601
1602	si4713_pdev_pdata.subdev = client;
1603	rval = platform_device_add_data(si4713_pdev, &si4713_pdev_pdata,
1604					sizeof(si4713_pdev_pdata));
1605	if (rval)
1606		goto put_main_pdev;
1607
1608	rval = platform_device_add(si4713_pdev);
1609	if (rval)
1610		goto put_main_pdev;
1611
1612	sdev->pd = si4713_pdev;
1613
1614	return 0;
1615
1616put_main_pdev:
1617	platform_device_put(si4713_pdev);
1618	v4l2_device_unregister_subdev(&sdev->sd);
1619free_ctrls:
1620	v4l2_ctrl_handler_free(hdl);
1621exit:
1622	return rval;
1623}
1624
1625/* si4713_remove - remove the device */
1626static void si4713_remove(struct i2c_client *client)
1627{
1628	struct v4l2_subdev *sd = i2c_get_clientdata(client);
1629	struct si4713_device *sdev = to_si4713_device(sd);
1630
1631	platform_device_unregister(sdev->pd);
1632
1633	if (sdev->power_state)
1634		si4713_set_power_state(sdev, POWER_DOWN);
1635
1636	v4l2_device_unregister_subdev(sd);
1637	v4l2_ctrl_handler_free(sd->ctrl_handler);
1638}
1639
1640/* si4713_i2c_driver - i2c driver interface */
1641static const struct i2c_device_id si4713_id[] = {
1642	{ "si4713" , 0 },
1643	{ },
1644};
1645MODULE_DEVICE_TABLE(i2c, si4713_id);
1646
1647#if IS_ENABLED(CONFIG_OF)
1648static const struct of_device_id si4713_of_match[] = {
1649	{ .compatible = "silabs,si4713" },
1650	{ },
1651};
1652MODULE_DEVICE_TABLE(of, si4713_of_match);
1653#endif
1654
1655static struct i2c_driver si4713_i2c_driver = {
1656	.driver		= {
1657		.name	= "si4713",
1658		.of_match_table = of_match_ptr(si4713_of_match),
1659	},
1660	.probe		= si4713_probe,
1661	.remove         = si4713_remove,
1662	.id_table       = si4713_id,
1663};
1664
1665module_i2c_driver(si4713_i2c_driver);
1666