[U-Boot] [PATCH v2] i2c_eeprom: Add reading support

Heiko Schocher invitel heiko.schocher at invitel.hu
Wed Jun 29 08:16:49 CEST 2016


Hello Mario,

Am 22.06.2016 um 15:14 schrieb Mario Six:
> From: "mario.six at gdsys.cc" <mario.six at 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 at 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 at 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
>


More information about the U-Boot mailing list