All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: David Daney <ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Michael Hennerich
	<michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org>,
	David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Axel Lin <axel.lin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Alexandre Pereira da Silva
	<aletes.xgr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH 1/2] misc/at25, dt: Improve at25 SPI eeprom device tree bindings.
Date: Wed, 05 Sep 2012 17:57:33 -0500	[thread overview]
Message-ID: <5047D8DD.10604@gmail.com> (raw)
In-Reply-To: <1345662238-15211-2-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On 08/22/2012 02:03 PM, David Daney wrote:
> From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
> 
> Commit 002176db (misc: at25: Parse dt settings) added device tree
> bindings the differ significantly in style from the I2C EEPROM
> bindings and don't seem well vetted.  Here I deprecate (but still
> support) the "at25,*" properties, and add what I hope is a better
> alternative.  These new bindings also happen to be deployed in the
> field and were previously submitted for consideration here:
> 
> https://lists.ozlabs.org/pipermail/devicetree-discuss/2012-May/015556.html
> 
> The advantages of the new bindings are that they are similar to the
> I2C EEPROMs and they don't conflate read-only and the address width
> modes in a binary encoded blob.
> 
> Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
> Cc: Alexandre Pereira da Silva <aletes.xgr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Cc: Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>
> Cc: Michael Hennerich <michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org>
> Cc: Axel Lin <axel.lin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Acked-by: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>

> ---
>  Documentation/devicetree/bindings/misc/at25.txt | 34 +++++++---
>  drivers/misc/eeprom/at25.c                      | 83 +++++++++++++++++--------
>  2 files changed, 82 insertions(+), 35 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/misc/at25.txt b/Documentation/devicetree/bindings/misc/at25.txt
> index ab3c327..1d34471 100644
> --- a/Documentation/devicetree/bindings/misc/at25.txt
> +++ b/Documentation/devicetree/bindings/misc/at25.txt
> @@ -1,21 +1,35 @@
> -Atmel AT25 eeprom
> +EEPROMs (SPI) compatible with Atmel at25.
>  
>  Required properties:
>  - compatible : "atmel,at25".
>  - reg : chip select number
>  - spi-max-frequency : max spi frequency to use
> +- pagesize : size of the eeprom page
> +- size : total eeprom size in bytes
> +- address-width : number of address bits (one of 8, 16, or 24)
>  
> +Optional properties:
> +- spi-cpha : SPI shifted clock phase, as per spi-bus bindings.
> +- spi-cpol : SPI inverse clock polarity, as per spi-bus bindings.
> +- read-only : this parameter-less property disables writes to the eeprom
> +
> +Obsolete legacy properties are can be used in place of "size", "pagesize",
> +"address-width", and "read-only":
>  - at25,byte-len : total eeprom size in bytes
>  - at25,addr-mode : addr-mode flags, as defined in include/linux/spi/eeprom.h
>  - at25,page-size : size of the eeprom page
>  
> -Examples:
> -at25@0 {
> -	compatible = "atmel,at25";
> -	reg = <0>
> -	spi-max-frequency = <5000000>;
> +Additional compatible properties are also allowed.
> +
> +Example:
> +	at25@0 {
> +		compatible = "atmel,at25", "st,m95256";
> +		reg = <0>
> +		spi-max-frequency = <5000000>;
> +		spi-cpha;
> +		spi-cpol;
>  
> -	at25,byte-len = <0x8000>;
> -	at25,addr-mode = <2>;
> -	at25,page-size = <64>;
> -};
> +		pagesize = <64>;
> +		size = <32768>;
> +		address-width = <16>;
> +	};
> diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
> index 25003d6..4ed93dd 100644
> --- a/drivers/misc/eeprom/at25.c
> +++ b/drivers/misc/eeprom/at25.c
> @@ -302,6 +302,61 @@ static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf,
>  
>  /*-------------------------------------------------------------------------*/
>  
> +static int at25_np_to_chip(struct device *dev,
> +			   struct device_node *np,
> +			   struct spi_eeprom *chip)
> +{
> +	u32 val;
> +
> +	memset(chip, 0, sizeof(*chip));
> +	strncpy(chip->name, np->name, sizeof(chip->name));
> +
> +	if (of_property_read_u32(np, "size", &val) == 0 ||
> +	    of_property_read_u32(np, "at25,byte-len", &val) == 0) {
> +		chip->byte_len = val;
> +	} else {
> +		dev_err(dev, "Error: missing \"size\" property\n");
> +		return -ENODEV;
> +	}
> +
> +	if (of_property_read_u32(np, "pagesize", &val) == 0 ||
> +	    of_property_read_u32(np, "at25,page-size", &val) == 0) {
> +		chip->page_size = (u16)val;
> +	} else {
> +		dev_err(dev, "Error: missing \"pagesize\" property\n");
> +		return -ENODEV;
> +	}
> +
> +	if (of_property_read_u32(np, "at25,addr-mode", &val) == 0) {
> +		chip->flags = (u16)val;
> +	} else {
> +		if (of_property_read_u32(np, "address-width", &val)) {
> +			dev_err(dev,
> +				"Error: missing \"address-width\" property\n");
> +			return -ENODEV;
> +		}
> +		switch (val) {
> +		case 8:
> +			chip->flags |= EE_ADDR1;
> +			break;
> +		case 16:
> +			chip->flags |= EE_ADDR2;
> +			break;
> +		case 24:
> +			chip->flags |= EE_ADDR3;
> +			break;
> +		default:
> +			dev_err(dev,
> +				"Error: bad \"address-width\" property: %u\n",
> +				val);
> +			return -ENODEV;
> +		}
> +		if (of_find_property(np, "read-only", NULL))
> +			chip->flags |= EE_READONLY;
> +	}
> +	return 0;
> +}
> +
>  static int at25_probe(struct spi_device *spi)
>  {
>  	struct at25_data	*at25 = NULL;
> @@ -314,33 +369,11 @@ static int at25_probe(struct spi_device *spi)
>  	/* Chip description */
>  	if (!spi->dev.platform_data) {
>  		if (np) {
> -			u32 val;
> -
> -			memset(&chip, 0, sizeof(chip));
> -			strncpy(chip.name, np->name, 10);
> -
> -			err = of_property_read_u32(np, "at25,byte-len", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> -				goto fail;
> -			}
> -			chip.byte_len = val;
> -
> -			err = of_property_read_u32(np, "at25,addr-mode", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> -				goto fail;
> -			}
> -			chip.flags = (u16)val;
> -
> -			err = of_property_read_u32(np, "at25,page-size", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> +			err = at25_np_to_chip(&spi->dev, np, &chip);
> +			if (err)
>  				goto fail;
> -			}
> -			chip.page_size = (u16)val;
>  		} else {
> -			dev_dbg(&spi->dev, "no chip description\n");
> +			dev_err(&spi->dev, "Error: no chip description\n");
>  			err = -ENODEV;
>  			goto fail;
>  		}
> 

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robherring2@gmail.com>
To: David Daney <ddaney.cavm@gmail.com>
Cc: devicetree-discuss@lists.ozlabs.org,
	Grant Likely <grant.likely@secretlab.ca>,
	Michael Hennerich <michael.hennerich@analog.com>,
	David Daney <david.daney@cavium.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, Axel Lin <axel.lin@gmail.com>,
	Alexandre Pereira da Silva <aletes.xgr@gmail.com>
Subject: Re: [PATCH 1/2] misc/at25, dt: Improve at25 SPI eeprom device tree bindings.
Date: Wed, 05 Sep 2012 17:57:33 -0500	[thread overview]
Message-ID: <5047D8DD.10604@gmail.com> (raw)
In-Reply-To: <1345662238-15211-2-git-send-email-ddaney.cavm@gmail.com>

On 08/22/2012 02:03 PM, David Daney wrote:
> From: David Daney <david.daney@cavium.com>
> 
> Commit 002176db (misc: at25: Parse dt settings) added device tree
> bindings the differ significantly in style from the I2C EEPROM
> bindings and don't seem well vetted.  Here I deprecate (but still
> support) the "at25,*" properties, and add what I hope is a better
> alternative.  These new bindings also happen to be deployed in the
> field and were previously submitted for consideration here:
> 
> https://lists.ozlabs.org/pipermail/devicetree-discuss/2012-May/015556.html
> 
> The advantages of the new bindings are that they are similar to the
> I2C EEPROMs and they don't conflate read-only and the address width
> modes in a binary encoded blob.
> 
> Signed-off-by: David Daney <david.daney@cavium.com>
> Cc: Alexandre Pereira da Silva <aletes.xgr@gmail.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Michael Hennerich <michael.hennerich@analog.com>
> Cc: Axel Lin <axel.lin@gmail.com>

Acked-by: Rob Herring <rob.herring@calxeda.com>

> ---
>  Documentation/devicetree/bindings/misc/at25.txt | 34 +++++++---
>  drivers/misc/eeprom/at25.c                      | 83 +++++++++++++++++--------
>  2 files changed, 82 insertions(+), 35 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/misc/at25.txt b/Documentation/devicetree/bindings/misc/at25.txt
> index ab3c327..1d34471 100644
> --- a/Documentation/devicetree/bindings/misc/at25.txt
> +++ b/Documentation/devicetree/bindings/misc/at25.txt
> @@ -1,21 +1,35 @@
> -Atmel AT25 eeprom
> +EEPROMs (SPI) compatible with Atmel at25.
>  
>  Required properties:
>  - compatible : "atmel,at25".
>  - reg : chip select number
>  - spi-max-frequency : max spi frequency to use
> +- pagesize : size of the eeprom page
> +- size : total eeprom size in bytes
> +- address-width : number of address bits (one of 8, 16, or 24)
>  
> +Optional properties:
> +- spi-cpha : SPI shifted clock phase, as per spi-bus bindings.
> +- spi-cpol : SPI inverse clock polarity, as per spi-bus bindings.
> +- read-only : this parameter-less property disables writes to the eeprom
> +
> +Obsolete legacy properties are can be used in place of "size", "pagesize",
> +"address-width", and "read-only":
>  - at25,byte-len : total eeprom size in bytes
>  - at25,addr-mode : addr-mode flags, as defined in include/linux/spi/eeprom.h
>  - at25,page-size : size of the eeprom page
>  
> -Examples:
> -at25@0 {
> -	compatible = "atmel,at25";
> -	reg = <0>
> -	spi-max-frequency = <5000000>;
> +Additional compatible properties are also allowed.
> +
> +Example:
> +	at25@0 {
> +		compatible = "atmel,at25", "st,m95256";
> +		reg = <0>
> +		spi-max-frequency = <5000000>;
> +		spi-cpha;
> +		spi-cpol;
>  
> -	at25,byte-len = <0x8000>;
> -	at25,addr-mode = <2>;
> -	at25,page-size = <64>;
> -};
> +		pagesize = <64>;
> +		size = <32768>;
> +		address-width = <16>;
> +	};
> diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
> index 25003d6..4ed93dd 100644
> --- a/drivers/misc/eeprom/at25.c
> +++ b/drivers/misc/eeprom/at25.c
> @@ -302,6 +302,61 @@ static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf,
>  
>  /*-------------------------------------------------------------------------*/
>  
> +static int at25_np_to_chip(struct device *dev,
> +			   struct device_node *np,
> +			   struct spi_eeprom *chip)
> +{
> +	u32 val;
> +
> +	memset(chip, 0, sizeof(*chip));
> +	strncpy(chip->name, np->name, sizeof(chip->name));
> +
> +	if (of_property_read_u32(np, "size", &val) == 0 ||
> +	    of_property_read_u32(np, "at25,byte-len", &val) == 0) {
> +		chip->byte_len = val;
> +	} else {
> +		dev_err(dev, "Error: missing \"size\" property\n");
> +		return -ENODEV;
> +	}
> +
> +	if (of_property_read_u32(np, "pagesize", &val) == 0 ||
> +	    of_property_read_u32(np, "at25,page-size", &val) == 0) {
> +		chip->page_size = (u16)val;
> +	} else {
> +		dev_err(dev, "Error: missing \"pagesize\" property\n");
> +		return -ENODEV;
> +	}
> +
> +	if (of_property_read_u32(np, "at25,addr-mode", &val) == 0) {
> +		chip->flags = (u16)val;
> +	} else {
> +		if (of_property_read_u32(np, "address-width", &val)) {
> +			dev_err(dev,
> +				"Error: missing \"address-width\" property\n");
> +			return -ENODEV;
> +		}
> +		switch (val) {
> +		case 8:
> +			chip->flags |= EE_ADDR1;
> +			break;
> +		case 16:
> +			chip->flags |= EE_ADDR2;
> +			break;
> +		case 24:
> +			chip->flags |= EE_ADDR3;
> +			break;
> +		default:
> +			dev_err(dev,
> +				"Error: bad \"address-width\" property: %u\n",
> +				val);
> +			return -ENODEV;
> +		}
> +		if (of_find_property(np, "read-only", NULL))
> +			chip->flags |= EE_READONLY;
> +	}
> +	return 0;
> +}
> +
>  static int at25_probe(struct spi_device *spi)
>  {
>  	struct at25_data	*at25 = NULL;
> @@ -314,33 +369,11 @@ static int at25_probe(struct spi_device *spi)
>  	/* Chip description */
>  	if (!spi->dev.platform_data) {
>  		if (np) {
> -			u32 val;
> -
> -			memset(&chip, 0, sizeof(chip));
> -			strncpy(chip.name, np->name, 10);
> -
> -			err = of_property_read_u32(np, "at25,byte-len", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> -				goto fail;
> -			}
> -			chip.byte_len = val;
> -
> -			err = of_property_read_u32(np, "at25,addr-mode", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> -				goto fail;
> -			}
> -			chip.flags = (u16)val;
> -
> -			err = of_property_read_u32(np, "at25,page-size", &val);
> -			if (err) {
> -				dev_dbg(&spi->dev, "invalid chip dt description\n");
> +			err = at25_np_to_chip(&spi->dev, np, &chip);
> +			if (err)
>  				goto fail;
> -			}
> -			chip.page_size = (u16)val;
>  		} else {
> -			dev_dbg(&spi->dev, "no chip description\n");
> +			dev_err(&spi->dev, "Error: no chip description\n");
>  			err = -ENODEV;
>  			goto fail;
>  		}
> 


  parent reply	other threads:[~2012-09-05 22:57 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-22 19:03 [PATCH 0/2] SPI EEPROM / device tree interaction improvements David Daney
     [not found] ` <1345662238-15211-1-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-08-22 19:03   ` [PATCH 1/2] misc/at25, dt: Improve at25 SPI eeprom device tree bindings David Daney
2012-08-22 19:03     ` David Daney
     [not found]     ` <1345662238-15211-2-git-send-email-ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-09-05 22:57       ` Rob Herring [this message]
2012-09-05 22:57         ` Rob Herring
2012-08-22 19:03   ` [PATCH 2/2] misc/at25: Add an .id_table to at25 to facilitate driver loading and binding David Daney
2012-08-22 19:03     ` David Daney
2012-09-17  7:49     ` Ivo Sieben
     [not found]       ` <CAMSQXEHXG=DGT7egbSfdNb2VFTXS+HQ0DoaA2v9dTX_2zn2pZg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-09-17 17:06         ` David Daney
2012-09-17 17:06           ` David Daney

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=5047D8DD.10604@gmail.com \
    --to=robherring2-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=aletes.xgr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=axel.lin-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org \
    --cc=ddaney.cavm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.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 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.