diff options
Diffstat (limited to 'recipes/librfid/files/soos01-set_clear_bits.patch')
-rw-r--r-- | recipes/librfid/files/soos01-set_clear_bits.patch | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/recipes/librfid/files/soos01-set_clear_bits.patch b/recipes/librfid/files/soos01-set_clear_bits.patch new file mode 100644 index 0000000000..31cf37bf13 --- /dev/null +++ b/recipes/librfid/files/soos01-set_clear_bits.patch @@ -0,0 +1,119 @@ +Index: librfid-svn/src/rfid_asic_rc632.c +=================================================================== +--- librfid-svn.orig/src/rfid_asic_rc632.c 2008-03-12 13:02:52.000000000 +0100 ++++ librfid-svn/src/rfid_asic_rc632.c 2008-03-12 15:15:34.000000000 +0100 +@@ -149,9 +149,15 @@ + } + + static int +-rc632_clear_irqs(struct rfid_asic_handle *handle, u_int8_t bits) ++rc632_clear_spec_bits(struct rfid_asic_handle *handle, u_int8_t reg, u_int8_t bits) + { +- return rc632_reg_write(handle, RC632_REG_INTERRUPT_RQ, (~RC632_INT_SET)&bits); ++ return rc632_reg_write(handle, reg, (0x3f)&bits); ++} ++ ++static int ++rc632_set_spec_bits(struct rfid_asic_handle *handle, u_int8_t reg, u_int8_t bits) ++{ ++ return rc632_reg_write(handle, reg, (0x80)|bits); + } + + static int +@@ -258,13 +264,10 @@ + + /* clear timer irq bit */ + /*FIXME: is this right? maybe use write function and set bit 8 to zero and timer_bit to 1 to clear*/ +- //ret = rc632_set_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_TIMER); +- //ret = rc632_reg_write(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_TIMER); +- ret = rc632_clear_irqs(handle, RC632_IRQ_TIMER); ++ ret = rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_TIMER); + + /* enable timer IRQ */ +- //ret |= rc632_set_bits(handle, RC632_REG_INTERRUPT_EN, RC632_IRQ_TIMER); +- ret |= rc632_reg_write(handle, RC632_REG_INTERRUPT_EN, RC632_IRQ_SET | RC632_IRQ_TIMER); ++ ret |= rc632_set_spec_bits(handle, RC632_REG_INTERRUPT_EN, RC632_IRQ_TIMER); + + ret |= rc632_reg_write(handle, RC632_REG_TIMER_RELOAD, divisor); + +@@ -282,10 +285,10 @@ + return ret; + DEBUGP_INTERRUPT_FLAG("irq_en",irq); + +- ret = rc632_reg_write(handle, RC632_REG_INTERRUPT_EN, RC632_IRQ_SET +- | RC632_IRQ_TIMER ++ ret = rc632_set_spec_bits(handle, RC632_REG_INTERRUPT_EN, RC632_IRQ_TIMER + | RC632_IRQ_IDLE +- | RC632_IRQ_RX ); ++ | RC632_IRQ_RX ++ ); + if (ret < 0) + return ret; + +@@ -312,7 +315,7 @@ + + if (irq & RC632_IRQ_TIMER && !(irq & RC632_IRQ_RX)) { + DEBUGP("timer expired before RX!!\n"); +- rc632_clear_irqs(handle, RC632_IRQ_TIMER); ++ rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_TIMER); + return -ETIMEDOUT; + } + } +@@ -322,7 +325,7 @@ + return ret; + + if (cmd == 0){ +- rc632_clear_irqs(handle, RC632_IRQ_RX); ++ rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_RX); + return 0; + } + +@@ -361,7 +364,7 @@ + ret = rc632_reg_read(handle, RC632_REG_INTERRUPT_RQ, &foo); + DEBUGP_INTERRUPT_FLAG("irq_rq",foo); + /* clear all interrupts */ +- rc632_clear_irqs(handle, 0xff); ++ rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_IRQ_ALL); + } + } + if (cmd == 0) { +@@ -455,7 +458,7 @@ + + ret = rc632_reg_write(handle, RC632_REG_COMMAND, RC632_CMD_IDLE); + /* clear all interrupts */ +- ret = rc632_reg_write(handle, RC632_REG_INTERRUPT_RQ, 0x3f); ++ rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_INT_ALL); + + { u_int8_t tmp; + rc632_reg_read(handle, RC632_REG_PRIMARY_STATUS, &tmp); +@@ -549,7 +552,7 @@ + DEBUGP("timeout=%u, rx_len=%u\n", timer, *rx_len); + ret = rc632_reg_write(handle, RC632_REG_COMMAND, 0x00); /* IDLE */ + /* clear all interrupts */ +- ret = rc632_reg_write(handle, RC632_REG_INTERRUPT_RQ, 0x7f); ++ rc632_clear_spec_bits(handle, RC632_REG_INTERRUPT_RQ, RC632_INT_ALL); + + ret = rc632_timer_set(handle, timer); + if (ret < 0) +Index: librfid-svn/src/rfid_asic_rc632.h +=================================================================== +--- librfid-svn.orig/src/rc632.h 2008-03-12 13:01:43.000000000 +0100 ++++ librfid-svn/src/rc632.h 2008-03-12 12:42:59.000000000 +0100 +@@ -106,6 +106,8 @@ + RC632_INT_RX = 0x08, + RC632_INT_TX = 0x10, + RC632_INT_TIMER = 0x20, ++ RC632_INT_ALL = 0x3f, ++ + RC632_INT_SET = 0x80, + }; + +@@ -261,6 +263,7 @@ + RC632_IRQ_RX = 0x08, + RC632_IRQ_TX = 0x10, + RC632_IRQ_TIMER = 0x20, ++ RC632_IRQ_ALL = 0x3f, + + RC632_IRQ_SET = 0x80, + }; + |