All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2] i2c_eeprom: Add reading support
@ 2016-06-22 13:14 Mario Six
  2016-06-26  2:53 ` Simon Glass
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Mario Six @ 2016-06-22 13:14 UTC (permalink / raw)
  To: u-boot

From: "mario.six@gdsys.cc" <mario.six@gdsys.cc>

This patch implements the reading functionality for the generic I2C
EEPROM driver, which was just a non-functional stub until now.

Since the page size will be of importance for the writing support, we
add suitable members to the private data structure to keep track of it.

Compatibility strings for a range of at24c* chips are added.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
---

Changes in v2:
 - Simplified and documented the i2c_eeprom struct
 - Simplified the read function
 - Corrected Kconfig dependency (from DM to MISC)

---
 drivers/misc/Kconfig      |  5 +++++
 drivers/misc/i2c_eeprom.c | 39 +++++++++++++++++++++++++++++++--------
 include/i2c_eeprom.h      |  4 ++++
 3 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 2373037..b84e351 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -144,4 +144,9 @@ config QFW
 	  Hidden option to enable QEMU fw_cfg interface. This will be selected by
 	  either CONFIG_CMD_QFW or CONFIG_GENERATE_ACPI_TABLE.

+config I2C_EEPROM
+	bool "Enable driver for generic I2C-attached EEPROMs"
+	depends on MISC
+	help
+	  Enable a generic driver for EEPROMs attached via I2C.
 endmenu
diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c
index 814134a..c9f4174 100644
--- a/drivers/misc/i2c_eeprom.c
+++ b/drivers/misc/i2c_eeprom.c
@@ -13,7 +13,7 @@
 static int i2c_eeprom_read(struct udevice *dev, int offset, uint8_t *buf,
 			   int size)
 {
-	return -ENODEV;
+	return dm_i2c_read(dev, offset, buf, size);
 }

 static int i2c_eeprom_write(struct udevice *dev, int offset,
@@ -27,23 +27,46 @@ struct i2c_eeprom_ops i2c_eeprom_std_ops = {
 	.write	= i2c_eeprom_write,
 };

+static int i2c_eeprom_std_ofdata_to_platdata(struct udevice *dev)
+{
+	struct i2c_eeprom *priv = dev_get_priv(dev);
+	u64 data = dev_get_driver_data(dev);
+
+	/* 6 bit -> page size of up to 2^63 (should be sufficient) */
+	priv->pagewidth = data & 0x3F;
+	priv->pagesize = (1 << priv->pagewidth);
+
+	return 0;
+}
+
 int i2c_eeprom_std_probe(struct udevice *dev)
 {
 	return 0;
 }

 static const struct udevice_id i2c_eeprom_std_ids[] = {
-	{ .compatible = "i2c-eeprom" },
+	{ .compatible = "i2c-eeprom", .data = 0 },
+	{ .compatible = "atmel,24c01a", .data = 3 },
+	{ .compatible = "atmel,24c02", .data = 3 },
+	{ .compatible = "atmel,24c04", .data = 4 },
+	{ .compatible = "atmel,24c08a", .data = 4 },
+	{ .compatible = "atmel,24c16a", .data = 4 },
+	{ .compatible = "atmel,24c32", .data = 5 },
+	{ .compatible = "atmel,24c64", .data = 5 },
+	{ .compatible = "atmel,24c128", .data = 6 },
+	{ .compatible = "atmel,24c256", .data = 6 },
+	{ .compatible = "atmel,24c512", .data = 6 },
 	{ }
 };

 U_BOOT_DRIVER(i2c_eeprom_std) = {
-	.name		= "i2c_eeprom",
-	.id		= UCLASS_I2C_EEPROM,
-	.of_match	= i2c_eeprom_std_ids,
-	.probe		= i2c_eeprom_std_probe,
-	.priv_auto_alloc_size = sizeof(struct i2c_eeprom),
-	.ops		= &i2c_eeprom_std_ops,
+	.name			= "i2c_eeprom",
+	.id			= UCLASS_I2C_EEPROM,
+	.of_match		= i2c_eeprom_std_ids,
+	.probe			= i2c_eeprom_std_probe,
+	.ofdata_to_platdata	= i2c_eeprom_std_ofdata_to_platdata,
+	.priv_auto_alloc_size	= sizeof(struct i2c_eeprom),
+	.ops			= &i2c_eeprom_std_ops,
 };

 UCLASS_DRIVER(i2c_eeprom) = {
diff --git a/include/i2c_eeprom.h b/include/i2c_eeprom.h
index ea6c962..0452892 100644
--- a/include/i2c_eeprom.h
+++ b/include/i2c_eeprom.h
@@ -14,6 +14,10 @@ struct i2c_eeprom_ops {
 };

 struct i2c_eeprom {
+	/* The EEPROM's page size in byte */
+	unsigned long pagesize;
+	/* The EEPROM's page width in bits (pagesize = 2^pagewidth) */
+	unsigned pagewidth;
 };

 #endif
--
2.7.0.GIT

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH v2] i2c_eeprom: Add reading support
  2016-06-22 13:14 [U-Boot] [PATCH v2] i2c_eeprom: Add reading support Mario Six
@ 2016-06-26  2:53 ` Simon Glass
  2016-06-29  6:16 ` Heiko Schocher invitel
  2016-07-23  0:10 ` [U-Boot] [U-Boot,v2] " Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2016-06-26  2:53 UTC (permalink / raw)
  To: u-boot

On 22 June 2016 at 07:14, Mario Six <mario.six@gdsys.cc> wrote:
> From: "mario.six at gdsys.cc" <mario.six@gdsys.cc>
>
> This patch implements the reading functionality for the generic I2C
> EEPROM driver, which was just a non-functional stub until now.
>
> Since the page size will be of importance for the writing support, we
> add suitable members to the private data structure to keep track of it.
>
> Compatibility strings for a range of at24c* chips are added.
>
> Signed-off-by: Mario Six <mario.six@gdsys.cc>
> ---
>
> Changes in v2:
>  - Simplified and documented the i2c_eeprom struct
>  - Simplified the read function
>  - Corrected Kconfig dependency (from DM to MISC)
>
> ---
>  drivers/misc/Kconfig      |  5 +++++
>  drivers/misc/i2c_eeprom.c | 39 +++++++++++++++++++++++++++++++--------
>  include/i2c_eeprom.h      |  4 ++++
>  3 files changed, 40 insertions(+), 8 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH v2] i2c_eeprom: Add reading support
  2016-06-22 13:14 [U-Boot] [PATCH v2] i2c_eeprom: Add reading support Mario Six
  2016-06-26  2:53 ` Simon Glass
@ 2016-06-29  6:16 ` Heiko Schocher invitel
  2016-07-23  0:10 ` [U-Boot] [U-Boot,v2] " Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: Heiko Schocher invitel @ 2016-06-29  6:16 UTC (permalink / raw)
  To: u-boot

Hello Mario,

Am 22.06.2016 um 15:14 schrieb Mario Six:
> From: "mario.six at gdsys.cc" <mario.six@gdsys.cc>
>
> This patch implements the reading functionality for the generic I2C
> EEPROM driver, which was just a non-functional stub until now.
>
> Since the page size will be of importance for the writing support, we
> add suitable members to the private data structure to keep track of it.
>
> Compatibility strings for a range of at24c* chips are added.
>
> Signed-off-by: Mario Six <mario.six@gdsys.cc>
> ---
>
> Changes in v2:
>   - Simplified and documented the i2c_eeprom struct
>   - Simplified the read function
>   - Corrected Kconfig dependency (from DM to MISC)
>
> ---
>   drivers/misc/Kconfig      |  5 +++++
>   drivers/misc/i2c_eeprom.c | 39 +++++++++++++++++++++++++++++++--------
>   include/i2c_eeprom.h      |  4 ++++
>   3 files changed, 40 insertions(+), 8 deletions(-)

Thanks!

Reviewed-by: Heiko Schocher <hs@denx.de>

bye,
Heiko
>
> diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> index 2373037..b84e351 100644
> --- a/drivers/misc/Kconfig
> +++ b/drivers/misc/Kconfig
> @@ -144,4 +144,9 @@ config QFW
>   	  Hidden option to enable QEMU fw_cfg interface. This will be selected by
>   	  either CONFIG_CMD_QFW or CONFIG_GENERATE_ACPI_TABLE.
>
> +config I2C_EEPROM
> +	bool "Enable driver for generic I2C-attached EEPROMs"
> +	depends on MISC
> +	help
> +	  Enable a generic driver for EEPROMs attached via I2C.
>   endmenu
> diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c
> index 814134a..c9f4174 100644
> --- a/drivers/misc/i2c_eeprom.c
> +++ b/drivers/misc/i2c_eeprom.c
> @@ -13,7 +13,7 @@
>   static int i2c_eeprom_read(struct udevice *dev, int offset, uint8_t *buf,
>   			   int size)
>   {
> -	return -ENODEV;
> +	return dm_i2c_read(dev, offset, buf, size);
>   }
>
>   static int i2c_eeprom_write(struct udevice *dev, int offset,
> @@ -27,23 +27,46 @@ struct i2c_eeprom_ops i2c_eeprom_std_ops = {
>   	.write	= i2c_eeprom_write,
>   };
>
> +static int i2c_eeprom_std_ofdata_to_platdata(struct udevice *dev)
> +{
> +	struct i2c_eeprom *priv = dev_get_priv(dev);
> +	u64 data = dev_get_driver_data(dev);
> +
> +	/* 6 bit -> page size of up to 2^63 (should be sufficient) */
> +	priv->pagewidth = data & 0x3F;
> +	priv->pagesize = (1 << priv->pagewidth);
> +
> +	return 0;
> +}
> +
>   int i2c_eeprom_std_probe(struct udevice *dev)
>   {
>   	return 0;
>   }
>
>   static const struct udevice_id i2c_eeprom_std_ids[] = {
> -	{ .compatible = "i2c-eeprom" },
> +	{ .compatible = "i2c-eeprom", .data = 0 },
> +	{ .compatible = "atmel,24c01a", .data = 3 },
> +	{ .compatible = "atmel,24c02", .data = 3 },
> +	{ .compatible = "atmel,24c04", .data = 4 },
> +	{ .compatible = "atmel,24c08a", .data = 4 },
> +	{ .compatible = "atmel,24c16a", .data = 4 },
> +	{ .compatible = "atmel,24c32", .data = 5 },
> +	{ .compatible = "atmel,24c64", .data = 5 },
> +	{ .compatible = "atmel,24c128", .data = 6 },
> +	{ .compatible = "atmel,24c256", .data = 6 },
> +	{ .compatible = "atmel,24c512", .data = 6 },
>   	{ }
>   };
>
>   U_BOOT_DRIVER(i2c_eeprom_std) = {
> -	.name		= "i2c_eeprom",
> -	.id		= UCLASS_I2C_EEPROM,
> -	.of_match	= i2c_eeprom_std_ids,
> -	.probe		= i2c_eeprom_std_probe,
> -	.priv_auto_alloc_size = sizeof(struct i2c_eeprom),
> -	.ops		= &i2c_eeprom_std_ops,
> +	.name			= "i2c_eeprom",
> +	.id			= UCLASS_I2C_EEPROM,
> +	.of_match		= i2c_eeprom_std_ids,
> +	.probe			= i2c_eeprom_std_probe,
> +	.ofdata_to_platdata	= i2c_eeprom_std_ofdata_to_platdata,
> +	.priv_auto_alloc_size	= sizeof(struct i2c_eeprom),
> +	.ops			= &i2c_eeprom_std_ops,
>   };
>
>   UCLASS_DRIVER(i2c_eeprom) = {
> diff --git a/include/i2c_eeprom.h b/include/i2c_eeprom.h
> index ea6c962..0452892 100644
> --- a/include/i2c_eeprom.h
> +++ b/include/i2c_eeprom.h
> @@ -14,6 +14,10 @@ struct i2c_eeprom_ops {
>   };
>
>   struct i2c_eeprom {
> +	/* The EEPROM's page size in byte */
> +	unsigned long pagesize;
> +	/* The EEPROM's page width in bits (pagesize = 2^pagewidth) */
> +	unsigned pagewidth;
>   };
>
>   #endif
> --
> 2.7.0.GIT
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] [U-Boot,v2] i2c_eeprom: Add reading support
  2016-06-22 13:14 [U-Boot] [PATCH v2] i2c_eeprom: Add reading support Mario Six
  2016-06-26  2:53 ` Simon Glass
  2016-06-29  6:16 ` Heiko Schocher invitel
@ 2016-07-23  0:10 ` Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Rini @ 2016-07-23  0:10 UTC (permalink / raw)
  To: u-boot

On Wed, Jun 22, 2016 at 03:14:16PM +0200, mario.six at gdsys.cc wrote:

> From: "mario.six at gdsys.cc" <mario.six@gdsys.cc>
> 
> This patch implements the reading functionality for the generic I2C
> EEPROM driver, which was just a non-functional stub until now.
> 
> Since the page size will be of importance for the writing support, we
> add suitable members to the private data structure to keep track of it.
> 
> Compatibility strings for a range of at24c* chips are added.
> 
> Signed-off-by: Mario Six <mario.six@gdsys.cc>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Heiko Schocher <hs@denx.de>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/d78fd7fa/attachment.sig>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-23  0:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-22 13:14 [U-Boot] [PATCH v2] i2c_eeprom: Add reading support Mario Six
2016-06-26  2:53 ` Simon Glass
2016-06-29  6:16 ` Heiko Schocher invitel
2016-07-23  0:10 ` [U-Boot] [U-Boot,v2] " Tom Rini

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.