From mboxrd@z Thu Jan 1 00:00:00 1970 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.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 E0659C433E0 for ; Thu, 24 Dec 2020 20:37:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A9260224B1 for ; Thu, 24 Dec 2020 20:37:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728871AbgLXUgr (ORCPT ); Thu, 24 Dec 2020 15:36:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727812AbgLXUgr (ORCPT ); Thu, 24 Dec 2020 15:36:47 -0500 Received: from mail-ot1-x330.google.com (mail-ot1-x330.google.com [IPv6:2607:f8b0:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06638C061573 for ; Thu, 24 Dec 2020 12:36:06 -0800 (PST) Received: by mail-ot1-x330.google.com with SMTP id o11so2637944ote.4 for ; Thu, 24 Dec 2020 12:36:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=beagleboard-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=QvZGdBjZYtotbDQftzil2CCyIVVf+A50G1X5HgounlU=; b=WL66wZNuYd/E0oTSq7Lntbyk/DvhHiTHeK3mVwserRtxQphqsw3dr5XuPmy869J3/J qH/6MkG+jf1va7rbLMMjHtpDQcqTC0rUzL7lRGIV4uf2oxZFDEHJxyM9KvKqE22tUT04 V8gFjCf3rG6EKOokEsh8CQDtAdMvXgk1gIcC4bk0vKJYLPFfTzP/eTuSJrz/4ToreZqO fMDKqr5BmkjggkZq/3PTh7Ps+JJgZFUHa1NF42b4I2j7QhWIWvDiwFsBSkKOo8ueZ9nL KexHAfgut/w3KJGN39qcw2CO/WNYrqTd18Ev8IOD53UB8WeG9ERo4VC9/h0AxJUWSKGe lOWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=QvZGdBjZYtotbDQftzil2CCyIVVf+A50G1X5HgounlU=; b=j051jRuSrtqCnthWO9gVBL9ZakKwzqpqHfmEDd+7gJgV+6/j4xgGbhE3titOB2roeJ vX8UrWspPutWbOPTtCaGucunf05+PcmaxJWPQS9RK0f75IqsnoJZBUqTfDA2RCwVouo8 sQM7Hj3s5FOlTk2pyybyW9XMhxyQynh6+Yp+SlN4jWIOTkHQHoEE3mRpXlkscpYlski1 dsZNiYwlZiwKpiHBQcO/TVzDT96ULEC+ZI/i1tOdfdaVLc67afstwMIjvxSVVa6XBU7L 8OdfqpDAqiYgnPvsJSwWx4oSdYS0p5MtgMy7jju2560C4Ma2KTdStkrQU9DLmt7XMA8T fl2A== X-Gm-Message-State: AOAM532gxwzIz/ewtiS2hIn25Yd5fzS9LCv0DbiNrgqJHi8khn8E8jWG 7zQikmw6H3lMm14Ims+lSE4euA== X-Google-Smtp-Source: ABdhPJy5x5Ls7C7ERu2fcsPyiDFy6neu9jlWMWYJ9fi2gU5xjFUhYsIML5LoAKj/dOFsMwsc2EFkSw== X-Received: by 2002:a9d:4c07:: with SMTP id l7mr23296576otf.318.1608842166109; Thu, 24 Dec 2020 12:36:06 -0800 (PST) Received: from x1 ([2600:1702:da0:ff40:462a:45dd:442a:fb42]) by smtp.gmail.com with ESMTPSA id j126sm3412611oif.8.2020.12.24.12.36.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Dec 2020 12:36:05 -0800 (PST) Date: Thu, 24 Dec 2020 14:36:03 -0600 From: Drew Fustini To: Andy Shevchenko Cc: "open list:GPIO SUBSYSTEM" , Linux Kernel Mailing List , Pantelis Antoniou , Pantelis Antoniou , Pantelis Antoniou , Jason Kridner , Robert Nelson , Linus Walleij , Tony Lindgren Subject: Re: [RFC PATCH v2] pinctrl: add helper to expose pinctrl state in debugfs Message-ID: <20201224203603.GA59600@x1> References: <20201218045134.4158709-1-drew@beagleboard.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Dec 18, 2020 at 06:01:25PM +0200, Andy Shevchenko wrote: > On Fri, Dec 18, 2020 at 6:52 AM Drew Fustini wrote: > > > > BeagleBoard.org [0] currently uses an out-of-tree driver called > > bone-pinmux-helper [1] developed by Pantelis Antoniou [2] back in 2013. > > The driver assists users of our BeagleBone and PocketBeagle boards in > > rapid prototyping by allowing them to change at run-time between defined > > set of pinctrl states [3] for each pin on the expansion connectors [4]. > > This is achieved by exposing a 'state' file in sysfs for each pin which > > is used by our 'config-pin' utility [5]. > > > > Our goal is to eliminate all out-of-tree drivers for BeagleBoard.org > > boards and thus I have been working to replace bone-pinmux-helper with a > > new driver that could be acceptable upstream. My understanding is that > > debugfs, unlike sysfs, could be the appropriate mechanism to expose such > > functionality. > > No objections here. > > > I used the compatible string "pinctrl,state-helper" but would appreciate > > advice on how to best name this. Should I create a new vendor prefix? > > Here is the first concern. Why does this require to be a driver with a > compatible string? I have not been able to figure out how to have different active pinctrl states for each header pins (for example P2 header pin 3) unless they are represented as DT nodes with their own compatible for this helper driver such as: &ocp { P2_03_pinmux { compatible = "pinctrl,state-helper"; pinctrl-names = "default", "gpio", "gpio_pu", "gpio_pd", "gpio_input", "pwm"; pinctrl-0 = <&P2_03_default_pin>; pinctrl-1 = <&P2_03_gpio_pin>; pinctrl-2 = <&P2_03_gpio_pu_pin>; pinctrl-3 = <&P2_03_gpio_pd_pin>; pinctrl-4 = <&P2_03_gpio_input_pin>; pinctrl-5 = <&P2_03_pwm_pin>; }; } I can assign pinctrl states in the pin controller DT node which has compatible pinctrl-single (line 301 arch/arm/boot/dts/am33xx-l4.dtsi): &am33xx_pinmux { pinctrl-names = "default", "gpio", "pwm"; pinctrl-0 = < &P2_03_default_pin &P1_34_default_pin &P2_19_default_pin &P2_24_default_pin &P2_33_default_pin &P2_22_default_pin &P2_18_default_pin &P2_10_default_pin &P2_06_default_pin &P2_04_default_pin &P2_02_default_pin &P2_08_default_pin &P2_17_default_pin >; pinctrl-1 = < &P2_03_gpio_pin &P1_34_gpio_pin &P2_19_gpio_pin &P2_24_gpio_pin &P2_33_gpio_pin &P2_22_gpio_pin &P2_18_gpio_pin &P2_10_gpio_pin &P2_06_gpio_pin &P2_04_gpio_pin &P2_02_gpio_pin &P2_08_gpio_pin &P2_17_gpio_pin >; pinctrl-2 = < &P2_03_pwm &P1_34_pwm &P2_19_pwm &P2_24_pwm &P2_33_pwm &P2_22_pwm &P2_18_pwm &P2_10_pwm &P2_06_pwm &P2_04_pwm &P2_02_pwm &P2_08_pwm &P2_17_pwm >; } However, there is no way to later select "gpio" for P2.03 and select "pwm" for P1.34 at the same time. Thus, I can not figure out a way to select independent states per pin unless I make a node for each pin that binds to a helper driver. It feels like there may be a simpler soluation but I can't see to figure it out. Suggestions welcome! > > > The P9_14_pinmux entry would cause pinctrl-state-helper to be probed. > > The driver would create the corresponding pinctrl state file in debugfs > > for the pin. Here is an example of how the state can be read and > > written from userspace: > > > > root@beaglebone:~# cat /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state > > default > > root@beaglebone:~# echo pwm > /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state > > root@beaglebone:~# cat /sys/kernel/debug/pinctrl/pinctrl_state/ocp:P9_14_pinmux/state > > pwm > > > > I would very much appreciate feedback on both this general concept, and > > also specific areas in which the code should be changed to be acceptable > > upstream. > > Two more concerns: > - why is it OF only? I am open to figuring out a more general solution but I am really only familiar with Device Tree. Is there a way to represent the possible pinctrl states in ACPI? > - why has it been separated from pin control per device debug folder? >From the v1 thread, I see what you mean that there could be a combined state file for each pinctrl device where one would echo ' ' such as 'P2_03 pwm'. I will attempt to implement that. > > > > [0] http://beagleboard.org/latest-images > > [1] https://github.com/beagleboard/linux/blob/5.4/drivers/misc/cape/beaglebone/bone-pinmux-helper.c > > [2] https://github.com/RobertCNelson/linux-dev/blob/master/patches/drivers/ti/gpio/0001-BeagleBone-pinmux-helper.patch > > [3] https://github.com/beagleboard/BeagleBoard-DeviceTrees/blob/v5.4.x-ti-overlays/src/arm/am335x-bone-common-univ.dtsi#L2084 > > [4] https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual#section-7-1 > > [5] https://github.com/beagleboard/bb.org-overlays/blob/master/tools/beaglebone-universal-io/config-pin > > -- > With Best Regards, > Andy Shevchenko Thanks for reviewing, Drew