w1: ds2408: make value read-back check a Kconfig option

De-activating this reading back will effectively half the time required
for a write to the output register.

Acked-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Jean-Francois Dagenais <jeff.dagenais@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jean-Francois Dagenais 2013-03-15 14:20:25 -04:00 committed by Greg Kroah-Hartman
parent 96dd86fa58
commit aceca28544
2 changed files with 22 additions and 6 deletions

View File

@ -22,6 +22,16 @@ config W1_SLAVE_DS2408
Say Y here if you want to use a 1-wire
DS2408 8-Channel Addressable Switch device support
config W1_SLAVE_DS2408_READBACK
bool "Read-back values written to DS2408's output register"
depends on W1_SLAVE_DS2408
default y
help
Enabling this will cause the driver to read back the values written
to the chip's output register in order to detect errors.
This is slower but useful when debugging chips and/or busses.
config W1_SLAVE_DS2413
tristate "Dual Channel Addressable Switch 0x3a family support (DS2413)"
help

View File

@ -178,6 +178,15 @@ static ssize_t w1_f29_write_output(
w1_write_block(sl->master, w1_buf, 3);
readBack = w1_read_8(sl->master);
if (readBack != W1_F29_SUCCESS_CONFIRM_BYTE) {
if (w1_reset_resume_command(sl->master))
goto error;
/* try again, the slave is ready for a command */
continue;
}
#ifdef CONFIG_W1_SLAVE_DS2408_READBACK
/* here the master could read another byte which
would be the PIO reg (the actual pin logic state)
since in this driver we don't know which pins are
@ -186,11 +195,6 @@ static ssize_t w1_f29_write_output(
if (w1_reset_resume_command(sl->master))
goto error;
if (readBack != 0xAA) {
/* try again, the slave is ready for a command */
continue;
}
/* go read back the output latches */
/* (the direct effect of the write above) */
w1_buf[0] = W1_F29_FUNC_READ_PIO_REGS;
@ -198,7 +202,9 @@ static ssize_t w1_f29_write_output(
w1_buf[2] = 0;
w1_write_block(sl->master, w1_buf, 3);
/* read the result of the READ_PIO_REGS command */
if (w1_read_8(sl->master) == *buf) {
if (w1_read_8(sl->master) == *buf)
#endif
{
/* success! */
mutex_unlock(&sl->master->bus_mutex);
dev_dbg(&sl->dev,