linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Winklhofer <cj.winklhofer@gmail.com>
To: Jiri Slaby <jirislaby@kernel.org>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>, Rob Herring <robh@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Jonathan Corbet <corbet@lwn.net>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-serial@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v4 3/3] w1: add UART w1 bus driver
Date: Mon, 8 Jan 2024 19:03:21 +0100	[thread overview]
Message-ID: <ZZw46ZQ5JoxlWflG@cjw-notebook> (raw)
In-Reply-To: <5ff1d706-9f06-4eb6-bc86-75f933e54118@kernel.org>

On Mon, Jan 08, 2024 at 07:18:31AM +0100, Jiri Slaby wrote:
> On 06. 01. 24, 17:02, Christoph Winklhofer via B4 Relay wrote:
> > From: Christoph Winklhofer <cj.winklhofer@gmail.com>
> > 
> > Add a UART 1-Wire bus driver. The driver utilizes the UART interface via
> > the Serial Device Bus to create the 1-Wire timing patterns. The driver
> > was tested on a "Raspberry Pi 3B" with a DS18B20 and on a "Variscite
> > DART-6UL" with a DS18S20 temperature sensor.
> > 
> > The 1-Wire timing pattern and the corresponding UART baud-rate with the
> > interpretation of the transferred bytes are described in the document:
> > 
> > Link: https://www.analog.com/en/technical-articles/using-a-uart-to-implement-a-1wire-bus-master.html
> > 
> > In short, the UART peripheral must support full-duplex and operate in
> > open-drain mode. The timing patterns are generated by a specific
> > combination of baud-rate and transmitted byte, which corresponds to a
> > 1-Wire read bit, write bit or reset.
> ...
> > --- /dev/null
> > +++ b/drivers/w1/masters/w1-uart.c
> > @@ -0,0 +1,398 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * w1-uart - UART 1-Wire bus driver
> > + *
> > + * Uses the UART interface (via Serial Device Bus) to create the 1-Wire
> > + * timing patterns. Implements the following 1-Wire master interface:
> > + *
> > + * - reset_bus: requests baud-rate 9600
> > + *
> > + * - touch_bit: requests baud-rate 115200
> > + *
> > + * Author: Christoph Winklhofer <cj.winklhofer@gmail.com>
> > + */
> > +
> > +#include <linux/completion.h>
> > +#include <linux/delay.h>
> > +#include <linux/jiffies.h>
> > +#include <linux/module.h>
> > +#include <linux/mutex.h>
> > +#include <linux/of.h>
> > +#include <linux/serdev.h>
> > +#include <linux/w1.h>
> > +
> > +#define W1_UART_TIMEOUT msecs_to_jiffies(500)
> > +
> > +/*
> > + * struct w1_uart_config - configuration for 1-Wire operation
> > + *
> > + * @baudrate: baud-rate returned from serdev
> > + * @delay_us: delay to complete a 1-Wire cycle (in us)
> > + * @tx_byte: byte to generate 1-Wire timing pattern
> > + */
> > +struct w1_uart_config {
> > +	unsigned int baudrate;
> > +	unsigned int delay_us;
> > +	unsigned char tx_byte;
> 
> If it is a "byte", it should be u8.
> 
will change this and all others to u8.

...
> > +
> > +static inline unsigned int baud_to_bit_ns(unsigned int baud)
> > +{
> > +	return 1000000000 / baud;
> 
> NSEC_PER_SEC
> 
> > +}
> > +
> > +static inline unsigned int to_ns(unsigned int us)
> > +{
> > +	return us * 1000;
> 
> NSEC_PER_USEC
> 
and use the correct constants.

...
> > +}
> > +
> > +/*
> > + * Set baud-rate, delay and tx-byte to create a 1-Wire pulse and adapt
> > + * the tx-byte according to the actual baud-rate.
> > + *
> > + * Reject when:
> > + * - time for a bit outside min/max range
> > + * - a 1-Wire response is not detectable for sent byte
> > + */
> > +static int w1_uart_set_config(struct serdev_device *serdev,
> > +			      const struct w1_uart_limits *limits,
> > +			      struct w1_uart_config *w1cfg)
> > +{
...
> > +	/* 1-Wire response detectable for sent byte */
> > +	if (limits->sample_us > 0 &&
> > +	    bit_ns * 8 < low_ns + to_ns(limits->sample_us))
> 
> BITS_PER_BYTE
> 
ok, change it (it is the time for the UART data-frame).
> > +		return -EINVAL;
> > +
> > +	/* delay to complete 1-Wire cycle, include start and stop-bit */
> > +	w1cfg->delay_us = 0;
> > +	if (bit_ns * 10 < to_ns(limits->cycle_us))
> 
> What is this 10? Dub it.
> 
> > +		w1cfg->delay_us =
> > +			(to_ns(limits->cycle_us) - bit_ns * 10) / 1000;
> 
> And this 10?
> 
> The end: / NSEC_PER_USEC
> 
will be more explicit (it is the time for the UART packet:
BITS_PER_BYTE + 2 (start and stop-bit).

...
> > +static int w1_uart_serdev_receive_buf(struct serdev_device *serdev,
> > +				      const unsigned char *buf, size_t count)
> 
> serdev already uses u8 * here. You are basing on the top of some old tree.
Yes, this patch is based on the w1-next branch of
  git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-w1.git
was not sure from where to start. I guess that this change is probably in
the w1-tree after the next stable release.
> 
> regards,
> -- 
> js
> suse labs
> 
Thanks Jiri for the review!

Kind regards,
Christoph

  reply	other threads:[~2024-01-08 18:03 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-06 16:02 [PATCH v4 0/3] w1: add UART w1 bus driver Christoph Winklhofer via B4 Relay
2024-01-06 16:02 ` [PATCH v4 1/3] dt-bindings: w1: UART 1-Wire bus Christoph Winklhofer via B4 Relay
2024-01-13  1:39   ` Rob Herring
2024-01-13 18:04     ` Christoph Winklhofer
2024-01-14 10:54       ` Krzysztof Kozlowski
2024-01-14 14:47         ` Christoph Winklhofer
2024-01-14 15:55           ` Krzysztof Kozlowski
2024-01-15 17:36             ` Christoph Winklhofer
2024-01-15 18:02               ` Krzysztof Kozlowski
2024-01-16  7:10                 ` Christoph Winklhofer
2024-01-06 16:02 ` [PATCH v4 2/3] dt-bindings: serial: allow onewire as child node Christoph Winklhofer via B4 Relay
2024-01-13  1:40   ` Rob Herring
2024-01-06 16:02 ` [PATCH v4 3/3] w1: add UART w1 bus driver Christoph Winklhofer via B4 Relay
2024-01-08  6:18   ` Jiri Slaby
2024-01-08 18:03     ` Christoph Winklhofer [this message]
2024-01-08 19:29       ` Krzysztof Kozlowski
2024-01-06 16:56 ` [PATCH v4 0/3] " Krzysztof Kozlowski
2024-01-06 17:57   ` Christoph Winklhofer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZZw46ZQ5JoxlWflG@cjw-notebook \
    --to=cj.winklhofer@gmail.com \
    --cc=conor+dt@kernel.org \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).