Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/638516/?format=api
{ "id": 638516, "url": "http://patchwork.ozlabs.org/api/patches/638516/?format=api", "web_url": "http://patchwork.ozlabs.org/project/rtc-linux/patch/1466493770-11895-8-git-send-email-andrew.smirnov@gmail.com/", "project": { "id": 9, "url": "http://patchwork.ozlabs.org/api/projects/9/?format=api", "name": "Linux RTC development", "link_name": "rtc-linux", "list_id": "linux-rtc.vger.kernel.org", "list_email": "linux-rtc@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1466493770-11895-8-git-send-email-andrew.smirnov@gmail.com>", "list_archive_url": null, "date": "2016-06-21T07:22:42", "name": "[v2,09/17] RTC: ds1307: Remove register \"cache\"", "commit_ref": null, "pull_url": null, "state": "rejected", "archived": false, "hash": "cee8b61d3f75100941a6de85d11586dd942c3b6c", "submitter": { "id": 67013, "url": "http://patchwork.ozlabs.org/api/people/67013/?format=api", "name": "Andrey Smirnov", "email": "andrew.smirnov@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/rtc-linux/patch/1466493770-11895-8-git-send-email-andrew.smirnov@gmail.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/638516/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/638516/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<rtc-linux+bncBDKOBWPM5ABRBW6WUO5QKGQEG7YTU6Q@googlegroups.com>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Received": [ "from mail-ob0-x240.google.com (mail-ob0-x240.google.com\n\t[IPv6:2607:f8b0:4003:c01::240])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3rYfMd3SZmz9t0S\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 21 Jun 2016 17:23:09 +1000 (AEST)", "by mail-ob0-x240.google.com with SMTP id mu6sf1195950obc.1\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 21 Jun 2016 00:23:09 -0700 (PDT)", "by 10.36.43.6 with SMTP id h6ls141605ita.0.gmail; Tue, 21 Jun 2016\n\t00:23:07 -0700 (PDT)", "from mail-pa0-x241.google.com (mail-pa0-x241.google.com.\n\t[2607:f8b0:400e:c03::241]) by gmr-mx.google.com with ESMTPS id\n\tc11si5951032pfc.2.2016.06.21.00.23.07\n\tfor <rtc-linux@googlegroups.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 21 Jun 2016 00:23:07 -0700 (PDT)", "by mail-pa0-x241.google.com with SMTP id us13so739156pab.1\n\tfor <rtc-linux@googlegroups.com>;\n\tTue, 21 Jun 2016 00:23:07 -0700 (PDT)", "from squirtle.localdomain.localdomain\n\t(c-73-225-163-254.hsd1.wa.comcast.net. [73.225.163.254])\n\tby smtp.gmail.com with ESMTPSA id\n\tp187sm19452396pfg.67.2016.06.21.00.23.05\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)" ], "Authentication-Results": "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=googlegroups.com header.i=@googlegroups.com\n\theader.b=qfRExS96; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com header.b=Bj1roGbo;\n\tdkim-atps=neutral", "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=googlegroups.com; s=20120806;\n\th=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:x-original-sender:x-original-authentication-results\n\t:reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group\n\t:list-post:list-help:list-archive:list-subscribe:list-unsubscribe;\n\tbh=RyhdOyZK2LHoi08MeSQCuOieVn/jx9CMS6xdqm3mA3o=;\n\tb=qfRExS96947uomQBgBq7n59o08dvhF69ON/beCckbeJIdOvwoYdXIP3Wv7fMxfd73q\n\tyxEA1Zgn05guTdn7kazcdDcTQqfyNm/iM3uR6a40BJ0BxElULzlf6lV2mKe4Ke/isfcX\n\tK07h/AqG49aDtyHMRQnlWPwwnkjWCZd8tV0nL8+DDnBuZH8i/x/Wva7Gve6WrR46UlBi\n\tV9RyJK6jMMbMOGoZrd0PcWDP0wjT4rN4ax6J65P+yM1NhI5EFuZrm8buESslvqWRugTK\n\txgt6/5F0/BcIYqTFIjwzEhDQRBUgmB4BfZkt+l7yCuIF12ZnEGqB0U0XDDDdejHbbHSu\n\tN58Q==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20120113;\n\th=mime-version:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:x-original-sender:x-original-authentication-results\n\t:reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group\n\t:list-post:list-help:list-archive:list-subscribe:list-unsubscribe;\n\tbh=RyhdOyZK2LHoi08MeSQCuOieVn/jx9CMS6xdqm3mA3o=;\n\tb=Bj1roGbo8HWBCroog3MubS4TscUuBVJ78xa1fsN4HThpKxYaaSBLSpjSB9irKe6vir\n\tT04mwK6dnHdsDN7BOPpE1kwgxoqLI4yeOPthp+2ZPbU9kY+KVSk2pHMdEUPaOkrXjB8r\n\t/iAoJrDVyVNs8kqkD1Tb0XjgDyEq2sQCNv8jc1vC3BJdns1oaXLg7IcJwBuyDprnvNnq\n\tyzrA+428qHOw4hXopp+3NySTjrxcZtQ6qGBmPXet4G87DmTmOuyLj9FVMsvU9z7fZufK\n\tB7ianvMJu4D0u4sZqRBav2ndzStI9QakH9Eqleg339K5XqzBjKitZxaf0+QpLwXdpsEu\n\tAIog==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=sender:x-gm-message-state:mime-version:from:to:cc:subject:date\n\t:message-id:in-reply-to:references:x-original-sender\n\t:x-original-authentication-results:reply-to:precedence:mailing-list\n\t:list-id:x-spam-checked-in-group:list-post:list-help:list-archive\n\t:list-subscribe:list-unsubscribe;\n\tbh=RyhdOyZK2LHoi08MeSQCuOieVn/jx9CMS6xdqm3mA3o=;\n\tb=RFDvUUca05kbbsWnipNctykgy+2J3s1cZ1XPKE7smwIrxtmGo04bslFDoCSLg9ExzX\n\t8/C+4WMu5wLJUCMq7A4UbeasMFyLVzI9q7RIquc07XG5rzeK63U5/WMFIGSQ49DBjbNc\n\tmGndqADQHDHFIGiiK6yLaNm5yYK+Poh6qg0XJI0zgQ39Sf1QyauwVSGAs6rf7MiwNN9l\n\tddvrnN3B2vBBL44ynMdJV9jLfPHWsbN4zET4aw6Hx53OTs7wHPU0Xt0kLod4ZOO8HhK6\n\t9Zq+KWy/8D5qjQBmTOGnKdnIu3MJabuynoSMrmv7nIKmWzqeFk3G8OTJXkhLesDbO2pG\n\tuUjA==", "Sender": "rtc-linux@googlegroups.com", "X-Gm-Message-State": "ALyK8tIBESt6wZ2tad0FTT9cgj7/LZ1cEpmxu3rJwYcF6qb9rFk/9Yj+p7u5giwb4sjHAg==", "X-Received": [ "by 10.36.103.134 with SMTP id u128mr32544itc.5.1466493787660;\n\tTue, 21 Jun 2016 00:23:07 -0700 (PDT)", "by 10.36.76.211 with SMTP id a202mr1930335itb.2.1466493787368;\n\tTue, 21 Jun 2016 00:23:07 -0700 (PDT)", "by 10.66.134.172 with SMTP id pl12mr26850505pab.66.1466493786765;\n\tTue, 21 Jun 2016 00:23:06 -0700 (PDT)" ], "MIME-Version": "1.0", "X-BeenThere": "rtc-linux@googlegroups.com", "Received-SPF": "pass (google.com: domain of andrew.smirnov@gmail.com\n\tdesignates 2607:f8b0:400e:c03::241 as permitted sender)\n\tclient-ip=2607:f8b0:400e:c03::241; ", "From": "Andrey Smirnov <andrew.smirnov@gmail.com>", "To": "rtc-linux@googlegroups.com", "Cc": "Andrey Smirnov <andrew.smirnov@gmail.com>,\n\tAlessandro Zummo <a.zummo@towertech.it>,\n\tAlexandre Belloni <alexandre.belloni@free-electrons.com>,\n\tlinux-kernel@vger.kernel.org, cphealy@gmail.com", "Subject": "[rtc-linux] [PATCH v2 09/17] RTC: ds1307: Remove register \"cache\"", "Date": "Tue, 21 Jun 2016 00:22:42 -0700", "Message-Id": "<1466493770-11895-8-git-send-email-andrew.smirnov@gmail.com>", "X-Mailer": "git-send-email 2.5.5", "In-Reply-To": "<1466493770-11895-1-git-send-email-andrew.smirnov@gmail.com>", "References": "<1466493770-11895-1-git-send-email-andrew.smirnov@gmail.com>", "X-Original-Sender": "andrew.smirnov@gmail.com", "X-Original-Authentication-Results": "gmr-mx.google.com; dkim=pass\n\theader.i=@gmail.com; spf=pass (google.com: domain of\n\tandrew.smirnov@gmail.com designates 2607:f8b0:400e:c03::241 as\n\tpermitted\n\tsender) smtp.mailfrom=andrew.smirnov@gmail.com; dmarc=pass (p=NONE\n\tdis=NONE) header.from=gmail.com", "Reply-To": "rtc-linux@googlegroups.com", "Content-Type": "text/plain; charset=UTF-8", "Precedence": "list", "Mailing-list": "list rtc-linux@googlegroups.com;\n\tcontact rtc-linux+owners@googlegroups.com", "List-ID": "<rtc-linux.googlegroups.com>", "X-Spam-Checked-In-Group": "rtc-linux@googlegroups.com", "X-Google-Group-Id": "712029733259", "List-Post": "<https://groups.google.com/group/rtc-linux/post>,\n\t<mailto:rtc-linux@googlegroups.com>", "List-Help": "<https://groups.google.com/support/>,\n\t<mailto:rtc-linux+help@googlegroups.com>", "List-Archive": "<https://groups.google.com/group/rtc-linux", "List-Subscribe": "<https://groups.google.com/group/rtc-linux/subscribe>,\n\t<mailto:rtc-linux+subscribe@googlegroups.com>", "List-Unsubscribe": "<mailto:googlegroups-manage+712029733259+unsubscribe@googlegroups.com>,\n\t<https://groups.google.com/group/rtc-linux/subscribe>" }, "content": "Remove shared area used by many subroutines to store values of RTC's\nregisters. There wasn't very much caching or sharing going on in the\ncode and that register cache, being a semi-global variable, only created\nadditional implicit dependencies between function and made code more\nconfusing (there were a number of functions that defined a convenience\nvariable pointing to ds1307->regs, but failed to use it in the code\nconsistently).\n\nSigned-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>\n---\n drivers/rtc/rtc-ds1307.c | 229 ++++++++++++++++++++++++-----------------------\n 1 file changed, 116 insertions(+), 113 deletions(-)", "diff": "diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c\nindex d262db5..66e7168 100644\n--- a/drivers/rtc/rtc-ds1307.c\n+++ b/drivers/rtc/rtc-ds1307.c\n@@ -110,10 +110,10 @@ enum ds_type {\n #\tdefine RX8025_BIT_VDET\t\t0x40\n #\tdefine RX8025_BIT_XST\t\t0x20\n \n+#define DS1307_REG_COUNT\t11\n \n struct ds1307 {\n \tu8\t\t\toffset; /* register's offset */\n-\tu8\t\t\tregs[11];\n \tu16\t\t\tnvram_offset;\n \tstruct bin_attribute\t*nvram;\n \tenum ds_type\t\ttype;\n@@ -366,30 +366,31 @@ out:\n \n static int ds1307_get_time(struct device *dev, struct rtc_time *t)\n {\n+\tu8 regs[DS1307_REG_COUNT];\n \tstruct ds1307\t*ds1307 = dev_get_drvdata(dev);\n \tint\t\ttmp;\n \n \t/* read the RTC date and time registers all at once */\n \ttmp = ds1307->read_block_data(ds1307->client,\n-\t\tds1307->offset, 7, ds1307->regs);\n+\t\tds1307->offset, 7, regs);\n \tif (tmp != 7) {\n \t\tdev_err(dev, \"%s error %d\\n\", \"read\", tmp);\n \t\treturn -EIO;\n \t}\n \n-\tdev_dbg(dev, \"%s: %7ph\\n\", \"read\", ds1307->regs);\n+\tdev_dbg(dev, \"%s: %7ph\\n\", \"read\", regs);\n \n-\tt->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f);\n-\tt->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f);\n-\ttmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;\n+\tt->tm_sec = bcd2bin(regs[DS1307_REG_SECS] & 0x7f);\n+\tt->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f);\n+\ttmp = regs[DS1307_REG_HOUR] & 0x3f;\n \tt->tm_hour = bcd2bin(tmp);\n-\tt->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;\n-\tt->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f);\n-\ttmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;\n+\tt->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1;\n+\tt->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f);\n+\ttmp = regs[DS1307_REG_MONTH] & 0x1f;\n \tt->tm_mon = bcd2bin(tmp) - 1;\n \n \t/* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */\n-\tt->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100;\n+\tt->tm_year = bcd2bin(regs[DS1307_REG_YEAR]) + 100;\n \n \tdev_dbg(dev, \"%s secs=%d, mins=%d, \"\n \t\t\"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\\n\",\n@@ -406,7 +407,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)\n \tstruct ds1307\t*ds1307 = dev_get_drvdata(dev);\n \tint\t\tresult;\n \tint\t\ttmp;\n-\tu8\t\t*buf = ds1307->regs;\n+\tu8\t\tregs[DS1307_REG_COUNT];\n \n \tdev_dbg(dev, \"%s secs=%d, mins=%d, \"\n \t\t\"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\\n\",\n@@ -414,26 +415,26 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)\n \t\tt->tm_hour, t->tm_mday,\n \t\tt->tm_mon, t->tm_year, t->tm_wday);\n \n-\tbuf[DS1307_REG_SECS] = bin2bcd(t->tm_sec);\n-\tbuf[DS1307_REG_MIN] = bin2bcd(t->tm_min);\n-\tbuf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);\n-\tbuf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);\n-\tbuf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);\n-\tbuf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);\n+\tregs[DS1307_REG_SECS] = bin2bcd(t->tm_sec);\n+\tregs[DS1307_REG_MIN] = bin2bcd(t->tm_min);\n+\tregs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);\n+\tregs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);\n+\tregs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);\n+\tregs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);\n \n \t/* assume 20YY not 19YY */\n \ttmp = t->tm_year - 100;\n-\tbuf[DS1307_REG_YEAR] = bin2bcd(tmp);\n+\tregs[DS1307_REG_YEAR] = bin2bcd(tmp);\n \n \tswitch (ds1307->type) {\n \tcase ds_1337:\n \tcase ds_1339:\n \tcase ds_3231:\n \tcase ds_1341:\n-\t\tbuf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;\n+\t\tregs[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;\n \t\tbreak;\n \tcase ds_1340:\n-\t\tbuf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN\n+\t\tregs[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN\n \t\t\t\t| DS1340_BIT_CENTURY;\n \t\tbreak;\n \tcase mcp794xx:\n@@ -442,17 +443,17 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)\n \t\t * values and need to be set again before writing the\n \t\t * buffer out to the device.\n \t\t */\n-\t\tbuf[DS1307_REG_SECS] |= MCP794XX_BIT_ST;\n-\t\tbuf[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN;\n+\t\tregs[DS1307_REG_SECS] |= MCP794XX_BIT_ST;\n+\t\tregs[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN;\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n \n-\tdev_dbg(dev, \"%s: %7ph\\n\", \"write\", buf);\n+\tdev_dbg(dev, \"%s: %7ph\\n\", \"write\", regs);\n \n \tresult = ds1307->write_block_data(ds1307->client,\n-\t\tds1307->offset, 7, buf);\n+\t\tds1307->offset, 7, regs);\n \tif (result < 0) {\n \t\tdev_err(dev, \"%s error %d\\n\", \"write\", result);\n \t\treturn result;\n@@ -465,29 +466,30 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)\n \tstruct i2c_client *client = to_i2c_client(dev);\n \tstruct ds1307\t\t*ds1307 = i2c_get_clientdata(client);\n \tint\t\t\tret;\n+\tu8\t\t\tregs[DS1307_REG_COUNT];\n \n \tif (!test_bit(HAS_ALARM, &ds1307->flags))\n \t\treturn -EINVAL;\n \n \t/* read all ALARM1, ALARM2, and status registers at once */\n \tret = ds1307->read_block_data(client,\n-\t\t\tDS1339_REG_ALARM1_SECS, 9, ds1307->regs);\n+\t\t\tDS1339_REG_ALARM1_SECS, 9, regs);\n \tif (ret != 9) {\n \t\tdev_err(dev, \"%s error %d\\n\", \"alarm read\", ret);\n \t\treturn -EIO;\n \t}\n \n \tdev_dbg(dev, \"%s: %4ph, %3ph, %2ph\\n\", \"alarm read\",\n-\t\t&ds1307->regs[0], &ds1307->regs[4], &ds1307->regs[7]);\n+\t\t®s[0], ®s[4], ®s[7]);\n \n \t/*\n \t * report alarm time (ALARM1); assume 24 hour and day-of-month modes,\n \t * and that all four fields are checked matches\n \t */\n-\tt->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f);\n-\tt->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f);\n-\tt->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f);\n-\tt->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f);\n+\tt->time.tm_sec = bcd2bin(regs[0] & 0x7f);\n+\tt->time.tm_min = bcd2bin(regs[1] & 0x7f);\n+\tt->time.tm_hour = bcd2bin(regs[2] & 0x3f);\n+\tt->time.tm_mday = bcd2bin(regs[3] & 0x3f);\n \tt->time.tm_mon = -1;\n \tt->time.tm_year = -1;\n \tt->time.tm_wday = -1;\n@@ -495,8 +497,8 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)\n \tt->time.tm_isdst = -1;\n \n \t/* ... and status */\n-\tt->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE);\n-\tt->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I);\n+\tt->enabled = !!(regs[7] & DS1337_BIT_A1IE);\n+\tt->pending = !!(regs[8] & DS1337_BIT_A1I);\n \n \tdev_dbg(dev, \"%s secs=%d, mins=%d, \"\n \t\t\"hours=%d, mday=%d, enabled=%d, pending=%d\\n\",\n@@ -511,7 +513,7 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)\n {\n \tstruct i2c_client\t*client = to_i2c_client(dev);\n \tstruct ds1307\t\t*ds1307 = i2c_get_clientdata(client);\n-\tunsigned char\t\t*buf = ds1307->regs;\n+\tu8\t\t\tregs[DS1307_REG_COUNT];\n \tu8\t\t\tcontrol, status;\n \tint\t\t\tret;\n \n@@ -526,34 +528,34 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)\n \n \t/* read current status of both alarms and the chip */\n \tret = ds1307->read_block_data(client,\n-\t\t\tDS1339_REG_ALARM1_SECS, 9, buf);\n+\t\t\tDS1339_REG_ALARM1_SECS, 9, regs);\n \tif (ret != 9) {\n \t\tdev_err(dev, \"%s error %d\\n\", \"alarm write\", ret);\n \t\treturn -EIO;\n \t}\n-\tcontrol = ds1307->regs[7];\n-\tstatus = ds1307->regs[8];\n+\tcontrol = regs[7];\n+\tstatus = regs[8];\n \n \tdev_dbg(dev, \"%s: %4ph, %3ph, %02x %02x\\n\", \"alarm set (old status)\",\n-\t\t&ds1307->regs[0], &ds1307->regs[4], control, status);\n+\t\t®s[0], ®s[4], control, status);\n \n \t/* set ALARM1, using 24 hour and day-of-month modes */\n-\tbuf[0] = bin2bcd(t->time.tm_sec);\n-\tbuf[1] = bin2bcd(t->time.tm_min);\n-\tbuf[2] = bin2bcd(t->time.tm_hour);\n-\tbuf[3] = bin2bcd(t->time.tm_mday);\n+\tregs[0] = bin2bcd(t->time.tm_sec);\n+\tregs[1] = bin2bcd(t->time.tm_min);\n+\tregs[2] = bin2bcd(t->time.tm_hour);\n+\tregs[3] = bin2bcd(t->time.tm_mday);\n \n \t/* set ALARM2 to non-garbage */\n-\tbuf[4] = 0;\n-\tbuf[5] = 0;\n-\tbuf[6] = 0;\n+\tregs[4] = 0;\n+\tregs[5] = 0;\n+\tregs[6] = 0;\n \n \t/* disable alarms */\n-\tbuf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);\n-\tbuf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);\n+\tregs[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);\n+\tregs[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);\n \n \tret = ds1307->write_block_data(client,\n-\t\t\tDS1339_REG_ALARM1_SECS, 9, buf);\n+\t\t\tDS1339_REG_ALARM1_SECS, 9, regs);\n \tif (ret < 0) {\n \t\tdev_err(dev, \"can't set alarm time\\n\");\n \t\treturn ret;\n@@ -562,8 +564,8 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)\n \t/* optionally enable ALARM1 */\n \tif (t->enabled) {\n \t\tdev_dbg(dev, \"alarm IRQ armed\\n\");\n-\t\tbuf[7] |= DS1337_BIT_A1IE;\t/* only ALARM1 is used */\n-\t\ti2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, buf[7]);\n+\t\tregs[7] |= DS1337_BIT_A1IE;\t/* only ALARM1 is used */\n+\t\ti2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, regs[7]);\n \t}\n \n \treturn 0;\n@@ -665,7 +667,7 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)\n {\n \tstruct i2c_client *client = to_i2c_client(dev);\n \tstruct ds1307 *ds1307 = i2c_get_clientdata(client);\n-\tu8 *regs = ds1307->regs;\n+\tu8 regs[DS1307_REG_COUNT];\n \tint ret;\n \n \tif (!test_bit(HAS_ALARM, &ds1307->flags))\n@@ -679,12 +681,12 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)\n \tt->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN);\n \n \t/* Report alarm 0 time assuming 24-hour and day-of-month modes. */\n-\tt->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f);\n-\tt->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f);\n-\tt->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f);\n-\tt->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1;\n-\tt->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f);\n-\tt->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1;\n+\tt->time.tm_sec = bcd2bin(regs[3] & 0x7f);\n+\tt->time.tm_min = bcd2bin(regs[4] & 0x7f);\n+\tt->time.tm_hour = bcd2bin(regs[5] & 0x3f);\n+\tt->time.tm_wday = bcd2bin(regs[6] & 0x7) - 1;\n+\tt->time.tm_mday = bcd2bin(regs[7] & 0x3f);\n+\tt->time.tm_mon = bcd2bin(regs[8] & 0x1f) - 1;\n \tt->time.tm_year = -1;\n \tt->time.tm_yday = -1;\n \tt->time.tm_isdst = -1;\n@@ -693,9 +695,9 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)\n \t\t\"enabled=%d polarity=%d irq=%d match=%d\\n\", __func__,\n \t\tt->time.tm_sec, t->time.tm_min, t->time.tm_hour,\n \t\tt->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled,\n-\t\t!!(ds1307->regs[6] & MCP794XX_BIT_ALMX_POL),\n-\t\t!!(ds1307->regs[6] & MCP794XX_BIT_ALMX_IF),\n-\t\t(ds1307->regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4);\n+\t\t!!(regs[6] & MCP794XX_BIT_ALMX_POL),\n+\t\t!!(regs[6] & MCP794XX_BIT_ALMX_IF),\n+\t\t(regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4);\n \n \treturn 0;\n }\n@@ -704,7 +706,7 @@ static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t)\n {\n \tstruct i2c_client *client = to_i2c_client(dev);\n \tstruct ds1307 *ds1307 = i2c_get_clientdata(client);\n-\tunsigned char *regs = ds1307->regs;\n+\tu8 regs[DS1307_REG_COUNT];\n \tint ret;\n \n \tif (!test_bit(HAS_ALARM, &ds1307->flags))\n@@ -1274,11 +1276,9 @@ static bool ds1307_want_irq(const struct ds1307 *ds1307,\n static int ds1307_chip_configure(struct ds1307 *ds1307)\n {\n \tint tmp;\n-\tunsigned char *buf;\n+\tu8 regs[DS1307_REG_COUNT];\n \tstruct i2c_client *client = ds1307->client;\n \n-\tbuf = ds1307->regs;\n-\n \tswitch (ds1307->type) {\n \tcase ds_1337:\n \tcase ds_1339:\n@@ -1293,32 +1293,32 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n \n \t\t/* get registers that the \"rtc\" read below won't read... */\n \t\ttmp = ds1307->read_block_data(client,\n-\t\t\t\t\t DS1337_REG_CONTROL, 2, buf);\n+\t\t\t\t\t DS1337_REG_CONTROL, 2, regs);\n \t\tif (tmp != 2) {\n \t\t\tdev_dbg(&ds1307->client->dev, \"read error %d\\n\", tmp);\n \t\t\treturn -EIO;\n \t\t}\n \n \t\t/* oscillator off? turn it on, so clock can tick. */\n-\t\tif (ds1307->regs[0] & DS1337_BIT_nEOSC)\n-\t\t\tds1307->regs[0] &= ~DS1337_BIT_nEOSC;\n+\t\tif (regs[0] & DS1337_BIT_nEOSC)\n+\t\t\tregs[0] &= ~DS1337_BIT_nEOSC;\n \n \t\tif (ds1307->type == ds_1341) {\n \t\t\t/* Make sure we are not generating square wave\n \t\t\t * output */\n-\t\t\tds1307->regs[1] &= ~DS1341_BIT_ECLK;\n+\t\t\tregs[1] &= ~DS1341_BIT_ECLK;\n \n \t\t\tif (of_property_read_bool(client->dev.of_node,\n \t\t\t\t\t\t \"dallas,disable-oscillator-stop-flag\"))\n-\t\t\t\tds1307->regs[1] |= DS1341_BIT_DOSF;\n+\t\t\t\tregs[1] |= DS1341_BIT_DOSF;\n \t\t\telse\n-\t\t\t\tds1307->regs[1] &= ~DS1341_BIT_DOSF;\n+\t\t\t\tregs[1] &= ~DS1341_BIT_DOSF;\n \n \t\t\tif (of_property_read_bool(client->dev.of_node,\n \t\t\t\t\t\t \"dallas,enable-glitch-filter\"))\n-\t\t\t\tds1307->regs[0] |= DS1341_BIT_EGFIL;\n+\t\t\t\tregs[0] |= DS1341_BIT_EGFIL;\n \t\t\telse\n-\t\t\t\tds1307->regs[0] &= ~DS1341_BIT_EGFIL;\n+\t\t\t\tregs[0] &= ~DS1341_BIT_EGFIL;\n \n \t\t\t/*\n \t\t\t * Write status register. Control register\n@@ -1326,7 +1326,7 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n \t\t\t */\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t DS1337_REG_STATUS,\n-\t\t\t\t\t\t ds1307->regs[1]);\n+\t\t\t\t\t\t regs[1]);\n \t\t}\n \n \t\t/*\n@@ -1334,19 +1334,19 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n \t\t * For some variants, be sure alarms can trigger when we're\n \t\t * running on Vbackup (BBSQI/BBSQW)\n \t\t */\n-\t\tds1307->regs[0] |= DS1337_BIT_INTCN\n+\t\tregs[0] |= DS1337_BIT_INTCN\n \t\t\t| bbsqi_bitpos[ds1307->type];\n-\t\tds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);\n+\t\tregs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);\n \n \t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t DS1337_REG_CONTROL,\n-\t\t\t\t\t ds1307->regs[0]);\n+\t\t\t\t\t regs[0]);\n \n \t\t/* oscillator fault? clear flag, and warn */\n-\t\tif (ds1307->regs[1] & DS1337_BIT_OSF) {\n+\t\tif (regs[1] & DS1337_BIT_OSF) {\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t DS1337_REG_STATUS,\n-\t\t\t\t\t\t ds1307->regs[1] & ~DS1337_BIT_OSF);\n+\t\t\t\t\t\t regs[1] & ~DS1337_BIT_OSF);\n \t\t\tdev_warn(&ds1307->client->dev, \"SET TIME!\\n\");\n \t\t}\n \t\tbreak;\n@@ -1354,60 +1354,60 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n \tcase rx_8025:\n \t\ttmp = i2c_smbus_read_i2c_block_data(client,\n \t\t\t\t\t\t RX8025_REG_CTRL1 << 4 | 0x08,\n-\t\t\t\t\t\t 2, buf);\n+\t\t\t\t\t\t 2, regs);\n \t\tif (tmp != 2) {\n \t\t\tdev_dbg(&client->dev, \"read error %d\\n\", tmp);\n \t\t\treturn -EIO;\n \t\t}\n \n \t\t/* oscillator off? turn it on, so clock can tick. */\n-\t\tif (!(ds1307->regs[1] & RX8025_BIT_XST)) {\n-\t\t\tds1307->regs[1] |= RX8025_BIT_XST;\n+\t\tif (!(regs[1] & RX8025_BIT_XST)) {\n+\t\t\tregs[1] |= RX8025_BIT_XST;\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t RX8025_REG_CTRL2 << 4 | 0x08,\n-\t\t\t\t\t\t ds1307->regs[1]);\n+\t\t\t\t\t\t regs[1]);\n \t\t\tdev_warn(&client->dev,\n \t\t\t\t \"oscillator stop detected - SET TIME!\\n\");\n \t\t}\n \n-\t\tif (ds1307->regs[1] & RX8025_BIT_PON) {\n-\t\t\tds1307->regs[1] &= ~RX8025_BIT_PON;\n+\t\tif (regs[1] & RX8025_BIT_PON) {\n+\t\t\tregs[1] &= ~RX8025_BIT_PON;\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t RX8025_REG_CTRL2 << 4 | 0x08,\n-\t\t\t\t\t\t ds1307->regs[1]);\n+\t\t\t\t\t\t regs[1]);\n \t\t\tdev_warn(&client->dev, \"power-on detected\\n\");\n \t\t}\n \n-\t\tif (ds1307->regs[1] & RX8025_BIT_VDET) {\n-\t\t\tds1307->regs[1] &= ~RX8025_BIT_VDET;\n+\t\tif (regs[1] & RX8025_BIT_VDET) {\n+\t\t\tregs[1] &= ~RX8025_BIT_VDET;\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t RX8025_REG_CTRL2 << 4 | 0x08,\n-\t\t\t\t\t\t ds1307->regs[1]);\n+\t\t\t\t\t\t regs[1]);\n \t\t\tdev_warn(&client->dev, \"voltage drop detected\\n\");\n \t\t}\n \n \t\t/* make sure we are running in 24hour mode */\n-\t\tif (!(ds1307->regs[0] & RX8025_BIT_2412)) {\n+\t\tif (!(regs[0] & RX8025_BIT_2412)) {\n \t\t\tu8 hour;\n \n \t\t\t/* switch to 24 hour mode */\n \t\t\ti2c_smbus_write_byte_data(client,\n \t\t\t\t\t\t RX8025_REG_CTRL1 << 4 | 0x08,\n-\t\t\t\t\t\t ds1307->regs[0] | RX8025_BIT_2412);\n+\t\t\t\t\t\t regs[0] | RX8025_BIT_2412);\n \n \t\t\ttmp = i2c_smbus_read_i2c_block_data(client,\n \t\t\t\t\t\t\t RX8025_REG_CTRL1 << 4 | 0x08,\n-\t\t\t\t\t\t\t 2, buf);\n+\t\t\t\t\t\t\t 2, regs);\n \t\t\tif (tmp != 2) {\n \t\t\t\tdev_dbg(&client->dev, \"read error %d\\n\", tmp);\n \t\t\t\treturn -EIO;\n \t\t\t}\n \n \t\t\t/* correct hour */\n-\t\t\thour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]);\n+\t\t\thour = bcd2bin(regs[DS1307_REG_HOUR]);\n \t\t\tif (hour == 12)\n \t\t\t\thour = 0;\n-\t\t\tif (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)\n+\t\t\tif (regs[DS1307_REG_HOUR] & DS1307_BIT_PM)\n \t\t\t\thour += 12;\n \n \t\t\ti2c_smbus_write_byte_data(client,\n@@ -1425,14 +1425,12 @@ static int ds1307_chip_configure(struct ds1307 *ds1307)\n static int ds1307_chip_sanity_check(struct ds1307 *ds1307)\n {\n \tint tmp;\n-\tunsigned char *buf;\n+\tu8 regs[DS1307_REG_COUNT];\n \tstruct i2c_client *client = ds1307->client;\n \n-\tbuf = ds1307->regs;\n-\n read_rtc:\n \t/* read RTC registers */\n-\ttmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf);\n+\ttmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, regs);\n \tif (tmp != 8) {\n \t\tdev_dbg(&client->dev, \"read error %d\\n\", tmp);\n \t\treturn -EIO;\n@@ -1443,7 +1441,7 @@ read_rtc:\n \t * specify the extra bits as must-be-zero, but there are\n \t * still a few values that are clearly out-of-range.\n \t */\n-\ttmp = ds1307->regs[DS1307_REG_SECS];\n+\ttmp = regs[DS1307_REG_SECS];\n \tswitch (ds1307->type) {\n \tcase ds_1307:\n \tcase m41t00:\n@@ -1460,9 +1458,9 @@ read_rtc:\n \t\t\ti2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);\n \n \t\t/* oscillator fault? clear flag, and warn */\n-\t\tif (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {\n+\t\tif (regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {\n \t\t\ti2c_smbus_write_byte_data(client, DS1307_REG_CONTROL,\n-\t\t\t\t\tds1307->regs[DS1307_REG_CONTROL]\n+\t\t\t\t\tregs[DS1307_REG_CONTROL]\n \t\t\t\t\t& ~DS1338_BIT_OSF);\n \t\t\tdev_warn(&client->dev, \"SET TIME!\\n\");\n \t\t\tgoto read_rtc;\n@@ -1487,9 +1485,9 @@ read_rtc:\n \t\tbreak;\n \tcase mcp794xx:\n \t\t/* make sure that the backup battery is enabled */\n-\t\tif (!(ds1307->regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) {\n+\t\tif (!(regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) {\n \t\t\ti2c_smbus_write_byte_data(client, DS1307_REG_WDAY,\n-\t\t\t\t\tds1307->regs[DS1307_REG_WDAY]\n+\t\t\t\t\tregs[DS1307_REG_WDAY]\n \t\t\t\t\t| MCP794XX_BIT_VBATEN);\n \t\t}\n \n@@ -1514,10 +1512,10 @@ static int ds1307_probe(struct i2c_client *client,\n {\n \tstruct ds1307\t\t*ds1307;\n \tint\t\t\terr = -ENODEV;\n-\tint\t\t\ttmp;\n+\tint\t\t\treg;\n+\tu8\t\t\thour;\n \tstruct chip_desc\t*chip = &chips[id->driver_data];\n \tstruct i2c_adapter\t*adapter = to_i2c_adapter(client->dev.parent);\n-\tunsigned char\t\t*buf;\n \tstruct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);\n \tirq_handler_t\tirq_handler = ds1307_irq;\n \n@@ -1550,7 +1548,6 @@ static int ds1307_probe(struct i2c_client *client,\n \t\t chip->trickle_charger_setup);\n \t}\n \n-\tbuf = ds1307->regs;\n \tif (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {\n \t\tds1307->read_block_data = ds1307_native_smbus_read_block_data;\n \t\tds1307->write_block_data = ds1307_native_smbus_write_block_data;\n@@ -1579,7 +1576,14 @@ static int ds1307_probe(struct i2c_client *client,\n \tif (err < 0)\n \t\treturn err;\n \n-\ttmp = ds1307->regs[DS1307_REG_HOUR];\n+\treg = i2c_smbus_read_byte_data(client,\n+\t\t\t\t ds1307->offset + DS1307_REG_HOUR);\n+\tif (reg < 0) {\n+\t\tdev_err(&client->dev,\n+\t\t\t\"failed to read HOUR register\\n\");\n+\t\treturn reg;\n+\t}\n+\n \tswitch (ds1307->type) {\n \tcase ds_1340:\n \tcase m41t00:\n@@ -1591,21 +1595,21 @@ static int ds1307_probe(struct i2c_client *client,\n \tcase rx_8025:\n \t\tbreak;\n \tdefault:\n-\t\tif (!(tmp & DS1307_BIT_12HR))\n+\t\tif (!(reg & DS1307_BIT_12HR))\n \t\t\tbreak;\n \n \t\t/*\n \t\t * Be sure we're in 24 hour mode. Multi-master systems\n \t\t * take note...\n \t\t */\n-\t\ttmp = bcd2bin(tmp & 0x1f);\n-\t\tif (tmp == 12)\n-\t\t\ttmp = 0;\n-\t\tif (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)\n-\t\t\ttmp += 12;\n+\t\thour = bcd2bin(reg & 0x1f);\n+\t\tif (hour == 12)\n+\t\t\thour = 0;\n+\t\tif (reg & DS1307_BIT_PM)\n+\t\t\thour += 12;\n \t\ti2c_smbus_write_byte_data(client,\n \t\t\t\tds1307->offset + DS1307_REG_HOUR,\n-\t\t\t\tbin2bcd(tmp));\n+\t\t\t\tbin2bcd(hour));\n \t}\n \n \tif (ds1307_want_irq(ds1307, chip)) {\n@@ -1620,7 +1624,6 @@ static int ds1307_probe(struct i2c_client *client,\n \n \tif (ds1307_can_wakeup_device(ds1307) &&\n \t ds1307->client->irq <= 0) {\n-\t\t/* Disable request for an IRQ */\n \t\tdev_info(&client->dev,\n \t\t\t \"'wakeup-source' is set, request for an IRQ is disabled!\\n\");\n \t\t/* We cannot support UIE mode if we do not have an IRQ line */\n", "prefixes": [ "v2", "09/17" ] }