From: Claude Code Review Bot <claude-review@example.com>
To: dri-devel-reviews@example.com
Subject: Claude review: drm/bridge: Add ITE IT61620 MIPI DSI to HDMI bridge driver
Date: Sat, 14 Mar 2026 07:20:46 +1000 [thread overview]
Message-ID: <review-patch2-20260313-it61620-0714-v7-2-36a16dc036d6@ite.com.tw> (raw)
In-Reply-To: <20260313-it61620-0714-v7-2-36a16dc036d6@ite.com.tw>
Patch Review
**CRITICAL BUG - Interrupt status checks use register address instead of read value:**
In `it61620_hdmi_interrupt_handler()`, lines 2173-2180 compare the **register address constants** (`TX_REG_INT1`) against the interrupt bit masks instead of the **read values** (`int_status1`):
```c
if (TX_REG_INT1 & B_HPD_CHG)
it61620_hdmi_irq_hpd(it61620);
if (TX_REG_INT1 & B_RXSEN_CHANGE)
it61620_hdmi_irq_rxsen_chg(it61620);
if (TX_REG_INT1 & B_INT_AUTH_F)
it61620_hdmi_irq_hdcp_auth_fail(it61620);
```
`TX_REG_INT1` is defined as `0x10`, so `TX_REG_INT1 & B_HPD_CHG` (BIT(0)) is always 0 (false), meaning the HPD handler is **never called**. `TX_REG_INT1 & B_RXSEN_CHANGE` (BIT(2)) is always 0 (false). `TX_REG_INT1 & B_INT_AUTH_F` (BIT(3)) is always 0 (false). None of these interrupt handlers will ever fire. The third check for `int_status3` at line 2182 is correct. These must be `int_status1` not `TX_REG_INT1`.
**Medium Issues:**
1. **`sizeof(hdmi_afe)` used incorrectly as array element count** (line 1729):
```c
for (i = 0; i < sizeof(hdmi_afe); i++) {
```
`sizeof(hdmi_afe)` gives the total byte size of the array (which is very large since each element contains a 24-element int array), not the element count (4). This should be `ARRAY_SIZE(hdmi_afe)`. In practice, the `break` will fire before the bogus limit is reached, but `i` will index out of bounds if `clock` is larger than all entries' `clock` values without hitting the `clock == 0` sentinel.
2. **`it61620_hdmi_enable_hdcp()` returns `bool` but declared as `int`** (lines 1941, 1949, 1982, 2003, 2009):
```c
static int it61620_hdmi_enable_hdcp(struct it61620 *it61620)
...
return false;
...
return true;
```
Similarly, `it61620_hdmi_start_hdcp()` (line 2054) is declared `int` but returns `false`/`true`. Pick one type and be consistent.
3. **Vendor infoframe write loop is wrong** (line 2268):
```c
for (i = 3; i < len - 3; i++)
regmap_write(it61620->tx_regmap, TX_REG_VSIFPKT_PB00 + i, ptr[i]);
```
`ptr` is set to `buffer + 3`, then indexed with `i` starting at 3, so the actual access starts at `buffer[6]` (skipping 3 payload bytes). The loop index should start at 0, or `ptr` should be `buffer`. This likely results in a broken vendor-specific infoframe.
4. **`it61620_pm_bridge_suspend`/`resume` marked `__maybe_unused` but used with `DEFINE_RUNTIME_DEV_PM_OPS`** (lines 2827, 2836):
The `__maybe_unused` attribute is unnecessary with `DEFINE_RUNTIME_DEV_PM_OPS` and the `inline` qualifier on PM functions is also questionable since they're used as function pointers.
5. **`it61620_parse_dt` returns `unsigned int` but can return negative error codes** (line 2778):
```c
static unsigned int it61620_parse_dt(struct it61620 *it61620)
```
Should return `int`.
**Minor Issues:**
6. **Typo "Intelaced"** (line 1431):
```c
drm_dbg_kms(drm, "Intelaced\n");
```
Should be "Interlaced".
7. **Typo "ststus"** (line 1635):
```c
drm_dbg(drm, "tx ddc ststus %02X\n", val);
```
Should be "status".
8. **Debug message says "ksv valid!" when KSV is actually invalid** (line 2076):
```c
if (!retcheck) {
drm_dbg(drm, "ksv valid!\n");
return false;
}
```
The message should say "ksv invalid" since the function is returning failure.
9. **Bool initialization with `0` instead of `false`** (line 1451):
```c
bool hpol_high = 0, vpol_high = 0;
```
Use `false`.
10. **Hardcoded I2C register `0x7e`** (line 2067):
```c
regmap_read(it61620->tx_regmap, 0x7e, &rx_hdmi_mode);
```
Should use the already-defined `TX_REG_HDCP_BSTS_H` macro (which is `0x7E`), or define a new named constant if the semantics differ.
11. **`it61620_detach_dsi` calls `mipi_dsi_detach` after `devm_mipi_dsi_attach`** (lines 2770-2776):
Since `devm_mipi_dsi_attach` was used in `it61620_attach_dsi`, the detach is managed by devres. Calling `mipi_dsi_detach` manually in `it61620_remove` will result in a double-detach.
12. **Missing `default` cases in switch statements** (lines 2594-2616, 2618-2628, 2668-2685):
The `sample_rate`, `sample_width`, and `channels` switch statements have no `default` cases, meaning local variables could be used uninitialized if an unexpected value is passed.
13. **The `it61620_write16` helper** writes timing register pairs to `mipirx_regmap` in the A0 PG timing block (lines 1511-1520), but the `TX_REG_PG_*` constants are in the TX register space (0x150+). Writing TX register addresses to the MIPI regmap will likely write to wrong registers. Compare with line 1522 which correctly uses `tx_regmap` for `TX_REG_PG_POL`.
---
Generated by Claude Code Patch Reviewer
next prev parent reply other threads:[~2026-03-13 21:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-13 6:48 [PATCH v7 0/2] Add ITE IT61620 MIPI DSI to HDMI bridge driver Pet Weng
2026-03-13 6:48 ` [PATCH v7 1/2] dt-binding: display: Add ITE IT61620 MIPI DSI to HDMI bridge Pet Weng
2026-03-13 21:20 ` Claude review: " Claude Code Review Bot
2026-03-13 6:48 ` [PATCH v7 2/2] drm/bridge: Add ITE IT61620 MIPI DSI to HDMI bridge driver Pet Weng
2026-03-13 21:20 ` Claude Code Review Bot [this message]
2026-03-13 21:20 ` Claude review: " Claude Code Review Bot
-- strict thread matches above, loose matches on Subject: below --
2026-03-20 7:50 [PATCH v8 0/2] " Pet Weng
2026-03-20 7:50 ` [PATCH v8 2/2] drm/bridge: " Pet Weng
2026-03-21 17:53 ` Claude review: " Claude Code Review Bot
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=review-patch2-20260313-it61620-0714-v7-2-36a16dc036d6@ite.com.tw \
--to=claude-review@example.com \
--cc=dri-devel-reviews@example.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox