From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754556AbbCBUBR (ORCPT ); Mon, 2 Mar 2015 15:01:17 -0500 Received: from avon.wwwdotorg.org ([70.85.31.133]:36686 "EHLO avon.wwwdotorg.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753948AbbCBUBP (ORCPT ); Mon, 2 Mar 2015 15:01:15 -0500 Message-ID: <54F4C185.9080808@wwwdotorg.org> Date: Mon, 02 Mar 2015 13:01:09 -0700 From: Stephen Warren User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Sebastian Hesselbarth CC: Jason Cooper , Andrew Lunn , Gregory Clement , Gabriel Dobato , Wolfram Sang , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/4] i2c: mux-pinctrl: Rework to honor disabled child nodes References: <1424199129-22099-1-git-send-email-sebastian.hesselbarth@gmail.com> <1425039885-5137-1-git-send-email-sebastian.hesselbarth@gmail.com> <1425039885-5137-2-git-send-email-sebastian.hesselbarth@gmail.com> In-Reply-To: <1425039885-5137-2-git-send-email-sebastian.hesselbarth@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/27/2015 05:24 AM, Sebastian Hesselbarth wrote: > I2C mux pinctrl driver currently determines the number of sub-busses by > counting available pinctrl-names. Unfortunately, this requires each > incarnation of the devicetree node with different available sub-busses > to be rewritten. > > This patch reworks i2c-mux-pinctrl driver to count the number of > available sub-nodes instead. The rework should be compatible to the old > way of probing for sub-busses and additionally allows to disable unused > sub-busses with standard DT property status = "disabled". > > This also amends the corresponding devicetree binding documentation to > reflect the new functionality to disable unused sub-nodes. While at it, > also fix two references to binding documentation files that miss an "i2c-" > prefix. > diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pinctrl.txt > -For each named state defined in the pinctrl-names property, an I2C child bus > -will be created. I2C child bus numbers are assigned based on the index into > -the pinctrl-names property. > +For each enabled child node an I2C child bus will be created. I2C child bus > +numbers are assigned based on the order of child nodes. I think that I2C bus numbers are an internal concept for the OS. As such, we should probably remove any mention re: the bus numbers from the binding. > -The only exception is that no bus will be created for a state named "idle". If > -such a state is defined, it must be the last entry in pinctrl-names. For > -example: > +There must be a corresponding pinctrl-names entry for each enabled child > +node at the position of the child node's "reg" property. Also, there can be > +an idle pinctrl state defined at the end of possible pinctrl states. If such > +a state is defined, it must be the last entry in pinctrl-names. For example: What about gaps in the numbering sequence? IIRC, in a situation with 5 nodes with reg 0, 1, 2, 3, 4 but where only the nodes with reg of 1, 3 enabled, we only want 2 entries in pinctrl-names? If so, "at the position of the child node's "reg" property" isn't correct, since "at the position" implies there must be gaps in pinctrl-names. "In the same order as the reg property values for enabled subnodes" might be a better description. Perhaps I'm misremembering and you explicitly didn't want to remove entries from pinctrl-names if child nodes were disabled? If so, then surely then in the text above, "for each enabled child" should be replaced with "for each child"? > @@ -68,6 +68,7 @@ Example: > pinctrl-1 = <&state_i2cmux_pta>; > pinctrl-2 = <&state_i2cmux_idle>; > > + /* Enabled child bus 0 */ > i2c@0 { > reg = <0>; > #address-cells = <1>; > @@ -79,10 +80,12 @@ Example: > }; > }; > > + /* Disabled child bus 1 */ > i2c@1 { > reg = <1>; > #address-cells = <1>; > #size-cells = <0>; > + status = "disabled"; To make the example cover more cases, perhaps make child node i2c@0 disabled and i2c@1 enabled. Then, the example would show what happens to pinctrl-names when there are gaps in the reg property numbering space of enabled children?