From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher invitel Date: Wed, 29 Jun 2016 08:16:49 +0200 Subject: [U-Boot] [PATCH v2] i2c_eeprom: Add reading support In-Reply-To: <20160622131416.15585-1-mario.six@gdsys.cc> References: <20160622131416.15585-1-mario.six@gdsys.cc> Message-ID: <577367D1.8080103@invitel.hu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Mario, Am 22.06.2016 um 15:14 schrieb Mario Six: > From: "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 > --- > > 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 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 >