From patchwork Sun Apr 22 23:07:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 133929 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp368204lji; Sun, 22 Apr 2018 16:10:13 -0700 (PDT) X-Google-Smtp-Source: AIpwx481G6B8+TrCl/Z6Zvknuamq3T++x5ZTbYN/x7+FGapP66eRukJ6iu9wU292vIb7IWX2Cyul X-Received: by 10.98.37.197 with SMTP id l188mr17709255pfl.17.1524438613547; Sun, 22 Apr 2018 16:10:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524438613; cv=none; d=google.com; s=arc-20160816; b=Vwh4IDT4Kex74iW4MACdAN63hn7FGjfa1aeFhL01uibJxTh0D+Pj3GDQ0foNBUuW0M q4gpn2evRFA8PuX0eheosDQu4DWZpMNh1T5v4ta3Ce/LMEw8p3CiPBU0eVjlAEU236oO /KJF22SgXulm3NR1y4KehkrfaU4qW4eqftHmtZMnde+Cm00pYMTc1rbv8QxwQAvACEpJ nRZEcOh6hicKuwDY21M0Hk1KmcH3m2JO6aqAkWjL46PAJfPpnwch/Uf+jSOVyuwwzudt UpYm/gGd64pl2uJ6hxRc+lVaSq77VHvsy0FAmcs6c2YZ0eppAiQ/tNrhXhzdsC7gNkVS 1lUQ== 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=1ayiMYopnzJbCAZbC1rEU8BWk/oZGPxqhuOFp1zmtXo=; b=FTXRQ9r2FYBNBa+iiL255gHlIs2/HAbYKgBjdi4iKzSzVh2Mov4RwqpUfGf4HT3INI nG0dw3Oh4Ec2oyfbwIEZJUTSbGpJb/kVj7BDTSoMF/4UejAh6Wt61rncfy3h1GhWkeGL SVXpyWsQ3TiWoYw4EwJAPunJ01xA2GGhceePVqpNqFISG0T/6YMWWrsoFbH09l6WNNOF ZL2CeKT8Gc6n/e6EbpShEbdeAnYKPIDKZAARYuV8qAJBdV9/Jxg+4EYomb0pU5srPt8f JFq9sYWFAxlqqFhZaVBZwKEt4EfWFZkfsKcIOG1cDxCuGncdqS1ON2LRr3uYM1OD86p9 FKDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RxCqafgX; 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 k10si7616465pgs.304.2018.04.22.16.10.13; Sun, 22 Apr 2018 16:10:13 -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=RxCqafgX; 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 S1753830AbeDVXKC (ORCPT + 29 others); Sun, 22 Apr 2018 19:10:02 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:43723 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753670AbeDVXJ4 (ORCPT ); Sun, 22 Apr 2018 19:09:56 -0400 Received: by mail-lf0-f66.google.com with SMTP id v207-v6so12174318lfa.10 for ; Sun, 22 Apr 2018 16:09:55 -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=1ayiMYopnzJbCAZbC1rEU8BWk/oZGPxqhuOFp1zmtXo=; b=RxCqafgXTOCQdpM5qqB1V1U4kqJtHi6aEXZYLAh8uxDG8Hw9eRLQqG2yL6dcz7fRSK lAouW11LlID89af/2t+UqkQLPWXTU2UgvoNmJuno2ApywixrxcRCA4FzVbm/zZ7XtH6r GpEN9nbqs9JOUlRXwEUcERjkMrEZTZdzB/jxE= 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=1ayiMYopnzJbCAZbC1rEU8BWk/oZGPxqhuOFp1zmtXo=; b=CRBSi0Ngmuw5WmKqALmj4ITtWocJ+ktO3wv5vnybdqiFvIJjMGXDptJQhCngDhjCQ1 88tqhkZHg67To5jsVgWb8Ds47LaIOcFrqx26KtkEJByONSMGsVmpr4/V3Rt4Dkntestz RDYo2v/SDX4dWn1+G1kiLw/OphOYfiNhRR1uFd2ioUgKlNiq2aZkTdgtWFaBhuH7KYUV 7/5CztrrC6cfezGTc7aRUByhJiYim7zZLWs2So5ZXqMJW3kbW9nDVrOGfctJDPKHDP39 FRjWeMoVUyhpUzOZF05w7CLV47Lo5uVdcphWRhVyLdQ0FLQdtDsfSzqD58ZuyvjOyAwZ tMkA== X-Gm-Message-State: ALQs6tDkbem2wTsT7NnEHsaia8CVgh5KxXvVXV43GZgznBpsIRn++iRK e2zzOmcgyMG1ii2WzlgcEo0Tuw== X-Received: by 2002:a19:2a88:: with SMTP id q8-v6mr7226681lfq.79.1524438594612; Sun, 22 Apr 2018 16:09:54 -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.09.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Apr 2018 16:09:53 -0700 (PDT) From: Linus Walleij To: Liam Girdwood , Mark Brown Cc: linux-kernel@vger.kernel.org, Linus Walleij , Philipp Zabel Subject: [PATCH 02/18 v2] regulator: gpio: Get enable GPIO using GPIO descriptor Date: Mon, 23 Apr 2018 01:07:26 +0200 Message-Id: <20180422230742.3729-2-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 We augment the GPIO regulator to get the *enable* regulator GPIO line (not the other lines) using a descriptor rather than a global number. We then pass this into the regulator core which has been prepared to hande enable descriptors in a separate patch. Switch over the two boardfiles using this facility and clean up so we only pass descriptors around. Cc: Philipp Zabel # HX4700/Magician maintainer Signed-off-by: Linus Walleij --- ChangeLog v1->v2: - Rebase the patch on the other changes. --- arch/arm/mach-pxa/hx4700.c | 12 +++++++++++- arch/arm/mach-pxa/magician.c | 11 ++++++++++- drivers/regulator/gpio-regulator.c | 23 +++++++++++------------ include/linux/regulator/gpio-regulator.h | 3 --- 4 files changed, 32 insertions(+), 17 deletions(-) -- 2.14.3 diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index e2e7f247a645..6717a10180eb 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -711,7 +712,6 @@ static struct gpio_regulator_state bq24022_states[] = { static struct gpio_regulator_config bq24022_info = { .supply_name = "bq24022", - .enable_gpio = GPIO72_HX4700_BQ24022_nCHARGE_EN, .enable_high = 0, .enabled_at_boot = 0, @@ -733,6 +733,15 @@ static struct platform_device bq24022 = { }, }; +static struct gpiod_lookup_table bq24022_gpiod_table = { + .dev_id = "gpio-regulator", + .table = { + GPIO_LOOKUP("gpio-pxa", GPIO72_HX4700_BQ24022_nCHARGE_EN, + "enable", GPIO_ACTIVE_HIGH), + { }, + }, +}; + /* * StrataFlash */ @@ -875,6 +884,7 @@ static void __init hx4700_init(void) pxa_set_btuart_info(NULL); pxa_set_stuart_info(NULL); + gpiod_add_lookup_table(&bq24022_gpiod_table); platform_add_devices(devices, ARRAY_SIZE(devices)); pwm_add_table(hx4700_pwm_lookup, ARRAY_SIZE(hx4700_pwm_lookup)); diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index 14c0f80bc9e7..9a5bda3ea194 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c @@ -657,7 +657,6 @@ static struct gpio_regulator_state bq24022_states[] = { static struct gpio_regulator_config bq24022_info = { .supply_name = "bq24022", - .enable_gpio = GPIO30_MAGICIAN_BQ24022_nCHARGE_EN, .enable_high = 0, .enabled_at_boot = 1, @@ -679,6 +678,15 @@ static struct platform_device bq24022 = { }, }; +static struct gpiod_lookup_table bq24022_gpiod_table = { + .dev_id = "gpio-regulator", + .table = { + GPIO_LOOKUP("gpio-pxa", GPIO30_MAGICIAN_BQ24022_nCHARGE_EN, + "enable", GPIO_ACTIVE_HIGH), + { }, + }, +}; + /* * fixed regulator for ads7846 */ @@ -1007,6 +1015,7 @@ static void __init magician_init(void) regulator_register_always_on(0, "power", pwm_backlight_supply, ARRAY_SIZE(pwm_backlight_supply), 5000000); + gpiod_add_lookup_table(&bq24022_gpiod_table); platform_add_devices(ARRAY_AND_SIZE(devices)); } diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c index a86b8997bb54..9d6094c4d71c 100644 --- a/drivers/regulator/gpio-regulator.c +++ b/drivers/regulator/gpio-regulator.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -161,10 +162,6 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np, of_property_read_u32(np, "startup-delay-us", &config->startup_delay); - config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0); - if (config->enable_gpio < 0 && config->enable_gpio != -ENOENT) - return ERR_PTR(config->enable_gpio); - /* Fetch GPIOs. - optional property*/ ret = of_gpio_count(np); if ((ret < 0) && (ret != -ENOENT)) @@ -255,6 +252,7 @@ static int gpio_regulator_probe(struct platform_device *pdev) struct device_node *np = pdev->dev.of_node; struct gpio_regulator_data *drvdata; struct regulator_config cfg = { }; + enum gpiod_flags gflags; int ptr, ret, state; drvdata = devm_kzalloc(&pdev->dev, sizeof(struct gpio_regulator_data), @@ -340,21 +338,22 @@ static int gpio_regulator_probe(struct platform_device *pdev) cfg.driver_data = drvdata; cfg.of_node = np; - if (gpio_is_valid(config->enable_gpio)) { - cfg.ena_gpio = config->enable_gpio; - cfg.ena_gpio_initialized = true; - } cfg.ena_gpio_invert = !config->enable_high; if (config->enabled_at_boot) { if (config->enable_high) - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; + gflags = GPIOD_OUT_HIGH; else - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; + gflags = GPIOD_OUT_LOW; } else { if (config->enable_high) - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; + gflags = GPIOD_OUT_LOW; else - cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; + gflags = GPIOD_OUT_HIGH; + } + cfg.ena_gpiod = devm_gpiod_get_optional(&pdev->dev, "enable", gflags); + if (IS_ERR(cfg.ena_gpiod)) { + ret = PTR_ERR(cfg.ena_gpiod); + goto err_stategpio; } drvdata->dev = regulator_register(&drvdata->desc, &cfg); diff --git a/include/linux/regulator/gpio-regulator.h b/include/linux/regulator/gpio-regulator.h index 19fbd267406d..536cab86f2d5 100644 --- a/include/linux/regulator/gpio-regulator.h +++ b/include/linux/regulator/gpio-regulator.h @@ -44,8 +44,6 @@ struct gpio_regulator_state { /** * struct gpio_regulator_config - config structure * @supply_name: Name of the regulator supply - * @enable_gpio: GPIO to use for enable control - * set to -EINVAL if not used * @enable_high: Polarity of enable GPIO * 1 = Active high, 0 = Active low * @enabled_at_boot: Whether regulator has been enabled at @@ -69,7 +67,6 @@ struct gpio_regulator_state { struct gpio_regulator_config { const char *supply_name; - int enable_gpio; unsigned enable_high:1; unsigned enabled_at_boot:1; unsigned startup_delay;