i3c: Simplify i3c_device_match_id()
Simply match against ->match_flags instead of trying to be smart and fix drivers inconsistent ID tables. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Vitor Soares <vitor.soares@synopsys.com> Link: https://lore.kernel.org/linux-i3c/8c5d6523e1c161783db834a3447954f7fd6267e6.1582796652.git.vitor.soares@synopsys.com
This commit is contained in:
parent
1ce589ad39
commit
65ec1d0ddf
@ -213,40 +213,34 @@ i3c_device_match_id(struct i3c_device *i3cdev,
|
||||
{
|
||||
struct i3c_device_info devinfo;
|
||||
const struct i3c_device_id *id;
|
||||
u16 manuf, part, ext_info;
|
||||
bool rndpid;
|
||||
|
||||
i3c_device_get_info(i3cdev, &devinfo);
|
||||
|
||||
/*
|
||||
* The lower 32bits of the provisional ID is just filled with a random
|
||||
* value, try to match using DCR info.
|
||||
*/
|
||||
if (!I3C_PID_RND_LOWER_32BITS(devinfo.pid)) {
|
||||
u16 manuf = I3C_PID_MANUF_ID(devinfo.pid);
|
||||
u16 part = I3C_PID_PART_ID(devinfo.pid);
|
||||
u16 ext_info = I3C_PID_EXTRA_INFO(devinfo.pid);
|
||||
manuf = I3C_PID_MANUF_ID(devinfo.pid);
|
||||
part = I3C_PID_PART_ID(devinfo.pid);
|
||||
ext_info = I3C_PID_EXTRA_INFO(devinfo.pid);
|
||||
rndpid = I3C_PID_RND_LOWER_32BITS(devinfo.pid);
|
||||
|
||||
/* First try to match by manufacturer/part ID. */
|
||||
for (id = id_table; id->match_flags != 0; id++) {
|
||||
if ((id->match_flags & I3C_MATCH_MANUF_AND_PART) !=
|
||||
I3C_MATCH_MANUF_AND_PART)
|
||||
continue;
|
||||
|
||||
if (manuf != id->manuf_id || part != id->part_id)
|
||||
continue;
|
||||
|
||||
if ((id->match_flags & I3C_MATCH_EXTRA_INFO) &&
|
||||
ext_info != id->extra_info)
|
||||
continue;
|
||||
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fallback to DCR match. */
|
||||
for (id = id_table; id->match_flags != 0; id++) {
|
||||
if ((id->match_flags & I3C_MATCH_DCR) &&
|
||||
id->dcr == devinfo.dcr)
|
||||
return id;
|
||||
id->dcr != devinfo.dcr)
|
||||
continue;
|
||||
|
||||
if ((id->match_flags & I3C_MATCH_MANUF) &&
|
||||
id->manuf_id != manuf)
|
||||
continue;
|
||||
|
||||
if ((id->match_flags & I3C_MATCH_PART) &&
|
||||
(rndpid || id->part_id != part))
|
||||
continue;
|
||||
|
||||
if ((id->match_flags & I3C_MATCH_EXTRA_INFO) &&
|
||||
(rndpid || id->extra_info != ext_info))
|
||||
continue;
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user