diff options
-rw-r--r-- | drivers/w1/w1_io.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c index 765b37b62a4f..3135b2c63998 100644 --- a/drivers/w1/w1_io.c +++ b/drivers/w1/w1_io.c | |||
@@ -158,13 +158,18 @@ EXPORT_SYMBOL_GPL(w1_write_8); | |||
158 | static u8 w1_read_bit(struct w1_master *dev) | 158 | static u8 w1_read_bit(struct w1_master *dev) |
159 | { | 159 | { |
160 | int result; | 160 | int result; |
161 | unsigned long flags; | ||
161 | 162 | ||
163 | /* sample timing is critical here */ | ||
164 | local_irq_save(flags); | ||
162 | dev->bus_master->write_bit(dev->bus_master->data, 0); | 165 | dev->bus_master->write_bit(dev->bus_master->data, 0); |
163 | w1_delay(6); | 166 | w1_delay(6); |
164 | dev->bus_master->write_bit(dev->bus_master->data, 1); | 167 | dev->bus_master->write_bit(dev->bus_master->data, 1); |
165 | w1_delay(9); | 168 | w1_delay(9); |
166 | 169 | ||
167 | result = dev->bus_master->read_bit(dev->bus_master->data); | 170 | result = dev->bus_master->read_bit(dev->bus_master->data); |
171 | local_irq_restore(flags); | ||
172 | |||
168 | w1_delay(55); | 173 | w1_delay(55); |
169 | 174 | ||
170 | return result & 0x1; | 175 | return result & 0x1; |