Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp6785629pxu; Thu, 24 Dec 2020 12:38:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJwmd8F14avecgdt9ZP/f0vLYIDRzxSvlPZicAzN15ohwq15IOjX1BE7DFUbO367GCCq0Ohi X-Received: by 2002:a17:906:d62:: with SMTP id s2mr29461269ejh.61.1608842339124; Thu, 24 Dec 2020 12:38:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608842339; cv=none; d=google.com; s=arc-20160816; b=CHW4037+bYm/CDTX1pVdPwBcdd38sRzT8zXuaE3csTfgwg/0SsrRMz9J3A/Kz7TXLY zemXJQRbiwZn1faT5HpxVOJUtqlBnS7pM7cii/qTps+HK+eOvp9vLrOhr/z5cNcfQSDk cqU8/+t4f2gzmH7sgDgKaavRNUU4438rQToSrpJzLmb5GhcOMrRTzF0qcddUlfGWF8RL K7iw1dHHmsseMyMaJ0PL3WQ10MzfWHleMjQz52ZFckUzk5RXZiyECemHiNjIQRLTehBL KDWS22bMcE2o+BLW0Dlf8ESx4v1FRpWSxOTzJz+u5yTInaw/P9Fbeivcr46GKMZZfmWn ZIDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=QvZGdBjZYtotbDQftzil2CCyIVVf+A50G1X5HgounlU=; b=M6qIYxXWXeJuz5yV3ZYlC3XzLSEmeGS8VV7Jr30C7N/VoCmVnPQ86n2af8tMu36wE4 OsUeOZ6fd1Yq1I7uvaskVyOTiX15jXZ+SbM4Xm5y4HuTZGKq8FnQAw9eBu6qPTau5Ube a69Te7inYgj7ax+wSW3VHmIPp8UFet2J3VP15tlb98Kmu0eIGBmOv8FEJD9SpPYw0fFg IHD3c8Db7KbPK9H1vKvp6L2erE8cGeCssmkoyzjPQqTWjXSUjeEruzwu6RzDMIDsV+6d Xt2BR0yNNr0KnJ/H+RwOr+MLngpD9tj0YT8KWCE+i8QWIJP7LWBaow6Z8ZLXrFkCnFv0 UnmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@beagleboard-org.20150623.gappssmtp.com header.s=20150623 header.b=WL66wZNu; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o26si15553830edw.74.2020.12.24.12.38.22; Thu, 24 Dec 2020 12:38:59 -0800 (PST) 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; dkim=pass header.i=@beagleboard-org.20150623.gappssmtp.com header.s=20150623 header.b=WL66wZNu; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727848AbgLXUgr (ORCPT + 99 others); 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-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