summaryrefslogtreecommitdiffstats
path: root/drivers/eeprom
diff options
context:
space:
mode:
authorTrent Piepho <tpiepho@kymetacorp.com>2015-11-24 19:53:56 +0000
committerSascha Hauer <s.hauer@pengutronix.de>2015-11-26 09:07:39 +0100
commit87dde1730d2ff31f336e5420b133d9bef9ebeb73 (patch)
tree901f9daa939e9b30ec684dab6cfa9f28815bec58 /drivers/eeprom
parentf9c9550b8dd397363af8ed5a41f65eb89bf4ca8e (diff)
downloadbarebox-87dde1730d2ff31f336e5420b133d9bef9ebeb73.tar.gz
barebox-87dde1730d2ff31f336e5420b133d9bef9ebeb73.tar.xz
eeprom: Support pagesize OF device tree property
Allows specifying the page size when the eeproms are in the device tree. Same as the Linux kernel device-tree bindings for at24. Signed-off-by: Trent Piepho <tpiepho@kymetacorp.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/eeprom')
-rw-r--r--drivers/eeprom/at24.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/eeprom/at24.c b/drivers/eeprom/at24.c
index 06e94ad8fc..3c0a7a9d47 100644
--- a/drivers/eeprom/at24.c
+++ b/drivers/eeprom/at24.c
@@ -384,6 +384,7 @@ static int at24_probe(struct device_d *dev)
chip = *(struct at24_platform_data *)dev->platform_data;
} else {
unsigned long magic;
+ u32 page_size;
err = dev_get_drvdata(dev, (const void **)&magic);
if (err)
@@ -392,12 +393,17 @@ static int at24_probe(struct device_d *dev)
chip.byte_len = BIT(magic & AT24_BITMASK(AT24_SIZE_BYTELEN));
magic >>= AT24_SIZE_BYTELEN;
chip.flags = magic & AT24_BITMASK(AT24_SIZE_FLAGS);
- /*
- * This is slow, but we can't know all eeproms, so we better
- * play safe. Specifying custom eeprom-types via platform_data
- * is recommended anyhow.
- */
- chip.page_size = 1;
+ if (dev->device_node &&
+ !of_property_read_u32(dev->device_node, "pagesize", &page_size))
+ chip.page_size = page_size;
+ else {
+ /*
+ * This is slow, but we can't know all eeproms, so we better
+ * play safe. Specifying custom eeprom-types via platform_data
+ * is recommended anyhow.
+ */
+ chip.page_size = 1;
+ }
}
if (!is_power_of_2(chip.byte_len))