Hi Caleb,

On Wed, 22 Jan 2025 at 16:03, Caleb Connolly <caleb.conno...@linaro.org> wrote:
>
> Introduce a pinctrl driver for SC7280/QCM6490, this is used by the RB3
> Gen 2, FairPhone 5 and other devices.
>
> Signed-off-by: Caleb Connolly <caleb.conno...@linaro.org>

I tested this series on an rb3gen2, seems to work fine.

Tested-by: Christopher Obbard <christopher.obb...@linaro.org>

> ---
>  drivers/pinctrl/qcom/Kconfig          |   7 +++
>  drivers/pinctrl/qcom/Makefile         |   1 +
>  drivers/pinctrl/qcom/pinctrl-sc7280.c | 106 
> ++++++++++++++++++++++++++++++++++
>  3 files changed, 114 insertions(+)
>
> diff --git a/drivers/pinctrl/qcom/Kconfig b/drivers/pinctrl/qcom/Kconfig
> index 4f93a34281d5..1d510908d834 100644
> --- a/drivers/pinctrl/qcom/Kconfig
> +++ b/drivers/pinctrl/qcom/Kconfig
> @@ -40,8 +40,15 @@ config PINCTRL_QCOM_QCS404
>         help
>           Say Y here to enable support for pinctrl on the Snapdragon QCS404 
> SoC,
>           as well as the associated GPIO driver.
>
> +config PINCTRL_QCOM_SC7280
> +       bool "Qualcomm SC7280/QCM6490 GCC"

As per the other comments, should this be TLMM ?


> +       select PINCTRL_QCOM
> +       help
> +         Say Y here to enable support for pinctrl on the Snapdragon SC7280 
> SoC,
> +         as well as the associated GPIO driver.
> +
>  config PINCTRL_QCOM_SDM845
>         bool "Qualcomm SDM845 GCC"
>         select PINCTRL_QCOM
>         help
> diff --git a/drivers/pinctrl/qcom/Makefile b/drivers/pinctrl/qcom/Makefile
> index 43d0dd292225..8ed41b2e1d99 100644
> --- a/drivers/pinctrl/qcom/Makefile
> +++ b/drivers/pinctrl/qcom/Makefile
> @@ -7,8 +7,9 @@ obj-$(CONFIG_PINCTRL_QCOM_APQ8016) += pinctrl-apq8016.o
>  obj-$(CONFIG_PINCTRL_QCOM_IPQ4019) += pinctrl-ipq4019.o
>  obj-$(CONFIG_PINCTRL_QCOM_APQ8096) += pinctrl-apq8096.o
>  obj-$(CONFIG_PINCTRL_QCOM_QCM2290) += pinctrl-qcm2290.o
>  obj-$(CONFIG_PINCTRL_QCOM_QCS404) += pinctrl-qcs404.o
> +obj-$(CONFIG_PINCTRL_QCOM_SC7280) += pinctrl-sc7280.o
>  obj-$(CONFIG_PINCTRL_QCOM_SDM845) += pinctrl-sdm845.o
>  obj-$(CONFIG_PINCTRL_QCOM_SM6115) += pinctrl-sm6115.o
>  obj-$(CONFIG_PINCTRL_QCOM_SM8150) += pinctrl-sm8150.o
>  obj-$(CONFIG_PINCTRL_QCOM_SM8250) += pinctrl-sm8250.o
> diff --git a/drivers/pinctrl/qcom/pinctrl-sc7280.c 
> b/drivers/pinctrl/qcom/pinctrl-sc7280.c
> new file mode 100644
> index 000000000000..9aff9c81bc5f
> --- /dev/null
> +++ b/drivers/pinctrl/qcom/pinctrl-sc7280.c
> @@ -0,0 +1,106 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Qualcomm sc7280 pinctrl
> + *
> + * (C) Copyright 2024 Linaro Ltd.
> + *
> + */
> +
> +#include <dm.h>
> +
> +#include "pinctrl-qcom.h"
> +
> +#define WEST 0x00000000
> +#define SOUTH 0x00400000
> +#define NORTH 0x00800000
> +
> +#define MAX_PIN_NAME_LEN 32
> +static char pin_name[MAX_PIN_NAME_LEN] __section(".data");
> +
> +static const struct pinctrl_function msm_pinctrl_functions[] = {
> +       { "qup05", 1 },
> +       { "gpio", 0 },
> +       { "pcie1_clkreqn", 3},
> +};
> +#define SDC_PINGROUP(pg_name, ctl, pull, drv)          \
> +       {                                               \
> +               .name = pg_name,                        \
> +               .ctl_reg = ctl,                         \
> +               .io_reg = 0,                            \
> +               .pull_bit = pull,                       \
> +               .drv_bit = drv,                         \
> +               .oe_bit = -1,                           \
> +               .in_bit = -1,                           \
> +               .out_bit = -1,                          \
> +       }
> +
> +#define UFS_RESET(pg_name, offset)                     \
> +       {                                               \
> +               .name = pg_name,                        \
> +               .ctl_reg = offset,                      \
> +               .io_reg = offset + 0x4,                 \
> +               .pull_bit = 3,                          \
> +               .drv_bit = 0,                           \
> +               .oe_bit = -1,                           \
> +               .in_bit = -1,                           \
> +               .out_bit = 0,                           \
> +       }
> +
> +static const struct msm_special_pin_data sc7280_special_pins_data[] = {
> +       [0] = UFS_RESET("ufs_reset", SOUTH + 0xbe000),
> +       [1] = SDC_PINGROUP("sdc1_rclk", 0xb3004, 0, 6),
> +       [2] = SDC_PINGROUP("sdc1_clk", 0xb3000, 13, 6),
> +       [3] = SDC_PINGROUP("sdc1_cmd", 0xb3000, 11, 3),
> +       [4] = SDC_PINGROUP("sdc1_data", 0xb3000, 9, 0),
> +       [5] = SDC_PINGROUP("sdc2_clk", 0xb4000, 14, 6),
> +       [6] = SDC_PINGROUP("sdc2_cmd", 0xb4000, 11, 3),
> +       [7] = SDC_PINGROUP("sdc2_data", 0xb4000, 9, 0),
> +};
> +
> +static const char *sc7280_get_function_name(struct udevice *dev, unsigned 
> int selector)
> +{
> +       return msm_pinctrl_functions[selector].name;
> +}
> +
> +static const char *sc7280_get_pin_name(struct udevice *dev, unsigned int 
> selector)
> +{
> +       if (selector >= 175 && selector <= 182)
> +               snprintf(pin_name, MAX_PIN_NAME_LEN,
> +                        sc7280_special_pins_data[selector - 175].name);
> +       else
> +               snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector);
> +
> +       return pin_name;
> +}
> +
> +static unsigned int sc7280_get_function_mux(__maybe_unused unsigned int pin, 
> unsigned int selector)
> +{
> +       return msm_pinctrl_functions[selector].val;
> +}
> +
> +static struct msm_pinctrl_data sc7280_data = {
> +       .pin_data = {
> +               .pin_count = 183,
> +               .special_pins_start = 175,
> +               .special_pins_data = sc7280_special_pins_data,
> +       },
> +       .functions_count = ARRAY_SIZE(msm_pinctrl_functions),
> +       .get_function_name = sc7280_get_function_name,
> +       .get_function_mux = sc7280_get_function_mux,
> +       .get_pin_name = sc7280_get_pin_name,
> +};
> +
> +static const struct udevice_id msm_pinctrl_ids[] = {
> +       {
> +               .compatible = "qcom,sc7280-pinctrl",
> +               .data = (ulong)&sc7280_data
> +       },
> +       { /* Sentinel */ } };
> +
> +U_BOOT_DRIVER(pinctrl_sc7280) = {
> +       .name = "pinctrl_sc7280",
> +       .id = UCLASS_NOP,
> +       .of_match = msm_pinctrl_ids,
> +       .ops = &msm_pinctrl_ops,
> +       .bind = msm_pinctrl_bind,
> +};
>
> --
> 2.48.0
>

Reply via email to