From patchwork Mon Feb 12 13:16:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 128057 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp3200945ljc; Mon, 12 Feb 2018 05:17:49 -0800 (PST) X-Google-Smtp-Source: AH8x224POMM18H1FeO5+h4qyCrJqFIvv4E05g7U2tUdQSHaDacScb6747j0jVdhvSq3THjMiipS2 X-Received: by 10.99.173.73 with SMTP id y9mr9176131pgo.432.1518441468966; Mon, 12 Feb 2018 05:17:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518441468; cv=none; d=google.com; s=arc-20160816; b=KuE+YGfEFxHFWOwhOMVEc1GFLA8ZVJtM9339OuWj67Jo1Svt0PwgCyht71l9EWuwG7 VUvaBc1Hpf7YtdKdmgZ26NVmWuaQY57P4M6xKpps4enLKYX61r9UI84iG2bvEMrlb8uZ cmqn9v5zjH0EGkQJ6z9vwuUWhSxwkquWxb0delp1QBfWpIsrOA6WIZXBlV8wqZ8QnPq+ NcbrRUunQvhJXgpbB5DenEXs7nMSRkaQDrYACU/+v/TNVywheiFk8xEcrPHzq/yWOGcw fMcOIm0enDrO/1DmIsjGPF/1M8smPlpo/mXvGWzAfOHPpMNknCYfJXyYqe2sqQF23d37 lqXw== 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=nl5wo3EimBMqlMLcbt7HRKNzdZzfcYRFhLCs9kDF8Ik=; b=Z7bNg5tpLVX42BYa2OJVirnkkpZlxVXMApkhCKBhgE2zziQ0cHqB9/jSDXmTXf1Qhk 268U9YNOkQ+neF1VYhq7R0ERt4ZN0hg7wcdTaDaQETF5uLepgjKXJ7Uc/S4OqFgduqXo kYWpvVS32RUUJPwjdmQHE+/I7nZ+R/kLCsZKLNNeZCPrg/Ea/olpu34r/EiaeJ7mgRFw M2/qtk0WTwwP+8p9nj+GrkaJh5pSx3fkQUpdnrUdjEeva0dqGzuWGOz/Un/X3Vj5/2ae mRL6w+AK3gOb9D67th8EaQf890i010BC/jLJKmy2wgAITi8PyQuWBxPzPokjKdRO/QBo J4xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SsYkjUtg; 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 a84si2768073pfk.123.2018.02.12.05.17.48; Mon, 12 Feb 2018 05:17:48 -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=SsYkjUtg; 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 S935247AbeBLNRo (ORCPT + 13 others); Mon, 12 Feb 2018 08:17:44 -0500 Received: from mail-lf0-f66.google.com ([209.85.215.66]:34763 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935226AbeBLNRi (ORCPT ); Mon, 12 Feb 2018 08:17:38 -0500 Received: by mail-lf0-f66.google.com with SMTP id k19so20399572lfj.1 for ; Mon, 12 Feb 2018 05:17:37 -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=nl5wo3EimBMqlMLcbt7HRKNzdZzfcYRFhLCs9kDF8Ik=; b=SsYkjUtg1MQJeiamlCbh0SMacCVh5tUdSIGR7F4XuNzgUUbTvvgYQqt6jiPEB3egvC lEwEX6fy7PC1YsZBcvr9AAXfb3I2xm2AEkkSXMq6sYyPSSRjiqa3FGwgENL/HLreUpNx 0H+VkVfydA4/VqqG2MeV+OAQc04JwmAWI+BNc= 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=nl5wo3EimBMqlMLcbt7HRKNzdZzfcYRFhLCs9kDF8Ik=; b=Pv/VzGSnIJai8B9PDFG4x5ON9XC8RqUmll0nlNNHqLEk0oudb+SJQ90PEMo5LxKrfR /xJL5q2oMCiMYdA63G3fmH+wGkPjhxOSwbn3RKmdGt4psFQDfpHUkI9i8pEwIkj986Ix ckX6ukGwEinCbk6RjMUCKO96tn9/JFjjLYJi7Nv0xllL0IbF/mEnvk3+CxmTJqrUWbUh kzxaSMPabdwAabubkIh9xtdxJKFZU06ajLqFXDld79ttW0s9f4qeptTU9KqiWM3ty8Z1 Jdjcdo58h8U97FwMrm5HH6nFyKNJhzEVwDN89B7bUZdeCRzjkBSwdbVwowGWfL70z5Ua CxtQ== X-Gm-Message-State: APf1xPBgEYquypaGuNEMHJ6b/55h6RdMDndWeZvS8iuFwMCD//JiTjNB yeVZs5eQfVnOmyugrsGzlyI2+hJnc4s= X-Received: by 10.46.84.76 with SMTP id y12mr7701936ljd.36.1518441457030; Mon, 12 Feb 2018 05:17:37 -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.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 12 Feb 2018 05:17:36 -0800 (PST) From: Linus Walleij To: Liam Girdwood , Mark Brown Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Linus Walleij , Philipp Zabel Subject: [PATCH 03/21] regulator: gpio: Get enable GPIO using GPIO descriptor Date: Mon, 12 Feb 2018 14:16:59 +0100 Message-Id: <20180212131717.27193-4-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 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 --- 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 0fce06acfaec..172ca4c578b2 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)) @@ -254,6 +251,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;