About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / video4linux / si4713.txt


Based on kernel version 4.7.2. Page generated on 2016-08-22 22:48 EST.

1	Driver for I2C radios for the Silicon Labs Si4713 FM Radio Transmitters
2	
3	Copyright (c) 2009 Nokia Corporation
4	Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
5	
6	
7	Information about the Device
8	============================
9	This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address.
10	Basically, it has transmission and signal noise level measurement features.
11	
12	The Si4713 integrates transmit functions for FM broadcast stereo transmission.
13	The chip also allows integrated receive power scanning to identify low signal
14	power FM channels.
15	
16	The chip is programmed using commands and responses. There are also several
17	properties which can change the behavior of this chip.
18	
19	Users must comply with local regulations on radio frequency (RF) transmission.
20	
21	Device driver description
22	=========================
23	There are two modules to handle this device. One is a I2C device driver
24	and the other is a platform driver.
25	
26	The I2C device driver exports a v4l2-subdev interface to the kernel.
27	All properties can also be accessed by v4l2 extended controls interface, by
28	using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls).
29	
30	The platform device driver exports a v4l2 radio device interface to user land.
31	So, it uses the I2C device driver as a sub device in order to send the user
32	commands to the actual device. Basically it is a wrapper to the I2C device driver.
33	
34	Applications can use v4l2 radio API to specify frequency of operation, mute state,
35	etc. But mostly of its properties will be present in the extended controls.
36	
37	When the v4l2 mute property is set to 1 (true), the driver will turn the chip off.
38	
39	Properties description
40	======================
41	
42	The properties can be accessed using v4l2 extended controls.
43	Here is an output from v4l2-ctl util:
44	/ # v4l2-ctl -d /dev/radio0 --all -L
45	Driver Info:
46		Driver name   : radio-si4713
47		Card type     : Silicon Labs Si4713 Modulator
48		Bus info      :
49		Driver version: 0
50		Capabilities  : 0x00080800
51			RDS Output
52			Modulator
53	Audio output: 0 (FM Modulator Audio Out)
54	Frequency: 1408000 (88.000000 MHz)
55	Video Standard = 0x00000000
56	Modulator:
57		Name                 : FM Modulator
58		Capabilities         : 62.5 Hz stereo rds
59		Frequency range      : 76.0 MHz - 108.0 MHz
60		Subchannel modulation: stereo+rds
61	
62	User Controls
63	
64				   mute (bool) : default=1 value=0
65	
66	FM Radio Modulator Controls
67	
68		   rds_signal_deviation (int)  : min=0 max=90000 step=10 default=200 value=200 flags=slider
69			 rds_program_id (int)  : min=0 max=65535 step=1 default=0 value=0
70		       rds_program_type (int)  : min=0 max=31 step=1 default=0 value=0
71			    rds_ps_name (str)  : min=0 max=96 step=8 value='si4713  '
72			 rds_radio_text (str)  : min=0 max=384 step=32 value=''
73	  audio_limiter_feature_enabled (bool) : default=1 value=1
74	     audio_limiter_release_time (int)  : min=250 max=102390 step=50 default=5010 value=5010 flags=slider
75		audio_limiter_deviation (int)  : min=0 max=90000 step=10 default=66250 value=66250 flags=slider
76	audio_compression_feature_enabl (bool) : default=1 value=1
77		 audio_compression_gain (int)  : min=0 max=20 step=1 default=15 value=15 flags=slider
78	    audio_compression_threshold (int)  : min=-40 max=0 step=1 default=-40 value=-40 flags=slider
79	  audio_compression_attack_time (int)  : min=0 max=5000 step=500 default=0 value=0 flags=slider
80	 audio_compression_release_time (int)  : min=100000 max=1000000 step=100000 default=1000000 value=1000000 flags=slider
81	     pilot_tone_feature_enabled (bool) : default=1 value=1
82		   pilot_tone_deviation (int)  : min=0 max=90000 step=10 default=6750 value=6750 flags=slider
83		   pilot_tone_frequency (int)  : min=0 max=19000 step=1 default=19000 value=19000 flags=slider
84		  pre_emphasis_settings (menu) : min=0 max=2 default=1 value=1
85		       tune_power_level (int)  : min=0 max=120 step=1 default=88 value=88 flags=slider
86		 tune_antenna_capacitor (int)  : min=0 max=191 step=1 default=0 value=110 flags=slider
87	/ #
88	
89	Here is a summary of them:
90	
91	* Pilot is an audible tone sent by the device.
92	
93	pilot_frequency - Configures the frequency of the stereo pilot tone.
94	pilot_deviation - Configures pilot tone frequency deviation level.
95	pilot_enabled - Enables or disables the pilot tone feature.
96	
97	* The si4713 device is capable of applying audio compression to the transmitted signal.
98	
99	acomp_enabled - Enables or disables the audio dynamic range control feature.
100	acomp_gain - Sets the gain for audio dynamic range control.
101	acomp_threshold - Sets the threshold level for audio dynamic range control.
102	acomp_attack_time - Sets the attack time for audio dynamic range control.
103	acomp_release_time - Sets the release time for audio dynamic range control.
104	
105	* Limiter setups audio deviation limiter feature. Once a over deviation occurs,
106	it is possible to adjust the front-end gain of the audio input and always
107	prevent over deviation.
108	
109	limiter_enabled - Enables or disables the limiter feature.
110	limiter_deviation - Configures audio frequency deviation level.
111	limiter_release_time - Sets the limiter release time.
112	
113	* Tuning power
114	
115	power_level - Sets the output power level for signal transmission.
116	antenna_capacitor - This selects the value of antenna tuning capacitor manually
117	or automatically if set to zero.
118	
119	* RDS related
120	
121	rds_ps_name - Sets the RDS ps name field for transmission.
122	rds_radio_text - Sets the RDS radio text for transmission.
123	rds_pi - Sets the RDS PI field for transmission.
124	rds_pty - Sets the RDS PTY field for transmission.
125	
126	* Region related
127	
128	preemphasis - sets the preemphasis to be applied for transmission.
129	
130	RNL
131	===
132	
133	This device also has an interface to measure received noise level. To do that, you should
134	ioctl the device node. Here is an code of example:
135	
136	int main (int argc, char *argv[])
137	{
138		struct si4713_rnl rnl;
139		int fd = open("/dev/radio0", O_RDWR);
140		int rval;
141	
142		if (argc < 2)
143			return -EINVAL;
144	
145		if (fd < 0)
146			return fd;
147	
148		sscanf(argv[1], "%d", &rnl.frequency);
149	
150		rval = ioctl(fd, SI4713_IOC_MEASURE_RNL, &rnl);
151		if (rval < 0)
152			return rval;
153	
154		printf("received noise level: %d\n", rnl.rnl);
155	
156		close(fd);
157	}
158	
159	The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under
160	include/linux/platform_data/media/si4713.h.
161	
162	Stereo/Mono and RDS subchannels
163	===============================
164	
165	The device can also be configured using the available sub channels for
166	transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly.
167	Refer to the V4L2 API specification for proper use of this ioctl.
168	
169	Testing
170	=======
171	Testing is usually done with v4l2-ctl utility for managing FM tuner cards.
172	The tool can be found in v4l-dvb repository under v4l2-apps/util directory.
173	
174	Example for setting rds ps name:
175	# v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy"
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog