/* Does a triplet - used for searching ROM addresses. 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. */
u8 w1_triplet(struct w1_master *dev, int bdir)
/* Does a triplet - used for searching ROM addresses. 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. */
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;
	}
}