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: 424238 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 D67F81400D2 for ; Sun, 28 Dec 2014 04:53:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751243AbaL0RxW (ORCPT ); Sat, 27 Dec 2014 12:53:22 -0500 Received: from filtteri2.pp.htv.fi ([213.243.153.185]:45576 "EHLO filtteri2.pp.htv.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751276AbaL0RxR (ORCPT ); Sat, 27 Dec 2014 12:53:17 -0500 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 Cc: Aaro Koskinen 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> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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);