From patchwork Tue Oct 13 05:08:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiko Schocher X-Patchwork-Id: 529578 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B601E140FDB for ; Tue, 13 Oct 2015 16:09:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752178AbbJMFJG (ORCPT ); Tue, 13 Oct 2015 01:09:06 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:47497 "EHLO mail-out.m-online.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751854AbbJMFJF (ORCPT ); Tue, 13 Oct 2015 01:09:05 -0400 Received: from frontend02.mail.m-online.net (unknown [192.168.8.183]) by mail-out.m-online.net (Postfix) with ESMTP id 3nZlK95bNqz3hjBF; Tue, 13 Oct 2015 07:09:01 +0200 (CEST) Received: from localhost (dynscan2.mnet-online.de [192.168.6.69]) by mail.m-online.net (Postfix) with ESMTP id 3nZlK93ty2zvdWV; Tue, 13 Oct 2015 07:09:01 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.184]) by localhost (dynscan2.mail.m-online.net [192.168.6.69]) (amavisd-new, port 10024) with ESMTP id J6Z9JZFEtBxY; Tue, 13 Oct 2015 07:09:00 +0200 (CEST) X-Auth-Info: 8q+SPvtPmWN8xmh4uxngsAPU9SNgXFS1kaAttuWvDhc= Received: from mail-internal.denx.de (host-82-135-33-74.customer.m-online.net [82.135.33.74]) by smtp-auth.mnet-online.de (Postfix) with ESMTPA; Tue, 13 Oct 2015 07:09:00 +0200 (CEST) Received: from pollux.denx.de (pollux [192.168.1.1]) by mail-internal.denx.de (Postfix) with ESMTP id 1D5C634332A; Tue, 13 Oct 2015 07:09:00 +0200 (CEST) Received: by pollux.denx.de (Postfix, from userid 515) id B44EDF1FA; Tue, 13 Oct 2015 07:08:59 +0200 (CEST) From: Heiko Schocher To: linux-kernel@vger.kernel.org Cc: Heiko Schocher , Alexandre Belloni , Georg.Soffel@bosch-si.com, rtc-linux@googlegroups.com, Alessandro Zummo , devicetree@vger.kernel.org Subject: [PATCH] rtc: pcf8563: disable CLKOUT Date: Tue, 13 Oct 2015 07:08:58 +0200 Message-Id: <1444712938-22865-1-git-send-email-hs@denx.de> X-Mailer: git-send-email 2.1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Disable the CLKOUT of the RTC after power-up. After power-up/reset of the RTC, CLKOUT is enabled by default, with CLKOUT enabled the RTC chip has 2-3 times higher power consumption. If you do not need CLKOUT, you can disable the CLKOUT with setting "disable-clkout" property. Signed-off-by: Heiko Schocher --- Documentation/devicetree/bindings/rtc/pcf8563.txt | 22 ++++++++++++++ drivers/rtc/rtc-pcf8563.c | 37 +++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 Documentation/devicetree/bindings/rtc/pcf8563.txt diff --git a/Documentation/devicetree/bindings/rtc/pcf8563.txt b/Documentation/devicetree/bindings/rtc/pcf8563.txt new file mode 100644 index 0000000..36f49e1 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/pcf8563.txt @@ -0,0 +1,22 @@ +* Philips PCF8563/Epson RTC8564 Real Time Clock + +Philips PCF8563/Epson RTC8564 Real Time Clock + +Required properties: +see: Documentation/devicetree/bindings/i2c/trivial-devices.txt + +Optional property: +- disable-clkout: + disable the CLKOUT of the RTC after power-up. + After power-up/reset of the RTC, CLKOUT is enabled by default, + with CLKOUT enabled the RTC chip has 2-3 times higher power + consumption. If you not need CLKOUT, you can disable the CLKOUT + with setting this property. + +Example: + +pcf8563@51 { + compatible = "nxp,pcf8563"; + reg = <0x51>; + disable-clkout; +}; diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c index e569243..fa9a412 100644 --- a/drivers/rtc/rtc-pcf8563.c +++ b/drivers/rtc/rtc-pcf8563.c @@ -53,6 +53,7 @@ #define PCF8563_SC_LV 0x80 /* low voltage */ #define PCF8563_MO_C 0x80 /* century */ +#define PCF8563_CLKOUT 0x80 /* CLKOUT */ static struct i2c_driver pcf8563_driver; @@ -74,6 +75,7 @@ struct pcf8563 { */ int c_polarity; /* 0: MO_C=1 means 19xx, otherwise MO_C=1 means 20xx */ int voltage_low; /* incicates if a low_voltage was detected */ + int disable_clkout; struct i2c_client *client; }; @@ -186,6 +188,33 @@ static irqreturn_t pcf8563_irq(int irq, void *dev_id) return IRQ_NONE; } +static int pcf8563_disable_clkout(struct i2c_client *client) +{ + struct pcf8563 *pcf8563 = i2c_get_clientdata(client); + unsigned char buf; + int err; + + if (!pcf8563->disable_clkout) + return 0; + + err = pcf8563_read_block_data(client, PCF8563_REG_CLKO, 1, &buf); + if (err) + return err; + + if (buf & PCF8563_CLKOUT) { + buf = 0x00; + dev_warn(&client->dev, "CLKOUT enabled! Disabling it...\n"); + err = pcf8563_write_block_data(client, PCF8563_REG_CLKO, 1, + &buf); + if (err < 0) + dev_err(&client->dev, "could not disable clock\n"); + } else { + dev_info(&client->dev, "CLKOUT disabled.\n"); + } + + return 0; +} + /* * In the routines that deal directly with the pcf8563 hardware, we use * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch. @@ -235,6 +264,7 @@ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm) tm->tm_sec, tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); + pcf8563_disable_clkout(client); return 0; } @@ -406,6 +436,9 @@ static int pcf8563_probe(struct i2c_client *client, int err; unsigned char buf; unsigned char alm_pending; +#ifdef CONFIG_OF + int len; +#endif dev_dbg(&client->dev, "%s\n", __func__); @@ -419,6 +452,10 @@ static int pcf8563_probe(struct i2c_client *client, dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n"); +#ifdef CONFIG_OF + if (of_find_property(client->dev.of_node, "disable-clkout", &len)) + pcf8563->disable_clkout = 1; +#endif i2c_set_clientdata(client, pcf8563); pcf8563->client = client; device_set_wakeup_capable(&client->dev, 1);