in ptp_clockmatrix.c [242:277]
static int _idtcm_set_scsr_read_trig(struct idtcm_channel *channel,
enum scsr_read_trig_sel trig, u8 ref)
{
struct idtcm *idtcm = channel->idtcm;
u16 tod_read_cmd = IDTCM_FW_REG(idtcm->fw_ver, V520, TOD_READ_PRIMARY_CMD);
u8 val;
int err;
if (trig == SCSR_TOD_READ_TRIG_SEL_REFCLK) {
err = idtcm_read(idtcm, channel->tod_read_primary,
TOD_READ_PRIMARY_SEL_CFG_0, &val, sizeof(val));
if (err)
return err;
val &= ~(WR_REF_INDEX_MASK << WR_REF_INDEX_SHIFT);
val |= (ref << WR_REF_INDEX_SHIFT);
err = idtcm_write(idtcm, channel->tod_read_primary,
TOD_READ_PRIMARY_SEL_CFG_0, &val, sizeof(val));
if (err)
return err;
}
err = idtcm_read(idtcm, channel->tod_read_primary,
tod_read_cmd, &val, sizeof(val));
if (err)
return err;
val &= ~(TOD_READ_TRIGGER_MASK << TOD_READ_TRIGGER_SHIFT);
val |= (trig << TOD_READ_TRIGGER_SHIFT);
val &= ~TOD_READ_TRIGGER_MODE; /* single shot */
err = idtcm_write(idtcm, channel->tod_read_primary,
tod_read_cmd, &val, sizeof(val));
return err;
}