From: kernel test robot <lkp@intel.com>
To: Sander Vanheule <sander@svanheule.net>,
Lee Jones <lee@kernel.org>, Pavel Machek <pavel@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Michael Walle <mwalle@kernel.org>,
Bartosz Golaszewski <brgl@bgdev.pl>
Cc: oe-kbuild-all@lists.linux.dev, linux-leds@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org,
Sander Vanheule <sander@svanheule.net>
Subject: Re: [PATCH v7 4/6] pinctrl: Add RTL8231 pin control and GPIO support
Date: Wed, 19 Nov 2025 05:19:28 +0800 [thread overview]
Message-ID: <202511190436.9oQLbI8A-lkp@intel.com> (raw)
In-Reply-To: <20251117215138.4353-5-sander@svanheule.net>
Hi Sander,
kernel test robot noticed the following build errors:
[auto build test ERROR on lee-mfd/for-mfd-next]
[also build test ERROR on lee-mfd/for-mfd-fixes lee-leds/for-leds-next linusw-pinctrl/devel linusw-pinctrl/for-next linus/master v6.18-rc6 next-20251118]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sander-Vanheule/dt-bindings-leds-Binding-for-RTL8231-scan-matrix/20251118-055707
base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
patch link: https://lore.kernel.org/r/20251117215138.4353-5-sander%40svanheule.net
patch subject: [PATCH v7 4/6] pinctrl: Add RTL8231 pin control and GPIO support
config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20251119/202511190436.9oQLbI8A-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251119/202511190436.9oQLbI8A-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511190436.9oQLbI8A-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
>> drivers/pinctrl/pinctrl-rtl8231.c:28:27: error: expected identifier or '(' before ':' token
28 | enum rtl8231_pin_function : uintptr_t {
| ^
>> drivers/pinctrl/pinctrl-rtl8231.c:35:35: error: field 'flag' has incomplete type
35 | enum rtl8231_pin_function flag;
| ^~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:46:34: error: 'RTL8231_PIN_FUNCTION_GPIO' undeclared here (not in a function); did you mean 'RTL8231_PIN_MODE_GPIO'?
46 | RTL8231_FUNCTION("gpio", RTL8231_PIN_FUNCTION_GPIO),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/pinctrl-rtl8231.c:41:26: note: in definition of macro 'RTL8231_FUNCTION'
41 | .flag = (_flag), \
| ^~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:47:33: error: 'RTL8231_PIN_FUNCTION_LED' undeclared here (not in a function); did you mean 'RTL8231_FUNCTION'?
47 | RTL8231_FUNCTION("led", RTL8231_PIN_FUNCTION_LED),
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/pinctrl-rtl8231.c:41:26: note: in definition of macro 'RTL8231_FUNCTION'
41 | .flag = (_flag), \
| ^~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:48:33: error: 'RTL8231_PIN_FUNCTION_PWM' undeclared here (not in a function); did you mean 'RTL8231_FUNCTION'?
48 | RTL8231_FUNCTION("pwm", RTL8231_PIN_FUNCTION_PWM),
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/pinctrl-rtl8231.c:41:26: note: in definition of macro 'RTL8231_FUNCTION'
41 | .flag = (_flag), \
| ^~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:52:35: warning: 'functions' is narrower than values of its type
52 | enum rtl8231_pin_function functions:8;
| ^~~~~~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:52:35: error: field 'functions' has incomplete type
drivers/pinctrl/pinctrl-rtl8231.c: In function 'rtl8231_set_mux':
>> drivers/pinctrl/pinctrl-rtl8231.c:200:14: error: variable 'func_flag' has initializer but incomplete type
200 | enum rtl8231_pin_function func_flag = (uintptr_t) func->data;
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:200:35: error: storage size of 'func_flag' isn't known
200 | enum rtl8231_pin_function func_flag = (uintptr_t) func->data;
| ^~~~~~~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:200:35: warning: unused variable 'func_flag' [-Wunused-variable]
drivers/pinctrl/pinctrl-rtl8231.c: In function 'rtl8231_pinctrl_init_functions':
>> drivers/pinctrl/pinctrl-rtl8231.c:325:35: error: storage size of 'flag' isn't known
325 | enum rtl8231_pin_function flag;
| ^~~~
>> drivers/pinctrl/pinctrl-rtl8231.c:325:35: warning: unused variable 'flag' [-Wunused-variable]
drivers/pinctrl/pinctrl-rtl8231.c: In function 'rtl8231_set_mux':
>> drivers/pinctrl/pinctrl-rtl8231.c:214:1: warning: control reaches end of non-void function [-Wreturn-type]
214 | }
| ^
vim +28 drivers/pinctrl/pinctrl-rtl8231.c
24
25 /*
26 * Pin controller functionality
27 */
> 28 enum rtl8231_pin_function : uintptr_t {
29 RTL8231_PIN_FUNCTION_GPIO = BIT(0),
30 RTL8231_PIN_FUNCTION_LED = BIT(1),
31 RTL8231_PIN_FUNCTION_PWM = BIT(2),
32 };
33
34 struct rtl8231_function_info {
> 35 enum rtl8231_pin_function flag;
36 const char *name;
37 };
38
39 #define RTL8231_FUNCTION(_name, _flag) \
40 ((struct rtl8231_function_info) { \
41 .flag = (_flag), \
42 .name = (_name), \
43 })
44
45 static const struct rtl8231_function_info rtl8231_pin_functions[] = {
> 46 RTL8231_FUNCTION("gpio", RTL8231_PIN_FUNCTION_GPIO),
> 47 RTL8231_FUNCTION("led", RTL8231_PIN_FUNCTION_LED),
> 48 RTL8231_FUNCTION("pwm", RTL8231_PIN_FUNCTION_PWM),
49 };
50
51 struct rtl8231_pin_desc {
> 52 enum rtl8231_pin_function functions:8;
53 u8 reg;
54 u8 offset;
55 u8 gpio_function_value;
56 };
57
58 #define RTL8231_PIN_DESC(_num, _func, _reg, _fld, _val) \
59 [(_num)] = ((struct rtl8231_pin_desc) { \
60 .functions = RTL8231_PIN_FUNCTION_GPIO | (_func), \
61 .reg = (_reg), \
62 .offset = (_fld), \
63 .gpio_function_value = (_val), \
64 })
65 #define RTL8231_GPIO_PIN_DESC(_num, _reg, _fld) \
66 RTL8231_PIN_DESC(_num, 0, _reg, _fld, RTL8231_PIN_MODE_GPIO)
67 #define RTL8231_LED_PIN_DESC(_num, _reg, _fld) \
68 RTL8231_PIN_DESC(_num, RTL8231_PIN_FUNCTION_LED, _reg, _fld, RTL8231_PIN_MODE_GPIO)
69 #define RTL8231_PWM_PIN_DESC(_num, _reg, _fld) \
70 RTL8231_PIN_DESC(_num, RTL8231_PIN_FUNCTION_PWM, _reg, _fld, 0)
71
72 /*
73 * All pins have a GPIO/LED mux bit, but the bits for pins 35/36 are read-only. Use this bit
74 * for the GPIO-only pin instead of a placeholder, so the rest of the logic can stay generic.
75 */
76 static const struct rtl8231_pin_desc rtl8231_pin_data[RTL8231_NUM_GPIOS] = {
77 RTL8231_LED_PIN_DESC(0, RTL8231_REG_PIN_MODE0, 0),
78 RTL8231_LED_PIN_DESC(1, RTL8231_REG_PIN_MODE0, 1),
79 RTL8231_LED_PIN_DESC(2, RTL8231_REG_PIN_MODE0, 2),
80 RTL8231_LED_PIN_DESC(3, RTL8231_REG_PIN_MODE0, 3),
81 RTL8231_LED_PIN_DESC(4, RTL8231_REG_PIN_MODE0, 4),
82 RTL8231_LED_PIN_DESC(5, RTL8231_REG_PIN_MODE0, 5),
83 RTL8231_LED_PIN_DESC(6, RTL8231_REG_PIN_MODE0, 6),
84 RTL8231_LED_PIN_DESC(7, RTL8231_REG_PIN_MODE0, 7),
85 RTL8231_LED_PIN_DESC(8, RTL8231_REG_PIN_MODE0, 8),
86 RTL8231_LED_PIN_DESC(9, RTL8231_REG_PIN_MODE0, 9),
87 RTL8231_LED_PIN_DESC(10, RTL8231_REG_PIN_MODE0, 10),
88 RTL8231_LED_PIN_DESC(11, RTL8231_REG_PIN_MODE0, 11),
89 RTL8231_LED_PIN_DESC(12, RTL8231_REG_PIN_MODE0, 12),
90 RTL8231_LED_PIN_DESC(13, RTL8231_REG_PIN_MODE0, 13),
91 RTL8231_LED_PIN_DESC(14, RTL8231_REG_PIN_MODE0, 14),
92 RTL8231_LED_PIN_DESC(15, RTL8231_REG_PIN_MODE0, 15),
93 RTL8231_LED_PIN_DESC(16, RTL8231_REG_PIN_MODE1, 0),
94 RTL8231_LED_PIN_DESC(17, RTL8231_REG_PIN_MODE1, 1),
95 RTL8231_LED_PIN_DESC(18, RTL8231_REG_PIN_MODE1, 2),
96 RTL8231_LED_PIN_DESC(19, RTL8231_REG_PIN_MODE1, 3),
97 RTL8231_LED_PIN_DESC(20, RTL8231_REG_PIN_MODE1, 4),
98 RTL8231_LED_PIN_DESC(21, RTL8231_REG_PIN_MODE1, 5),
99 RTL8231_LED_PIN_DESC(22, RTL8231_REG_PIN_MODE1, 6),
100 RTL8231_LED_PIN_DESC(23, RTL8231_REG_PIN_MODE1, 7),
101 RTL8231_LED_PIN_DESC(24, RTL8231_REG_PIN_MODE1, 8),
102 RTL8231_LED_PIN_DESC(25, RTL8231_REG_PIN_MODE1, 9),
103 RTL8231_LED_PIN_DESC(26, RTL8231_REG_PIN_MODE1, 10),
104 RTL8231_LED_PIN_DESC(27, RTL8231_REG_PIN_MODE1, 11),
105 RTL8231_LED_PIN_DESC(28, RTL8231_REG_PIN_MODE1, 12),
106 RTL8231_LED_PIN_DESC(29, RTL8231_REG_PIN_MODE1, 13),
107 RTL8231_LED_PIN_DESC(30, RTL8231_REG_PIN_MODE1, 14),
108 RTL8231_LED_PIN_DESC(31, RTL8231_REG_PIN_MODE1, 15),
109 RTL8231_LED_PIN_DESC(32, RTL8231_REG_PIN_HI_CFG, 0),
110 RTL8231_LED_PIN_DESC(33, RTL8231_REG_PIN_HI_CFG, 1),
111 RTL8231_LED_PIN_DESC(34, RTL8231_REG_PIN_HI_CFG, 2),
112 RTL8231_PWM_PIN_DESC(35, RTL8231_REG_FUNC1, 3),
113 RTL8231_GPIO_PIN_DESC(36, RTL8231_REG_PIN_HI_CFG, 4),
114 };
115 static const unsigned int PWM_PIN = 35;
116
117 #define RTL8231_PIN(_num) \
118 ((struct pinctrl_pin_desc) { \
119 .number = (_num), \
120 .name = "gpio" #_num, \
121 .drv_data = (void *) &rtl8231_pin_data[(_num)] \
122 })
123
124 static const struct pinctrl_pin_desc rtl8231_pins[RTL8231_NUM_GPIOS] = {
125 RTL8231_PIN(0),
126 RTL8231_PIN(1),
127 RTL8231_PIN(2),
128 RTL8231_PIN(3),
129 RTL8231_PIN(4),
130 RTL8231_PIN(5),
131 RTL8231_PIN(6),
132 RTL8231_PIN(7),
133 RTL8231_PIN(8),
134 RTL8231_PIN(9),
135 RTL8231_PIN(10),
136 RTL8231_PIN(11),
137 RTL8231_PIN(12),
138 RTL8231_PIN(13),
139 RTL8231_PIN(14),
140 RTL8231_PIN(15),
141 RTL8231_PIN(16),
142 RTL8231_PIN(17),
143 RTL8231_PIN(18),
144 RTL8231_PIN(19),
145 RTL8231_PIN(20),
146 RTL8231_PIN(21),
147 RTL8231_PIN(22),
148 RTL8231_PIN(23),
149 RTL8231_PIN(24),
150 RTL8231_PIN(25),
151 RTL8231_PIN(26),
152 RTL8231_PIN(27),
153 RTL8231_PIN(28),
154 RTL8231_PIN(29),
155 RTL8231_PIN(30),
156 RTL8231_PIN(31),
157 RTL8231_PIN(32),
158 RTL8231_PIN(33),
159 RTL8231_PIN(34),
160 RTL8231_PIN(35),
161 RTL8231_PIN(36),
162 };
163
164 static int rtl8231_get_groups_count(struct pinctrl_dev *pctldev)
165 {
166 return ARRAY_SIZE(rtl8231_pins);
167 }
168
169 static const char *rtl8231_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
170 {
171 return rtl8231_pins[selector].name;
172 }
173
174 static int rtl8231_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
175 const unsigned int **pins, unsigned int *num_pins)
176 {
177 if (selector >= ARRAY_SIZE(rtl8231_pins))
178 return -EINVAL;
179
180 *pins = &rtl8231_pins[selector].number;
181 *num_pins = 1;
182
183 return 0;
184 }
185
186 static const struct pinctrl_ops rtl8231_pinctrl_ops = {
187 .get_groups_count = rtl8231_get_groups_count,
188 .get_group_name = rtl8231_get_group_name,
189 .get_group_pins = rtl8231_get_group_pins,
190 .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
191 .dt_free_map = pinconf_generic_dt_free_map,
192 };
193
194 static int rtl8231_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
195 unsigned int group_selector)
196 {
197 const struct function_desc *func = pinmux_generic_get_function(pctldev, func_selector);
198 const struct rtl8231_pin_desc *desc = rtl8231_pins[group_selector].drv_data;
199 const struct rtl8231_pin_ctrl *ctrl = pinctrl_dev_get_drvdata(pctldev);
> 200 enum rtl8231_pin_function func_flag = (uintptr_t) func->data;
201 unsigned int function_mask;
202 unsigned int gpio_function;
203
204 if (!(desc->functions & func_flag))
205 return -EINVAL;
206
207 function_mask = BIT(desc->offset);
208 gpio_function = desc->gpio_function_value << desc->offset;
209
210 if (func_flag == RTL8231_PIN_FUNCTION_GPIO)
211 return regmap_update_bits(ctrl->map, desc->reg, function_mask, gpio_function);
212 else
213 return regmap_update_bits(ctrl->map, desc->reg, function_mask, ~gpio_function);
> 214 }
215
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-11-18 21:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-17 21:51 [PATCH v7 0/6] RTL8231 GPIO expander support Sander Vanheule
2025-11-17 21:51 ` [PATCH v7 1/6] dt-bindings: leds: Binding for RTL8231 scan matrix Sander Vanheule
2025-11-18 14:56 ` Rob Herring
2025-11-18 14:58 ` Rob Herring
2025-11-18 20:37 ` Sander Vanheule
2025-11-17 21:51 ` [PATCH v7 2/6] dt-bindings: mfd: Binding for RTL8231 Sander Vanheule
2025-11-18 14:59 ` Rob Herring (Arm)
2025-11-18 21:28 ` Rob Herring
2025-11-18 21:57 ` Sander Vanheule
2025-11-19 1:37 ` Rob Herring
2025-11-17 21:51 ` [PATCH v7 3/6] mfd: Add RTL8231 core device Sander Vanheule
2025-11-17 21:51 ` [PATCH v7 4/6] pinctrl: Add RTL8231 pin control and GPIO support Sander Vanheule
2025-11-18 21:19 ` kernel test robot [this message]
2025-11-18 22:24 ` Sander Vanheule
2025-11-19 4:19 ` kernel test robot
2025-11-19 18:57 ` Sander Vanheule
2025-11-19 19:41 ` kernel test robot
2025-11-17 21:51 ` [PATCH v7 5/6] leds: Add support for RTL8231 LED scan matrix Sander Vanheule
2025-11-17 21:51 ` [PATCH v7 6/6] MAINTAINERS: Add RTL8231 MFD driver Sander Vanheule
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202511190436.9oQLbI8A-lkp@intel.com \
--to=lkp@intel.com \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk@kernel.org \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=mwalle@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pavel@kernel.org \
--cc=robh@kernel.org \
--cc=sander@svanheule.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.