mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 22:03:15 +00:00
2c2cc3e9c0
The pinctrl and GPIO drivers are currently heavily incompatible with upstream. Most Qualcomm pinctrl blocks feature "tiles" of pins, each at it's own address. Introduce support for these by allowing the soc driver to specify per-pin register offsets similarly to the Linux driver. Adjust the GPIO driver to handle these too, and finally enable support for all pins with the same numbering as used in Linux. Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Qualcomm APQ8016 pinctrl
|
|
*
|
|
* (C) Copyright 2018 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",
|
|
"QDSD_CLK",
|
|
"QDSD_CMD",
|
|
"QDSD_DATA0",
|
|
"QDSD_DATA1",
|
|
"QDSD_DATA2",
|
|
"QDSD_DATA3",
|
|
};
|
|
|
|
static const struct pinctrl_function msm_pinctrl_functions[] = {
|
|
{"blsp1_uart", 2},
|
|
};
|
|
|
|
static const char *apq8016_get_function_name(struct udevice *dev,
|
|
unsigned int selector)
|
|
{
|
|
return msm_pinctrl_functions[selector].name;
|
|
}
|
|
|
|
static const char *apq8016_get_pin_name(struct udevice *dev,
|
|
unsigned int selector)
|
|
{
|
|
if (selector < 122) {
|
|
snprintf(pin_name, MAX_PIN_NAME_LEN, "GPIO_%u", selector);
|
|
return pin_name;
|
|
} else {
|
|
return msm_pinctrl_pins[selector - 122];
|
|
}
|
|
}
|
|
|
|
static unsigned int apq8016_get_function_mux(unsigned int selector)
|
|
{
|
|
return msm_pinctrl_functions[selector].val;
|
|
}
|
|
|
|
static const struct msm_pinctrl_data apq8016_data = {
|
|
.pin_data = { .pin_count = 133, },
|
|
.functions_count = ARRAY_SIZE(msm_pinctrl_functions),
|
|
.get_function_name = apq8016_get_function_name,
|
|
.get_function_mux = apq8016_get_function_mux,
|
|
.get_pin_name = apq8016_get_pin_name,
|
|
};
|
|
|
|
static const struct udevice_id msm_pinctrl_ids[] = {
|
|
{ .compatible = "qcom,msm8916-pinctrl", .data = (ulong)&apq8016_data },
|
|
{ /* Sentinal */ }
|
|
};
|
|
|
|
U_BOOT_DRIVER(pinctrl_apq8016) = {
|
|
.name = "pinctrl_apq8016",
|
|
.id = UCLASS_NOP,
|
|
.of_match = msm_pinctrl_ids,
|
|
.ops = &msm_pinctrl_ops,
|
|
.bind = msm_pinctrl_bind,
|
|
};
|