si4713.rst 6.7 KB

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