summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Markgraf <steve@steve-m.de>2012-04-03 17:37:55 +0200
committerSteve Markgraf <steve@steve-m.de>2012-04-03 17:37:55 +0200
commit2f6183cd6c51fa75724e8a8bd285d5011875bd3e (patch)
treea13ac751fb76dfeb48f4df2f6af10b1057432d5d
parentca700872099dded53143a654d46454ac1a3be12b (diff)
properly poweroff PLL/ADCs/tuner on exit
Signed-off-by: Steve Markgraf <steve@steve-m.de>
-rw-r--r--src/rtl-sdr.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/rtl-sdr.c b/src/rtl-sdr.c
index 24b6276..0db4b9a 100644
--- a/src/rtl-sdr.c
+++ b/src/rtl-sdr.c
@@ -400,6 +400,17 @@ void rtlsdr_init_baseband(rtlsdr_dev_t *dev)
rtlsdr_demod_write_reg(dev, 1, 0xb1, 0x1b, 1);
}
+void rtlsdr_deinit_baseband(rtlsdr_dev_t *dev)
+{
+ /* deinitialize tuner */
+ rtlsdr_set_i2c_repeater(dev, 1);
+ dev->tuner->exit(dev);
+ rtlsdr_set_i2c_repeater(dev, 0);
+
+ /* poweroff demodulator and ADCs */
+ rtlsdr_write_reg(dev, SYSB, DEMOD_CTL, 0x20, 1);
+}
+
int rtlsdr_set_center_freq(rtlsdr_dev_t *dev, uint32_t freq)
{
int r;
@@ -717,6 +728,8 @@ int rtlsdr_close(rtlsdr_dev_t *dev)
if (!dev)
return -1;
+ rtlsdr_deinit_baseband(dev);
+
libusb_release_interface(dev->devh, 0);
libusb_close(dev->devh);