summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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... */