Skip to content

Commit e38ba02

Browse files
glenn-andrewskartben
authored andcommitted
drivers: w1: use correct reset byte for overdrive mode
Test the received byte against the byte sent depending on the speed selected, not the standard-speed mode byte every time. Signed-off-by: Glenn Andrews <[email protected]>
1 parent 171ed89 commit e38ba02

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

drivers/w1/w1_zephyr_serial.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,9 @@ static int w1_serial_reset_bus(const struct device *dev)
131131
{
132132
const struct w1_serial_config *cfg = dev->config;
133133
struct w1_serial_data *data = dev->data;
134-
uint8_t reset_byte = data->overdrive_active ?
135-
W1_SERIAL_OD_RESET_BYTE : W1_SERIAL_STD_RESET_BYTE;
134+
const uint8_t reset_byte_tx =
135+
data->overdrive_active ? W1_SERIAL_OD_RESET_BYTE : W1_SERIAL_STD_RESET_BYTE;
136+
uint8_t reset_byte_rx = 0;
136137
/* reset uses 115200/9600=12 slower baudrate,
137138
* adjust timeout accordingly, also valid for overdrive speed.
138139
*/
@@ -145,7 +146,7 @@ static int w1_serial_reset_bus(const struct device *dev)
145146
return -EIO;
146147
}
147148

148-
if (serial_tx_rx(dev, &reset_byte, &reset_byte, 1, reset_timeout) < 0) {
149+
if (serial_tx_rx(dev, &reset_byte_tx, &reset_byte_rx, 1, reset_timeout) < 0) {
149150
LOG_ERR("tx_rx_error reset_present");
150151
return -EIO;
151152
}
@@ -157,10 +158,11 @@ static int w1_serial_reset_bus(const struct device *dev)
157158
return -EIO;
158159
}
159160

160-
/* At least 1 device is present on bus, if reset_byte is different
161-
* from 0xF0. But Bus probably shorted if reset_byte is 0x00.
161+
/* At least 1 device is present on bus if reset_byte_rx is different
162+
* from reset_byte_tx (which varies depending on standard or overdrive mode).
163+
* Bus is probably shorted if reset_byte_rx is 0x00.
162164
*/
163-
return (reset_byte != W1_SERIAL_STD_RESET_BYTE) && (reset_byte != 0x00);
165+
return (reset_byte_rx != reset_byte_tx) && (reset_byte_rx != 0x00);
164166
}
165167

166168
static int w1_serial_read_bit(const struct device *dev)

0 commit comments

Comments
 (0)