Skip to content

Commit 2e0f5bc

Browse files
mhennerichnunojsa
authored andcommitted
iio: adc: ad9081: adi_ad9081_jesd: JRX PHY PRBS toggle LINK_EN
Make sure we enable the link after the PRBS after it is configured and the error counters are cleared. The adi_ad9081_jesd_rx_phy_prbs_test() function assumes the Links to be enabled, log error and return in case no link is enabled. Signed-off-by: Michael Hennerich <[email protected]>
1 parent 1fc69ff commit 2e0f5bc

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

drivers/iio/adc/ad9081.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -3078,6 +3078,9 @@ static int ad9081_status_show(struct seq_file *file, void *offset)
30783078
return 0;
30793079
}
30803080

3081+
3082+
3083+
30813084
static void ad9081_work_func(struct work_struct *work)
30823085
{
30833086
u8 status;
@@ -3612,10 +3615,14 @@ static ssize_t ad9081_debugfs_write(struct file *file,
36123615
val2 = 1; /* 1 second */
36133616

36143617
if (val == 0)
3615-
adi_ad9081_jesd_rx_phy_prbs_test_disable_set(&phy->ad9081);
3618+
ret = adi_ad9081_jesd_rx_phy_prbs_test_disable_set(&phy->ad9081);
36163619
else
3617-
adi_ad9081_jesd_rx_phy_prbs_test(&phy->ad9081,
3620+
ret = adi_ad9081_jesd_rx_phy_prbs_test(&phy->ad9081,
36183621
ad9081_val_to_prbs(val), val2);
3622+
3623+
if (ret)
3624+
return ret;
3625+
36193626
entry->val = val;
36203627

36213628
return count;

drivers/iio/adc/ad9081/adi_ad9081_jesd.c

+32
Original file line numberDiff line numberDiff line change
@@ -3653,6 +3653,7 @@ adi_ad9081_jesd_rx_phy_prbs_test(adi_ad9081_device_t *device,
36533653
int32_t err;
36543654
uint32_t i;
36553655
uint8_t tmp_reg;
3656+
uint8_t link_en;
36563657
AD9081_NULL_POINTER_RETURN(device);
36573658
AD9081_LOG_FUNC();
36583659

@@ -3674,6 +3675,25 @@ adi_ad9081_jesd_rx_phy_prbs_test(adi_ad9081_device_t *device,
36743675
return API_CMS_ERROR_INVALID_PARAM;
36753676
}
36763677

3678+
err = adi_ad9081_hal_bf_get(
3679+
device, REG_GENERAL_JRX_CTRL_ADDR, BF_LINK_EN_INFO,
3680+
&link_en, 1);
3681+
AD9081_ERROR_RETURN(err);
3682+
3683+
if (!link_en) {
3684+
err = adi_ad9081_hal_log_write(
3685+
device, ADI_CMS_LOG_ERR,
3686+
"jesd_rx_phy_prbs_test(): link not enabled\n");
3687+
AD9081_ERROR_RETURN(err);
3688+
3689+
return API_CMS_ERROR_ERROR;
3690+
}
3691+
3692+
err = adi_ad9081_hal_bf_set(
3693+
device, REG_GENERAL_JRX_CTRL_ADDR, BF_LINK_EN_INFO,
3694+
0); /* LINK_EN use 2bits for link0 & link1 */
3695+
AD9081_ERROR_RETURN(err);
3696+
36773697
/* select phy prbs test source and mode */
36783698
err = adi_ad9081_hal_bf_set(
36793699
device, REG_JRX_TEST_2_ADDR, BF_JRX_PRBS_SOURCE_INFO,
@@ -3684,11 +3704,23 @@ adi_ad9081_jesd_rx_phy_prbs_test(adi_ad9081_device_t *device,
36843704
tmp_reg); /* not paged */
36853705
AD9081_ERROR_RETURN(err);
36863706

3707+
err = adi_ad9081_hal_bf_set(
3708+
device, REG_GENERAL_JRX_CTRL_ADDR, BF_LINK_EN_INFO,
3709+
link_en); /* LINK_EN use 2bits for link0 & link1 */
3710+
AD9081_ERROR_RETURN(err);
3711+
3712+
err = adi_ad9081_hal_delay_us(device, 1);
3713+
AD9081_ERROR_RETURN(err);
3714+
36873715
/* clear prbs error count */
36883716
err = adi_ad9081_hal_bf_set(device, REG_JRX_TEST_0_ADDR,
36893717
BF_JRX_PRBS_LANE_CLEAR_ERRORS_INFO,
36903718
1); /* not paged */
36913719
AD9081_ERROR_RETURN(err);
3720+
3721+
err = adi_ad9081_hal_delay_us(device, 500000); /* 500 ms */
3722+
AD9081_ERROR_RETURN(err);
3723+
36923724
err = adi_ad9081_hal_bf_set(device, REG_JRX_TEST_0_ADDR,
36933725
BF_JRX_PRBS_LANE_CLEAR_ERRORS_INFO,
36943726
0); /* not paged */

0 commit comments

Comments
 (0)