diff --git a/include/tuner_e4k.h b/include/tuner_e4k.h index 3d28114..79591ce 100644 --- a/include/tuner_e4k.h +++ b/include/tuner_e4k.h @@ -212,9 +212,6 @@ int e4k_if_filter_bw_set(struct e4k_state *e4k, enum e4k_if_filter filter, int e4k_if_filter_chan_enable(struct e4k_state *e4k, int on); int e4k_rf_filter_set(struct e4k_state *e4k); -int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val); -uint8_t e4k_reg_read(struct e4k_state *e4k, uint8_t reg); - int e4k_manual_dc_offset(struct e4k_state *e4k, int8_t iofs, int8_t irange, int8_t qofs, int8_t qrange); int e4k_dc_offset_calibrate(struct e4k_state *e4k); int e4k_dc_offset_gen_table(struct e4k_state *e4k); diff --git a/src/librtlsdr.c b/src/librtlsdr.c index ff31f1e..87efc38 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -403,17 +403,6 @@ uint8_t rtlsdr_i2c_read_reg(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t reg) return data; } -/* TODO clean this up again */ -int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val) -{ - return rtlsdr_i2c_write_reg((rtlsdr_dev_t*)e4k->rtl_dev, e4k->i2c_addr, reg, val); -} - -uint8_t e4k_reg_read(struct e4k_state *e4k, uint8_t reg) -{ - return rtlsdr_i2c_read_reg((rtlsdr_dev_t*)e4k->rtl_dev, e4k->i2c_addr, reg); -} - int rtlsdr_i2c_write(rtlsdr_dev_t *dev, uint8_t i2c_addr, uint8_t *buffer, int len) { uint16_t addr = i2c_addr; diff --git a/src/tuner_e4k.c b/src/tuner_e4k.c index 47fe4fe..aff5534 100644 --- a/src/tuner_e4k.c +++ b/src/tuner_e4k.c @@ -29,6 +29,7 @@ #include #include +#include #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) @@ -55,17 +56,19 @@ static const uint8_t width2mask[] = { /*********************************************************************** * Register Access */ -#if 0 /*! \brief Write a register of the tuner chip * \param[in] e4k reference to the tuner * \param[in] reg number of the register * \param[in] val value to be written * \returns 0 on success, negative in case of error */ -int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val) +static int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val) { - /* FIXME */ - return 0; + uint8_t data[2]; + data[0] = reg; + data[1] = val; + + return rtlsdr_i2c_write_fn(e4k->rtl_dev, e4k->i2c_addr, data, 2); } /*! \brief Read a register of the tuner chip @@ -73,12 +76,18 @@ int e4k_reg_write(struct e4k_state *e4k, uint8_t reg, uint8_t val) * \param[in] reg number of the register * \returns positive 8bit register contents on success, negative in case of error */ -int e4k_reg_read(struct e4k_state *e4k, uint8_t reg) +static int e4k_reg_read(struct e4k_state *e4k, uint8_t reg) { - /* FIXME */ - return 0; + uint8_t data = reg; + + if (rtlsdr_i2c_write_fn(e4k->rtl_dev, e4k->i2c_addr, &data, 1) < 1) + return -1; + + if (rtlsdr_i2c_read_fn(e4k->rtl_dev, e4k->i2c_addr, &data, 1) < 1) + return -1; + + return data; } -#endif /*! \brief Set or clear some (masked) bits inside a register * \param[in] e4k reference to the tuner