From patchwork Wed Aug 5 09:28:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Martin Devera X-Patchwork-Id: 254655 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3419C433DF for ; Wed, 5 Aug 2020 10:00:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4B01D2076E for ; Wed, 5 Aug 2020 10:00:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=eaxlabs.cz header.i=@eaxlabs.cz header.b="Iutxphsc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726041AbgHEKAN (ORCPT ); Wed, 5 Aug 2020 06:00:13 -0400 Received: from ms9.eaxlabs.cz ([147.135.177.209]:45494 "EHLO ms9.eaxlabs.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725868AbgHEKAI (ORCPT ); Wed, 5 Aug 2020 06:00:08 -0400 X-Greylist: delayed 1894 seconds by postgrey-1.27 at vger.kernel.org; Wed, 05 Aug 2020 06:00:07 EDT DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=eaxlabs.cz; s=mail; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Date:Message-ID:Subject:From:Cc:To; bh=t+IvbY/JQGlbvRGnvirF9n+itqwG0xol8Zk+qYQz+C0=; b=IutxphscpyDm1uPQQxc980NCsxvnVNuaIn7GM8bBHHNa7ij3YY7P8MR/0AqL7wBsoq1Y5uwD/a3TvrJrlO/gnpEFXPETmLdAa3UrLCWafpZQGSOGxDWlmFe8mDLY5Op6xKRfWIhSsZN7QVzIfUXZ6ydF8peyeESio9+4Yq/tR5U=; Received: from [82.99.129.6] (helo=[10.76.6.116]) by ms9.eaxlabs.cz with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1k3Fia-0003zx-MN; Wed, 05 Aug 2020 11:28:18 +0200 To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org From: Martin DEVERA Subject: pinctrl: sx150x bug Message-ID: Date: Wed, 5 Aug 2020 11:28:11 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 Content-Language: en-US Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Hello, I encountered bug in SX1502 expander driver in 5.7.7. Here is relevant DTS part: compatible = "semtech,sx1502q"; gpio4_cfg_pins: gpio2-cfg {                         pins = "gpio5";                         output-high;     }; And part of OOPS: [    0.673996] [] (gpiochip_get_data) from [] (sx150x_gpio_direction_output+0xd) [    0.683259] [] (sx150x_gpio_direction_output) from [] (sx150x_pinconf_set+0x) [    0.692796] [] (sx150x_pinconf_set) from [] (pinconf_apply_setting+0x39/0x7e) [    0.701635] [] (pinconf_apply_setting) from [] (pinctrl_commit_state+0xa5/0x) [    0.710648] [] (pinctrl_commit_state) from [] (pinctrl_enable+0xff/0x1d4) [    0.719139] [] (pinctrl_enable) from [] (sx150x_probe+0x1a3/0x358) [    0.727027] [] (sx150x_probe) from [] (i2c_device_probe+0x1bb/0x1dc) The problem is that sx150x_pinconf_set uses sx150x_gpio_direction_output but gpio is not setup yet. Patch below fixes it but I'm not sure whether is it correct: diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c index 6e74bd87d959..3f5651edd336 100644 --- a/drivers/pinctrl/pinctrl-sx150x.c +++ b/drivers/pinctrl/pinctrl-sx150x.c @@ -1154,12 +1154,6 @@ static int sx150x_probe(struct i2c_client *client,                 return ret;         } -       ret = pinctrl_enable(pctl->pctldev); -       if (ret) { -               dev_err(dev, "Failed to enable pinctrl device\n"); -               return ret; -       } -         /* Register GPIO controller */         pctl->gpio.base = -1;         pctl->gpio.ngpio = pctl->data->npins; @@ -1191,6 +1185,12 @@ static int sx150x_probe(struct i2c_client *client,         if (ret)                 return ret; +       ret = pinctrl_enable(pctl->pctldev); +       if (ret) { +               dev_err(dev, "Failed to enable pinctrl device\n"); +               return ret; +       } +         ret = gpiochip_add_pin_range(&pctl->gpio, dev_name(dev),                                      0, 0, pctl->data->npins);         if (ret)