From patchwork Mon Feb 12 13:17:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 128079 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp3203769ljc; Mon, 12 Feb 2018 05:21:12 -0800 (PST) X-Google-Smtp-Source: AH8x226dtTEWucSb0dXyzICpsp7zmpOhxx88aW2dW8uWIu6OqOfJECdvyL3e7M0mp6ZAyohoRks7 X-Received: by 2002:a17:902:bd4b:: with SMTP id b11-v6mr10895366plx.313.1518441671899; Mon, 12 Feb 2018 05:21:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518441671; cv=none; d=google.com; s=arc-20160816; b=UXwAVfQsE11ygLMzUY0b09KWewGrQLBfQxnF3DW60lJR9H68+aa55iRxQMfeqf0Rp+ ms8Wy7jtzSTLhKQ1n5uZ49QYKnx8UXoZl4Rc1sWTcUyZ19ozpLYRa1xiiFSby13AUS+k soc9Nm0r5u/9QtgUA4qL9p4IX61zMr+XYMMVumuCcSArfFZ0Sgu8sFQxbaFqh7B/D2p3 o7LnrAIKgjh8M5pGvFLUjLVbTF6u4046Hp/3kOdaX3hO003Q6eXsvVzjMlmtoXIU+38B 4UbLFoNL6vPy03AlBxUYHyeDLwwEUu7zDMo7UDwUg0gVk9dwkGa71kEOyItJ+tFNy/uK NLwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=YiZdEOCFlF79yfcnzgpzX9bHqa8whfm3Uxmhu0W1E5E=; b=nVzZUGQfbHkVFjUhuP18LgqZTcaSzuFbnZA7ZRUQgjHDQsIc17PqvgB1TIC7DisRb9 Xk9yqKvOX42BCR5AheEmZfLEY4gFsZzSedH9D+Oyd01OuPfNzHxHLnDdZHlzjEBGLian vnU0rgG3827WwKIl4MSrXcG1GSquIaG8tAoe3WBAe96MsydCaMB7Rm14Na3nhI9P6M7g aKSnL8icXklWJWnU8RT6Jh6vdXGglYGdmBbUzGUHQEBtCDUeR8SRRSU4/J1XbDzr2FD8 PwYJ26Y5WAqWAlcIAU+1V4m1OFqbPF96T0nVL6QJn9zoTUpH9tWXu0ExtibbHPE2Lzmy QYgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QFu1Zoe4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si2769133pff.155.2018.02.12.05.21.11; Mon, 12 Feb 2018 05:21:11 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QFu1Zoe4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935442AbeBLNUx (ORCPT + 13 others); Mon, 12 Feb 2018 08:20:53 -0500 Received: from mail-lf0-f68.google.com ([209.85.215.68]:32951 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935269AbeBLNRx (ORCPT ); Mon, 12 Feb 2018 08:17:53 -0500 Received: by mail-lf0-f68.google.com with SMTP id j193so4413422lfe.0 for ; Mon, 12 Feb 2018 05:17:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YiZdEOCFlF79yfcnzgpzX9bHqa8whfm3Uxmhu0W1E5E=; b=QFu1Zoe4QNU0q1LGAT0eao6EgwRFFXQRAuBFchQLH/EjHIOAmMUGCZ1Jqj6Tgxay64 3su84k8lJeFcGlxoL8Lspd+cp4KXcYN5WU7Z3opu+jOVqhCuPt+0Axw2ElQU3IXB1qc0 33J1U1GIVhkoyHdJbsuOMIiWCRAbX1cG923M8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YiZdEOCFlF79yfcnzgpzX9bHqa8whfm3Uxmhu0W1E5E=; b=dRQwh21/RaI+NGZRYTqvC0Rc6lrBoiHMeoZgN7QMYvM+wItq/S7PdMyVlx0Uagh585 9Vr/7e87KUkqr1l13lQH2YhFM0+i38t7h9zO4WrdXeRWG8KzI3q081BDi+/7yc8H2L2a UhNZohaLuC1w7ohorh/X5sSfKO1HIN6OTvhEgyBS5ID8Jp/Dj0OCQrQhbJDEp6wemnb0 TSKbFIsw5ym5uRojhv/Uo238hJ0piyeIj14VoKxZ3W6aLZA4Ch/aLU7YTOwUUBhUiBBL NGyKCCKy3CucoU5fUL3w4YhIITkpyA5CRvYZuh0gx4KHNwuew2RRVjgmk7tHty+iGbtM Tl/Q== X-Gm-Message-State: APf1xPAFWUKM2ukzvFWiKOFMgg4FfOmCcygtG8S47tiBGhvcwQpJFYdj SigEqozuw6n7MXrpxHJCXN7q4Q== X-Received: by 10.25.24.203 with SMTP id 72mr4951407lfy.132.1518441471731; Mon, 12 Feb 2018 05:17:51 -0800 (PST) Received: from genomnajs.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id r88sm1584648lje.30.2018.02.12.05.17.50 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 12 Feb 2018 05:17:51 -0800 (PST) From: Linus Walleij To: Liam Girdwood , Mark Brown Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Linus Walleij , Milo Kim , Lee Jones Subject: [PATCH 10/21] regulator: lp8788-ldo: Pass descriptor instead of GPIO number Date: Mon, 12 Feb 2018 14:17:06 +0100 Message-Id: <20180212131717.27193-11-linus.walleij@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180212131717.27193-1-linus.walleij@linaro.org> References: <20180212131717.27193-1-linus.walleij@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Instead of passing a global GPIO number, pass a descriptor looked up with the standard devm_gpiod_get_index_optional() call. This driver has supported passing a LDO enable GPIO for years, yet this facility has never been put to use in the upstream kernel. If someone desires to put in place GPIO control for the LDOs, this can be done by adding a GPIO descriptor table in the MFD nexus in drivers/mfd/lp8788.c for the LDO device when spawning the MFD children, or using a board file. Cc: Milo Kim Cc: Lee Jones Signed-off-by: Linus Walleij --- Lee: would be nice if you could ACK this smallish patch to the MFD header. --- drivers/regulator/lp8788-ldo.c | 32 ++++++++++++++++---------------- include/linux/mfd/lp8788.h | 16 ---------------- 2 files changed, 16 insertions(+), 32 deletions(-) -- 2.14.3 Acked-by: Lee Jones diff --git a/drivers/regulator/lp8788-ldo.c b/drivers/regulator/lp8788-ldo.c index cbfd35873575..f2347474a106 100644 --- a/drivers/regulator/lp8788-ldo.c +++ b/drivers/regulator/lp8788-ldo.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include /* register address */ @@ -85,8 +85,6 @@ #define LP8788_STARTUP_TIME_S 3 #define ENABLE_TIME_USEC 32 -#define ENABLE GPIOF_OUT_INIT_HIGH -#define DISABLE GPIOF_OUT_INIT_LOW enum lp8788_ldo_id { DLDO1, @@ -117,7 +115,7 @@ struct lp8788_ldo { struct lp8788 *lp; struct regulator_desc *desc; struct regulator_dev *regulator; - struct lp8788_ldo_enable_pin *en_pin; + struct gpio_desc *ena_gpiod; }; /* DLDO 1, 2, 3, 9 voltage table */ @@ -469,7 +467,6 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, enum lp8788_ldo_id id) { struct lp8788 *lp = ldo->lp; - struct lp8788_platform_data *pdata = lp->pdata; enum lp8788_ext_ldo_en_id enable_id; u8 en_mask[] = { [EN_ALDO1] = LP8788_EN_SEL_ALDO1_M, @@ -504,11 +501,18 @@ static int lp8788_config_ldo_enable_mode(struct platform_device *pdev, return 0; } - /* if no platform data for ldo pin, then set default enable mode */ - if (!pdata || !pdata->ldo_pin || !pdata->ldo_pin[enable_id]) + /* FIXME: check default mode for GPIO here: high or low? */ + ldo->ena_gpiod = devm_gpiod_get_index_optional(&pdev->dev, + "enable", + enable_id, + GPIOD_OUT_HIGH); + if (IS_ERR(ldo->ena_gpiod)) + return PTR_ERR(ldo->ena_gpiod); + + /* if no GPIO for ldo pin, then set default enable mode */ + if (!ldo->ena_gpiod) goto set_default_ldo_enable_mode; - ldo->en_pin = pdata->ldo_pin[enable_id]; return 0; set_default_ldo_enable_mode: @@ -533,10 +537,8 @@ static int lp8788_dldo_probe(struct platform_device *pdev) if (ret) return ret; - if (ldo->en_pin) { - cfg.ena_gpio = ldo->en_pin->gpio; - cfg.ena_gpio_flags = ldo->en_pin->init_state; - } + if (ldo->ena_gpiod) + cfg.ena_gpiod = ldo->ena_gpiod; cfg.dev = pdev->dev.parent; cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL; @@ -582,10 +584,8 @@ static int lp8788_aldo_probe(struct platform_device *pdev) if (ret) return ret; - if (ldo->en_pin) { - cfg.ena_gpio = ldo->en_pin->gpio; - cfg.ena_gpio_flags = ldo->en_pin->init_state; - } + if (ldo->ena_gpiod) + cfg.ena_gpiod = ldo->ena_gpiod; cfg.dev = pdev->dev.parent; cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL; diff --git a/include/linux/mfd/lp8788.h b/include/linux/mfd/lp8788.h index 786bf6679a28..2010e0de3e34 100644 --- a/include/linux/mfd/lp8788.h +++ b/include/linux/mfd/lp8788.h @@ -181,20 +181,6 @@ struct lp8788_buck2_dvs { enum lp8788_dvs_sel vsel; }; -/* - * struct lp8788_ldo_enable_pin - * - * Basically, all LDOs are enabled through the I2C commands. - * But ALDO 1 ~ 5, 7, DLDO 7, 9, 11 can be enabled by external gpio pins. - * - * @gpio : gpio number which is used for enabling ldos - * @init_state : initial gpio state (ex. GPIOF_OUT_INIT_LOW) - */ -struct lp8788_ldo_enable_pin { - int gpio; - int init_state; -}; - /* * struct lp8788_chg_param * @addr : charging control register address (range : 0x11 ~ 0x1C) @@ -288,7 +274,6 @@ struct lp8788_vib_platform_data { * @aldo_data : regulator initial data for analog ldo * @buck1_dvs : gpio configurations for buck1 dvs * @buck2_dvs : gpio configurations for buck2 dvs - * @ldo_pin : gpio configurations for enabling LDOs * @chg_pdata : platform data for charger driver * @alarm_sel : rtc alarm selection (1 or 2) * @bl_pdata : configurable data for backlight driver @@ -306,7 +291,6 @@ struct lp8788_platform_data { struct regulator_init_data *aldo_data[LP8788_NUM_ALDOS]; struct lp8788_buck1_dvs *buck1_dvs; struct lp8788_buck2_dvs *buck2_dvs; - struct lp8788_ldo_enable_pin *ldo_pin[EN_LDOS_MAX]; /* charger */ struct lp8788_charger_platform_data *chg_pdata;