Skip to content

Commit

Permalink
pinctrl: qcom: lpass-lpi: set output value before enabling output
Browse files Browse the repository at this point in the history
commit 163bfb0 upstream.

As per Hardware Programming Guide, when configuring pin as output,
set the pin value before setting output-enable (OE).  Similar approach
is in main SoC TLMM pin controller.

Cc: <stable@vger.kernel.org>
Fixes: 6e261d1 ("pinctrl: qcom: Add sm8250 lpass lpi pinctrl driver")
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Link: https://lore.kernel.org/r/20230309154949.658380-1-krzysztof.kozlowski@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
krzk authored and gregkh committed May 11, 2023
1 parent b6ad9fa commit fd3b420
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/pinctrl/qcom/pinctrl-lpass-lpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,15 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
}
}

/*
* As per Hardware Programming Guide, when configuring pin as output,
* set the pin value before setting output-enable (OE).
*/
if (output_enabled) {
val = u32_encode_bits(value ? 1 : 0, LPI_GPIO_VALUE_OUT_MASK);
lpi_gpio_write(pctrl, group, LPI_GPIO_VALUE_REG, val);
}

val = lpi_gpio_read(pctrl, group, LPI_GPIO_CFG_REG);

u32p_replace_bits(&val, pullup, LPI_GPIO_PULL_MASK);
Expand All @@ -230,11 +239,6 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,

lpi_gpio_write(pctrl, group, LPI_GPIO_CFG_REG, val);

if (output_enabled) {
val = u32_encode_bits(value ? 1 : 0, LPI_GPIO_VALUE_OUT_MASK);
lpi_gpio_write(pctrl, group, LPI_GPIO_VALUE_REG, val);
}

return 0;
}

Expand Down

0 comments on commit fd3b420

Please sign in to comment.