1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * AMD ISP Pinctrl Driver 4 * 5 * Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. 6 * 7 */ 8 9 static const struct pinctrl_pin_desc amdisp_pins[] = { 10 PINCTRL_PIN(0, "GPIO_0"), /* sensor0 control */ 11 PINCTRL_PIN(1, "GPIO_1"), /* sensor1 control */ 12 PINCTRL_PIN(2, "GPIO_2"), /* sensor2 control */ 13 }; 14 15 #define AMDISP_GPIO_PINS(pin) \ 16 static const unsigned int gpio##pin##_pins[] = { pin } 17 AMDISP_GPIO_PINS(0); 18 AMDISP_GPIO_PINS(1); 19 AMDISP_GPIO_PINS(2); 20 21 static const unsigned int amdisp_range_pins[] = { 22 0, 1, 2 23 }; 24 25 static const char * const amdisp_range_pins_name[] = { 26 "gpio0", "gpio1", "gpio2" 27 }; 28 29 enum amdisp_functions { 30 mux_gpio, 31 mux_NA 32 }; 33 34 static const char * const gpio_groups[] = { 35 "gpio0", "gpio1", "gpio2" 36 }; 37 38 /** 39 * struct amdisp_function - a pinmux function 40 * @name: Name of the pinmux function. 41 * @groups: List of pingroups for this function. 42 * @ngroups: Number of entries in @groups. 43 */ 44 struct amdisp_function { 45 const char *name; 46 const char * const *groups; 47 unsigned int ngroups; 48 }; 49 50 #define FUNCTION(fname) \ 51 [mux_##fname] = { \ 52 .name = #fname, \ 53 .groups = fname##_groups, \ 54 .ngroups = ARRAY_SIZE(fname##_groups), \ 55 } 56 57 static const struct amdisp_function amdisp_functions[] = { 58 FUNCTION(gpio), 59 }; 60 61 /** 62 * struct amdisp_pingroup - a pinmux group 63 * @name: Name of the pinmux group. 64 * @pins: List of pins for this group. 65 * @npins: Number of entries in @pins. 66 * @funcs: List of functions belongs to this group. 67 * @nfuncs: Number of entries in @funcs. 68 * @offset: Group offset in amdisp pinmux groups. 69 */ 70 struct amdisp_pingroup { 71 const char *name; 72 const unsigned int *pins; 73 unsigned int npins; 74 unsigned int *funcs; 75 unsigned int nfuncs; 76 unsigned int offset; 77 }; 78 79 #define PINGROUP(id, f0) \ 80 { \ 81 .name = "gpio" #id, \ 82 .pins = gpio##id##_pins, \ 83 .npins = ARRAY_SIZE(gpio##id##_pins), \ 84 .funcs = (int[]){ \ 85 mux_##f0, \ 86 }, \ 87 .nfuncs = 1, \ 88 .offset = id, \ 89 } 90 91 static const struct amdisp_pingroup amdisp_groups[] = { 92 PINGROUP(0, gpio), 93 PINGROUP(1, gpio), 94 PINGROUP(2, gpio), 95 }; 96