diff options
author | Trent Piepho <tpiepho@kymetacorp.com> | 2015-11-24 19:53:56 +0000 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-11-26 09:07:39 +0100 |
commit | 87dde1730d2ff31f336e5420b133d9bef9ebeb73 (patch) | |
tree | 901f9daa939e9b30ec684dab6cfa9f28815bec58 /drivers/eeprom | |
parent | f9c9550b8dd397363af8ed5a41f65eb89bf4ca8e (diff) | |
download | barebox-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.c | 18 |
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)) |