From: "david.chosrova@libertysurf.fr" <david.chosrova@libertysurf.fr>
Subject: [KJ] [PATCH] sti/cli removal ep7211.c

convert sti/cli... usage to accepted locking primitives.

signed-off-by : David chosrova <david.chosrova@libertysurf.fr>

---
 ep7211_ir.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

Index: quilt/drivers/net/irda/ep7211_ir.c
===================================================================
--- quilt.orig/drivers/net/irda/ep7211_ir.c
+++ quilt/drivers/net/irda/ep7211_ir.c
@@ -8,12 +8,14 @@
 #include <linux/delay.h>
 #include <linux/tty.h>
 #include <linux/init.h>
+#include <linux/spinlock.h>
 
 #include <net/irda/irda.h>
 #include <net/irda/irda_device.h>
 
 #include <asm/io.h>
 #include <asm/hardware.h>
+ 
 
 #define MIN_DELAY 25      /* 15 us, but wait a little more to be sure */
 #define MAX_DELAY 10000   /* 1 ms */
@@ -22,7 +24,7 @@ static void ep7211_ir_open(dongle_t *sel
 static void ep7211_ir_close(dongle_t *self);
 static int  ep7211_ir_change_speed(struct irda_task *task);
 static int  ep7211_ir_reset(struct irda_task *task);
-
+static spinlock_t driver_lock;
 static struct dongle_reg dongle = {
 	.type = IRDA_EP7211_IR,
 	.open = ep7211_ir_open,
@@ -36,7 +38,8 @@ static void ep7211_ir_open(dongle_t *sel
 {
 	unsigned int syscon1, flags;
 
-	save_flags(flags); cli();
+	
+	spin_lock_irqsave(&driver_lock, flags);
 
 	/* Turn on the SIR encoder. */
 	syscon1 = clps_readl(SYSCON1);
@@ -46,14 +49,14 @@ static void ep7211_ir_open(dongle_t *sel
 	/* XXX: We should disable modem status interrupts on the first
 		UART (interrupt #14). */
 
-	restore_flags(flags);
+	spin_unlock_irqrestore(&driver_lock, flags);
 }
 
 static void ep7211_ir_close(dongle_t *self)
 {
 	unsigned int syscon1, flags;
 
-	save_flags(flags); cli();
+	spin_lock_irqsave(&driver_lock, flags);
 
 	/* Turn off the SIR encoder. */
 	syscon1 = clps_readl(SYSCON1);
@@ -63,7 +66,7 @@ static void ep7211_ir_close(dongle_t *se
 	/* XXX: If we've disabled the modem status interrupts, we should
 		reset them back to their original state. */
 
-	restore_flags(flags);
+	spin_unlock_irqrestore(&driver_lock, flags);
 }
 
 /*
@@ -99,6 +102,7 @@ static int ep7211_ir_reset(struct irda_t
  */
 static int __init ep7211_ir_init(void)
 {
+	spin_lock_init(&driver_lock);
 	return irda_device_register_dongle(&dongle);
 }
 
