.. include:: <isonum.txt>


The SI476x Driver
=================

Copyright |copy| 2013 Andrey Smirnov <andrew.smirnov@gmail.com>

TODO for the driver
-------------------

- According to the SiLabs' datasheet it is possible to update the
  firmware of the radio chip in the run-time, thus bringing it to the
  most recent version. Unfortunately I couldn't find any mentioning of
  the said firmware update for the old chips that I tested the driver
  against, so for chips like that the driver only exposes the old
  functionality.


Parameters exposed over debugfs
-------------------------------
SI476x allow user to get multiple characteristics that can be very
useful for EoL testing/RF performance estimation, parameters that have
very little to do with V4L2 subsystem. Such parameters are exposed via
debugfs and can be accessed via regular file I/O operations.

The drivers exposes following files:

* /sys/kernel/debug/<device-name>/acf
  This file contains ACF(Automatically Controlled Features) status
  information. The contents of the file is binary data of the
  following layout:

  =============  ==============   ====================================
  Offset	  Name		  Description
  =============  ==============   ====================================
  0x00		  blend_int	  Flag, set when stereo separation has
				  crossed below the blend threshold
  0x01		  hblend_int	  Flag, set when HiBlend cutoff
				  frequency is lower than threshold
  0x02		  hicut_int	  Flag, set when HiCut cutoff
				  frequency is lower than threshold
  0x03		  chbw_int	  Flag, set when channel filter
				  bandwidth is less than threshold
  0x04		  softmute_int	  Flag indicating that softmute
				  attenuation has increased above
				  softmute threshold
  0x05		 smute		  0 - Audio is not soft muted
				  1 - Audio is soft muted
  0x06		  smattn	  Soft mute attenuation level in dB
  0x07		  chbw		  Channel filter bandwidth in kHz
  0x08		  hicut		  HiCut cutoff frequency in units of
				  100Hz
  0x09		  hiblend	  HiBlend cutoff frequency in units
				  of 100 Hz
  0x10		  pilot		  0 - Stereo pilot is not present
				  1 - Stereo pilot is present
  0x11		  stblend	  Stereo blend in %
  =============  ==============   ====================================


* /sys/kernel/debug/<device-name>/rds_blckcnt
  This file contains statistics about RDS receptions. It's binary data
  has the following layout:

  =============  ==============   ====================================
  Offset	  Name		  Description
  =============  ==============   ====================================
  0x00		  expected	  Number of expected RDS blocks
  0x02		  received	  Number of received RDS blocks
  0x04		  uncorrectable	  Number of uncorrectable RDS blocks
  =============  ==============   ====================================

* /sys/kernel/debug/<device-name>/agc
  This file contains information about parameters pertaining to
  AGC(Automatic Gain Control)

  The layout is:

  =============  ==============   ====================================
  Offset	  Name		  Description
  =============  ==============   ====================================
  0x00		  mxhi		  0 - FM Mixer PD high threshold is
				  not tripped
				  1 - FM Mixer PD high threshold is
				  tripped
  0x01		  mxlo		  ditto for FM Mixer PD low
  0x02		  lnahi		  ditto for FM LNA PD high
  0x03		  lnalo		  ditto for FM LNA PD low
  0x04		  fmagc1	  FMAGC1 attenuator resistance
				  (see datasheet for more detail)
  0x05		  fmagc2	  ditto for FMAGC2
  0x06		  pgagain	  PGA gain in dB
  0x07		  fmwblang	  FM/WB LNA Gain in dB
  =============  ==============   ====================================

* /sys/kernel/debug/<device-name>/rsq
  This file contains information about parameters pertaining to
  RSQ(Received Signal Quality)

  The layout is:

  =============  ==============   ====================================
  Offset	  Name		  Description
  =============  ==============   ====================================
  0x00		  multhint	  0 - multipath value has not crossed
				  the Multipath high threshold
				  1 - multipath value has crossed
				  the Multipath high threshold
  0x01		  multlint	  ditto for Multipath low threshold
  0x02		  snrhint	  0 - received signal's SNR has not
				  crossed high threshold
				  1 - received signal's SNR has
				  crossed high threshold
  0x03		  snrlint	  ditto for low threshold
  0x04		  rssihint	  ditto for RSSI high threshold
  0x05		  rssilint	  ditto for RSSI low threshold
  0x06		  bltf		  Flag indicating if seek command
				  reached/wrapped seek band limit
  0x07		  snr_ready	  Indicates that SNR metrics is ready
  0x08		  rssiready	  ditto for RSSI metrics
  0x09		  injside	  0 - Low-side injection is being used
				  1 - High-side injection is used
  0x10		  afcrl		  Flag indicating if AFC rails
  0x11		  valid		  Flag indicating if channel is valid
  0x12		  readfreq	  Current tuned frequency
  0x14		  freqoff	  Signed frequency offset in units of
				  2ppm
  0x15		  rssi		  Signed value of RSSI in dBuV
  0x16		  snr		  Signed RF SNR in dB
  0x17		  issi		  Signed Image Strength Signal
				  indicator
  0x18		  lassi		  Signed Low side adjacent Channel
				  Strength indicator
  0x19		  hassi		  ditto fpr High side
  0x20		  mult		  Multipath indicator
  0x21		  dev		  Frequency deviation
  0x24		  assi		  Adjacent channel SSI
  0x25		  usn		  Ultrasonic noise indicator
  0x26		  pilotdev	  Pilot deviation in units of 100 Hz
  0x27		  rdsdev	  ditto for RDS
  0x28		  assidev	  ditto for ASSI
  0x29		  strongdev	  Frequency deviation
  0x30		  rdspi		  RDS PI code
  =============  ==============   ====================================

* /sys/kernel/debug/<device-name>/rsq_primary
  This file contains information about parameters pertaining to
  RSQ(Received Signal Quality) for primary tuner only. Layout is as
  the one above.
