aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/w1/masters/ds2490.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/w1/masters/ds2490.c')
-rw-r--r--drivers/w1/masters/ds2490.c21
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
491static int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit) 491static 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)