{"id":816626,"url":"http://patchwork.ozlabs.org/api/patches/816626/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20170921010421.7467-2-f.fainelli@gmail.com/","project":{"id":42,"url":"http://patchwork.ozlabs.org/api/projects/42/?format=json","name":"Linux GPIO development","link_name":"linux-gpio","list_id":"linux-gpio.vger.kernel.org","list_email":"linux-gpio@vger.kernel.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170921010421.7467-2-f.fainelli@gmail.com>","list_archive_url":null,"date":"2017-09-21T01:04:20","name":"[1/2] pinctrl: Allow a device to indicate when to force a state","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"7109c3fdbb05f01ea9d3c5f18716b08839926af5","submitter":{"id":2800,"url":"http://patchwork.ozlabs.org/api/people/2800/?format=json","name":"Florian Fainelli","email":"f.fainelli@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20170921010421.7467-2-f.fainelli@gmail.com/mbox/","series":[{"id":4266,"url":"http://patchwork.ozlabs.org/api/series/4266/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/list/?series=4266","date":"2017-09-21T01:04:19","name":"pinctrl: Allow indicating loss of state across suspend/resume","version":1,"mbox":"http://patchwork.ozlabs.org/series/4266/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/816626/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/816626/checks/","tags":{},"related":[],"headers":{"Return-Path":"<linux-gpio-owner@vger.kernel.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-gpio-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"pRhnQoAi\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xyJLB4Wnxz9s0Z\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 21 Sep 2017 11:04:50 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752069AbdIUBEb (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 20 Sep 2017 21:04:31 -0400","from mail-qk0-f196.google.com ([209.85.220.196]:37342 \"EHLO\n\tmail-qk0-f196.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751957AbdIUBE2 (ORCPT\n\t<rfc822; linux-gpio@vger.kernel.org>); Wed, 20 Sep 2017 21:04:28 -0400","by mail-qk0-f196.google.com with SMTP id r66so2747632qke.4;\n\tWed, 20 Sep 2017 18:04:28 -0700 (PDT)","from stb-bld-03.irv.broadcom.com ([192.19.255.250])\n\tby smtp.gmail.com with ESMTPSA id\n\tt2sm184971qkd.16.2017.09.20.18.04.25\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 20 Sep 2017 18:04:26 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=9QDWuY64h73B1o4nahEPrmclzv1BNHHbDCOALsVd5gA=;\n\tb=pRhnQoAizL07j1AUGOKXWL7wyQLaru2kz0KW9K/lLykB3yNz0hnT2A3AK3NwZbdZzD\n\t0XNhzY6Ujflw/zSB2IjpnwJopJnP7VndkMnyF5tHTqI0w857UZrF+Jr0nIQt/9yi+9ZK\n\tzWQvLcSvPkBo6B2mZZrBAWajfYK9PNWEohohlL2z+13VG1bKDI2VU/YCp8+TAP5b9UgT\n\tpjsFXuX2OOq8rELJV8L6RlSwRef+C4XVeAgY0mfJmRz4XWXOGzIpPyRCobMVV8hEpMwT\n\t6EEo5y9adoi0r9aFuAyOXqDauOfAgsGGQOpCB4GCw+87QFj7XrM4btFJpFMnm7ncrNld\n\t101w==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=9QDWuY64h73B1o4nahEPrmclzv1BNHHbDCOALsVd5gA=;\n\tb=eVvDDJU8r59LXdXaipAsKIiujE8dC+xQttEzQ9JgPhvxHVHrNbuog7+qy6OHhKGzDA\n\tIoEiPQwxZIBW6ZQbY4OiH6jLrNTFY+9hllOq92R58ttD15N8JSLqkdgSj/gChdRo4lSj\n\ts5cIa+CeTv6c6rD1QLLr50w7PEkXDX5fjmivYFJNtk1ltUhN7Jv1BpkTWaqJ0cO6Z0O8\n\t9BtJWUKFjEMvNkWkOfDCHLWsbAhBfYSP8HCqVC8UBNjGHIMwGMr6X2PvAzud7e2v4czo\n\tu5scB4rgQYacPWJsPYZRbzw/3vEA3T0nK8L+SUMVvPrynzqcUC2q3QD7A1P82/98bPDo\n\tNCzg==","X-Gm-Message-State":"AHPjjUjTm3N+Dm8nBnrqIpdgHwAa9IM/7NvGoOUeOu7z8QgvYUJtN4U7\n\tMUMtJb4OxMdPJAWFH43eM3AXJUK3","X-Google-Smtp-Source":"AOwi7QAuUKAAcIxSSwr5Xn3EHoJ791aMvabu6DV9+q4zhstUXmb8AVwrMSB6z253rJT1DpRoiKsq3w==","X-Received":"by 10.55.66.22 with SMTP id p22mr850586qka.78.1505955867437;\n\tWed, 20 Sep 2017 18:04:27 -0700 (PDT)","From":"Florian Fainelli <f.fainelli@gmail.com>","To":"linux-kernel@vger.kernel.org","Cc":"linus.walleij@linaro.org, swarren@nvidia.com,\n\tandy.shevchenko@gmail.com, alcooperx@gmail.com,\n\tlinux-gpio@vger.kernel.org, devicetree@vger.kernel.org,\n\trobh+dt@kernel.org, mark.rutland@arm.com,\n\tbcm-kernel-feedback-list@broadcom.com,\n\tFlorian Fainelli <f.fainelli@gmail.com>","Subject":"[PATCH 1/2] pinctrl: Allow a device to indicate when to force a\n\tstate","Date":"Wed, 20 Sep 2017 18:04:20 -0700","Message-Id":"<20170921010421.7467-2-f.fainelli@gmail.com>","X-Mailer":"git-send-email 2.14.1","In-Reply-To":"<20170921010421.7467-1-f.fainelli@gmail.com>","References":"<20170921010421.7467-1-f.fainelli@gmail.com>","Sender":"linux-gpio-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<linux-gpio.vger.kernel.org>","X-Mailing-List":"linux-gpio@vger.kernel.org"},"content":"It may happen that a device needs to force applying a state, e.g:\nbecause it only defines one state of pin states (default) but loses\npower/register contents when entering low power modes. Add a\npinctrl_dev::flags bitmask to help describe future quirks and define\nPINCTRL_FLG_FORCE_STATE as such a settable flag.\n\nSigned-off-by: Florian Fainelli <f.fainelli@gmail.com>\n---\n drivers/pinctrl/core.c | 15 +++++++++++++++\n drivers/pinctrl/core.h |  4 ++++\n 2 files changed, 19 insertions(+)","diff":"diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c\nindex 56fbe4c3e800..c450a97de88f 100644\n--- a/drivers/pinctrl/core.c\n+++ b/drivers/pinctrl/core.c\n@@ -1197,11 +1197,26 @@ int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *state)\n {\n \tstruct pinctrl_setting *setting, *setting2;\n \tstruct pinctrl_state *old_state = p->state;\n+\tbool force = false;\n \tint ret;\n \n \tif (p->state == state)\n \t\treturn 0;\n \n+\tif (p->state) {\n+\t\tlist_for_each_entry(setting, &p->state->settings, node) {\n+\t\t\tif (setting->pctldev->flags & PINCTRL_FLG_FORCE_STATE)\n+\t\t\t\tforce = true;\n+\t\t}\n+\t}\n+\n+\t/* Some controllers may want to force this operation when they define\n+\t * only one set of functions and lose power state, e.g: pinctrl-single\n+\t * with its pinctrl-single,low-power-state-loss property.\n+\t */\n+\tif (p->state == state && !force)\n+\t\treturn 0;\n+\n \tif (p->state) {\n \t\t/*\n \t\t * For each pinmux setting in the old state, forget SW's record\ndiff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h\nindex 7880c3adc450..5fbf4dd1fa76 100644\n--- a/drivers/pinctrl/core.h\n+++ b/drivers/pinctrl/core.h\n@@ -39,6 +39,7 @@ struct pinctrl_gpio_range;\n  * @hog_sleep: sleep state for pins hogged by this device\n  * @mutex: mutex taken on each pin controller specific action\n  * @device_root: debugfs root for this device\n+ * @flags: feature/quirk flags\n  */\n struct pinctrl_dev {\n \tstruct list_head node;\n@@ -63,8 +64,11 @@ struct pinctrl_dev {\n #ifdef CONFIG_DEBUG_FS\n \tstruct dentry *device_root;\n #endif\n+\tunsigned long flags;\n };\n \n+#define PINCTRL_FLG_FORCE_STATE\t(1 << 0)\n+\n /**\n  * struct pinctrl - per-device pin control state holder\n  * @node: global list node\n","prefixes":["1/2"]}