cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

si4713.c (42682B)


      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.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 int 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	return 0;
   1640}
   1641
   1642/* si4713_i2c_driver - i2c driver interface */
   1643static const struct i2c_device_id si4713_id[] = {
   1644	{ "si4713" , 0 },
   1645	{ },
   1646};
   1647MODULE_DEVICE_TABLE(i2c, si4713_id);
   1648
   1649#if IS_ENABLED(CONFIG_OF)
   1650static const struct of_device_id si4713_of_match[] = {
   1651	{ .compatible = "silabs,si4713" },
   1652	{ },
   1653};
   1654MODULE_DEVICE_TABLE(of, si4713_of_match);
   1655#endif
   1656
   1657static struct i2c_driver si4713_i2c_driver = {
   1658	.driver		= {
   1659		.name	= "si4713",
   1660		.of_match_table = of_match_ptr(si4713_of_match),
   1661	},
   1662	.probe_new	= si4713_probe,
   1663	.remove         = si4713_remove,
   1664	.id_table       = si4713_id,
   1665};
   1666
   1667module_i2c_driver(si4713_i2c_driver);