- rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock-update.patch removed from -mm tree

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

 



The patch titled
     rtc: improvements to the basic implementation of Epson RX-8581 I2C Real Time Clock
has been removed from the -mm tree.  Its filename was
     rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock-update.patch

This patch was dropped because it was folded into rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock.patch

The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/

------------------------------------------------------
Subject: rtc: improvements to the basic implementation of Epson RX-8581 I2C Real Time Clock
From: Martyn Welch <martyn.welch@xxxxxxxxxxx>

These improvements resolve the issues raised by Jean Delvare in the Epson
RX-8581 driver (thank you for your help):

 * Added linux/module.h include
 * Removed black line
 * Removed useless test in rx8581_remove
 * Us i2c_smbus_* functions rather than raw i2c messaging

Signed-off-by: Martyn Welch <martyn.welch@xxxxxxxxxxx>
Cc: Alessandro Zummo <a.zummo@xxxxxxxxxxxx>
Cc: David Brownell <david-b@xxxxxxxxxxx>
Cc: Jean Delvare <khali@xxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 drivers/rtc/rtc-rx8581.c |  127 ++++++++++++-------------------------
 1 file changed, 43 insertions(+), 84 deletions(-)

diff -puN drivers/rtc/rtc-rx8581.c~rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock-update drivers/rtc/rtc-rx8581.c
--- a/drivers/rtc/rtc-rx8581.c~rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock-update
+++ a/drivers/rtc/rtc-rx8581.c
@@ -12,6 +12,7 @@
  * Copyright 2005-06 Tower Technologies
  */
 
+#include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/bcd.h>
 #include <linux/rtc.h>
@@ -59,66 +60,49 @@ static struct i2c_driver rx8581_driver;
  */
 static int rx8581_get_datetime(struct i2c_client *client, struct rtc_time *tm)
 {
-	unsigned char date[7] = { RX8581_REG_SC };
-	unsigned char flags = RX8581_REG_FLAG;
-	int err;
+	unsigned char date[7];
+	int data, err;
 
 	/* First we ensure that the "update flag" is not set, we read the
 	 * time and date then re-read the "update flag". If the update flag
 	 * has been set, we know that the time has changed during the read so
 	 * we repeat the whole process again.
 	 */
-	/* Read flag register */
-	struct i2c_msg msgs[] = {
-		{ client->addr, 0, 1, &flags },		/* setup read ptr */
-		{ client->addr, I2C_M_RD, 1, &flags },	/* read flags */
-	};
-
-	if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-		dev_err(&client->dev, "%s: read error\n", __func__);
+	data = i2c_smbus_read_byte_data(client, RX8581_REG_FLAG);
+	if (data < 0) {
+		dev_err(&client->dev, "Unable to read device flags\n");
 		return -EIO;
 	}
 
 	do {
-
 		/* If update flag set, clear it */
-		if (flags & RX8581_FLAG_UF) {
-			unsigned char data[2] = { RX8581_REG_FLAG,
-				(flags & ~RX8581_FLAG_UF) };
-
-			err = i2c_master_send(client, data, sizeof(data));
-			if (err != sizeof(data)) {
-				dev_err(&client->dev,
-					"%s: err=%d addr=%02x, data=%02x\n",
-					__func__, err, data[0], data[1]);
+		if (data & RX8581_FLAG_UF) {
+			err = i2c_smbus_write_byte_data(client,
+				RX8581_REG_FLAG, (data & ~RX8581_FLAG_UF));
+			if (err != 0) {
+				dev_err(&client->dev, "Unable to write device "
+					"flags\n");
 				return -EIO;
 			}
 		}
 
 		/* Now read time and date */
-		date[0] = RX8581_REG_SC;
-		msgs[0].buf = date;
-		msgs[1].buf = date;
-		msgs[1].len = 7;
-
-		if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-			dev_err(&client->dev, "%s: read error\n", __func__);
+		err = i2c_smbus_read_i2c_block_data(client, RX8581_REG_SC,
+			7, date);
+		if (err < 0) {
+			dev_err(&client->dev, "Unable to read date\n");
 			return -EIO;
 		}
 
 		/* Check flag register */
-		flags = RX8581_REG_FLAG;
-		msgs[0].buf = &flags;
-		msgs[1].buf = &flags;
-		msgs[1].len = 1;
-
-		if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-			dev_err(&client->dev, "%s: read error\n", __func__);
+		data = i2c_smbus_read_byte_data(client, RX8581_REG_FLAG);
+		if (data < 0) {
+			dev_err(&client->dev, "Unable to read device flags\n");
 			return -EIO;
 		}
-	} while (flags & RX8581_FLAG_UF);
+	} while (data & RX8581_FLAG_UF);
 
-	if (flags & RX8581_FLAG_VLF)
+	if (data & RX8581_FLAG_VLF)
 		dev_info(&client->dev,
 			"low voltage detected, date/time is not reliable.\n");
 
@@ -154,14 +138,8 @@ static int rx8581_get_datetime(struct i2
 
 static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm)
 {
-	int i, err;
-	unsigned char buf[9];
-	unsigned char ctrl = RX8581_REG_CTRL;
-	unsigned char data[2];
-	struct i2c_msg msgs[] = {
-		{ client->addr, 0, 1, &ctrl },		/* setup read ptr */
-		{ client->addr, I2C_M_RD, 1, &ctrl },	/* read flags */
-	};
+	int data, err;
+	unsigned char buf[7];
 
 	dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, "
 		"mday=%d, mon=%d, year=%d, wday=%d\n",
@@ -184,55 +162,37 @@ static int rx8581_set_datetime(struct i2
 	buf[RX8581_REG_DW] = (0x1 << tm->tm_wday);
 
 	/* Stop the clock */
-	if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-		dev_err(&client->dev, "%s: read error\n", __func__);
+	data = i2c_smbus_read_byte_data(client, RX8581_REG_CTRL);
+	if (data < 0) {
+		dev_err(&client->dev, "Unable to read control register\n");
 		return -EIO;
 	}
 
-	data[0] = RX8581_REG_CTRL;
-	data[1] = (ctrl | RX8581_CTRL_STOP);
-
-	err = i2c_master_send(client, data, sizeof(data));
-	if (err != sizeof(data)) {
-		dev_err(&client->dev,
-			"%s: err=%d addr=%02x, data=%02x\n",
-			__func__, err, data[0], data[1]);
+	err = i2c_smbus_write_byte_data(client, RX8581_REG_FLAG,
+		(data | RX8581_CTRL_STOP));
+	if (err < 0) {
+		dev_err(&client->dev, "Unable to write control register\n");
 		return -EIO;
 	}
 
 	/* write register's data */
-	for (i = 0; i < 7; i++) {
-		data[0] = RX8581_REG_SC + i;
-		data[1] = buf[RX8581_REG_SC + i];
-
-		err = i2c_master_send(client, data, sizeof(data));
-		if (err != sizeof(data)) {
-			dev_err(&client->dev,
-				"%s: err=%d addr=%02x, data=%02x\n",
-				__func__, err, data[0], data[1]);
-			return -EIO;
-		}
-	};
+	err = i2c_smbus_write_i2c_block_data(client, RX8581_REG_SC, 7, buf);
+	if (err < 0) {
+		dev_err(&client->dev, "Unable to write to date registers\n");
+		return -EIO;
+	}
 
 	/* Restart the clock */
-	ctrl = RX8581_REG_CTRL;
-
-	msgs[0].buf = &ctrl;
-	msgs[1].buf = &ctrl;
-
-	if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-		dev_err(&client->dev, "%s: read error\n", __func__);
+	data = i2c_smbus_read_byte_data(client, RX8581_REG_CTRL);
+	if (data < 0) {
+		dev_err(&client->dev, "Unable to read control register\n");
 		return -EIO;
 	}
 
-	data[0] = RX8581_REG_CTRL;
-	data[1] = (ctrl & ~(RX8581_CTRL_STOP));
-
-	err = i2c_master_send(client, data, sizeof(data));
-	if (err != sizeof(data)) {
-		dev_err(&client->dev,
-			"%s: err=%d addr=%02x, data=%02x\n",
-			__func__, err, data[0], data[1]);
+	err = i2c_smbus_write_byte_data(client, RX8581_REG_FLAG,
+		(data | ~(RX8581_CTRL_STOP)));
+	if (err != 0) {
+		dev_err(&client->dev, "Unable to write control register\n");
 		return -EIO;
 	}
 
@@ -281,8 +241,7 @@ static int __devexit rx8581_remove(struc
 {
 	struct rtc_device *rtc = i2c_get_clientdata(client);
 
-	if (rtc)
-		rtc_device_unregister(rtc);
+	rtc_device_unregister(rtc);
 
 	return 0;
 }
_

Patches currently in -mm which might be from martyn.welch@xxxxxxxxxxx are

rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock.patch
rtc-basic-implementation-of-epson-rx-8581-i2c-real-time-clock-update.patch

--
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux