diff options
author | Alexander Gordeev <lasaine@lvk.cs.msu.su> | 2011-01-12 17:01:00 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 08:03:21 -0800 |
commit | 563558b2c7350371551bf08348ac61be62200505 (patch) | |
tree | e7f767bf68efd16a8784c8875d885ba6ea9ecf6d /drivers/pps/generators/pps_gen_parport.c | |
parent | 46b402a0e5e4b4d81b11c32dfb2312bf5828ecb5 (diff) | |
download | kernel_goldelico_gta04-563558b2c7350371551bf08348ac61be62200505.zip kernel_goldelico_gta04-563558b2c7350371551bf08348ac61be62200505.tar.gz kernel_goldelico_gta04-563558b2c7350371551bf08348ac61be62200505.tar.bz2 |
pps: add parallel port PPS signal generator
Add PPS signal generator which utilizes STROBE pin of a parallel port to
send PPS signals. It uses parport abstraction layer and hrtimers to
precisely control the signal.
Signed-off-by: Alexander Gordeev <lasaine@lvk.cs.msu.su>
Cc: Rodolfo Giometti <giometti@linux.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/pps/generators/pps_gen_parport.c')
-rw-r--r-- | drivers/pps/generators/pps_gen_parport.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/pps/generators/pps_gen_parport.c b/drivers/pps/generators/pps_gen_parport.c index a15fe25..5c32f8d 100644 --- a/drivers/pps/generators/pps_gen_parport.c +++ b/drivers/pps/generators/pps_gen_parport.c @@ -76,8 +76,15 @@ static enum hrtimer_restart hrtimer_event(struct hrtimer *timer) long lim, delta; unsigned long flags; - /* NB: approx time with blocked interrupts = - send_delay + 3 * SAFETY_INTERVAL */ + /* We have to disable interrupts here. The idea is to prevent + * other interrupts on the same processor to introduce random + * lags while polling the clock. getnstimeofday() takes <1us on + * most machines while other interrupt handlers can take much + * more potentially. + * + * NB: approx time with blocked interrupts = + * send_delay + 3 * SAFETY_INTERVAL + */ local_irq_save(flags); /* first of all we get the time stamp... */ |