On 09/07/2012 07:55 PM, Tony Lindgren wrote:
> * Peter Ujfalusi <peter.ujfal...@ti.com> [120907 08:13]:
>> On 09/06/2012 10:10 PM, Tony Lindgren wrote:
>>>
>>> Is it now safe to assume that we always have width of three if
>>> pinctrl-single,bits is specified? The reason I'm asking is..
>>>
>>>> @@ -657,18 +664,29 @@ static int pcs_parse_one_pinctrl_entry(struct 
>>>> pcs_device *pcs,
>>>>  {
>>>>    struct pcs_func_vals *vals;
>>>>    const __be32 *mux;
>>>> -  int size, rows, *pins, index = 0, found = 0, res = -ENOMEM;
>>>> +  int size, params, rows, *pins, index = 0, found = 0, res = -ENOMEM;
>>>>    struct pcs_function *function;
>>>>  
>>>> -  mux = of_get_property(np, PCS_MUX_NAME, &size);
>>>> -  if ((!mux) || (size < sizeof(*mux) * 2)) {
>>>> -          dev_err(pcs->dev, "bad data for mux %s\n",
>>>> -                  np->name);
>>>> +  mux = of_get_property(np, PCS_MUX_PINS_NAME, &size);
>>>> +  if (mux) {
>>>> +          params = 2;
>>>> +  } else {
>>>> +          mux = of_get_property(np, PCS_MUX_BITS_NAME, &size);
>>>> +          if (!mux) {
>>>> +                  dev_err(pcs->dev, "no valid property for %s\n",
>>>> +                          np->name);
>>>> +                  return -EINVAL;
>>>> +          }
>>>> +          params = 3;
>>>> +  }
>>>
>>> ..because here we could assume the default value for params is 2
>>> if pinctrl-single,pins is specified, and otherwise params is 3
>>> if pinctrl-single,bits is specified for the controller. That would
>>> avoid querying a potentially non-exiting property for each entry.
>>>
>>>> @@ -686,6 +704,10 @@ static int pcs_parse_one_pinctrl_entry(struct 
>>>> pcs_device *pcs,
>>>>            val = be32_to_cpup(mux + index++);
>>>>            vals[found].reg = pcs->base + offset;
>>>>            vals[found].val = val;
>>>> +          if (params == 3) {
>>>> +                  val = be32_to_cpup(mux + index++);
>>>> +                  vals[found].mask = val;
>>>> +          }
>>>>  
>>>>            pin = pcs_get_pin_by_offset(pcs, offset);
>>>>            if (pin < 0) {
>>>
>>> Here params too would be then set during probe already.
>>
>> I'm afraid you lost me here...
>> We only know if the user specified the mux configuration with
>> pinctrl-single,pins or  pinctrl-single,bits in this function.
> 
> Sorry right, yeah we don't know that at probe time currently.
> 
> I'd like to have something that specifies the controller type so
> we don't need to mix two types of controllers and test for
> non-existing properties when parsing the pins.
> 
> How about we require something specified for the pinctrl driver
> in the "one-bit-per-mux" case like pinctrl-single,bit-per-mux?
> 
> And then in the pinctrl-single probe we set params = 3 if
> pinctrl-single,bit-per-mux is specified. And if no
> pinctrl-single,bit-per-mux is specified then set params = 2.
> 
> That way pcs_parse_one_pinctrl_entry() can just test for params.
> 
> Sorry I don't have a better name in mind than bit-per-mux..

I'm not sure if this would make things more prone to error or make the DTS or
the code more clean in any ways.

Both pinctrl-single,pins and pinctrl-single,bits works on top of the same
pinctrl-single area.
In most cases we are going to use pinctrl-single,pins for the mux
configuration and only in few places we need to fall back to 
pinctrl-single,bits.

With this patch we will have maximum of two query to find out which type is
used, while if we add the 'bit-per-mux' property we will always have need to
have two of_get_property() call to figure out what is used.
IMHO in this way we could also have copy-paste errors coming at us when adding
the mux configurations for the pins and at the end we also need to do same
safety/sanity checks if the user really provided the correct type with
correlation to the 'bit-per-mux'.

This would just complicate the code.
The existence of pinctrl-single,pins or pinctrl-single,bits property alone
gives enough information for the number of parameters.

>  
>> One thing I could do to make the code a bit better to look at is:
>> int params = 2;
>>
>> mux = of_get_property(np, PCS_MUX_PINS_NAME, &size);
>> if (!mux) {
>>      mux = of_get_property(np, PCS_MUX_BITS_NAME, &size);
>>      if (!mux) {
>>              dev_err(pcs->dev, "no valid property for %s\n",
>>              np->name);
>>              return -EINVAL;
>>      }
>>      params = 3;
>> }
>>
>> This might make the code a bit more compact but at the same time one might
>> need to spend few more seconds to understand it.
> 
> Yes well there's no need to do of_get_property second guessing
> if we already know params from the pinctrl-single.c probe time.
> 
> I think we're safe to assume that we don't need to mix parsing
> two different types of configuration for the same controller
> as they can always be set up as separate controllers.
> 
> Regards,
> 
> Tony
> 


-- 
Péter
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to