[PATCH] jsm fixes

 a) jsm depends on PCI.  Kconfig fixed.
 b) spin_lock_irqsave() et.al. expect unsigned long, not u64.
 c) pointer arithmetics works just fine without casts to u64, thank
    you very much.
 d) iomem annotations added.
 e) jsm_get_mstat() lost bits - among other things it did
	if (mstat & UART_MSR_DSR)
		result |= TIOCM_DSR;
    and ended with return result; since TIOCM_DSR is 256 on e.g.  i386,
    declaring result as unsigned char was a bad idea (function itself
    returns int). 

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index cdf110f..6e44b46 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -829,6 +829,7 @@
 
 config SERIAL_JSM
         tristate "Digi International NEO PCI Support"
+	depends on PCI
         select SERIAL_CORE
         help
           This is a driver for Digi International's Neo series
diff --git a/drivers/serial/jsm/jsm.h b/drivers/serial/jsm/jsm.h
index 6926b10..b12ee02 100644
--- a/drivers/serial/jsm/jsm.h
+++ b/drivers/serial/jsm/jsm.h
@@ -171,7 +171,7 @@
 	u64		membase;	/* Start of base memory of the card */
 	u64		membase_end;	/* End of base memory of the card */
 
-	u8		*re_map_membase;/* Remapped memory of the card */
+	u8	__iomem *re_map_membase;/* Remapped memory of the card */
 
 	u64		iobase;		/* Start of io base of the card */
 	u64		iobase_end;	/* End of io base of the card */
@@ -254,7 +254,7 @@
 	u8		ch_mostat;	/* FEP output modem status	*/
 	u8		ch_mistat;	/* FEP input modem status	*/
 
-	struct neo_uart_struct *ch_neo_uart;	/* Pointer to the "mapped" UART struct */
+	struct neo_uart_struct __iomem *ch_neo_uart;	/* Pointer to the "mapped" UART struct */
 	u8		ch_cached_lsr;	/* Cached value of the LSR register */
 
 	u8		*ch_rqueue;	/* Our read queue buffer - malloc'ed */
diff --git a/drivers/serial/jsm/jsm_neo.c b/drivers/serial/jsm/jsm_neo.c
index 0511d6b..9b79c1f 100644
--- a/drivers/serial/jsm/jsm_neo.c
+++ b/drivers/serial/jsm/jsm_neo.c
@@ -690,7 +690,7 @@
  */
 void neo_clear_break(struct jsm_channel *ch, int force)
 {
-	u64 lock_flags;
+	unsigned long lock_flags;
 
 	spin_lock_irqsave(&ch->ch_lock, lock_flags);
 
@@ -717,7 +717,7 @@
 	struct jsm_channel *ch;
 	u8 isr;
 	u8 cause;
-	u64 lock_flags;
+	unsigned long lock_flags;
 
 	if (!brd)
 		return;
@@ -830,7 +830,7 @@
 {
 	struct jsm_channel *ch;
 	int linestatus;
-	u64 lock_flags;
+	unsigned long lock_flags;
 
 	if (!brd)
 		return;
diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c
index b6bc881..7fb7cc0 100644
--- a/drivers/serial/jsm/jsm_tty.c
+++ b/drivers/serial/jsm/jsm_tty.c
@@ -34,7 +34,7 @@
 static inline int jsm_get_mstat(struct jsm_channel *ch)
 {
 	unsigned char mstat;
-	unsigned char result;
+	unsigned result;
 
 	jsm_printk(IOCTL, INFO, &ch->ch_bd->pci_dev, "start\n");
 
@@ -359,7 +359,7 @@
 int jsm_tty_init(struct jsm_board *brd)
 {
 	int i;
-	u8 *vaddr;
+	void __iomem *vaddr;
 	struct jsm_channel *ch;
 
 	if (!brd)
@@ -371,8 +371,6 @@
 	 * Initialize board structure elements.
 	 */
 
-	vaddr = brd->re_map_membase;
-
 	brd->nasync = brd->maxports;
 
 	/*
@@ -408,8 +406,7 @@
 		spin_lock_init(&ch->ch_lock);
 
 		if (brd->bd_uart_offset == 0x200)
-			ch->ch_neo_uart = (struct neo_uart_struct *) ((u64) vaddr
-						+ (brd->bd_uart_offset * i));
+			ch->ch_neo_uart =  vaddr + (brd->bd_uart_offset * i);
 
 		ch->ch_bd = brd;
 		ch->ch_portnum = i;
@@ -427,7 +424,6 @@
 int jsm_uart_port_init(struct jsm_board *brd)
 {
 	int i;
-	u8 *vaddr;
 	struct jsm_channel *ch;
 
 	if (!brd)
@@ -439,7 +435,6 @@
 	 * Initialize board structure elements.
 	 */
 
-	vaddr = brd->re_map_membase;
 	brd->nasync = brd->maxports;
 
 	/* Set up channel variables */
@@ -504,7 +499,7 @@
 	u16 head;
 	u16 tail;
 	int data_len;
-	u64 lock_flags;
+	unsigned long lock_flags;
 	int flip_len;
 	int len = 0;
 	int n = 0;