Lines Matching refs:tai

152 static u64 mvpp22_calc_frac_ppm(struct mvpp2_tai *tai, long abs_scaled_ppm)
154 u64 val = tai->period * abs_scaled_ppm >> 4;
159 static s32 mvpp22_calc_max_adj(struct mvpp2_tai *tai)
166 struct mvpp2_tai *tai = ptp_to_tai(ptp);
177 val = mvpp22_calc_frac_ppm(tai, scaled_ppm);
195 base = tai->base;
196 spin_lock_irqsave(&tai->lock, flags);
200 spin_unlock_irqrestore(&tai->lock, flags);
207 struct mvpp2_tai *tai = ptp_to_tai(ptp);
226 base = tai->base;
227 spin_lock_irqsave(&tai->lock, flags);
230 spin_unlock_irqrestore(&tai->lock, flags);
239 struct mvpp2_tai *tai = ptp_to_tai(ptp);
245 base = tai->base;
246 spin_lock_irqsave(&tai->lock, flags);
271 spin_unlock_irqrestore(&tai->lock, flags);
279 struct mvpp2_tai *tai = ptp_to_tai(ptp);
283 base = tai->base;
284 spin_lock_irqsave(&tai->lock, flags);
297 spin_unlock_irqrestore(&tai->lock, flags);
304 struct mvpp2_tai *tai = ptp_to_tai(ptp);
306 mvpp22_tai_gettimex64(ptp, &tai->stamp, NULL);
311 static void mvpp22_tai_set_step(struct mvpp2_tai *tai)
313 void __iomem *base = tai->base;
316 nano = upper_32_bits(tai->period);
317 frac = lower_32_bits(tai->period);
330 static void mvpp22_tai_init(struct mvpp2_tai *tai)
332 void __iomem *base = tai->base;
334 mvpp22_tai_set_step(tai);
340 int mvpp22_tai_ptp_clock_index(struct mvpp2_tai *tai)
342 return ptp_clock_index(tai->ptp_clock);
345 void mvpp22_tai_tstamp(struct mvpp2_tai *tai, u32 tstamp,
352 * We use our stored timestamp (tai->stamp) to form a full timestamp,
355 ts.tv_sec = READ_ONCE(tai->stamp.tv_sec);
371 void mvpp22_tai_start(struct mvpp2_tai *tai)
375 delay = mvpp22_tai_aux_work(&tai->caps);
377 ptp_schedule_worker(tai->ptp_clock, delay);
380 void mvpp22_tai_stop(struct mvpp2_tai *tai)
382 ptp_cancel_worker_sync(tai->ptp_clock);
387 struct mvpp2_tai *tai = priv;
389 if (!IS_ERR(tai->ptp_clock))
390 ptp_clock_unregister(tai->ptp_clock);
395 struct mvpp2_tai *tai;
398 tai = devm_kzalloc(dev, sizeof(*tai), GFP_KERNEL);
399 if (!tai)
402 spin_lock_init(&tai->lock);
404 tai->base = priv->iface_base;
433 tai->period = 3ULL << 32;
435 mvpp22_tai_init(tai);
437 tai->caps.owner = THIS_MODULE;
438 strscpy(tai->caps.name, "Marvell PP2.2", sizeof(tai->caps.name));
439 tai->caps.max_adj = mvpp22_calc_max_adj(tai);
440 tai->caps.adjfine = mvpp22_tai_adjfine;
441 tai->caps.adjtime = mvpp22_tai_adjtime;
442 tai->caps.gettimex64 = mvpp22_tai_gettimex64;
443 tai->caps.settime64 = mvpp22_tai_settime64;
444 tai->caps.do_aux_work = mvpp22_tai_aux_work;
446 ret = devm_add_action(dev, mvpp22_tai_remove, tai);
450 tai->ptp_clock = ptp_clock_register(&tai->caps, dev);
451 if (IS_ERR(tai->ptp_clock))
452 return PTR_ERR(tai->ptp_clock);
454 priv->tai = tai;