[PATCH v2 08/32] gpio: qcom_pmic: 1-based GPIOs
Neil Armstrong
neil.armstrong at linaro.org
Thu Dec 21 17:18:12 CET 2023
On 19/12/2023 17:04, Caleb Connolly wrote:
> Qualcomm PMICs number their GPIOs starting from 1, implement a custom
> .xlate method to handle this.
>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
> drivers/gpio/qcom_pmic_gpio.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c
> index 6167c8411678..2a4fef8d28cb 100644
> --- a/drivers/gpio/qcom_pmic_gpio.c
> +++ b/drivers/gpio/qcom_pmic_gpio.c
> @@ -209,12 +209,34 @@ static int qcom_gpio_set_value(struct udevice *dev, unsigned offset,
> REG_CTL_OUTPUT_MASK, !!value);
> }
>
> +static int qcom_gpio_xlate(struct udevice *dev, struct gpio_desc *desc,
> + struct ofnode_phandle_args *args)
> +{
> + struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
> +
> + if (args->args_count < 1)
> + return -EINVAL;
> +
> + /* GPIOs in DT are 1-based */
> + desc->offset = args->args[0] - 1;
> + if (desc->offset >= uc_priv->gpio_count)
> + return -EINVAL;
> +
> + if (args->args_count < 2)
> + return 0;
> +
> + desc->flags = gpio_flags_xlate(args->args[1]);
> +
> + return 0;
> +}
> +
> static const struct dm_gpio_ops qcom_gpio_ops = {
> .direction_input = qcom_gpio_direction_input,
> .direction_output = qcom_gpio_direction_output,
> .get_value = qcom_gpio_get_value,
> .set_value = qcom_gpio_set_value,
> .get_function = qcom_gpio_get_function,
> + .xlate = qcom_gpio_xlate,
> };
>
> static int qcom_gpio_probe(struct udevice *dev)
>
Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>
More information about the U-Boot
mailing list