From patchwork Sun Apr 22 23:07:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 133943 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp369790lji; Sun, 22 Apr 2018 16:12:30 -0700 (PDT) X-Google-Smtp-Source: AIpwx4844DtCUR8ZHaZ/kjUDkrSlQV6ppk1sxYUnHP12oHyaUGn/2Xhj+onER2lzR5ySYr3nfDvI X-Received: by 2002:a17:902:9686:: with SMTP id n6-v6mr18222618plp.136.1524438750707; Sun, 22 Apr 2018 16:12:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524438750; cv=none; d=google.com; s=arc-20160816; b=Tv/sYtcuhzFiwczOoqQeDP0rQ2sjWzT4TWhN5lJOqrp2+EQTQBCwCB/7EUXfMrl6aA 4G85ZfAyQy4ZZ7nGnbMxiHlrwEdxCgFP16IAVhwECRHmxecR3tE2sUgfleYQ/VysBa3y ZhMKYY0a8CPtmSp0MqE7O2p8kvzW281bfIez3rme+F0n593N1RVph4BC387HazVm2tuK t6B1Vx3HXDpnUuOHcQ/PVbNsXCOAFjJrlZ5OISBmQpxxQr0EvxwiGWg+35oGUJaAL/yt zMlDxjkT26KMiDhas+Z1bRbpyTtwW/SjAaAVUeOwMkZpTdE8TxCtDVYKV/wMxNwo4zPW BT8w== 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=0dkYm0FyKOuoGNcZrW878Dd5CgLT6V0eE7UMIOGpD9U=; b=aFWbhzraKEtsKG5auSkESP8aZBBEygsug+mdd5G0YO23fZ2xbkKIoWWX75jGIo8v2s X7KsFevV2IuRqxfn2W3Zr0ZosLCJqpF+oPwnfNfMqfdcf17W44ZfpY9mVwk1EEyCw0a2 lB4e5DmYeGpPQKU4JPHHPk7JkNViQdobFdL67gl6o5kaAMhVNAE7XVQ1DXM7MuUs2+Q3 Ou1L2piNGsr1YK615OJpq+RVtMT5Q1z0mGSBJuF0XoaEIY0haEg01NGS9VsQbD5Zhh4n ZDp7Xe58gcNwAhgb7RfvfZ/PMy1MWxUTacpo4T5KU2QS03cOTdMavGP/KBiGys3iIgDB MvrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Fvaaiu+T; 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 h14-v6si11488160plk.535.2018.04.22.16.12.30; Sun, 22 Apr 2018 16:12:30 -0700 (PDT) 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=Fvaaiu+T; 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 S1754099AbeDVXMZ (ORCPT + 29 others); Sun, 22 Apr 2018 19:12:25 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:45818 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753707AbeDVXKH (ORCPT ); Sun, 22 Apr 2018 19:10:07 -0400 Received: by mail-lf0-f66.google.com with SMTP id q5-v6so12197933lff.12 for ; Sun, 22 Apr 2018 16:10:06 -0700 (PDT) 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=0dkYm0FyKOuoGNcZrW878Dd5CgLT6V0eE7UMIOGpD9U=; b=Fvaaiu+Tn7dH/8N4VbTsiH/vABjT2DzCyL09Kc7pBuEbgmP9pyP/hkNmOlKiX2HYuh 0Zlgf4dyKScB6vaOi0/U7RmDtyLXVWfHm+7MbEpWKeMURMaBZKX5TFQFJmGT0owPDN2Q It3AT0CXp10fyoOF6dSCPPhiRQLEZGDilyzfg= 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=0dkYm0FyKOuoGNcZrW878Dd5CgLT6V0eE7UMIOGpD9U=; b=UBxWZiUhDvF/U7pISLjVObduWkvbJyUOuJJNKa7eYEjZivpx5LCRTpkjWDy/qXvLnI rD2mXeD3ZcdeXQNnc4EvBV9Wz2HNOVGfnF7LzSun1XK6jyk/eqs1wa0hGPdR+DY39BZ1 Xro2xv5eGT2CT5WGH/sL+b6VI5dkyoF1JoT642OHXuVGkIA/6Nr4ShcHh5EV4W7HrFNs vowO4QMIPvWwBKD5befcY4ENBnahgopuhkdTOwQDjNU4bGCYjNerkt/uVKuwVsRxIZQc ykU7XMG5UxKI8n3OSTjia6rdqEg+aqCRi/GmoAsvon+ji5I/RlpBQascvYZjRuOQimcT hSgw== X-Gm-Message-State: ALQs6tCSkryI1zFcjl6TeMTpe8SovXdwnuzzHnT+MR9WfOdnnEpWzmOL V5P91lfViTCbNWtQDJAiwnHrlg== X-Received: by 2002:a19:1d84:: with SMTP id d126-v6mr7744956lfd.100.1524438605446; Sun, 22 Apr 2018 16:10:05 -0700 (PDT) Received: from localhost.localdomain (c-ae7b71d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.123.174]) by smtp.gmail.com with ESMTPSA id r25sm2036291ljc.8.2018.04.22.16.10.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Apr 2018 16:10:04 -0700 (PDT) From: Linus Walleij To: Liam Girdwood , Mark Brown Cc: linux-kernel@vger.kernel.org, Linus Walleij , Milo Kim Subject: [PATCH 07/18 v2] regulator: lp8788-ldo: Pass descriptor instead of GPIO number Date: Mon, 23 Apr 2018 01:07:31 +0200 Message-Id: <20180422230742.3729-7-linus.walleij@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180422230742.3729-1-linus.walleij@linaro.org> References: <20180422230742.3729-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 Acked-by: Lee Jones Signed-off-by: Linus Walleij --- ChangeLog v1->v2: - Rebase the patch on the other changes. - Collect Lee's ACK. --- drivers/regulator/lp8788-ldo.c | 32 ++++++++++++++++---------------- include/linux/mfd/lp8788.h | 16 ---------------- 2 files changed, 16 insertions(+), 32 deletions(-) -- 2.14.3 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;