summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gordeev <lasaine@lvk.cs.msu.su>2011-01-13 04:01:00 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 19:03:21 +0300
commit563558b2c7350371551bf08348ac61be62200505 (patch)
treee7f767bf68efd16a8784c8875d885ba6ea9ecf6d
parent46b402a0e5e4b4d81b11c32dfb2312bf5828ecb5 (diff)
downloadlinux-563558b2c7350371551bf08348ac61be62200505.tar.xz
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>
-rw-r--r--drivers/pps/generators/Kconfig6
-rw-r--r--drivers/pps/generators/pps_gen_parport.c11
2 files changed, 10 insertions, 7 deletions
diff --git a/drivers/pps/generators/Kconfig b/drivers/pps/generators/Kconfig
index 5fbd6148c804..f3a73dd77660 100644
--- a/drivers/pps/generators/Kconfig
+++ b/drivers/pps/generators/Kconfig
@@ -2,16 +2,12 @@
# PPS generators configuration
#
-if PPS
-
comment "PPS generators support"
config PPS_GENERATOR_PARPORT
tristate "Parallel port PPS signal generator"
- depends on PARPORT != n && GENERIC_TIME
+ depends on PARPORT
help
If you say yes here you get support for a 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.
-
-endif
diff --git a/drivers/pps/generators/pps_gen_parport.c b/drivers/pps/generators/pps_gen_parport.c
index a15fe25efd55..5c32f8dacf56 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... */