From patchwork Sat Dec 27 17:52:55 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaro Koskinen X-Patchwork-Id: 5544841 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (unknown [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5CAE8BF6C3 for ; Sat, 27 Dec 2014 21:37:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6E5052015A for ; Sat, 27 Dec 2014 21:36:55 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 530A020173 for ; Sat, 27 Dec 2014 21:36:34 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Y4vZB-0004mj-Vx; Sat, 27 Dec 2014 17:54:17 +0000 Received: from filtteri2.pp.htv.fi ([213.243.153.185]) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Y4vYb-0004XF-4r for linux-arm-kernel@lists.infradead.org; Sat, 27 Dec 2014 17:53:43 +0000 Received: from localhost (localhost [127.0.0.1]) by filtteri2.pp.htv.fi (Postfix) with ESMTP id 4F7A219BE61; Sat, 27 Dec 2014 19:53:15 +0200 (EET) X-Virus-Scanned: Debian amavisd-new at pp.htv.fi Received: from smtp5.welho.com ([213.243.153.39]) by localhost (filtteri2.pp.htv.fi [213.243.153.185]) (amavisd-new, port 10024) with ESMTP id nvn-EvPVX3BN; Sat, 27 Dec 2014 19:53:08 +0200 (EET) Received: from amd-fx-6350.bb.dnainternet.fi (91-145-91-118.bb.dnainternet.fi [91.145.91.118]) by smtp5.welho.com (Postfix) with ESMTP id 9D3825BC006; Sat, 27 Dec 2014 19:53:08 +0200 (EET) From: Aaro Koskinen To: Tony Lindgren , Samuel Ortiz , Lee Jones , devicetree@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 3/7] mfd: menelaus: add initial DT support Date: Sat, 27 Dec 2014 19:52:55 +0200 Message-Id: <1419702779-16001-4-git-send-email-aaro.koskinen@iki.fi> X-Mailer: git-send-email 2.2.0 In-Reply-To: <1419702779-16001-1-git-send-email-aaro.koskinen@iki.fi> References: <1419702779-16001-1-git-send-email-aaro.koskinen@iki.fi> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20141227_095341_607434_EB49652F X-CRM114-Status: GOOD ( 14.48 ) X-Spam-Score: 0.7 (/) Cc: Aaro Koskinen X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=unavailable 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 Add initial DT support. Signed-off-by: Aaro Koskinen --- Documentation/devicetree/bindings/mfd/menelaus.txt | 30 +++++++++++++ drivers/mfd/menelaus.c | 52 ++++++++++++++++++++-- 2 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 Documentation/devicetree/bindings/mfd/menelaus.txt diff --git a/Documentation/devicetree/bindings/mfd/menelaus.txt b/Documentation/devicetree/bindings/mfd/menelaus.txt new file mode 100644 index 0000000..5f69f23 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/menelaus.txt @@ -0,0 +1,30 @@ +Menelaus (Texas Instruments TWL92330) Power Management chip + +Menelaus provides facilities to control the power resources. + +Required properties: +- compatible: must be "menelaus" +- reg: I2C address of the chip + +Optional properties: +- interrupts: the interrupt +- ti,autosleep: All regulators are put to sleep by default. +- ti,vcore-min-microvolt: Range floor for the HW controlled VCORE +- ti,vcore-max-microvolt: Range roof for the HW controlled VCORE + +The use of ti,autosleep is recommended at least on Nokia N800/N810. + +Example: + +&i2c1 { + clock-frequency = <400000>; + + pmic@72 { + compatible = "menelaus"; + reg = <0x72>; + interrupts = <7 IRQ_TYPE_EDGE_RISING>; + ti,autosleep; + ti,vcore-min-microvolt = <1050000>; + ti,vcore-max-microvolt = <1400000>; + }; +}; diff --git a/drivers/mfd/menelaus.c b/drivers/mfd/menelaus.c index 917fa86..3e04c64 100644 --- a/drivers/mfd/menelaus.c +++ b/drivers/mfd/menelaus.c @@ -16,6 +16,8 @@ * Amit Kucheria * Copyright (C) 2005, 2006 Nokia Corporation * + * Cleanups and DT modifications by Aaro Koskinen . + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -767,6 +769,22 @@ out: return ret; } +static int menelaus_auto_sleep_regulators(void) +{ + u32 val; + int ret; + + val = EN_VPLL_SLEEP | EN_VMMC_SLEEP | EN_VAUX_SLEEP | EN_VIO_SLEEP | \ + EN_VMEM_SLEEP | EN_DC3_SLEEP | EN_VC_SLEEP | EN_DC2_SLEEP; + ret = menelaus_set_regulator_sleep(1, val); + if (ret < 0) { + dev_err(&the_menelaus->client->dev, + "could not set regulators to sleep: %d\n", ret); + return ret; + } + return 0; +} + /*-----------------------------------------------------------------------*/ /* Handles Menelaus interrupts. Does not run in interrupt context */ @@ -1162,6 +1180,7 @@ static int menelaus_probe(struct i2c_client *client, struct menelaus_chip *menelaus; int rev = 0; int err = 0; + struct device_node *np = client->dev.of_node; struct menelaus_platform_data *menelaus_pdata = dev_get_platdata(&client->dev); @@ -1221,10 +1240,35 @@ static int menelaus_probe(struct i2c_client *client, else menelaus->vcore_hw_mode = 0; - if (menelaus_pdata != NULL && menelaus_pdata->late_init != NULL) { - err = menelaus_pdata->late_init(&client->dev); - if (err < 0) - goto fail; + if (menelaus_pdata != NULL) { + if (menelaus_pdata->late_init != NULL) { + err = menelaus_pdata->late_init(&client->dev); + if (err < 0) + goto fail; + } + } else if (np) { + u32 vcore_min; + u32 vcore_max; + + if (!of_property_read_u32(np, "ti,vcore-min-microvolt", + &vcore_min) && + !of_property_read_u32(np, "ti,vcore-max-microvolt", + &vcore_max)) { + err = menelaus_set_vcore_hw(vcore_max / 1000, + vcore_min / 1000); + if (err < 0) { + dev_err(&client->dev, + "could not set VCORE voltage: %d\n", + err); + goto fail; + } + } + + if (of_property_read_bool(np, "ti,autosleep")) { + err = menelaus_auto_sleep_regulators(); + if (err < 0) + goto fail; + } } menelaus_rtc_init(menelaus);