]>
Commit | Line | Data |
---|---|---|
ad97051b RF |
1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | |
3 | * Qualcomm APQ8016 pinctrl | |
4 | * | |
5 | * (C) Copyright 2018 Ramon Fried <ramon.fried@gmail.com> | |
6 | * | |
7 | */ | |
8 | ||
d678a59d | 9 | #include <common.h> |
53b2c7af CC |
10 | #include <dm.h> |
11 | ||
12 | #include "pinctrl-qcom.h" | |
ad97051b RF |
13 | |
14 | #define MAX_PIN_NAME_LEN 32 | |
548b89f8 | 15 | static char pin_name[MAX_PIN_NAME_LEN] __section(".data"); |
ad97051b | 16 | static const char * const msm_pinctrl_pins[] = { |
97487ac7 CC |
17 | "sdc1_clk", |
18 | "sdc1_cmd", | |
19 | "sdc1_data", | |
20 | "sdc2_clk", | |
21 | "sdc2_cmd", | |
22 | "sdc2_data", | |
23 | "qdsd_clk", | |
24 | "qdsd_cmd", | |
25 | "qdsd_data0", | |
26 | "qdsd_data1", | |
27 | "qdsd_data2", | |
28 | "qdsd_data3", | |
ad97051b RF |
29 | }; |
30 | ||
31 | static const struct pinctrl_function msm_pinctrl_functions[] = { | |
095d96d6 | 32 | {"gpio", 0}, |
6e992a6b | 33 | {"blsp_uart1", 2}, |
c744e630 | 34 | {"blsp_uart2", 2}, |
ad97051b RF |
35 | }; |
36 | ||
37 | static const char *apq8016_get_function_name(struct udevice *dev, | |
38 | unsigned int selector) | |
39 | { | |
40 | return msm_pinctrl_functions[selector].name; | |
41 | } | |
42 | ||
43 | static const char *apq8016_get_pin_name(struct udevice *dev, | |
44 | unsigned int selector) | |
45 | { | |
8d24a477 | 46 | if (selector < 122) { |
97487ac7 | 47 | snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector); |
ad97051b RF |
48 | return pin_name; |
49 | } else { | |
8d24a477 | 50 | return msm_pinctrl_pins[selector - 122]; |
ad97051b RF |
51 | } |
52 | } | |
53 | ||
493f0690 VB |
54 | static unsigned int apq8016_get_function_mux(__maybe_unused unsigned int pin, |
55 | unsigned int selector) | |
ad97051b RF |
56 | { |
57 | return msm_pinctrl_functions[selector].val; | |
58 | } | |
59 | ||
53b2c7af | 60 | static const struct msm_pinctrl_data apq8016_data = { |
a245aece CC |
61 | .pin_data = { |
62 | .pin_count = 133, | |
63 | .special_pins_start = 122, | |
64 | }, | |
ad97051b RF |
65 | .functions_count = ARRAY_SIZE(msm_pinctrl_functions), |
66 | .get_function_name = apq8016_get_function_name, | |
67 | .get_function_mux = apq8016_get_function_mux, | |
68 | .get_pin_name = apq8016_get_pin_name, | |
69 | }; | |
53b2c7af CC |
70 | |
71 | static const struct udevice_id msm_pinctrl_ids[] = { | |
72 | { .compatible = "qcom,msm8916-pinctrl", .data = (ulong)&apq8016_data }, | |
73 | { /* Sentinal */ } | |
74 | }; | |
75 | ||
76 | U_BOOT_DRIVER(pinctrl_apq8016) = { | |
77 | .name = "pinctrl_apq8016", | |
78 | .id = UCLASS_NOP, | |
79 | .of_match = msm_pinctrl_ids, | |
80 | .ops = &msm_pinctrl_ops, | |
81 | .bind = msm_pinctrl_bind, | |
8048976e | 82 | .flags = DM_FLAG_PRE_RELOC, |
53b2c7af | 83 | }; |