From patchwork Mon Apr 17 22:40:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Fischer X-Patchwork-Id: 751582 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 3w6NWX6Znkz9s73 for ; Tue, 18 Apr 2017 08:40:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754452AbdDQWkX (ORCPT ); Mon, 17 Apr 2017 18:40:23 -0400 Received: from mail.kernel.org ([198.145.29.136]:44516 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751895AbdDQWkW (ORCPT ); Mon, 17 Apr 2017 18:40:22 -0400 Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1C0E320114; Mon, 17 Apr 2017 22:40:21 +0000 (UTC) Received: from tyrael.amer.corp.natinst.com (207-114-172-147.static.twtelecom.net [207.114.172.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E49C7200DC; Mon, 17 Apr 2017 22:40:19 +0000 (UTC) From: Moritz Fischer To: rtc-linux@googlegroups.com Cc: devicetree@vger.kernel.org, a.zummo@towertech.it, alexandre.belloni@free-electrons.com, robh+dt@kernel.org, mark.rutland@arm.com, Moritz Fischer Subject: [PATCH] rtc: ds1374: Add trickle charger device tree binding Date: Mon, 17 Apr 2017 15:40:10 -0700 Message-Id: <1492468810-17224-1-git-send-email-mdf@kernel.org> X-Mailer: git-send-email 2.7.4 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Introduce a device tree binding for specifying the trickle charger configuration for ds1374. This is based on the code for ds13390. Signed-off-by: Moritz Fischer --- .../devicetree/bindings/rtc/dallas,ds1374.txt | 18 ++++++++ drivers/rtc/rtc-ds1374.c | 54 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 Documentation/devicetree/bindings/rtc/dallas,ds1374.txt diff --git a/Documentation/devicetree/bindings/rtc/dallas,ds1374.txt b/Documentation/devicetree/bindings/rtc/dallas,ds1374.txt new file mode 100644 index 0000000..4cf5bd7 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/dallas,ds1374.txt @@ -0,0 +1,18 @@ +* Dallas DS1374 I2C Real-Time Clock / WDT + +Required properties: +- compatible: Should contain "dallas,ds1374". +- reg: I2C address for chip + +Optional properties: +- trickle-resistor-ohms : Selected resistor for trickle charger + Values usable for ds1374 are 250, 2000, 4000 + Should be given if trickle charger should be enabled +- trickle-diode-disable : Do not use internal trickle charger diode + Should be given if internal trickle charger diode should be disabled +Example: + ds1374: rtc@0 { + compatible = "dallas,ds1374"; + trickle-resistor-ohms = <250>; + reg = <0>; + }; diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 4cd115e..873475d 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c @@ -53,6 +53,13 @@ #define DS1374_REG_SR_AF 0x01 /* Alarm Flag */ #define DS1374_REG_TCR 0x09 /* Trickle Charge */ +#define DS1374_TRICKLE_CHARGER_ENABLE 0xA0 +#define DS1374_TRICKLE_CHARGER_250_OHM 0x01 +#define DS1374_TRICKLE_CHARGER_2K_OHM 0x02 +#define DS1374_TRICKLE_CHARGER_4K_OHM 0x03 +#define DS1374_TRICKLE_CHARGER_NO_DIODE 0x04 +#define DS1374_TRICKLE_CHARGER_DIODE 0x08 + static const struct i2c_device_id ds1374_id[] = { { "ds1374", 0 }, { } @@ -597,6 +604,49 @@ static struct notifier_block ds1374_wdt_notifier = { }; #endif /*CONFIG_RTC_DRV_DS1374_WDT*/ + +static int ds1374_trickle_of_init(struct i2c_client *client) +{ + u32 ohms = 0; + u8 value; + int ret; + + if (of_property_read_u32(client->dev.of_node, "trickle-resistor-ohms", + &ohms)) + return 0; + + /* Enable charger */ + value = DS1374_TRICKLE_CHARGER_ENABLE; + if (of_property_read_bool(client->dev.of_node, "trickle-diode-disable")) + value |= DS1374_TRICKLE_CHARGER_NO_DIODE; + else + value |= DS1374_TRICKLE_CHARGER_DIODE; + + /* Resistor select */ + switch (ohms) { + case 250: + value |= DS1374_TRICKLE_CHARGER_250_OHM; + break; + case 2000: + value |= DS1374_TRICKLE_CHARGER_2K_OHM; + break; + case 4000: + value |= DS1374_TRICKLE_CHARGER_4K_OHM; + break; + default: + dev_warn(&client->dev, + "Unsupported ohm value %02ux in dt\n", ohms); + return -EINVAL; + } + dev_dbg(&client->dev, "Trickle charge value is 0x%02x\n", value); + + ret = i2c_smbus_write_byte_data(client, DS1374_REG_TCR, value); + if (ret < 0) + return ret; + + return 0; +} + /* ***************************************************************************** * @@ -620,6 +670,10 @@ static int ds1374_probe(struct i2c_client *client, INIT_WORK(&ds1374->work, ds1374_work); mutex_init(&ds1374->mutex); + ret = ds1374_trickle_of_init(client); + if (ret) + return ret; + ret = ds1374_check_rtc_status(client); if (ret) return ret;