tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
usb-testing
head: 09aa11cfda9d8186046bcd1adcd6498b688114f4
commit: 96a6d031ca9930938bd66d0052fc7ed2b56e3583 [63/64] usb: typec: mux: Find
the muxes by also matching against the device node
smatch warnings:
drivers/usb/typec/mux.c:167 typec_mux_match() warn: unsigned 'nval' is never
less than zero.
vim +/nval +167 drivers/usb/typec/mux.c
124
125 static void *typec_mux_match(struct device_connection *con, int ep,
void *data)
126 {
127 const struct typec_altmode_desc *desc = data;
128 struct typec_mux *mux;
129 size_t nval;
130 bool match;
131 u16 *val;
132 int i;
133
134 if (!con->fwnode) {
135 list_for_each_entry(mux, &mux_list, entry)
136 if (!strcmp(con->endpoint[ep],
dev_name(mux->dev)))
137 return mux;
138 return ERR_PTR(-EPROBE_DEFER);
139 }
140
141 /*
142 * Check has the identifier already been "consumed". If it
143 * has, no need to do any extra connection identification.
144 */
145 match = !con->id;
146 if (match)
147 goto find_mux;
148
149 /* Accessory Mode muxes */
150 if (!desc) {
151 match = fwnode_property_present(con->fwnode,
"accessory");
152 if (match)
153 goto find_mux;
154 return NULL;
155 }
156
157 /* Alternate Mode muxes */
158 nval = fwnode_property_read_u16_array(con->fwnode, "svid",
NULL, 0);
159 if (nval <= 0)
160 return NULL;
161
162 val = kcalloc(nval, sizeof(*val), GFP_KERNEL);
163 if (!val)
164 return ERR_PTR(-ENOMEM);
165
166 nval = fwnode_property_read_u16_array(con->fwnode, "svid", val,
nval);
> 167 if (nval < 0) {
168 kfree(val);
169 return ERR_PTR(nval);
170 }
171
172 for (i = 0; i < nval; i++) {
173 match = val[i] == desc->svid;
174 if (match) {
175 kfree(val);
176 goto find_mux;
177 }
178 }
179 kfree(val);
180 return NULL;
181
182 find_mux:
183 list_for_each_entry(mux, &mux_list, entry)
184 if (dev_fwnode(mux->dev) == con->fwnode)
185 return mux;
186
187 return match ? ERR_PTR(-EPROBE_DEFER) : NULL;
188 }
189
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation