Skip to content

Commit

Permalink
iio: adc: ad9081: Update to API Version 1.0.6
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Hennerich <[email protected]>
  • Loading branch information
mhennerich authored and commodo committed Nov 12, 2020
1 parent 37c861f commit b56b88a
Show file tree
Hide file tree
Showing 8 changed files with 391 additions and 217 deletions.
26 changes: 6 additions & 20 deletions drivers/iio/adc/ad9081.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,21 +183,13 @@ struct ad9081_phy {
short coeffs_q[196];
};


static int ad9081_nco_sync_master_slave(struct ad9081_phy *phy, bool master)
{
int ret;

if (phy->ad9081.dev_info.dev_rev == 3) { /* r2 */
//adi_ad9081_hal_reg_set(&phy->ad9081, 0xd0, 0x1F);
ret = adi_ad9081_hal_bf_set(&phy->ad9081, REG_ACLK_CTRL_ADDR,
BF_PD_TXDIGCLK_INFO,
1); /* not paged */
AD9081_ERROR_RETURN(ret);
ret = adi_ad9081_hal_bf_set(&phy->ad9081, REG_ADC_DIVIDER_CTRL_ADDR,
0x00000107, 0); /* not paged */
AD9081_ERROR_RETURN(ret);
}
ret = adi_ad9081_device_nco_sync_pre(&phy->ad9081);
if (ret != 0)
return ret;

/* trigger_src 0: sysref, 1: lmfc rising edge, 2: lmfc falling edge */

Expand Down Expand Up @@ -3296,15 +3288,9 @@ static int ad9081_jesd204_setup_stage3(struct jesd204_dev *jdev,

dev_dbg(dev, "%s:%d reason %s\n", __func__, __LINE__, jesd204_state_op_reason_str(reason));

if (phy->ad9081.dev_info.dev_rev == 3) { /* r2 */
ret = adi_ad9081_hal_bf_set(&phy->ad9081, REG_ADC_DIVIDER_CTRL_ADDR,
0x00000107, 1); /* not paged */
AD9081_ERROR_RETURN(ret);
ret = adi_ad9081_hal_bf_set(&phy->ad9081, REG_ACLK_CTRL_ADDR,
BF_PD_TXDIGCLK_INFO,
0); /* not paged */
AD9081_ERROR_RETURN(ret);
}
ret = adi_ad9081_device_nco_sync_post(&phy->ad9081);
if (ret != 0)
return ret;

return JESD204_STATE_CHANGE_DONE;
}
Expand Down
24 changes: 22 additions & 2 deletions drivers/iio/adc/ad9081/adi_ad9081.h
Original file line number Diff line number Diff line change
Expand Up @@ -421,8 +421,8 @@ typedef enum {
AD9081_TMODE_NEG_FULL = 0x3, /*!< Negative Full-Scale, 0x8000 */
AD9081_TMODE_ALT_CHECKER =
0x4, /*!< Alternating Checker Board, 0x5555-0xAAAA */
AD9081_TMODE_PN9 = 0x6, /*!< PN9 Sequence */
AD9081_TMODE_PN23 = 0x5, /*!< PN23 Sequence */
AD9081_TMODE_PN9 = 0x6, /*!< PN9 Sequence */
AD9081_TMODE_1_0_TOGG = 0x7, /*!< 1/0 Word Toggle, 0x0000-0xFFFF */
AD9081_TMODE_USER_PAT = 0x8, /*!< User Pattern Test Mode */
AD9081_TMODE_PN7 = 0x9, /*!< PN7 Sequence */
Expand Down Expand Up @@ -959,6 +959,26 @@ int32_t adi_ad9081_device_laminate_id_get(adi_ad9081_device_t *device,
*/
int32_t adi_ad9081_device_die_id_get(adi_ad9081_device_t *device, uint8_t *id);

/**
* @brief Do some pre-settings for nco sync.
*
* @param device Pointer to the device structure
*
* @return API_CMS_ERROR_OK API Completed Successfully
* @return <0 Failed. @see adi_cms_error_e for details.
*/
int32_t adi_ad9081_device_nco_sync_pre(adi_ad9081_device_t *device);

/**
* @brief Do some post-settings for nco sync.
*
* @param device Pointer to the device structure
*
* @return API_CMS_ERROR_OK API Completed Successfully
* @return <0 Failed. @see adi_cms_error_e for details.
*/
int32_t adi_ad9081_device_nco_sync_post(adi_ad9081_device_t *device);

/**
* @brief Startup Tx
* This API will be called after adi_ad9081_device_clk_config_set().
Expand Down Expand Up @@ -1791,7 +1811,7 @@ int32_t adi_ad9081_dac_sysref_phase_set(adi_ad9081_device_t *device,
* @brief Set SYSREF Sample Type
*
* @param device Pointer to the device structure
* @param sample_type 0 sampled by reference clock then by high speed clock, 1 sampled directly by high speed clock
* @param sample_type 0 - sampled by reference clock then by high speed clock, 1 - sampled directly by high speed clock
*
* @return API_CMS_ERROR_OK API Completed Successfully
* @return <0 Failed. @see adi_cms_error_e for details.
Expand Down
41 changes: 24 additions & 17 deletions drivers/iio/adc/ad9081/adi_ad9081_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2255,7 +2255,9 @@ int32_t adi_ad9081_adc_config(adi_ad9081_device_t *device, uint8_t cddcs,
0);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_adc_ddc_coarse_nco_mode_set(
device, cddc, AD9081_ADC_NCO_VIF);
device, cddc,
(cddc_shift[i] == 0) ? AD9081_ADC_NCO_ZIF :
AD9081_ADC_NCO_VIF);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_adc_ddc_coarse_nco_set(device, cddc,
cddc_shift[i]);
Expand All @@ -2276,7 +2278,9 @@ int32_t adi_ad9081_adc_config(adi_ad9081_device_t *device, uint8_t cddcs,
err = adi_ad9081_adc_ddc_fine_gain_set(device, fddc, 0);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_adc_ddc_fine_nco_mode_set(
device, fddc, AD9081_ADC_NCO_VIF);
device, fddc,
(fddc_shift[i] == 0) ? AD9081_ADC_NCO_ZIF :
AD9081_ADC_NCO_VIF);
AD9081_ERROR_RETURN(err);

j = (i < 4) ?
Expand Down Expand Up @@ -3574,6 +3578,10 @@ int32_t adi_ad9081_adc_nco_master_slave_sync(adi_ad9081_device_t *device,
AD9081_NULL_POINTER_RETURN(device);
AD9081_LOG_FUNC();

err = adi_ad9081_hal_bf_set(device, REG_MAIN_AUTO_CLK_GATING_ADDR,
0x00000400, 7);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_adc_ddc_coarse_sync_enable_set(device,
AD9081_ADC_CDDC_ALL, 1);
AD9081_ERROR_RETURN(err);
Expand All @@ -3594,23 +3602,17 @@ int32_t adi_ad9081_adc_nco_master_slave_sync(adi_ad9081_device_t *device,
device, AD9081_ADC_FDDC_ALL, 0);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_dac_nco_master_slave_mode_set(device,
is_master > 0 ? 1 : 2);
err = adi_ad9081_device_nco_sync_mode_set(device,
is_master > 0 ? 1 : 2);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_dac_nco_master_slave_trigger_source_set(device,
trigger_src);
err = adi_ad9081_device_nco_sync_trigger_source_set(device,
trigger_src);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_dac_nco_master_slave_gpio_set(device, gpio_index,
is_master > 0 ? 1 : 0);
err = adi_ad9081_device_nco_sync_gpio_set(device, gpio_index,
is_master > 0 ? 1 : 0);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_dac_nco_master_slave_extra_lmfc_num_set(
device, extra_lmfc_num);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_dac_nco_sync_reset_via_sysref_set(device, 0);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_dac_nco_sync_reset_via_sysref_set(device, 1);
err = adi_ad9081_device_nco_sync_extra_lmfc_num_set(device,
extra_lmfc_num);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_adc_ddc_coarse_sync_next_set(device,
Expand All @@ -3626,8 +3628,13 @@ int32_t adi_ad9081_adc_nco_master_slave_sync(adi_ad9081_device_t *device,
1);
AD9081_ERROR_RETURN(err);

err = adi_ad9081_device_nco_sync_reset_via_sysref_set(device, 0);
AD9081_ERROR_RETURN(err);
err = adi_ad9081_device_nco_sync_reset_via_sysref_set(device, 1);
AD9081_ERROR_RETURN(err);

if (is_master > 0) {
err = adi_ad9081_dac_nco_master_slave_trigger_set(device);
err = adi_ad9081_device_nco_sync_trigger_set(device);
AD9081_ERROR_RETURN(err);
}

Expand Down
21 changes: 21 additions & 0 deletions drivers/iio/adc/ad9081/adi_ad9081_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
#define __FUNCTION_NAME__ __FUNCTION__
#endif

#define AD9081_API_REV 0x00010006

/* var error report */
#define AD9081_MSG_REPORT(var, comment) \
adi_ad9081_hal_error_report(device, ADI_CMS_LOG_MSG, API_CMS_ERROR_OK, \
Expand Down Expand Up @@ -133,6 +135,22 @@ int32_t adi_ad9081_device_reg8_access_check(adi_ad9081_device_t *device);
int32_t adi_ad9081_device_reg32_access_check(adi_ad9081_device_t *device);
int32_t adi_ad9081_device_boot_pre_clock(adi_ad9081_device_t *device);
int32_t adi_ad9081_device_boot_post_clock(adi_ad9081_device_t *device);
int32_t adi_ad9081_device_nco_sync_mode_set(adi_ad9081_device_t *device,
uint8_t mode);
int32_t
adi_ad9081_device_nco_sync_trigger_source_set(adi_ad9081_device_t *device,
uint8_t source);
int32_t adi_ad9081_device_nco_sync_gpio_set(adi_ad9081_device_t *device,
uint8_t gpio_index, uint8_t output);
int32_t
adi_ad9081_device_nco_sync_extra_lmfc_num_set(adi_ad9081_device_t *device,
uint8_t num);
int32_t adi_ad9081_device_nco_sync_sysref_mode_set(adi_ad9081_device_t *device,
uint8_t mode);
int32_t
adi_ad9081_device_nco_sync_reset_via_sysref_set(adi_ad9081_device_t *device,
uint8_t enable);
int32_t adi_ad9081_device_nco_sync_trigger_set(adi_ad9081_device_t *device);

int32_t adi_ad9081_dac_d2a_dual_spi_enable_set(adi_ad9081_device_t *device,
uint8_t duals, uint8_t enable);
Expand All @@ -150,6 +168,9 @@ int32_t adi_ad9081_dac_data_xor_set(adi_ad9081_device_t *device, uint8_t dacs,
uint8_t enable);

int32_t adi_ad9081_adc_select_set(adi_ad9081_device_t *device, uint8_t adcs);
int32_t adi_ad9081_adc_core_analog_regs_enable_set(adi_ad9081_device_t *device,
uint8_t adc_cores,
uint8_t enable);
int32_t adi_ad9081_adc_core_setup(adi_ad9081_device_t *device,
uint8_t adc_cores);
int32_t adi_ad9081_adc_power_up_set(adi_ad9081_device_t *device, uint8_t adcs,
Expand Down
Loading

0 comments on commit b56b88a

Please sign in to comment.