linux/Documentation/video4linux/si4713.txt
<<
>>
Prefs
   1Driver for I2C radios for the Silicon Labs Si4713 FM Radio Transmitters
   2
   3Copyright (c) 2009 Nokia Corporation
   4Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
   5
   6
   7Information about the Device
   8============================
   9This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address.
  10Basically, it has transmission and signal noise level measurement features.
  11
  12The Si4713 integrates transmit functions for FM broadcast stereo transmission.
  13The chip also allows integrated receive power scanning to identify low signal
  14power FM channels.
  15
  16The chip is programmed using commands and responses. There are also several
  17properties which can change the behavior of this chip.
  18
  19Users must comply with local regulations on radio frequency (RF) transmission.
  20
  21Device driver description
  22=========================
  23There are two modules to handle this device. One is a I2C device driver
  24and the other is a platform driver.
  25
  26The I2C device driver exports a v4l2-subdev interface to the kernel.
  27All properties can also be accessed by v4l2 extended controls interface, by
  28using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls).
  29
  30The platform device driver exports a v4l2 radio device interface to user land.
  31So, it uses the I2C device driver as a sub device in order to send the user
  32commands to the actual device. Basically it is a wrapper to the I2C device driver.
  33
  34Applications can use v4l2 radio API to specify frequency of operation, mute state,
  35etc. But mostly of its properties will be present in the extended controls.
  36
  37When the v4l2 mute property is set to 1 (true), the driver will turn the chip off.
  38
  39Properties description
  40======================
  41
  42The properties can be accessed using v4l2 extended controls.
  43Here is an output from v4l2-ctl util:
  44/ # v4l2-ctl -d /dev/radio0 --all -L
  45Driver 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
  53Audio output: 0 (FM Modulator Audio Out)
  54Frequency: 1408000 (88.000000 MHz)
  55Video Standard = 0x00000000
  56Modulator:
  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
  62User Controls
  63
  64                           mute (bool) : default=1 value=0
  65
  66FM 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
  76audio_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
  89Here is a summary of them:
  90
  91* Pilot is an audible tone sent by the device.
  92
  93pilot_frequency - Configures the frequency of the stereo pilot tone.
  94pilot_deviation - Configures pilot tone frequency deviation level.
  95pilot_enabled - Enables or disables the pilot tone feature.
  96
  97* The si4713 device is capable of applying audio compression to the transmitted signal.
  98
  99acomp_enabled - Enables or disables the audio dynamic range control feature.
 100acomp_gain - Sets the gain for audio dynamic range control.
 101acomp_threshold - Sets the threshold level for audio dynamic range control.
 102acomp_attack_time - Sets the attack time for audio dynamic range control.
 103acomp_release_time - Sets the release time for audio dynamic range control.
 104
 105* Limiter setups audio deviation limiter feature. Once a over deviation occurs,
 106it is possible to adjust the front-end gain of the audio input and always
 107prevent over deviation.
 108
 109limiter_enabled - Enables or disables the limiter feature.
 110limiter_deviation - Configures audio frequency deviation level.
 111limiter_release_time - Sets the limiter release time.
 112
 113* Tuning power
 114
 115power_level - Sets the output power level for signal transmission.
 116antenna_capacitor - This selects the value of antenna tuning capacitor manually
 117or automatically if set to zero.
 118
 119* RDS related
 120
 121rds_ps_name - Sets the RDS ps name field for transmission.
 122rds_radio_text - Sets the RDS radio text for transmission.
 123rds_pi - Sets the RDS PI field for transmission.
 124rds_pty - Sets the RDS PTY field for transmission.
 125
 126* Region related
 127
 128preemphasis - sets the preemphasis to be applied for transmission.
 129
 130RNL
 131===
 132
 133This device also has an interface to measure received noise level. To do that, you should
 134ioctl the device node. Here is an code of example:
 135
 136int 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
 159The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under
 160include/media/si4713.h.
 161
 162Stereo/Mono and RDS subchannels
 163===============================
 164
 165The device can also be configured using the available sub channels for
 166transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly.
 167Refer to the V4L2 API specification for proper use of this ioctl.
 168
 169Testing
 170=======
 171Testing is usually done with v4l2-ctl utility for managing FM tuner cards.
 172The tool can be found in v4l-dvb repository under v4l2-apps/util directory.
 173
 174Example for setting rds ps name:
 175# v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy"
 176
 177
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.