u-boot/drivers/pinctrl/qcom/pinctrl-apq8096.c
Volodymyr Babchuk 493f069062
pinctrl: qcom: pass pin number to get_function_mux callback
This patch is the preparation for SM8150 support. This new SoC
depending on the particular pin can have different numbers for the
same function. For example "rgmii" function for GPIO4 has id=2 while
for GPIO59 it has id=1. So, to support this type of SoCs,
get_function_mux() callback needs to know for which pin the function
is requested.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-04-04 17:46:45 +02:00

76 lines
1.7 KiB
C

// SPDX-License-Identifier: GPL-2.0+
/*
* Qualcomm APQ8096 pinctrl
*
* (C) Copyright 2019 Ramon Fried <ramon.fried@gmail.com>
*
*/
#include <common.h>
#include <dm.h>
#include "pinctrl-qcom.h"
#define MAX_PIN_NAME_LEN 32
static char pin_name[MAX_PIN_NAME_LEN] __section(".data");
static const char * const msm_pinctrl_pins[] = {
"sdc1_clk",
"sdc1_cmd",
"sdc1_data",
"sdc2_clk",
"sdc2_cmd",
"sdc2_data",
"sdc1_rclk",
};
static const struct pinctrl_function msm_pinctrl_functions[] = {
{"blsp_uart8", 2},
};
static const char *apq8096_get_function_name(struct udevice *dev,
unsigned int selector)
{
return msm_pinctrl_functions[selector].name;
}
static const char *apq8096_get_pin_name(struct udevice *dev,
unsigned int selector)
{
if (selector < 150) {
snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector);
return pin_name;
} else {
return msm_pinctrl_pins[selector - 150];
}
}
static unsigned int apq8096_get_function_mux(__maybe_unused unsigned int pin,
unsigned int selector)
{
return msm_pinctrl_functions[selector].val;
}
static const struct msm_pinctrl_data apq8096_data = {
.pin_data = {
.pin_count = 157,
.special_pins_start = 150,
},
.functions_count = ARRAY_SIZE(msm_pinctrl_functions),
.get_function_name = apq8096_get_function_name,
.get_function_mux = apq8096_get_function_mux,
.get_pin_name = apq8096_get_pin_name,
};
static const struct udevice_id msm_pinctrl_ids[] = {
{ .compatible = "qcom,msm8996-pinctrl", .data = (ulong)&apq8096_data },
{ /* Sentinal */ }
};
U_BOOT_DRIVER(pinctrl_apq8096) = {
.name = "pinctrl_apq8096",
.id = UCLASS_NOP,
.of_match = msm_pinctrl_ids,
.ops = &msm_pinctrl_ops,
.bind = msm_pinctrl_bind,
};