blob: 3022e7cfe9a80bb3c35c06b62ad40f201dafcb16 [file] [log] [blame]
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -03001.. include:: <isonum.txt>
Eduardo Valentin436e7e72009-08-08 09:01:34 -03002
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -03003The Silicon Labs Si4713 FM Radio Transmitter Driver
4===================================================
5
6Copyright |copy| 2009 Nokia Corporation
7
Eduardo Valentin436e7e72009-08-08 09:01:34 -03008Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
9
10
11Information about the Device
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030012----------------------------
13
Eduardo Valentin436e7e72009-08-08 09:01:34 -030014This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address.
15Basically, it has transmission and signal noise level measurement features.
16
17The Si4713 integrates transmit functions for FM broadcast stereo transmission.
18The chip also allows integrated receive power scanning to identify low signal
19power FM channels.
20
21The chip is programmed using commands and responses. There are also several
22properties which can change the behavior of this chip.
23
24Users must comply with local regulations on radio frequency (RF) transmission.
25
26Device driver description
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030027-------------------------
28
Eduardo Valentin436e7e72009-08-08 09:01:34 -030029There are two modules to handle this device. One is a I2C device driver
30and the other is a platform driver.
31
32The I2C device driver exports a v4l2-subdev interface to the kernel.
33All properties can also be accessed by v4l2 extended controls interface, by
34using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls).
35
36The platform device driver exports a v4l2 radio device interface to user land.
37So, it uses the I2C device driver as a sub device in order to send the user
38commands to the actual device. Basically it is a wrapper to the I2C device driver.
39
40Applications can use v4l2 radio API to specify frequency of operation, mute state,
41etc. But mostly of its properties will be present in the extended controls.
42
43When the v4l2 mute property is set to 1 (true), the driver will turn the chip off.
44
45Properties description
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030046----------------------
Eduardo Valentin436e7e72009-08-08 09:01:34 -030047
48The properties can be accessed using v4l2 extended controls.
49Here is an output from v4l2-ctl util:
Eduardo Valentin436e7e72009-08-08 09:01:34 -030050
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030051.. code-block:: none
Eduardo Valentin436e7e72009-08-08 09:01:34 -030052
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030053 / # 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
Eduardo Valentin436e7e72009-08-08 09:01:34 -030070
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030071 User Controls
Eduardo Valentin436e7e72009-08-08 09:01:34 -030072
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -030073 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
Eduardo Valentin436e7e72009-08-08 09:01:34 -030096
97Here is a summary of them:
98
99* Pilot is an audible tone sent by the device.
100
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300101- 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.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300104
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300105* The si4713 device is capable of applying audio compression to the
106 transmitted signal.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300107
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300108- 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.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300113
114* Limiter setups audio deviation limiter feature. Once a over deviation occurs,
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300115 it is possible to adjust the front-end gain of the audio input and always
116 prevent over deviation.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300117
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300118- 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.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300121
122* Tuning power
123
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300124- 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.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300127
128* RDS related
129
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300130- 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.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300134
135* Region related
136
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300137- preemphasis - sets the preemphasis to be applied for transmission.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300138
139RNL
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300140---
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300141
142This device also has an interface to measure received noise level. To do that, you should
143ioctl the device node. Here is an code of example:
144
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300145.. code-block:: none
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300146
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300147 int main (int argc, char *argv[])
148 {
149 struct si4713_rnl rnl;
150 int fd = open("/dev/radio0", O_RDWR);
151 int rval;
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300152
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300153 if (argc < 2)
154 return -EINVAL;
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300155
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300156 if (fd < 0)
157 return fd;
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300158
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300159 sscanf(argv[1], "%d", &rnl.frequency);
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300160
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300161 rval = ioctl(fd, SI4713_IOC_MEASURE_RNL, &rnl);
162 if (rval < 0)
163 return rval;
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300164
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300165 printf("received noise level: %d\n", rnl.rnl);
166
167 close(fd);
168 }
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300169
170The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under
Mauro Carvalho Chehabeb4b0ec2015-11-16 08:35:53 -0200171include/linux/platform_data/media/si4713.h.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300172
173Stereo/Mono and RDS subchannels
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300174-------------------------------
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300175
176The device can also be configured using the available sub channels for
177transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly.
Hans Verkuil57f902d2009-11-25 11:27:16 -0300178Refer to the V4L2 API specification for proper use of this ioctl.
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300179
180Testing
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300181-------
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300182Testing is usually done with v4l2-ctl utility for managing FM tuner cards.
183The tool can be found in v4l-dvb repository under v4l2-apps/util directory.
184
185Example for setting rds ps name:
Mauro Carvalho Chehabb2993572016-07-17 20:07:16 -0300186
187.. code-block:: none
188
189 # v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy"
Eduardo Valentin436e7e72009-08-08 09:01:34 -0300190