i2c_eeprom: Add reading support
PATCH v2 1/1 i2c_eeprom: Add reading support
From: "[email protected]" <[email protected]>
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.
---
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(-)
drivers/misc/Kconfig +5 -0
@@ -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
drivers/misc/i2c_eeprom.c +31 -8
@@ -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) = {
include/i2c_eeprom.h +4 -0
@@ -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
PATCH v2 1/1 i2c_eeprom: Add reading support
Quoted 18 lines · Mario Six
From: "mario.six at gdsys.cc" <[email protected]>
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 <[email protected]>---
Changes in v2:
- Simplified and documented thei2c_eepromstruct
- Simplified the read function
- CorrectedKconfigdependency (from DM to MISC)
Quoted 5 lines
--- drivers/misc/Kconfig | 5 +++++ drivers/misc/i2c_eeprom.c | 39 +++++++++++++++++++++++++++++++-------- include/i2c_eeprom.h | 4 ++++ 3 files changed, 40 insertions(+), 8 deletions(-)
PATCH v2 1/1 i2c_eeprom: Add reading support
In reply to Mario SixHello Mario,
Am 22.06.2016 um 15:14 schrieb Mario Six:
Quoted 18 lines
From: "mario.six at gdsys.cc" <[email protected]>
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 <[email protected]>---
Changes in v2:
- Simplified and documented thei2c_eepromstruct
- Simplified the read function
- CorrectedKconfigdependency (from DM to MISC)
Quoted 5 lines
--- drivers/misc/Kconfig | 5 +++++ drivers/misc/i2c_eeprom.c | 39 +++++++++++++++++++++++++++++++-------- include/i2c_eeprom.h | 4 ++++ 3 files changed, 40 insertions(+), 8 deletions(-)
Thanks!
bye,
Heiko
Quoted 105 lines
drivers/misc/Kconfig +5
-0@@ -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. endmenudrivers/misc/i2c_eeprom.c +31
-8@@ -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) = {include/i2c_eeprom.h +4
-1@@ -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
PATCH v2 1/1 i2c_eeprom: Add reading support
In reply to Mario SixQuoted 5 lines · mario.six at gdsys.cc
From: "mario.six at gdsys.cc" <[email protected]>
This patch implements the reading functionality for the generic I2C EEPROM driver, which was just a non-functional stub until now.
Quoted 8 lines
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 <[email protected]>Reviewed-by Simon Glass <[email protected]>Reviewed-by Heiko Schocher <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
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>