Hi Peter, On 29/11/21 1:45 pm, Peter Rosin wrote: > > > On 2021-11-29 05:36, Aswath Govindraju wrote: >> Hi Peter, >> >> On 25/11/21 7:05 pm, Peter Rosin wrote: >>> Hi! >>> >>> You need to have some description on how #mux-control-cells now work. >>> The previous description is in mux-consumer.yaml and an update there >>> is needed. >>> >>> However, I have realized that the adg792a binding uses #mux-control-cells >>> to indicate if it should expose its three muxes with one mux-control >>> and operate the muxes in parallel, or if it should be expose three >>> independent mux-controls. So, the approach in this series to always >>> have the #mux-control-cells property fixed at <2> when indicating a >>> state will not work for that binding. And I see no fix for that binding >>> without adding a new property. >>> >>> So, I would like a different approach. Since I dislike how mux-controls >>> -after this series- is not (always) specifying a mux-control like the name >>> says, but instead optionally a specific state, the new property I would >>> like to add is #mux-state-cells such that it would always be one more >>> than #mux-control-cells. >>> >>> mux: mux-controller { >>> compatible = "gpio-mux"; >>> #mux-control-cells = <0>; >>> #mux-state-cells = <1>; >>> >>> mux-gpios = <...>; >>> }; >>> >>> can-phy { >>> compatible = "ti,tcan1043"; >>> ... >>> mux-states = <&mux 1>; >>> }; >>> >>> That solves the naming issue, the unused argument for mux-conrtrollers >>> that previously had #mux-control-cells = <0>, and the binding for adg792a >>> need no longer be inconsistent. >>> >>> Or, how should this be solved? I'm sure there are other options... >>> >> >> >> I feel that the new approach using mux-state-cells seems to be >> overpopulating the device tree nodes, when the state can be represented >> using the control cells. I understand that the definition for >> mux-controls is to only specify the control line to be used in a given >> mux. Can't it now be upgraded to also represent the state at which the >> control line has to be set to? >> >> With respect to adg792a, it is inline with the current implementation >> and the only change I think would be required in the driver is, > > No, that does not work. See below. > >> >> diff --git a/drivers/mux/adg792a.c b/drivers/mux/adg792a.c >> index e8fc2fc1ab09..2cd3bb8a40d4 100644 >> --- a/drivers/mux/adg792a.c >> +++ b/drivers/mux/adg792a.c >> @@ -73,8 +73,6 @@ static int adg792a_probe(struct i2c_client *i2c) >> ret = device_property_read_u32(dev, "#mux-control-cells", &cells); >> if (ret < 0) >> return ret; >> - if (cells >= 2) >> - return -EINVAL; >> >> mux_chip = devm_mux_chip_alloc(dev, cells ? 3 : 1, 0); > > When you add cell #2 with the state, the cells variable will end up > as 2 always. Which means that there is no way to alloc one mux > control since "cells ? 3 : 1" will always end up as "3", with no > easy fix. > > So, your approach does not work for this driver. > Sorry, but how is this different from the case of #mux-control-cells = 1 If #mux-control-cells is equal to 1 it means the consumer will use a given control line from the mux chip. The same would be the case when we will be using, #mux-control-cells is equal to 2, except we can also provide the state. If the consumer will use all the lines then #mux-control-cells will be set to 0. In this condition the state can't be provided from the DT and the consumer will be controlling the entire mux chip. If #mux-control-cells is greater than 0 then we will not be able to provide multiple lines of control using a single mux-controls entry(mux-controls = <...>;) right? We would have the using multiple mux-controls entries(mux-controls = <...>, <...>;). Thanks, Aswath > Cheers, > Peter > >> if (IS_ERR(mux_chip)) >> >> And the following series should be compatible with it. If adg792a driver >> is the only issue then would there be any issue with only changing it >> and using this implementation? >> >> Thanks, >> Aswath >> >> >> >> >>> Cheers, >>> Peter >>> >>> On 2021-11-23 09:12, Aswath Govindraju wrote: >>>> Increase the allowed number of arguments in mux-controls to add support for >>>> passing information regarding the state of the mux to be set, for a given >>>> device. >>>> >>>> Signed-off-by: Aswath Govindraju <a-govindraju@xxxxxx> >>>> --- >>>> Documentation/devicetree/bindings/mux/gpio-mux.yaml | 2 +- >>>> Documentation/devicetree/bindings/mux/mux-controller.yaml | 2 +- >>>> 2 files changed, 2 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/Documentation/devicetree/bindings/mux/gpio-mux.yaml b/Documentation/devicetree/bindings/mux/gpio-mux.yaml >>>> index 0a7c8d64981a..c810b7df39de 100644 >>>> --- a/Documentation/devicetree/bindings/mux/gpio-mux.yaml >>>> +++ b/Documentation/devicetree/bindings/mux/gpio-mux.yaml >>>> @@ -26,7 +26,7 @@ properties: >>>> List of gpios used to control the multiplexer, least significant bit first. >>>> >>>> '#mux-control-cells': >>>> - const: 0 >>>> + enum: [ 0, 1, 2 ] >>>> >>>> idle-state: >>>> default: -1 >>>> diff --git a/Documentation/devicetree/bindings/mux/mux-controller.yaml b/Documentation/devicetree/bindings/mux/mux-controller.yaml >>>> index 736a84c3b6a5..0b4b067a97bf 100644 >>>> --- a/Documentation/devicetree/bindings/mux/mux-controller.yaml >>>> +++ b/Documentation/devicetree/bindings/mux/mux-controller.yaml >>>> @@ -73,7 +73,7 @@ properties: >>>> pattern: '^mux-controller(@.*|-[0-9a-f]+)?$' >>>> >>>> '#mux-control-cells': >>>> - enum: [ 0, 1 ] >>>> + enum: [ 0, 1, 2 ] >>>> >>>> idle-state: >>>> $ref: /schemas/types.yaml#/definitions/int32 >>>> >> >