• Douglas Anderson's avatar
    pinctrl: qcom: Support OUTPUT_ENABLE; deprecate INPUT_ENABLE · e49eabe3
    Douglas Anderson authored
    The Qualcomm pinctrl driver has been violating the documented meaning
    of PIN_CONFIG_INPUT_ENABLE. That documentation says:
    
      Note that this does not affect the pin's ability to drive output.
    
    ...yet the Qualcomm driver's sole action when asked to "enable input"
    on a pin is to disable its output.
    
    The Qualcomm driver's implementation stems from the fact that
    "output-disable" is a "new" property from 2017. It was introduced in
    commit 42556242 ("pinctrl: generic: Add output-enable
    property"). The "input-enable" handling in Qualcomm drivers is from
    2015 introduced in commit 407f5e39 ("pinctrl: qcom: handle
    input-enable pinconf property").
    
    Let's change the Qualcomm driver to move us in the right direction. As
    part of this:
    1. We'll now support PIN_CONFIG_OUTPUT_ENABLE
    2. We'll still support using PIN_CONFIG_INPUT_ENABLE to disable a
       pin's output (in violation of the docs) with a big comment in the
       code. This is needed because old device trees have "input-enable"
       in them and, in some cases, people might need the old
       behavior. While we could programmatically change all old device
       trees, it doesn't really hurt to keep supporting the old behavior
       and we're _supposed_ to try to be compatible with old device trees
       anyway.
    
    It can also be noted that the PIN_CONFIG_INPUT_ENABLE handling code
    seems to have purposefully ignored its argument. That means that old
    boards that had _either_ "input-disable" or "input-enable" in them
    would have had the effect of disabling a pin's output. While we could
    change this behavior, since we're only leaving the
    PIN_CONFIG_INPUT_ENABLE there for backward compatibility we might as
    well be fully backward compatible.
    
    NOTE: despite the fact that we'll still support
    PIN_CONFIG_INPUT_ENABLE for _setting_ config, we take it away from
    msm_config_group_get(). This appears to be only used for populating
    debugfs and fixing debugfs to "output enabled" where relevant instead
    of "input enabled" makes more sense and has more truthiness.
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Reviewed-by: default avatarBjorn Andersson <andersson@kernel.org>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20230323102605.8.Id740ae6a993f9313b58add6b10f6a92795d510d4@changeidSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    e49eabe3
pinctrl-msm.c 40.9 KB