static int ptp_ixp_adjtime(struct ptp_clock_info *ptp, s64 delta) { s64 now; unsigned long flags; struct ixp_clock *ixp_clock = container_of(ptp, struct ixp_clock, caps); struct ixp46x_ts_regs *regs = ixp_clock->regs; spin_lock_irqsave(®ister_lock, flags); now = ixp_systime_read(regs); now += delta; ixp_systime_write(regs, now); spin_unlock_irqrestore(®ister_lock, flags); return 0; }
static int ptp_ixp_settime(struct ptp_clock_info *ptp, const struct timespec64 *ts) { u64 ns; unsigned long flags; struct ixp_clock *ixp_clock = container_of(ptp, struct ixp_clock, caps); struct ixp46x_ts_regs *regs = ixp_clock->regs; ns = timespec64_to_ns(ts); spin_lock_irqsave(®ister_lock, flags); ixp_systime_write(regs, ns); spin_unlock_irqrestore(®ister_lock, flags); return 0; }