[PATCH alpha] eeprom: at24: new DT property "address-width"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Bartosz,

The patch was build against recent linus master
   commit 5b7d27967dabfb17c21b0d98b29153b9e3ee71e5
   Merge: f165495 624ca9c
   Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
   Date:   Wed Jan 24 17:24:30 2018 -0800

checkpatch.pl run to 0 Errors
tested on powerpc 32bit

Any recommendations/comments ?


-------------------------------------------------------------------

Signed-off-by: Johannes Poehlmann <johannes.poehlmann@xxxxxxxxxxx>

needed with some eeprom chips
modelled after at25
---
 .../devicetree/bindings/eeprom/eeprom.txt          |  3 +++
 drivers/misc/eeprom/at24.c                         | 24 ++++++++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/eeprom/eeprom.txt b/Documentation/devicetree/bindings/eeprom/eeprom.txt
index 27f2bc1..8f3293c 100644
--- a/Documentation/devicetree/bindings/eeprom/eeprom.txt
+++ b/Documentation/devicetree/bindings/eeprom/eeprom.txt
@@ -38,10 +38,13 @@ Optional properties:
 
   - size: total eeprom size in bytes
 
+  - address-width : number of address bits (8 or 16)
+
 Example:
 
 eeprom@52 {
 	compatible = "atmel,24c32";
 	reg = <0x52>;
 	pagesize = <32>;
+	address-width = <16>;
 };
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 4d63ac8..2a6d476 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -651,11 +651,27 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
 	return 0;
 }
 
-static void at24_get_pdata(struct device *dev, struct at24_platform_data *chip)
+static int at24_get_pdata(struct device *dev, struct at24_platform_data *chip)
 {
 	int err;
 	u32 val;
 
+	if (device_property_read_u32(dev, "address-width", &val) == 0) {
+		switch (val) {
+		case 8:
+			chip->flags &= ~AT24_FLAG_ADDR16;
+			break;
+		case 16:
+			chip->flags |= AT24_FLAG_ADDR16;
+			break;
+		default:
+			dev_err(dev,
+				"Error: bad \"address-width\" property: %u\n",
+				val);
+			return -ENODEV;
+		}
+	}
+
 	if (device_property_present(dev, "read-only"))
 		chip->flags |= AT24_FLAG_READONLY;
 
@@ -674,6 +690,7 @@ static void at24_get_pdata(struct device *dev, struct at24_platform_data *chip)
 		 */
 		chip->page_size = 1;
 	}
+	return 0;
 }
 
 static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
@@ -716,7 +733,10 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		magic >>= AT24_SIZE_BYTELEN;
 		chip.flags = magic & AT24_BITMASK(AT24_SIZE_FLAGS);
 
-		at24_get_pdata(&client->dev, &chip);
+		err = at24_get_pdata(&client->dev, &chip);
+		if (err)
+			return err;
+
 
 		chip.setup = NULL;
 		chip.context = NULL;
-- 
2.1.4




[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux