blob: 74c04ab87cdf48bc0e7e27b17a9d06e77941cfb7 [file] [log] [blame]
Robert Markoe7a34f12020-07-06 10:37:54 +02001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Qualcomm IPQ40xx pinctrl
4 *
5 * Copyright (c) 2019 Sartura Ltd.
6 *
7 * Author: Robert Marko <robert.marko@sartura.hr>
8 */
9
Robert Markoe7a34f12020-07-06 10:37:54 +020010#include <common.h>
Caleb Connollycdc0d082023-11-14 12:55:41 +000011#include <dm.h>
Robert Markoe7a34f12020-07-06 10:37:54 +020012
Caleb Connollycdc0d082023-11-14 12:55:41 +000013#include "pinctrl-qcom.h"
Robert Markoe7a34f12020-07-06 10:37:54 +020014
Caleb Connollycdc0d082023-11-14 12:55:41 +000015#define MAX_PIN_NAME_LEN 32
16static char pin_name[MAX_PIN_NAME_LEN] __section(".data");
Robert Markoe7a34f12020-07-06 10:37:54 +020017static const struct pinctrl_function msm_pinctrl_functions[] = {
18 {"gpio", 0},
19 {"blsp_uart0_0", 1}, /* Only for GPIO:16,17 */
20 {"blsp_uart0_1", 2}, /* Only for GPIO:60,61 */
21 {"blsp_uart1", 1},
Robert Markoda344232020-10-08 22:05:10 +020022 {"blsp_spi0_0", 1}, /* Only for GPIO:12,13,14,15 */
23 {"blsp_spi0_1", 2}, /* Only for GPIO:54,55,56,57 */
24 {"blsp_spi1", 2},
Robert Marko6649aa82020-10-08 22:05:12 +020025 {"mdio_0", 1}, /* Only for GPIO6 */
26 {"mdio_1", 2}, /* Only for GPIO53 */
27 {"mdc_0", 1}, /* Only for GPIO7 */
28 {"mdc_1", 2}, /* Only for GPIO52 */
Robert Markoe7a34f12020-07-06 10:37:54 +020029};
Robert Markoe7a34f12020-07-06 10:37:54 +020030static const char *ipq4019_get_function_name(struct udevice *dev,
31 unsigned int selector)
32{
33 return msm_pinctrl_functions[selector].name;
34}
35
36static const char *ipq4019_get_pin_name(struct udevice *dev,
37 unsigned int selector)
38{
39 snprintf(pin_name, MAX_PIN_NAME_LEN, "GPIO_%u", selector);
40 return pin_name;
41}
42
43static unsigned int ipq4019_get_function_mux(unsigned int selector)
44{
45 return msm_pinctrl_functions[selector].val;
46}
47
Caleb Connollycdc0d082023-11-14 12:55:41 +000048static const struct msm_pinctrl_data ipq4019_data = {
Caleb Connolly190005c2024-02-26 17:26:17 +000049 .pin_data = {
50 .pin_count = 100,
51 .special_pins_start = 100, /* There are no special pins */
52 },
Robert Markoe7a34f12020-07-06 10:37:54 +020053 .functions_count = ARRAY_SIZE(msm_pinctrl_functions),
54 .get_function_name = ipq4019_get_function_name,
55 .get_function_mux = ipq4019_get_function_mux,
56 .get_pin_name = ipq4019_get_pin_name,
57};
Caleb Connollycdc0d082023-11-14 12:55:41 +000058
59static const struct udevice_id msm_pinctrl_ids[] = {
60 { .compatible = "qcom,ipq4019-pinctrl", .data = (ulong)&ipq4019_data },
61 { /* Sentinal */ }
62};
63
64U_BOOT_DRIVER(pinctrl_ipq4019) = {
65 .name = "pinctrl_ipq4019",
66 .id = UCLASS_NOP,
67 .of_match = msm_pinctrl_ids,
68 .ops = &msm_pinctrl_ops,
69 .bind = msm_pinctrl_bind,
70};