blob: 48644a51aec43658fcbd44ac52ab18a144f8fb9b [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{
Robert Markof3061132024-04-22 13:43:26 +020039 snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector);
Robert Markoe7a34f12020-07-06 10:37:54 +020040 return pin_name;
41}
42
Volodymyr Babchukc4cc9792024-03-11 21:33:46 +000043static unsigned int ipq4019_get_function_mux(__maybe_unused unsigned int pin,
44 unsigned int selector)
Robert Markoe7a34f12020-07-06 10:37:54 +020045{
46 return msm_pinctrl_functions[selector].val;
47}
48
Caleb Connollycdc0d082023-11-14 12:55:41 +000049static const struct msm_pinctrl_data ipq4019_data = {
Caleb Connolly190005c2024-02-26 17:26:17 +000050 .pin_data = {
51 .pin_count = 100,
52 .special_pins_start = 100, /* There are no special pins */
53 },
Robert Markoe7a34f12020-07-06 10:37:54 +020054 .functions_count = ARRAY_SIZE(msm_pinctrl_functions),
55 .get_function_name = ipq4019_get_function_name,
56 .get_function_mux = ipq4019_get_function_mux,
57 .get_pin_name = ipq4019_get_pin_name,
58};
Caleb Connollycdc0d082023-11-14 12:55:41 +000059
60static const struct udevice_id msm_pinctrl_ids[] = {
61 { .compatible = "qcom,ipq4019-pinctrl", .data = (ulong)&ipq4019_data },
62 { /* Sentinal */ }
63};
64
65U_BOOT_DRIVER(pinctrl_ipq4019) = {
66 .name = "pinctrl_ipq4019",
67 .id = UCLASS_NOP,
68 .of_match = msm_pinctrl_ids,
69 .ops = &msm_pinctrl_ops,
70 .bind = msm_pinctrl_bind,
Robert Markofcda95d2024-04-22 13:43:27 +020071 .flags = DM_FLAG_PRE_RELOC,
Caleb Connollycdc0d082023-11-14 12:55:41 +000072};