diff --git a/drivers/iio/frequency/adf41513.c b/drivers/iio/frequency/adf41513.c index 1a084e6b3c65..cc27edfbda9a 100644 --- a/drivers/iio/frequency/adf41513.c +++ b/drivers/iio/frequency/adf41513.c @@ -226,6 +226,7 @@ struct adf41513_data { bool phase_detector_polarity; bool logic_lvl_1v8_en; + bool le_sync_en; }; struct adf41513_pll_settings { @@ -635,13 +636,28 @@ static int adf41513_set_frequency(struct adf41513_state *st, u64 freq_uhz, u16 s static int adf41513_suspend(struct adf41513_state *st) { st->regs[ADF41513_REG6] |= FIELD_PREP(ADF41513_REG6_POWER_DOWN_MSK, 1); + st->regs[ADF41513_REG12] &= ~ADF41513_REG12_LE_SELECT_MSK; return adf41513_sync_config(st, ADF41513_SYNC_DIFF); } static int adf41513_resume(struct adf41513_state *st) { + int ret; + st->regs[ADF41513_REG6] &= ~ADF41513_REG6_POWER_DOWN_MSK; - return adf41513_sync_config(st, ADF41513_SYNC_ALL); + st->regs[ADF41513_REG12] &= ~ADF41513_REG12_LE_SELECT_MSK; + ret = adf41513_sync_config(st, ADF41513_SYNC_ALL); + if (ret) + return ret; + + if (st->data.le_sync_en) { + st->regs[ADF41513_REG12] |= ADF41513_REG12_LE_SELECT_MSK; + ret = adf41513_sync_config(st, ADF41513_SYNC_DIFF); + if (ret) + return ret; + } + + return 0; } static ssize_t adf41513_read_resolution(struct iio_dev *indio_dev, @@ -914,6 +930,8 @@ static int adf41513_parse_fw(struct adf41513_state *st) "invalid lock detect count: %u\n", tmp); st->data.lock_detect_count = tmp; + /* load enable sync */ + st->data.le_sync_en = device_property_read_bool(dev, "adi,le-sync-enable"); st->data.freq_resolution_uhz = MICROHZ_PER_HZ; return 0; @@ -970,7 +988,18 @@ static int adf41513_setup(struct device *dev, struct adf41513_state *st) if (ret) return ret; - return devm_add_action_or_reset(dev, adf41513_close, st); + ret = devm_add_action_or_reset(dev, adf41513_close, st); + if (ret) + return ret; + + if (st->data.le_sync_en) { + st->regs[ADF41513_REG12] |= ADF41513_REG12_LE_SELECT_MSK; + ret = adf41513_sync_config(st, ADF41513_SYNC_DIFF); + if (ret) + return ret; + } + + return 0; } static int adf41513_pm_suspend(struct device *dev)