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