/** * Writes a series of bytes. * * @param data the master device data * @param buf pointer to the data to write * @param len the number of bytes to write */ static void w1_gpio_write_block(void *data, const u8 *buf, int len) { int i; w1_gpio_pre_write(data); for (i = 0; i < len; ++i) w1_gpio_write_8(data, buf[i]); /* calls w1_pre_write */ w1_gpio_post_write(data); }
/** * Writes 8 bits. * * @param data the master device data * @param byte the byte to write */ static void w1_gpio_write_8(void *data, u8 byte) { int i; w1_gpio_pre_write(data); for (i = 0; i < 8; ++i) { if (i == 7) w1_gpio_pre_write(data); // w1_gpio_write_bit(data, (byte >> i) & 0x1); w1_gpio_touch_bit(data, (byte >> i) & 0x1); } w1_gpio_post_write(data); }
/** * Writes 8 bits. * * @param data the master device data * @param byte the byte to write */ static void w1_gpio_write_8(void *data, u8 byte) { int i; unsigned long irq_flags; w1_gpio_pre_write(data); spin_lock_irqsave(&w1_gpio_msm_lock, irq_flags); for (i = 0; i < 8; ++i) w1_gpio_write_bit_in8(data, (byte >> i) & 0x1); spin_unlock_irqrestore(&w1_gpio_msm_lock, irq_flags); w1_gpio_post_write(data); }