mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
usb: typec: mux: Clean up mux_fwnode_match()
Removing the "svid" and "accessory" device property checks. Those properties are not supported on any platform. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/lkml/20230522215348.uoyboow26n2o3tel@ripper/ Reviewed-by: Bjorn Andersson <andersson@kernel.org> Tested-by: Bjorn Andersson <andersson@kernel.org> Link: https://lore.kernel.org/r/20230526131434.46920-2-heikki.krogerus@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3c90c5a7fd
commit
4aebc4f89f
@@ -265,60 +265,19 @@ static int mux_fwnode_match(struct device *dev, const void *fwnode)
|
||||
static void *typec_mux_match(const struct fwnode_handle *fwnode,
|
||||
const char *id, void *data)
|
||||
{
|
||||
const struct typec_altmode_desc *desc = data;
|
||||
struct device *dev;
|
||||
bool match;
|
||||
int nval;
|
||||
u16 *val;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Check has the identifier already been "consumed". If it
|
||||
* has, no need to do any extra connection identification.
|
||||
* Device graph (OF graph) does not give any means to identify the
|
||||
* device type or the device class of the remote port parent that @fwnode
|
||||
* represents, so in order to identify the type or the class of @fwnode
|
||||
* an additional device property is needed. With typec muxes the
|
||||
* property is named "mode-switch" (@id). The value of the device
|
||||
* property is ignored.
|
||||
*/
|
||||
match = !id;
|
||||
if (match)
|
||||
goto find_mux;
|
||||
|
||||
if (!desc) {
|
||||
/*
|
||||
* Accessory Mode muxes & muxes which explicitly specify
|
||||
* the required identifier can avoid SVID matching.
|
||||
*/
|
||||
match = fwnode_property_present(fwnode, "accessory") ||
|
||||
fwnode_property_present(fwnode, id);
|
||||
if (match)
|
||||
goto find_mux;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Alternate Mode muxes */
|
||||
nval = fwnode_property_count_u16(fwnode, "svid");
|
||||
if (nval <= 0)
|
||||
if (id && !fwnode_property_present(fwnode, id))
|
||||
return NULL;
|
||||
|
||||
val = kcalloc(nval, sizeof(*val), GFP_KERNEL);
|
||||
if (!val)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = fwnode_property_read_u16_array(fwnode, "svid", val, nval);
|
||||
if (ret < 0) {
|
||||
kfree(val);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
for (i = 0; i < nval; i++) {
|
||||
match = val[i] == desc->svid;
|
||||
if (match) {
|
||||
kfree(val);
|
||||
goto find_mux;
|
||||
}
|
||||
}
|
||||
kfree(val);
|
||||
return NULL;
|
||||
|
||||
find_mux:
|
||||
dev = class_find_device(&typec_mux_class, NULL, fwnode,
|
||||
mux_fwnode_match);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user