]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
CBUS: Retu: add atomic set and clear register bits function
authorImre Deak <imre.deak@solidboot.com>
Fri, 29 Sep 2006 21:07:55 +0000 (17:07 -0400)
committerJuha Yrjola <juha.yrjola@solidboot.com>
Fri, 29 Sep 2006 14:35:58 +0000 (17:35 +0300)
Signed-off-by: Imre Deak <imre.deak@solidboot.com>
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
drivers/cbus/retu.c
drivers/cbus/retu.h

index e35e6605d12419845a3ad7acb377c9a253368aff..0218050f47e7a04db4b2a2ca52a3ac55f29bb42e 100644 (file)
@@ -91,6 +91,19 @@ void retu_write_reg(int reg, u16 val)
        cbus_write_reg(cbus_host, RETU_ID, reg, val);
 }
 
+void retu_set_clear_reg_bits(int reg, u16 set, u16 clear)
+{
+       unsigned long flags;
+       u16 w;
+
+       spin_lock_irqsave(&retu_lock, flags);
+       w = retu_read_reg(reg);
+       w &= ~clear;
+       w |= set;
+       retu_write_reg(reg, w);
+       spin_unlock_irqrestore(&retu_lock, flags);
+}
+
 #define ADC_MAX_CHAN_NUMBER    13
 
 int retu_read_adc(int channel)
index db20afc13d2ec472b13f09afef4263e8c3d153c2..02be6d4defc926fdd539995cd28fea924c03fefc 100644 (file)
@@ -55,6 +55,7 @@
 
 int retu_read_reg(int reg);
 void retu_write_reg(int reg, u16 val);
+void retu_set_clear_reg_bits(int reg, u16 set, u16 clear);
 int retu_read_adc(int channel);
 int retu_request_irq(int id, void *irq_handler, unsigned long arg, char *name);
 void retu_free_irq(int id);