From: Wolfram Sang wsa+renesas@sang-engineering.com
[ Upstream commit 447270cdb41b1c8c3621bb14b93a6749f942556e ]
'I3C_BCR_HDR_CAP' is still spec v1.0 and has been renamed to 'advanced capabilities' in v1.1 onwards. The ST pressure sensor LPS22DF does not have HDR, but has the 'advanced cap' bit set. The core still wants to get additional information using the CCC 'GETHDRCAP' (or GETCAPS in v1.1 onwards). Not all controllers support this CCC and will notify the upper layers about it. For instantiating the device, we can ignore this unsupported CCC as standard communication will work. Without this patch, the device will not be instantiated at all.
Signed-off-by: Wolfram Sang wsa+renesas@sang-engineering.com Reviewed-by: Frank Li Frank.Li@nxp.com Link: https://lore.kernel.org/r/20250704204524.6124-1-wsa+renesas@sang-engineering... Signed-off-by: Alexandre Belloni alexandre.belloni@bootlin.com Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the surrounding code, here's my assessment:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the following reasons:
1. **Fixes a real bug that prevents device instantiation**: The commit message clearly states that "Without this patch, the device will not be instantiated at all." This is a concrete functionality issue where legitimate I3C devices (like the ST pressure sensor LPS22DF) cannot be used with controllers that don't support the GETHDRCAP CCC command.
2. **Small and contained fix**: The change is minimal - only 2 lines changed: - Line 1441: Changed from `if (ret)` to `if (ret && ret != -ENOTSUPP)` - This allows the function to continue when GETHDRCAP returns -ENOTSUPP instead of failing
3. **Clear regression prevention**: The fix prevents device initialization failure for hardware combinations that should work. The I3C spec evolved from v1.0 to v1.1, and this handles backward compatibility gracefully.
4. **No architectural changes**: This is a simple error handling adjustment that doesn't change any core functionality or introduce new features.
5. **Fixes interoperability issue**: The commit addresses a real-world hardware compatibility problem between certain I3C controllers and devices, which is exactly the type of bug that stable kernels should fix.
6. **Low risk of regression**: The change only affects the error path when GETHDRCAP fails with -ENOTSUPP. It doesn't change behavior for successful cases or other error conditions.
7. **Follows stable rules**: - It's obviously correct (treats unsupported CCC as non-fatal) - It's tiny (2-line change) - Fixes one specific issue - Fixes a real bug that prevents hardware from working
The commit allows I3C device initialization to proceed even when the controller doesn't support the GETHDRCAP command, which is reasonable since HDR capabilities are optional and standard I3C communication will still work without them.
drivers/i3c/master.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index fd81871609d9..e53c69d24873 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -1439,7 +1439,7 @@ static int i3c_master_retrieve_dev_info(struct i3c_dev_desc *dev)
if (dev->info.bcr & I3C_BCR_HDR_CAP) { ret = i3c_master_gethdrcap_locked(master, &dev->info); - if (ret) + if (ret && ret != -ENOTSUPP) return ret; }