All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Nikolaus Voss <nv@vosn.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guenter Roeck <linux@roeck-us.net>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	nikolaus.voss@loewensteinmedical.de
Subject: usb: typec: tps6598x: handle block writes separately with plain-I2C adapters
Date: Wed, 20 Feb 2019 14:14:41 +0200	[thread overview]
Message-ID: <20190220121441.GA5054@kuha.fi.intel.com> (raw)

Hi,

On Mon, Sep 10, 2018 at 07:05:01AM +0200, Nikolaus Voss wrote:
> Commit 1a2f474d328f handles block _reads_ separately with plain-I2C
> adapters, but the problem described with regmap-i2c not handling
> SMBus block transfers (i.e. read and writes) correctly also exists
> with writes.
> 
> As workaround, this patch adds a block write function the same way
> 1a2f474d328f adds a block read function.
> 
> Fixes: 1a2f474d328f ("usb: typec: tps6598x: handle block reads separately with plain-I2C adapters")
> Fixes: 0a4c005bd171 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>  drivers/usb/typec/tps6598x.c | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
> index c84c8c189e90..57a3e6c5c175 100644
> --- a/drivers/usb/typec/tps6598x.c
> +++ b/drivers/usb/typec/tps6598x.c
> @@ -110,6 +110,20 @@ tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len)
>  	return 0;
>  }
>  
> +static int tps6598x_block_write(struct tps6598x *tps, u8 reg,
> +				void *val, size_t len)
> +{
> +	u8 data[len + 1];
> +
> +	if (!tps->i2c_protocol)
> +		return regmap_raw_write(tps->regmap, reg, val, len);
> +
> +	data[0] = len;
> +	memcpy(&data[1], val, len);
> +
> +	return regmap_raw_write(tps->regmap, reg, data, sizeof(data));
> +}
> +
>  static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val)
>  {
>  	return tps6598x_block_read(tps, reg, val, sizeof(u16));
> @@ -127,23 +141,23 @@ static inline int tps6598x_read64(struct tps6598x *tps, u8 reg, u64 *val)
>  
>  static inline int tps6598x_write16(struct tps6598x *tps, u8 reg, u16 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u16));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u16));
>  }
>  
>  static inline int tps6598x_write32(struct tps6598x *tps, u8 reg, u32 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u32));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u32));
>  }
>  
>  static inline int tps6598x_write64(struct tps6598x *tps, u8 reg, u64 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u64));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u64));
>  }
>  
>  static inline int
>  tps6598x_write_4cc(struct tps6598x *tps, u8 reg, const char *val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u32));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u32));
>  }
>  
>  static int tps6598x_read_partner_identity(struct tps6598x *tps)

You need to fix tps6598x_exec_cmd() as well.

Did you really send this last September? If you did, then the mail has
been stuck somewhere for a long time.


thanks,

WARNING: multiple messages have this Message-ID (diff)
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Nikolaus Voss <nv@vosn.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guenter Roeck <linux@roeck-us.net>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	nikolaus.voss@loewensteinmedical.de
Subject: Re: [PATCH] usb: typec: tps6598x: handle block writes separately with plain-I2C adapters
Date: Wed, 20 Feb 2019 14:14:41 +0200	[thread overview]
Message-ID: <20190220121441.GA5054@kuha.fi.intel.com> (raw)
In-Reply-To: <20190220110017.BFA344CE86@mail.steuer-voss.de>

Hi,

On Mon, Sep 10, 2018 at 07:05:01AM +0200, Nikolaus Voss wrote:
> Commit 1a2f474d328f handles block _reads_ separately with plain-I2C
> adapters, but the problem described with regmap-i2c not handling
> SMBus block transfers (i.e. read and writes) correctly also exists
> with writes.
> 
> As workaround, this patch adds a block write function the same way
> 1a2f474d328f adds a block read function.
> 
> Fixes: 1a2f474d328f ("usb: typec: tps6598x: handle block reads separately with plain-I2C adapters")
> Fixes: 0a4c005bd171 ("usb: typec: driver for TI TPS6598x USB Power Delivery controllers")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>  drivers/usb/typec/tps6598x.c | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
> index c84c8c189e90..57a3e6c5c175 100644
> --- a/drivers/usb/typec/tps6598x.c
> +++ b/drivers/usb/typec/tps6598x.c
> @@ -110,6 +110,20 @@ tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len)
>  	return 0;
>  }
>  
> +static int tps6598x_block_write(struct tps6598x *tps, u8 reg,
> +				void *val, size_t len)
> +{
> +	u8 data[len + 1];
> +
> +	if (!tps->i2c_protocol)
> +		return regmap_raw_write(tps->regmap, reg, val, len);
> +
> +	data[0] = len;
> +	memcpy(&data[1], val, len);
> +
> +	return regmap_raw_write(tps->regmap, reg, data, sizeof(data));
> +}
> +
>  static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val)
>  {
>  	return tps6598x_block_read(tps, reg, val, sizeof(u16));
> @@ -127,23 +141,23 @@ static inline int tps6598x_read64(struct tps6598x *tps, u8 reg, u64 *val)
>  
>  static inline int tps6598x_write16(struct tps6598x *tps, u8 reg, u16 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u16));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u16));
>  }
>  
>  static inline int tps6598x_write32(struct tps6598x *tps, u8 reg, u32 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u32));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u32));
>  }
>  
>  static inline int tps6598x_write64(struct tps6598x *tps, u8 reg, u64 val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u64));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u64));
>  }
>  
>  static inline int
>  tps6598x_write_4cc(struct tps6598x *tps, u8 reg, const char *val)
>  {
> -	return regmap_raw_write(tps->regmap, reg, &val, sizeof(u32));
> +	return tps6598x_block_write(tps, reg, &val, sizeof(u32));
>  }
>  
>  static int tps6598x_read_partner_identity(struct tps6598x *tps)

You need to fix tps6598x_exec_cmd() as well.

Did you really send this last September? If you did, then the mail has
been stuck somewhere for a long time.


thanks,

-- 
heikki

             reply	other threads:[~2019-02-20 12:14 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-20 12:14 Heikki Krogerus [this message]
2019-02-20 12:14 ` [PATCH] usb: typec: tps6598x: handle block writes separately with plain-I2C adapters Heikki Krogerus
  -- strict thread matches above, loose matches on Subject: below --
2019-02-21 10:40 [PATCHv2] " kbuild test robot
2019-02-21 10:40 ` kbuild test robot
2019-02-21  9:52 [PATCHv3] " Greg Kroah-Hartman
2019-02-21  9:52 ` Greg Kroah-Hartman
2019-02-21  9:52 [PATCHv2] " Greg Kroah-Hartman
2019-02-21  9:52 ` Greg Kroah-Hartman
2019-02-21  9:42 [PATCHv3] " Nikolaus Voss
2019-02-21  9:42 ` Nikolaus Voss
2019-02-21  9:08 Heikki Krogerus
2019-02-21  9:08 ` Heikki Krogerus
2019-02-21  8:41 Nikolaus Voss
2019-02-21  8:41 ` Nikolaus Voss
2019-02-21  8:37 [PATCHv2] " Nikolaus Voss
2019-02-21  8:37 ` Nikolaus Voss
2019-02-20 16:22 Greg Kroah-Hartman
2019-02-20 16:22 ` Greg Kroah-Hartman
2019-02-20 15:36 [PATCHv3] " Guenter Roeck
2019-02-20 15:36 ` Guenter Roeck
2019-02-20 15:35 Guenter Roeck
2019-02-20 15:35 ` Guenter Roeck
2019-02-20 15:22 [PATCHv2] " Nikolaus Voss
2019-02-20 15:22 ` Nikolaus Voss
2019-02-20 15:18 Nikolaus Voss
2019-02-20 15:18 ` Nikolaus Voss
2019-02-20 15:11 [PATCHv3] " Nikolaus Voss
2019-02-20 15:11 ` Nikolaus Voss
2019-02-20 15:08 [PATCHv2] " Nikolaus Voss
2019-02-20 15:08 ` Nikolaus Voss
2019-02-20 15:02 Greg Kroah-Hartman
2019-02-20 15:02 ` Greg Kroah-Hartman
2019-02-20 14:45 Guenter Roeck
2019-02-20 14:45 ` Guenter Roeck
2019-02-20 14:30 Heikki Krogerus
2019-02-20 14:30 ` Heikki Krogerus
2019-02-20 14:14 Heikki Krogerus
2019-02-20 14:14 ` Heikki Krogerus
2019-02-20 13:38 Nikolaus Voss
2019-02-20 13:38 ` Nikolaus Voss
2019-02-20 13:30 Heikki Krogerus
2019-02-20 13:30 ` Heikki Krogerus
2019-02-20 12:57 Nikolaus Voss
2019-02-20 12:57 ` Nikolaus Voss
2019-02-20 12:56 Nikolaus Voss
2019-02-20 12:56 ` [PATCH] " Nikolaus Voss
2018-09-10  5:05 Nikolaus Voss
2018-09-10  5:05 ` [PATCH] " Nikolaus Voss
2018-04-25 14:22 [PATCHv2] usb: typec: tps6598x: handle block reads " Heikki Krogerus

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=20190220121441.GA5054@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=nikolaus.voss@loewensteinmedical.de \
    --cc=nv@vosn.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.