Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1006390pxb; Thu, 23 Sep 2021 15:49:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyei4sSidHnmgHg6G9VX46CwEfB6L3fKlZrzssdao+0PnTaA5JmywI87nZVm3wvpd9ysmkW X-Received: by 2002:a05:6e02:ea2:: with SMTP id u2mr5793847ilj.133.1632437376402; Thu, 23 Sep 2021 15:49:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632437376; cv=none; d=google.com; s=arc-20160816; b=ZFPx55qxKDyt3T05UfoWwzv1w7RS90RMefJrnHek4q76pW3WLL2naW8VShmPKkMzYS NxNqD6gbH+h2ietcPGc788Wvqv8aq05db1xeFTUCAzIx2oVpQGUR5oK/j8An+L7X1PkX ewMpdD4Wh3gxHT0De6KtS50PSy2MIsxeLudBLBpVyfIinELY8gWDNPUbJ50Fsgtw023P OaGhOMID5kQ5tI/i6swnqpSnHEAyImsgA6SSwrTLc/1auc74zrlhbSq5reIrvQPt0fEC Sbm9TsZs+DCKKDgTaqZDWGlEcbiIn5gk6Wv9txHr8ZlXodKdMto91+04UHlIJx3c/5ky TDvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=14GZWq1cPIVwoLSy4vITtAymcbW0nCJWLa4nULdQIm8=; b=iQYzzCjW0ceds0PKXCzVnZFzpQQBogRpjloF19X7JmGmA4LC/B//ps0JXXHB8Z7uSc 1xE8+5fhEzcFrxsre8Ak4EX9A2QaOx9Fd8w4qFoRK5FmVgJuV6Kho5RAmaLXjpy9AOAj PS3HEpS/9tZtdBNoX1ODnsDt+D8tiI694CLRg9A2H3HUMVYqL4ujBwA5mmYKZ8JOx6Le q/ASI0pSxilFazeISt2yv2VgU4JrFTNy1TceyUi0SLV+ieI7K/3cp1HSstUOkVH8yKal RtroeL+oaxJSR9Bej1m4/ieMkcpTreVSIrTxZ8hrF9qkZI/SbIWkPkZUXrTq4LLHO6VM p2KQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v6si8199970iof.105.2021.09.23.15.49.24; Thu, 23 Sep 2021 15:49:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243505AbhIWWsL (ORCPT + 99 others); Thu, 23 Sep 2021 18:48:11 -0400 Received: from mga06.intel.com ([134.134.136.31]:36227 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236363AbhIWWsL (ORCPT ); Thu, 23 Sep 2021 18:48:11 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10116"; a="284970989" X-IronPort-AV: E=Sophos;i="5.85,318,1624345200"; d="scan'208";a="284970989" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2021 15:46:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,318,1624345200"; d="scan'208";a="534719632" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga004.fm.intel.com with ESMTP; 23 Sep 2021 15:46:37 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 4C024E7; Fri, 24 Sep 2021 01:46:42 +0300 (EEST) From: Andy Shevchenko To: Andy Shevchenko , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Linus Walleij , Bartosz Golaszewski , Thomas Petazzoni Subject: [PATCH v1 1/1] gpio: pca953x: Improve bias setting Date: Fri, 24 Sep 2021 01:46:40 +0300 Message-Id: <20210923224640.62258-1-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The commit 15add06841a3 ("gpio: pca953x: add ->set_config implementation") introduced support for bias setting. However this, due to being half-baked, brought potential issues: - the turning bias via disabling makes the pin floating for a while; - once enabled, bias can't be disabled. Fix all these by adding support for bias disabling and move the disabling part under the corresponding conditional. While at it, add support for default setting, since it's cheap to add. Fixes: 15add06841a3 ("gpio: pca953x: add ->set_config implementation") Cc: Thomas Petazzoni Signed-off-by: Andy Shevchenko --- drivers/gpio/gpio-pca953x.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index f5cfc0698799..dac4d772a4d1 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -566,21 +566,21 @@ static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip, mutex_lock(&chip->i2c_lock); - /* Disable pull-up/pull-down */ - ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); - if (ret) - goto exit; - /* Configure pull-up/pull-down */ if (config == PIN_CONFIG_BIAS_PULL_UP) ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit); else if (config == PIN_CONFIG_BIAS_PULL_DOWN) ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0); + else + ret = 0; if (ret) goto exit; - /* Enable pull-up/pull-down */ - ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); + /* Disable/Enable pull-up/pull-down */ + if (config == PIN_CONFIG_BIAS_DISABLE) + ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); + else + ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); exit: mutex_unlock(&chip->i2c_lock); @@ -594,7 +594,9 @@ static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset, switch (pinconf_to_config_param(config)) { case PIN_CONFIG_BIAS_PULL_UP: + case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT: case PIN_CONFIG_BIAS_PULL_DOWN: + case PIN_CONFIG_BIAS_DISABLE: return pca953x_gpio_set_pull_up_down(chip, offset, config); default: return -ENOTSUPP; -- 2.33.0