Skip to content

Commit

Permalink
w1: ds2408: make value read-back check a Kconfig option
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jeff-dagenais authored and gregkh committed Mar 15, 2013
1 parent 96dd86f commit aceca28
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
10 changes: 10 additions & 0 deletions drivers/w1/slaves/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 12 additions & 6 deletions drivers/w1/slaves/w1_ds2408.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -186,19 +195,16 @@ 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;
w1_buf[1] = W1_F29_REG_OUTPUT_LATCH_STATE;
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,
Expand Down

0 comments on commit aceca28

Please sign in to comment.