-diff --git a/Documentation/pps/Makefile b/Documentation/pps/Makefile
-new file mode 100644
-index 0000000..a2660a2
--- /dev/null
+++ b/Documentation/pps/Makefile
@@ -0,0 +1,27 @@
+clean :
+ rm -f *.o *~ core .depend
+ rm -f ${TARGETS}
-diff --git a/Documentation/pps/pps.txt b/Documentation/pps/pps.txt
-new file mode 100644
-index 0000000..9538925
--- /dev/null
+++ b/Documentation/pps/pps.txt
@@ -0,0 +1,170 @@
+
+Please, note that to compile userland programs you need the file timepps.h
+(see Documentation/pps/).
-diff --git a/Documentation/pps/ppsctl.c b/Documentation/pps/ppsctl.c
-new file mode 100644
-index 0000000..83fd08a
--- /dev/null
+++ b/Documentation/pps/ppsctl.c
@@ -0,0 +1,62 @@
+
+ return 0;
+}
-diff --git a/Documentation/pps/ppsfind b/Documentation/pps/ppsfind
-new file mode 100755
-index 0000000..93c0e17
--- /dev/null
+++ b/Documentation/pps/ppsfind
@@ -0,0 +1,17 @@
+done
+
+exit 0
-diff --git a/Documentation/pps/ppstest.c b/Documentation/pps/ppstest.c
-new file mode 100644
-index 0000000..d125ffa
--- /dev/null
+++ b/Documentation/pps/ppstest.c
@@ -0,0 +1,151 @@
+
+ return 0;
+}
-diff --git a/Documentation/pps/timepps.h b/Documentation/pps/timepps.h
-new file mode 100644
-index 0000000..28ebf4c
--- /dev/null
+++ b/Documentation/pps/timepps.h
@@ -0,0 +1,193 @@
+}
+
+#endif /* _SYS_TIMEPPS_H_ */
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 9a91d9e..f45e974 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -3011,6 +3011,13 @@ P: James Chapman
+@@ -3011,6 +3011,13 @@
M: jchapman@katalix.com
S: Maintained
PREEMPTIBLE KERNEL
P: Robert Love
M: rml@tech9.net
-diff --git a/drivers/Kconfig b/drivers/Kconfig
-index 3e1c442..bffc48e 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
-@@ -52,6 +52,8 @@ source "drivers/i2c/Kconfig"
+@@ -52,6 +52,8 @@
source "drivers/spi/Kconfig"
source "drivers/w1/Kconfig"
source "drivers/power/Kconfig"
-diff --git a/drivers/Makefile b/drivers/Makefile
-index f0878b2..2e84e49 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
-@@ -63,6 +63,7 @@ obj-$(CONFIG_INPUT) += input/
+@@ -63,6 +63,7 @@
obj-$(CONFIG_I2O) += message/
obj-$(CONFIG_RTC_LIB) += rtc/
obj-y += i2c/
obj-$(CONFIG_W1) += w1/
obj-$(CONFIG_POWER_SUPPLY) += power/
obj-$(CONFIG_HWMON) += hwmon/
-diff --git a/drivers/char/lp.c b/drivers/char/lp.c
-index 62051f8..e0a8364 100644
--- a/drivers/char/lp.c
+++ b/drivers/char/lp.c
-@@ -746,6 +746,27 @@ static struct console lpcons = {
+@@ -746,6 +746,27 @@
#endif /* console on line printer */
/* --- initialisation code ------------------------------------- */
static int parport_nr[LP_NO] = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC };
-@@ -817,6 +838,38 @@ static int lp_register(int nr, struct parport *port)
+@@ -817,6 +838,38 @@
}
#endif
return 0;
}
-@@ -860,6 +913,14 @@ static void lp_detach (struct parport *port)
+@@ -860,6 +913,14 @@
console_registered = NULL;
}
#endif /* CONFIG_LP_CONSOLE */
}
static struct parport_driver lp_driver = {
-diff --git a/drivers/pps/Kconfig b/drivers/pps/Kconfig
-new file mode 100644
-index 0000000..bfe6621
--- /dev/null
+++ b/drivers/pps/Kconfig
@@ -0,0 +1,34 @@
+source drivers/pps/clients/Kconfig
+
+endmenu
-diff --git a/drivers/pps/Makefile b/drivers/pps/Makefile
-new file mode 100644
-index 0000000..d8ec308
--- /dev/null
+++ b/drivers/pps/Makefile
@@ -0,0 +1,11 @@
+ifeq ($(CONFIG_PPS_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
-diff --git a/drivers/pps/clients/Kconfig b/drivers/pps/clients/Kconfig
-new file mode 100644
-index 0000000..09ba5c3
--- /dev/null
+++ b/drivers/pps/clients/Kconfig
@@ -0,0 +1,38 @@
+ with the interrupt pin of your parallel port.
+
+endif
-diff --git a/drivers/pps/clients/Makefile b/drivers/pps/clients/Makefile
-new file mode 100644
-index 0000000..f3c1e39
--- /dev/null
+++ b/drivers/pps/clients/Makefile
@@ -0,0 +1,9 @@
+ifeq ($(CONFIG_PPS_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
-diff --git a/drivers/pps/clients/ktimer.c b/drivers/pps/clients/ktimer.c
-new file mode 100644
-index 0000000..4d613ab
--- /dev/null
+++ b/drivers/pps/clients/ktimer.c
@@ -0,0 +1,114 @@
+MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
+MODULE_DESCRIPTION("dummy PPS source by using a kernel timer (just for debug)");
+MODULE_LICENSE("GPL");
-diff --git a/drivers/pps/kapi.c b/drivers/pps/kapi.c
-new file mode 100644
-index 0000000..67290d5
--- /dev/null
+++ b/drivers/pps/kapi.c
@@ -0,0 +1,271 @@
+ spin_unlock_irqrestore(&idr_lock, flags);
+}
+EXPORT_SYMBOL(pps_event);
-diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
-new file mode 100644
-index 0000000..52de2f1
--- /dev/null
+++ b/drivers/pps/pps.c
@@ -0,0 +1,332 @@
+MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
+MODULE_DESCRIPTION("LinuxPPS support (RFC 2783) - ver. " PPS_VERSION);
+MODULE_LICENSE("GPL");
-diff --git a/drivers/pps/sysfs.c b/drivers/pps/sysfs.c
-new file mode 100644
-index 0000000..8541be7
--- /dev/null
+++ b/drivers/pps/sysfs.c
@@ -0,0 +1,124 @@
+
+ return 0;
+}
-diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
-index f94109c..a5e83f8 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
-@@ -2118,6 +2118,8 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
+@@ -2118,6 +2118,8 @@
up->ier |= UART_IER_MSI;
if (up->capabilities & UART_CAP_UUE)
up->ier |= UART_IER_UUE | UART_IER_RTOIE;
serial_out(up, UART_IER, up->ier);
-diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
-index a055f58..a40b87c 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -33,6 +33,7 @@
#include <asm/irq.h>
#include <asm/uaccess.h>
-@@ -633,6 +634,54 @@ static int uart_get_info(struct uart_state *state,
+@@ -633,6 +634,54 @@
return 0;
}
static int uart_set_info(struct uart_state *state,
struct serial_struct __user *newinfo)
{
-@@ -807,11 +856,19 @@ static int uart_set_info(struct uart_state *state,
+@@ -807,11 +856,19 @@
(port->flags & UPF_LOW_LATENCY) ? 1 : 0;
check_and_exit:
old_custom_divisor != port->custom_divisor) {
/*
* If they're setting up a custom divisor or speed,
-@@ -2110,6 +2167,12 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state,
+@@ -2110,6 +2167,12 @@
port->ops->config_port(port, flags);
}
if (port->type != PORT_UNKNOWN) {
unsigned long flags;
-@@ -2359,6 +2422,12 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
+@@ -2359,6 +2422,12 @@
mutex_unlock(&state->mutex);
/*
* Remove the devices from the tty layer
*/
tty_unregister_device(drv->tty_driver, port->line);
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 818cc3a..0a9394f 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
-@@ -295,6 +295,7 @@ unifdef-y += pmu.h
+@@ -295,6 +295,7 @@
unifdef-y += poll.h
unifdef-y += ppp_defs.h
unifdef-y += ppp-comp.h
unifdef-y += ptrace.h
unifdef-y += qnx4_fs.h
unifdef-y += quota.h
-diff --git a/include/linux/parport.h b/include/linux/parport.h
-index 9cdd694..549de6e 100644
--- a/include/linux/parport.h
+++ b/include/linux/parport.h
-@@ -100,6 +100,7 @@ typedef enum {
+@@ -100,6 +100,7 @@
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/wait.h>
#include <asm/system.h>
#include <asm/ptrace.h>
#include <asm/semaphore.h>
-@@ -327,6 +328,11 @@ struct parport {
+@@ -327,6 +328,11 @@
struct list_head full_list;
struct parport *slaves[3];
};
#define DEFAULT_SPIN_TIME 500 /* us */
-@@ -517,6 +523,12 @@ extern int parport_daisy_select (struct parport *port, int daisy, int mode);
+@@ -517,6 +523,12 @@
/* Lowlevel drivers _can_ call this support function to handle irqs. */
static __inline__ void parport_generic_irq(int irq, struct parport *port)
{
parport_ieee1284_interrupt (irq, port);
read_lock(&port->cad_lock);
if (port->cad && port->cad->irq_func)
-diff --git a/include/linux/pps.h b/include/linux/pps.h
-new file mode 100644
-index 0000000..5bdb593
--- /dev/null
+++ b/include/linux/pps.h
@@ -0,0 +1,196 @@
+#endif /* __KERNEL__ */
+
+#endif /* _PPS_H_ */
-diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
-index 09d17b0..f9aefad 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -157,6 +157,7 @@
struct uart_port;
struct uart_info;
-@@ -236,6 +237,9 @@ struct uart_port {
+@@ -236,6 +237,9 @@
unsigned char regshift; /* reg offset shift */
unsigned char iotype; /* io access style */
unsigned char unused1;
#define UPIO_PORT (0)
#define UPIO_HUB6 (1)
-@@ -280,7 +284,8 @@ struct uart_port {
+@@ -280,7 +284,8 @@
#define UPF_IOREMAP ((__force upf_t) (1 << 31))
#define UPF_CHANGE_MASK ((__force upf_t) (0x17fff))
unsigned int mctrl; /* current modem ctrl settings */
unsigned int timeout; /* character-based timeout */
-@@ -312,6 +317,10 @@ struct uart_state {
+@@ -312,6 +317,10 @@
struct uart_info *info;
struct uart_port *port;
struct mutex mutex;
};
-@@ -476,13 +485,22 @@ uart_handle_dcd_change(struct uart_port *port, unsigned int status)
+@@ -476,13 +485,22 @@
{
struct uart_info *info = port->info;