Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aceca285 authored by Jean-Francois Dagenais's avatar Jean-Francois Dagenais Committed by Greg Kroah-Hartman
Browse files

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: default avatarEvgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: default avatarJean-Francois Dagenais <jeff.dagenais@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 96dd86fa
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,16 @@ config W1_SLAVE_DS2408
	  Say Y here if you want to use a 1-wire
	  Say Y here if you want to use a 1-wire
	  DS2408 8-Channel Addressable Switch device support
	  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
config W1_SLAVE_DS2413
	tristate "Dual Channel Addressable Switch 0x3a family support (DS2413)"
	tristate "Dual Channel Addressable Switch 0x3a family support (DS2413)"
	help
	help
+12 −6
Original line number Original line Diff line number Diff line
@@ -178,6 +178,15 @@ static ssize_t w1_f29_write_output(
		w1_write_block(sl->master, w1_buf, 3);
		w1_write_block(sl->master, w1_buf, 3);


		readBack = w1_read_8(sl->master);
		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
		/* here the master could read another byte which
		   would be the PIO reg (the actual pin logic state)
		   would be the PIO reg (the actual pin logic state)
		   since in this driver we don't know which pins are
		   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))
		if (w1_reset_resume_command(sl->master))
			goto error;
			goto error;


		if (readBack != 0xAA) {
			/* try again, the slave is ready for a command */
			continue;
		}

		/* go read back the output latches */
		/* go read back the output latches */
		/* (the direct effect of the write above) */
		/* (the direct effect of the write above) */
		w1_buf[0] = W1_F29_FUNC_READ_PIO_REGS;
		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_buf[2] = 0;
		w1_write_block(sl->master, w1_buf, 3);
		w1_write_block(sl->master, w1_buf, 3);
		/* read the result of the READ_PIO_REGS command */
		/* 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! */
			/* success! */
			mutex_unlock(&sl->master->bus_mutex);
			mutex_unlock(&sl->master->bus_mutex);
			dev_dbg(&sl->dev,
			dev_dbg(&sl->dev,