forked from sdr/rtl-sdr
Compare commits
11 Commits
af33886796
...
619ac3186e
Author | SHA1 | Date |
---|---|---|
Oliver Smith | 619ac3186e | |
Steve Markgraf | 7ebcb041f2 | |
Harald Welte | ab2434e30d | |
Ethan Halsall | d81ef9a9d9 | |
Ethan Halsall | e04c42c019 | |
Steve Markgraf | ef23f806ec | |
Steve Markgraf | dd2511a7c2 | |
Sultan Qasim Khan | 2acb75cff3 | |
Sultan Qasim Khan | 0b64f07fd5 | |
Oliver Jowett | f5978e8871 | |
hayati ayguen | 91ef34d922 |
|
@ -0,0 +1 @@
|
||||||
|
open_collective: osmocom
|
|
@ -1,3 +1,34 @@
|
||||||
|
rtl-sdr (2.0.2) unstable; urgency=medium
|
||||||
|
|
||||||
|
[ Mikael Falkvidd ]
|
||||||
|
* Fix small typo in rtl_sdr man page
|
||||||
|
|
||||||
|
[ Clayton Smith ]
|
||||||
|
* Use library paths from pkg-config
|
||||||
|
* Only use LIBUSB_LINK_LIBRARIES if it exists
|
||||||
|
|
||||||
|
[ hayati ayguen ]
|
||||||
|
* improve CLI usage docs: '-d' also accepts serial
|
||||||
|
|
||||||
|
[ Oliver Jowett ]
|
||||||
|
* r82xx: improve tuner precision
|
||||||
|
|
||||||
|
[ Sultan Qasim Khan ]
|
||||||
|
* r82xx: avoid redundant register writes for speed
|
||||||
|
* r82xx: batch register writes for tuning
|
||||||
|
|
||||||
|
[ Ethan Halsall ]
|
||||||
|
* fix: set fc0012 gain to low on init
|
||||||
|
* fix: round gain input to nearest value
|
||||||
|
|
||||||
|
[ Harald Welte ]
|
||||||
|
* Add funding link to github mirror
|
||||||
|
|
||||||
|
[ Steve Markgraf ]
|
||||||
|
* lib: set SOVERSION back to 0
|
||||||
|
|
||||||
|
-- Oliver Smith <osmith@sysmocom.de> Tue, 23 Apr 2024 11:40:18 +0200
|
||||||
|
|
||||||
rtl-sdr (2.0.1) unstable; urgency=medium
|
rtl-sdr (2.0.1) unstable; urgency=medium
|
||||||
|
|
||||||
* debian/changelog: update for 2.0.0 and 2.0.1
|
* debian/changelog: update for 2.0.0 and 2.0.1
|
||||||
|
|
|
@ -29,7 +29,7 @@ target_include_directories(rtlsdr PUBLIC
|
||||||
)
|
)
|
||||||
set_target_properties(rtlsdr PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS")
|
set_target_properties(rtlsdr PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS")
|
||||||
set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr)
|
set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr)
|
||||||
set_target_properties(rtlsdr PROPERTIES SOVERSION ${MAJOR_VERSION})
|
set_target_properties(rtlsdr PROPERTIES SOVERSION 0)
|
||||||
set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER})
|
set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER})
|
||||||
generate_export_header(rtlsdr)
|
generate_export_header(rtlsdr)
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ void usage(void)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"rtl_adsb, a simple ADS-B decoder\n\n"
|
"rtl_adsb, a simple ADS-B decoder\n\n"
|
||||||
"Use:\trtl_adsb [-R] [-g gain] [-p ppm] [output file]\n"
|
"Use:\trtl_adsb [-R] [-g gain] [-p ppm] [output file]\n"
|
||||||
"\t[-d device_index (default: 0)]\n"
|
"\t[-d device_index or serial (default: 0)]\n"
|
||||||
"\t[-V verbove output (default: off)]\n"
|
"\t[-V verbove output (default: off)]\n"
|
||||||
"\t[-S show short frames (default: off)]\n"
|
"\t[-S show short frames (default: off)]\n"
|
||||||
"\t[-Q quality (0: no sanity checks, 0.5: half bit, 1: one bit (default), 2: two bits)]\n"
|
"\t[-Q quality (0: no sanity checks, 0.5: half bit, 1: one bit (default), 2: two bits)]\n"
|
||||||
|
|
|
@ -192,7 +192,7 @@ void usage(void)
|
||||||
"\t wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp\n"
|
"\t wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp\n"
|
||||||
"\t raw mode outputs 2x16 bit IQ pairs\n"
|
"\t raw mode outputs 2x16 bit IQ pairs\n"
|
||||||
"\t[-s sample_rate (default: 24k)]\n"
|
"\t[-s sample_rate (default: 24k)]\n"
|
||||||
"\t[-d device_index (default: 0)]\n"
|
"\t[-d device_index or serial (default: 0)]\n"
|
||||||
"\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n"
|
"\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n"
|
||||||
"\t[-g tuner_gain (default: automatic)]\n"
|
"\t[-g tuner_gain (default: automatic)]\n"
|
||||||
"\t[-l squelch_level (default: 0/off)]\n"
|
"\t[-l squelch_level (default: 0/off)]\n"
|
||||||
|
|
|
@ -130,7 +130,7 @@ void usage(void)
|
||||||
"\t[-e exit_timer (default: off/0)]\n"
|
"\t[-e exit_timer (default: off/0)]\n"
|
||||||
//"\t[-s avg/iir smoothing (default: avg)]\n"
|
//"\t[-s avg/iir smoothing (default: avg)]\n"
|
||||||
//"\t[-t threads (default: 1)]\n"
|
//"\t[-t threads (default: 1)]\n"
|
||||||
"\t[-d device_index (default: 0)]\n"
|
"\t[-d device_index or serial (default: 0)]\n"
|
||||||
"\t[-g tuner_gain (default: automatic)]\n"
|
"\t[-g tuner_gain (default: automatic)]\n"
|
||||||
"\t[-p ppm_error (default: 0)]\n"
|
"\t[-p ppm_error (default: 0)]\n"
|
||||||
"\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n"
|
"\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n"
|
||||||
|
|
|
@ -49,7 +49,7 @@ void usage(void)
|
||||||
"rtl_sdr, an I/Q recorder for RTL2832 based DVB-T receivers\n\n"
|
"rtl_sdr, an I/Q recorder for RTL2832 based DVB-T receivers\n\n"
|
||||||
"Usage:\t -f frequency_to_tune_to [Hz]\n"
|
"Usage:\t -f frequency_to_tune_to [Hz]\n"
|
||||||
"\t[-s samplerate (default: 2048000 Hz)]\n"
|
"\t[-s samplerate (default: 2048000 Hz)]\n"
|
||||||
"\t[-d device_index (default: 0)]\n"
|
"\t[-d device_index or serial (default: 0)]\n"
|
||||||
"\t[-g gain (default: 0 for auto)]\n"
|
"\t[-g gain (default: 0 for auto)]\n"
|
||||||
"\t[-p ppm_error (default: 0)]\n"
|
"\t[-p ppm_error (default: 0)]\n"
|
||||||
"\t[-b output_block_size (default: 16 * 16384)]\n"
|
"\t[-b output_block_size (default: 16 * 16384)]\n"
|
||||||
|
|
|
@ -102,7 +102,7 @@ void usage(void)
|
||||||
printf("\t[-s samplerate in Hz (default: %d Hz)]\n", DEFAULT_SAMPLE_RATE_HZ);
|
printf("\t[-s samplerate in Hz (default: %d Hz)]\n", DEFAULT_SAMPLE_RATE_HZ);
|
||||||
printf("\t[-b number of buffers (default: 15, set by library)]\n");
|
printf("\t[-b number of buffers (default: 15, set by library)]\n");
|
||||||
printf("\t[-n max number of linked list buffers to keep (default: %d)]\n", DEFAULT_MAX_NUM_BUFFERS);
|
printf("\t[-n max number of linked list buffers to keep (default: %d)]\n", DEFAULT_MAX_NUM_BUFFERS);
|
||||||
printf("\t[-d device index (default: 0)]\n");
|
printf("\t[-d device index or serial (default: 0)]\n");
|
||||||
printf("\t[-P ppm_error (default: 0)]\n");
|
printf("\t[-P ppm_error (default: 0)]\n");
|
||||||
printf("\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n");
|
printf("\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n");
|
||||||
printf("\t[-D enable direct sampling (default: off)]\n");
|
printf("\t[-D enable direct sampling (default: off)]\n");
|
||||||
|
|
|
@ -90,7 +90,7 @@ void usage(void)
|
||||||
"rtl_test, a benchmark tool for RTL2832 based DVB-T receivers\n\n"
|
"rtl_test, a benchmark tool for RTL2832 based DVB-T receivers\n\n"
|
||||||
"Usage:\n"
|
"Usage:\n"
|
||||||
"\t[-s samplerate (default: 2048000 Hz)]\n"
|
"\t[-s samplerate (default: 2048000 Hz)]\n"
|
||||||
"\t[-d device_index (default: 0)]\n"
|
"\t[-d device_index or serial (default: 0)]\n"
|
||||||
"\t[-t enable Elonics E4000 tuner benchmark]\n"
|
"\t[-t enable Elonics E4000 tuner benchmark]\n"
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
"\t[-p[seconds] enable PPM error measurement (default: 10 seconds)]\n"
|
"\t[-p[seconds] enable PPM error measurement (default: 10 seconds)]\n"
|
||||||
|
|
|
@ -114,7 +114,7 @@ int fc0012_init(void *dev)
|
||||||
0x00, /* reg. 0x10: may also be 0x0d */
|
0x00, /* reg. 0x10: may also be 0x0d */
|
||||||
0x00, /* reg. 0x11 */
|
0x00, /* reg. 0x11 */
|
||||||
0x1f, /* reg. 0x12: Set to maximum gain */
|
0x1f, /* reg. 0x12: Set to maximum gain */
|
||||||
0x08, /* reg. 0x13: Set to Middle Gain: 0x08,
|
0x00, /* reg. 0x13: Set to Low Gain: 0x00,
|
||||||
Low Gain: 0x00, High Gain: 0x10, enable IX2: 0x80 */
|
Low Gain: 0x00, High Gain: 0x10, enable IX2: 0x80 */
|
||||||
0x00, /* reg. 0x14 */
|
0x00, /* reg. 0x14 */
|
||||||
0x04, /* reg. 0x15: Enable LNA COMPS */
|
0x04, /* reg. 0x15: Enable LNA COMPS */
|
||||||
|
@ -321,23 +321,11 @@ int fc0012_set_gain(void *dev, int gain)
|
||||||
/* mask bits off */
|
/* mask bits off */
|
||||||
tmp &= 0xe0;
|
tmp &= 0xe0;
|
||||||
|
|
||||||
switch (gain) {
|
if (gain < -40) tmp |= 0x02; /* -9.9 dB */
|
||||||
case -99: /* -9.9 dB */
|
else if (gain < 71) tmp |= 0x00; /* -4.0 dB */
|
||||||
tmp |= 0x02;
|
else if (gain < 179) tmp |= 0x08; /* 7.1 dB */
|
||||||
break;
|
else if (gain < 192) tmp |= 0x17; /* 17.9 dB */
|
||||||
case -40: /* -4 dB */
|
else tmp |= 0x10; /* 19.2 dB */
|
||||||
break;
|
|
||||||
case 71:
|
|
||||||
tmp |= 0x08; /* 7.1 dB */
|
|
||||||
break;
|
|
||||||
case 179:
|
|
||||||
tmp |= 0x17; /* 17.9 dB */
|
|
||||||
break;
|
|
||||||
case 192:
|
|
||||||
default:
|
|
||||||
tmp |= 0x10; /* 19.2 dB */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = fc0012_writereg(dev, 0x13, tmp);
|
ret = fc0012_writereg(dev, 0x13, tmp);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "rtlsdr_i2c.h"
|
#include "rtlsdr_i2c.h"
|
||||||
#include "tuner_r82xx.h"
|
#include "tuner_r82xx.h"
|
||||||
|
@ -243,6 +244,7 @@ static void shadow_store(struct r82xx_priv *priv, uint8_t reg, const uint8_t *va
|
||||||
|
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
len += r;
|
len += r;
|
||||||
|
val -= r;
|
||||||
r = 0;
|
r = 0;
|
||||||
}
|
}
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
|
@ -253,11 +255,29 @@ static void shadow_store(struct r82xx_priv *priv, uint8_t reg, const uint8_t *va
|
||||||
memcpy(&priv->regs[r], val, len);
|
memcpy(&priv->regs[r], val, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool shadow_equal(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val,
|
||||||
|
int len)
|
||||||
|
{
|
||||||
|
int r = reg - REG_SHADOW_START;
|
||||||
|
|
||||||
|
if (r < 0 || len < 0 || len > NUM_REGS - r)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (memcmp(&priv->regs[r], val, len) == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static int r82xx_write(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val,
|
static int r82xx_write(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val,
|
||||||
unsigned int len)
|
unsigned int len)
|
||||||
{
|
{
|
||||||
int rc, size, pos = 0;
|
int rc, size, pos = 0;
|
||||||
|
|
||||||
|
/* Avoid setting registers unnecessarily since it's slow */
|
||||||
|
if (shadow_equal(priv, reg, val, len))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* Store the shadow registers */
|
/* Store the shadow registers */
|
||||||
shadow_store(priv, reg, val, len);
|
shadow_store(priv, reg, val, len);
|
||||||
|
|
||||||
|
@ -424,17 +444,21 @@ static int r82xx_set_mux(struct r82xx_priv *priv, uint32_t freq)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint8_t mask_reg8(uint8_t reg, uint8_t val, uint8_t mask)
|
||||||
|
{
|
||||||
|
return (reg & ~mask) | (val & mask);
|
||||||
|
}
|
||||||
|
|
||||||
static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
|
static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
|
||||||
{
|
{
|
||||||
int rc, i;
|
int rc, i;
|
||||||
unsigned sleep_time = 10000;
|
unsigned sleep_time = 10000;
|
||||||
uint64_t vco_freq;
|
uint64_t vco_freq;
|
||||||
uint32_t vco_fra; /* VCO contribution by SDM (kHz) */
|
uint64_t vco_div;
|
||||||
uint32_t vco_min = 1770000;
|
uint32_t vco_min = 1770000; /* kHz */
|
||||||
uint32_t vco_max = vco_min * 2;
|
uint32_t vco_max = vco_min * 2; /* kHz */
|
||||||
uint32_t freq_khz, pll_ref, pll_ref_khz;
|
uint32_t freq_khz, pll_ref;
|
||||||
uint16_t n_sdm = 2;
|
uint32_t sdm = 0;
|
||||||
uint16_t sdm = 0;
|
|
||||||
uint8_t mix_div = 2;
|
uint8_t mix_div = 2;
|
||||||
uint8_t div_buf = 0;
|
uint8_t div_buf = 0;
|
||||||
uint8_t div_num = 0;
|
uint8_t div_num = 0;
|
||||||
|
@ -442,25 +466,24 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
|
||||||
uint8_t refdiv2 = 0;
|
uint8_t refdiv2 = 0;
|
||||||
uint8_t ni, si, nint, vco_fine_tune, val;
|
uint8_t ni, si, nint, vco_fine_tune, val;
|
||||||
uint8_t data[5];
|
uint8_t data[5];
|
||||||
|
uint8_t regs[7];
|
||||||
|
|
||||||
/* Frequency in kHz */
|
/* Frequency in kHz */
|
||||||
freq_khz = (freq + 500) / 1000;
|
freq_khz = (freq + 500) / 1000;
|
||||||
pll_ref = priv->cfg->xtal;
|
pll_ref = priv->cfg->xtal;
|
||||||
pll_ref_khz = (priv->cfg->xtal + 500) / 1000;
|
|
||||||
|
|
||||||
rc = r82xx_write_reg_mask(priv, 0x10, refdiv2, 0x10);
|
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/* set pll autotune = 128kHz */
|
/* set pll autotune = 128kHz */
|
||||||
rc = r82xx_write_reg_mask(priv, 0x1a, 0x00, 0x0c);
|
rc = r82xx_write_reg_mask(priv, 0x1a, 0x00, 0x0c);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
/* regs 0x10 to 0x16 */
|
||||||
|
memcpy(regs, &priv->regs[0x10 - REG_SHADOW_START], 7);
|
||||||
|
|
||||||
|
regs[0] = mask_reg8(regs[0], refdiv2, 0x10);
|
||||||
|
|
||||||
/* set VCO current = 100 */
|
/* set VCO current = 100 */
|
||||||
rc = r82xx_write_reg_mask(priv, 0x12, 0x80, 0xe0);
|
regs[2] = mask_reg8(regs[2], 0x80, 0xe0);
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/* Calculate divider */
|
/* Calculate divider */
|
||||||
while (mix_div <= 64) {
|
while (mix_div <= 64) {
|
||||||
|
@ -490,13 +513,27 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
|
||||||
else if (vco_fine_tune < vco_power_ref)
|
else if (vco_fine_tune < vco_power_ref)
|
||||||
div_num = div_num + 1;
|
div_num = div_num + 1;
|
||||||
|
|
||||||
rc = r82xx_write_reg_mask(priv, 0x10, div_num << 5, 0xe0);
|
regs[0] = mask_reg8(regs[0], div_num << 5, 0xe0);
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
vco_freq = (uint64_t)freq * (uint64_t)mix_div;
|
vco_freq = (uint64_t)freq * (uint64_t)mix_div;
|
||||||
nint = vco_freq / (2 * pll_ref);
|
|
||||||
vco_fra = (vco_freq - 2 * pll_ref * nint) / 1000;
|
/* We want to approximate:
|
||||||
|
* vco_freq / (2 * pll_ref)
|
||||||
|
*
|
||||||
|
* in the form:
|
||||||
|
* nint + sdm/65536
|
||||||
|
*
|
||||||
|
* where nint,sdm are integers and 0 < nint, 0 <= sdm < 65536
|
||||||
|
*
|
||||||
|
* Scaling to fixed point and rounding:
|
||||||
|
*
|
||||||
|
* vco_div = 65536*(nint + sdm/65536) = int( 0.5 + 65536 * vco_freq / (2 * pll_ref) )
|
||||||
|
* vco_div = 65536*nint + sdm = int( (pll_ref + 65536 * vco_freq) / (2 * pll_ref) )
|
||||||
|
*/
|
||||||
|
|
||||||
|
vco_div = (pll_ref + 65536 * vco_freq) / (2 * pll_ref);
|
||||||
|
nint = (uint32_t) (vco_div / 65536);
|
||||||
|
sdm = (uint32_t) (vco_div % 65536);
|
||||||
|
|
||||||
if (nint > ((128 / vco_power_ref) - 1)) {
|
if (nint > ((128 / vco_power_ref) - 1)) {
|
||||||
fprintf(stderr, "[R82XX] No valid PLL values for %u Hz!\n", freq);
|
fprintf(stderr, "[R82XX] No valid PLL values for %u Hz!\n", freq);
|
||||||
|
@ -506,35 +543,20 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq)
|
||||||
ni = (nint - 13) / 4;
|
ni = (nint - 13) / 4;
|
||||||
si = nint - 4 * ni - 13;
|
si = nint - 4 * ni - 13;
|
||||||
|
|
||||||
rc = r82xx_write_reg(priv, 0x14, ni + (si << 6));
|
regs[4] = ni + (si << 6);
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/* pw_sdm */
|
/* pw_sdm */
|
||||||
if (!vco_fra)
|
if (sdm == 0)
|
||||||
val = 0x08;
|
val = 0x08;
|
||||||
else
|
else
|
||||||
val = 0x00;
|
val = 0x00;
|
||||||
|
|
||||||
rc = r82xx_write_reg_mask(priv, 0x12, val, 0x08);
|
regs[2] = mask_reg8(regs[2], val, 0x08);
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/* sdm calculator */
|
regs[5] = sdm & 0xff;
|
||||||
while (vco_fra > 1) {
|
regs[6] = sdm >> 8;
|
||||||
if (vco_fra > (2 * pll_ref_khz / n_sdm)) {
|
|
||||||
sdm = sdm + 32768 / (n_sdm / 2);
|
|
||||||
vco_fra = vco_fra - 2 * pll_ref_khz / n_sdm;
|
|
||||||
if (n_sdm >= 0x8000)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n_sdm <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = r82xx_write_reg(priv, 0x16, sdm >> 8);
|
rc = r82xx_write(priv, 0x10, regs, 7);
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
rc = r82xx_write_reg(priv, 0x15, sdm & 0xff);
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
@ -1317,6 +1339,7 @@ int r82xx_init(struct r82xx_priv *priv)
|
||||||
priv->xtal_cap_sel = XTAL_HIGH_CAP_0P;
|
priv->xtal_cap_sel = XTAL_HIGH_CAP_0P;
|
||||||
|
|
||||||
/* Initialize registers */
|
/* Initialize registers */
|
||||||
|
memset(priv->regs, 0, NUM_REGS);
|
||||||
rc = r82xx_write(priv, 0x05,
|
rc = r82xx_write(priv, 0x05,
|
||||||
r82xx_init_array, sizeof(r82xx_init_array));
|
r82xx_init_array, sizeof(r82xx_init_array));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue