diff options
-rw-r--r-- | drivers/w1/masters/ds2490.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c index 1b632d549e79..c4ff70b2c7c4 100644 --- a/drivers/w1/masters/ds2490.c +++ b/drivers/w1/masters/ds2490.c | |||
@@ -490,28 +490,15 @@ static int ds_set_pullup(struct ds_device *dev, int delay) | |||
490 | 490 | ||
491 | static int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit) | 491 | static int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit) |
492 | { | 492 | { |
493 | int err, count; | 493 | int err; |
494 | struct ds_status st; | 494 | struct ds_status st; |
495 | u16 value = (COMM_BIT_IO | COMM_IM) | ((bit) ? COMM_D : 0); | ||
496 | u16 cmd; | ||
497 | 495 | ||
498 | err = ds_send_control(dev, value, 0); | 496 | err = ds_send_control(dev, COMM_BIT_IO | COMM_IM | (bit ? COMM_D : 0), |
497 | 0); | ||
499 | if (err) | 498 | if (err) |
500 | return err; | 499 | return err; |
501 | 500 | ||
502 | count = 0; | 501 | ds_wait_status(dev, &st); |
503 | do { | ||
504 | err = ds_wait_status(dev, &st); | ||
505 | if (err) | ||
506 | return err; | ||
507 | |||
508 | cmd = st.command0 | (st.command1 << 8); | ||
509 | } while (cmd != value && ++count < 10); | ||
510 | |||
511 | if (err < 0 || count >= 10) { | ||
512 | printk(KERN_ERR "Failed to obtain status.\n"); | ||
513 | return -EINVAL; | ||
514 | } | ||
515 | 502 | ||
516 | err = ds_recv_data(dev, tbit, sizeof(*tbit)); | 503 | err = ds_recv_data(dev, tbit, sizeof(*tbit)); |
517 | if (err < 0) | 504 | if (err < 0) |