From a498451d86ea72e9790ea0f8a9c5c14e49c10a65 Mon Sep 17 00:00:00 2001 From: Alessandro Rubini <rubini@gnudd.com> Date: Thu, 20 Sep 2012 11:41:53 +0200 Subject: [PATCH] kernel/wr-nic-dio.c: minor details Signed-off-by: Alessandro Rubini <rubini@gnudd.com> --- kernel/wr-nic-dio.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/kernel/wr-nic-dio.c b/kernel/wr-nic-dio.c index 3592d40..e134e2e 100644 --- a/kernel/wr-nic-dio.c +++ b/kernel/wr-nic-dio.c @@ -126,10 +126,9 @@ static int wrn_dio_cmd_pulse(struct wrn_drvdata *drvdata, /* if not "now", set trig, trigh, cycles */ if (!(cmd->flags & WR_DIO_F_NOW)) { /* not now: set relevant registers */ - printk("%x %x %x\n", map->trig_h, map->trig_l, map->cycle); + writel(ts->tv_nsec / 8, base + map->cycle); writel(GET_HI32(ts->tv_sec), base + map->trig_h); writel(ts->tv_sec, base + map->trig_l); - writel(ts->tv_nsec / 8, base + map->cycle); } /* set the width */ @@ -177,16 +176,25 @@ static int wrn_dio_cmd_stamp(struct wrn_drvdata *drvdata, if (nstamp == WR_DIO_N_STAMP) break; reg = readl(base + map->fifo_status); - printk("ctrl %08x\n", reg); if (reg & 0x20000) /* empty */ break; /* fifo is not-empty, pick one sample */ ts->tv_nsec = 8 * readl(base + map->fifo_cycle); - /* reading the low tai pops the fifo */ ts->tv_sec = 0; SET_HI32(ts->tv_sec, readl(base + map->fifo_tai_h)); + /* reading the low tai pops the fifo */ ts->tv_sec |= readl(base + map->fifo_tai_l); + + /* At startup I get many zero values: discard them */ + if (!ts->tv_sec) + continue; + /* subtract 5 cycles lost in input sync circuits */ + ts->tv_nsec -= 40; + if (ts->tv_nsec < 0) { + ts->tv_nsec += 1000 * 1000 * 1000; + ts->tv_sec--; + } nstamp++; ts++; } -- GitLab