/* * si4713_tx_tune_freq - Sets the state of the RF carrier and sets the tuning * frequency between 76 and 108 MHz in 10 kHz units and * steps of 50 kHz. * @sdev: si4713_device structure for the device we are communicating * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz) */ static int si4713_tx_tune_freq(struct si4713_device *sdev, u16 frequency) { int err; u8 val[SI4713_TXFREQ_NRESP]; /* * .First byte = 0 * .Second byte = frequency's MSB * .Third byte = frequency's LSB */ const u8 args[SI4713_TXFREQ_NARGS] = { 0x00, msb(frequency), lsb(frequency), }; err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_FREQ, args, ARRAY_SIZE(args), val, ARRAY_SIZE(val), DEFAULT_TIMEOUT); if (err < 0) return err; v4l2_dbg(1, debug, &sdev->sd, "%s: frequency=0x%02x status=0x%02x\n", __func__, frequency, val[0]); err = si4713_wait_stc(sdev, TIMEOUT_TX_TUNE); if (err < 0) return err; return compose_u16(args[1], args[2]); }
/* * si4713_tx_tune_power - Sets the RF voltage level between 88 and 115 dBuV in * 1 dB units. A value of 0x00 indicates off. The command * also sets the antenna tuning capacitance. A value of 0 * indicates autotuning, and a value of 1 - 191 indicates * a manual override, which results in a tuning * capacitance of 0.25 pF x @antcap. * @sdev: si4713_device structure for the device we are communicating * @power: tuning power (88 - 115 dBuV, unit/step 1 dB) * @antcap: value of antenna tuning capacitor (0 - 191) */ static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power, u8 antcap) { int err; u8 val[SI4713_TXPWR_NRESP]; /* * .First byte = 0 * .Second byte = 0 * .Third byte = power * .Fourth byte = antcap */ const u8 args[SI4713_TXPWR_NARGS] = { 0x00, 0x00, power, antcap, }; if (((power > 0) && (power < SI4713_MIN_POWER)) || power > SI4713_MAX_POWER || antcap > SI4713_MAX_ANTCAP) return -EDOM; err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_POWER, args, ARRAY_SIZE(args), val, ARRAY_SIZE(val), DEFAULT_TIMEOUT); if (err < 0) return err; v4l2_dbg(1, debug, &sdev->sd, "%s: power=0x%02x antcap=0x%02x status=0x%02x\n", __func__, power, antcap, val[0]); return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE_POWER); }
/* * si4713_tx_tune_power - Sets the RF voltage level between 88 and 120 dBuV in * 1 dB units. A value of 0x00 indicates off. The command * also sets the antenna tuning capacitance. A value of 0 * indicates autotuning, and a value of 1 - 191 indicates * a manual override, which results in a tuning * capacitance of 0.25 pF x @antcap. * @sdev: si4713_device structure for the device we are communicating * @power: tuning power (88 - 120 dBuV, unit/step 1 dB) * @antcap: value of antenna tuning capacitor (0 - 191) */ static int si4713_tx_tune_power(struct si4713_device *sdev, u8 power, u8 antcap) { int err; u8 val[SI4713_TXPWR_NRESP]; /* * .First byte = 0 * .Second byte = 0 * .Third byte = power * .Fourth byte = antcap */ u8 args[SI4713_TXPWR_NARGS] = { 0x00, 0x00, power, antcap, }; /* Map power values 1-87 to MIN_POWER (88) */ if (power > 0 && power < SI4713_MIN_POWER) args[2] = power = SI4713_MIN_POWER; err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_POWER, args, ARRAY_SIZE(args), val, ARRAY_SIZE(val), DEFAULT_TIMEOUT); if (err < 0) return err; v4l2_dbg(1, debug, &sdev->sd, "%s: power=0x%02x antcap=0x%02x status=0x%02x\n", __func__, power, antcap, val[0]); return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE_POWER); }
/* * si4713_tx_tune_measure - Enters receive mode and measures the received noise * level in units of dBuV on the selected frequency. * The Frequency must be between 76 and 108 MHz in 10 kHz * units and steps of 50 kHz. The command also sets the * antenna tuning capacitance. A value of 0 means * autotuning, and a value of 1 to 191 indicates manual * override. * @sdev: si4713_device structure for the device we are communicating * @frequency: desired frequency (76 - 108 MHz, unit 10 KHz, step 50 kHz) * @antcap: value of antenna tuning capacitor (0 - 191) */ static int si4713_tx_tune_measure(struct si4713_device *sdev, u16 frequency, u8 antcap) { int err; u8 val[SI4713_TXMEA_NRESP]; /* * .First byte = 0 * .Second byte = frequency's MSB * .Third byte = frequency's LSB * .Fourth byte = antcap */ const u8 args[SI4713_TXMEA_NARGS] = { 0x00, msb(frequency), lsb(frequency), antcap, }; sdev->tune_rnl = DEFAULT_TUNE_RNL; if (antcap > SI4713_MAX_ANTCAP) return -EDOM; err = si4713_send_command(sdev, SI4713_CMD_TX_TUNE_MEASURE, args, ARRAY_SIZE(args), val, ARRAY_SIZE(val), DEFAULT_TIMEOUT); if (err < 0) return err; v4l2_dbg(1, debug, &sdev->sd, "%s: frequency=0x%02x antcap=0x%02x status=0x%02x\n", __func__, frequency, antcap, val[0]); return si4713_wait_stc(sdev, TIMEOUT_TX_TUNE); }