/** * w1_triplet() - * Does a triplet - used for searching ROM addresses. * @dev: the master device * @bdir: the bit to write if both id_bit and comp_bit are 0 * * Return bits: * bit 0 = id_bit * bit 1 = comp_bit * bit 2 = dir_taken * If both bits 0 & 1 are set, the search should be restarted. * * Return: bit fields - see above */ u8 w1_triplet(struct w1_master *dev, int bdir) { if (dev->bus_master->triplet) return dev->bus_master->triplet(dev->bus_master->data, bdir); else { u8 id_bit = w1_touch_bit(dev, 1); u8 comp_bit = w1_touch_bit(dev, 1); u8 retval; if (id_bit && comp_bit) return 0x03; /* error */ if (!id_bit && !comp_bit) { /* Both bits are valid, take the direction given */ retval = bdir ? 0x04 : 0; } else { /* Only one bit is valid, take that direction */ bdir = id_bit; retval = id_bit ? 0x05 : 0x02; } if (dev->bus_master->touch_bit) w1_touch_bit(dev, bdir); else w1_write_bit(dev, bdir); return retval; } }
u8 w1_triplet(struct w1_master *dev, int bdir) { if (dev->bus_master->triplet) return dev->bus_master->triplet(dev->bus_master->data, bdir); else { u8 id_bit = w1_touch_bit(dev, 1); u8 comp_bit = w1_touch_bit(dev, 1); u8 retval; if (id_bit && comp_bit) return 0x03; /* */ if (!id_bit && !comp_bit) { /* */ retval = bdir ? 0x04 : 0; } else { /* */ bdir = id_bit; retval = id_bit ? 0x05 : 0x02; } if (dev->bus_master->touch_bit) w1_touch_bit(dev, bdir); else w1_write_bit(dev, bdir); return retval; } }
/** * w1_read_8() - Reads 8 bits. * @dev: the master device * * Return: the byte read */ u8 w1_read_8(struct w1_master *dev) { int i; u8 res = 0; if (dev->bus_master->read_byte) res = dev->bus_master->read_byte(dev->bus_master->data); else for (i = 0; i < 8; ++i) res |= (w1_touch_bit(dev,1) << i); return res; }