[PATCH 4/5] eeprom: at24: Drop at24_cdev_protect()

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

 



Instead of exposing a dedictaed .protect() callback, mimic the
behaviour of corresponding driver in Linux and adjust the value of WP
pin in .write() callback as necessary. This is done in order to
convert this driver to NVMEM subsytem.

Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx>
---
 drivers/eeprom/at24.c | 37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/drivers/eeprom/at24.c b/drivers/eeprom/at24.c
index 1fd4aeaba6..db452c1076 100644
--- a/drivers/eeprom/at24.c
+++ b/drivers/eeprom/at24.c
@@ -317,6 +317,19 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf,
 	return -ETIMEDOUT;
 }
 
+static void at24_protect(struct at24_data *at24, bool prot)
+{
+	if (gpio_is_valid(at24->wp_gpio)) {
+
+		if (at24->wp_active_low)
+			prot = !prot;
+
+		gpio_set_value(at24->wp_gpio, prot);
+
+		udelay(50);
+	}
+}
+
 static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,
 			  size_t count)
 {
@@ -325,6 +338,8 @@ static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,
 	if (unlikely(!count))
 		return count;
 
+	at24_protect(at24, false);
+
 	while (count) {
 		ssize_t	status;
 
@@ -340,6 +355,8 @@ static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,
 		retval += status;
 	}
 
+	at24_protect(at24, true);
+
 	return retval;
 }
 
@@ -351,25 +368,6 @@ static ssize_t at24_cdev_write(struct cdev *cdev, const void *buf, size_t count,
 	return at24_write(at24, buf, off, count);
 }
 
-static int at24_cdev_protect(struct cdev *cdev, size_t count, loff_t offset,
-		int prot)
-{
-	struct at24_data *at24 = cdev->priv;
-
-	if (!gpio_is_valid(at24->wp_gpio))
-		return -EOPNOTSUPP;
-
-	prot = !!prot;
-	if (at24->wp_active_low)
-		prot = !prot;
-
-	gpio_set_value(at24->wp_gpio, prot);
-
-	udelay(50);
-
-	return 0;
-}
-
 static int at24_probe(struct device_d *dev)
 {
 	struct i2c_client *client = to_i2c_client(dev);
@@ -448,7 +446,6 @@ static int at24_probe(struct device_d *dev)
 	at24->cdev.dev = dev;
 	at24->cdev.ops = &at24->fops;
 	at24->fops.read	= at24_cdev_read,
-	at24->fops.protect = at24_cdev_protect,
 	at24->cdev.size = chip.byte_len;
 
 	writable = !(chip.flags & AT24_FLAG_READONLY);
-- 
2.21.0


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux