Commit a4539207 authored by Jacob Keller's avatar Jacob Keller Committed by David S. Miller
Browse files

ptp: cpts: convert .adjfreq to .adjfine



The cpts implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this to the newer .adjfine, using the recently added
adjust_by_scaled_ppm helper function.

Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Richard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2d96099f
Loading
Loading
Loading
Loading
+4 −16
Original line number Diff line number Diff line
@@ -213,25 +213,13 @@ static void cpts_update_cur_time(struct cpts *cpts, int match,

/* PTP clock operations */

static int cpts_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
static int cpts_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
{
	struct cpts *cpts = container_of(ptp, struct cpts, info);
	int neg_adj = 0;
	u32 diff, mult;
	u64 adj;

	if (ppb < 0) {
		neg_adj = 1;
		ppb = -ppb;
	}
	mult = cpts->cc_mult;
	adj = mult;
	adj *= ppb;
	diff = div_u64(adj, 1000000000ULL);

	mutex_lock(&cpts->ptp_clk_mutex);

	cpts->mult_new = neg_adj ? mult - diff : mult + diff;
	cpts->mult_new = adjust_by_scaled_ppm(cpts->cc_mult, scaled_ppm);

	cpts_update_cur_time(cpts, CPTS_EV_PUSH, NULL);

@@ -435,7 +423,7 @@ static const struct ptp_clock_info cpts_info = {
	.n_ext_ts	= 0,
	.n_pins		= 0,
	.pps		= 0,
	.adjfreq	= cpts_ptp_adjfreq,
	.adjfine	= cpts_ptp_adjfine,
	.adjtime	= cpts_ptp_adjtime,
	.gettimex64	= cpts_ptp_gettimeex,
	.settime64	= cpts_ptp_settime,
@@ -794,7 +782,7 @@ struct cpts *cpts_create(struct device *dev, void __iomem *regs,

	cpts_calc_mult_shift(cpts);
	/* save cc.mult original value as it can be modified
	 * by cpts_ptp_adjfreq().
	 * by cpts_ptp_adjfine().
	 */
	cpts->cc_mult = cpts->cc.mult;