From: Dario Binacchi <[email protected]>

[ Upstream commit 6acb810ebc5d8dea5c250326c14dc44e32dc8e92 ]

Add Ampire, AM-1280800W8TZQW-T00H 10.1" TFT LCD panel timings.

Co-developed-by: Michael Trimarchi <[email protected]>
Signed-off-by: Michael Trimarchi <[email protected]>
Signed-off-by: Dario Binacchi <[email protected]>
Reviewed-by: Dmitry Baryshkov <[email protected]>
Signed-off-by: Neil Armstrong <[email protected]>
Link: 
https://patch.msgid.link/[email protected]
Signed-off-by: Sasha Levin <[email protected]>
---

LLM Generated explanations, may be completely bogus:

# Stable Backport Analysis: drm/panel: simple: Add AM-1280800W8TZQW-T00H

**Local tree:** Linux **6.18.44** (`v6.18.44`, `stable/linux-6.18.y`)

---

## PHASE 1: COMMIT MESSAGE FORENSICS

### Step 1.1: Subject line
**Record:** `[drm/panel: simple]` `[Add]` — Add Ampire
AM-1280800W8TZQW-T00H 10.1" TFT LCD panel timings to the existing
`panel-simple` driver.

### Step 1.2: Tags
**Record:**
- **Co-developed-by:** Michael Trimarchi
  \<[email protected]\>
- **Signed-off-by:** Michael Trimarchi, Dario Binacchi
- **Reviewed-by:** Dmitry Baryshkov
  \<[email protected]\> (DRM/panel reviewer)
- **Signed-off-by:** Neil Armstrong \<[email protected]\>
  (maintainer ack)
- **Link:** https://patch.msgid.link/20260515082232.1766586-2-
  [email protected]
- **No** Fixes:, Reported-by:, Tested-by:, Cc: [email protected],
  or syzbot tags
- **Notable:** Part of a 2-patch v2 series (patch 2/2); patch 1/2 adds
  the DT binding

### Step 1.3: Body analysis
**Record:**
- **Bug description:** None — this is hardware enablement, not a bug
  fix.
- **Symptom without patch:** A device tree node with `compatible =
  "ampire,am-1280800w8tzqw-t00h"` will not match `panel-simple`, so the
  display will not probe and no framebuffer will come up.
- **Root cause:** Missing `panel_desc` / `drm_display_mode` entry and
  missing OF compatible in `platform_of_match[]`.
- **Version info:** None in the message.

### Step 1.4: Hidden bug fix?
**Record:** No. This is a straightforward device-ID / panel-timing
addition. It does not fix leaks, races, crashes, or corruption in
existing code paths.

---

## PHASE 2: DIFF ANALYSIS

### Step 2.1: Inventory
**Record:**
- **File changed:** `drivers/gpu/drm/panel/panel-simple.c` only (+28
  lines)
- **Functions modified:** None (only static data and one
  `platform_of_match[]` entry)
- **Scope:** Single-file, surgical data addition

### Step 2.2: Code flow change
**Record:**
- **Hunk 1 (after `ampire_am_1280800n3tzqw_t00h`):** Adds
  `ampire_am_1280800w8tzqw_t00h_mode` (1280×800, 72.4 MHz pixel clock,
  different vsync from the N3 sibling) and
  `ampire_am_1280800w8tzqw_t00h` descriptor (8 bpc, LVDS, RGB888 SPWG).
  - Before: only the N3 variant is known.
  - After: W8 variant is also known.
- **Hunk 2 (`platform_of_match[]`):** Adds `{ .compatible =
  "ampire,am-1280800w8tzqw-t00h", .data = &ampire_am_1280800w8tzqw_t00h
  }`.
  - Before: probe fails for W8 compatible strings.
  - After: probe succeeds and uses W8-specific timings.

### Step 2.3: Bug mechanism
**Record:** **Category h) — hardware workarounds / device enablement.**
Not a software bug fix; adds OF compatible + timings for a new panel
variant on an existing driver.

### Step 2.4: Fix quality
**Record:**
- **Quality:** High — mirrors the existing `am-1280800n3tzqw-t00h`
  pattern exactly.
- **Regression risk:** Very low — purely additive static data; no logic
  or locking changes.
- **Minor note:** W8 mode struct omits `.flags = DRM_MODE_FLAG_PHSYNC |
  DRM_MODE_FLAG_PVSYNC` present on the N3 sibling; this matches the
  submitted upstream patch and was reviewed as-is.

---

## PHASE 3: GIT HISTORY INVESTIGATION

### Step 3.1: Blame
**Record:** On `origin/master`, the W8 panel code is present at lines
823–846 and in `platform_of_match`. In the local 6.18.44 tree, the
insertion point after `ampire_am_1280800n3tzqw_t00h` (lines 797–821) and
the matching `platform_of_match` entry (line 4966) already exist. The W8
entry is absent — this is new mainline content not yet in 6.18.y.

### Step 3.2: Fixes: tag
**Record:** Not applicable — no Fixes: tag.

### Step 3.3: Related file history
**Record:**
- Sibling panel `am-1280800n3tzqw-t00h` is already in this tree and used
  by in-tree DTS files (`imx6q-icore-ofcap10.dts`, `px30-engicam-
  px30-core-ctouch2-of10.dts`, `stm32mp157a-icore-
  stm32mp1-ctouch2-of10.dts`).
- On `stable/linux-6.6.y`, the nearly identical sibling addition was
  backported: `bca684e69c4ce` (+29 lines, same vendor/subject pattern).
- `w8tzqw` appears only in `panel-simple.c` and `panel-simple.yaml` on
  mainline — no in-tree DTS references anywhere.

### Step 3.4: Author context
**Record:** Amarula Solutions (same vendor ecosystem as Engicam boards
using the N3 panel). Dmitry Baryshkov reviewed; Neil Armstrong signed
off. Same maintainer chain as prior Ampire panel additions.

### Step 3.5: Dependencies
**Record:** Part of a 2-patch series:
1. `dt-bindings: display: simple: Add AM-1280800W8TZQW-T00H` (Acked-by:
   Conor Dooley)
2. `drm/panel: simple: Add AM-1280800W8TZQW-T00H` (this commit)

This driver patch is self-contained and applies cleanly to 6.18.44. The
binding patch is a companion but not a compile-time prerequisite for the
driver itself.

---

## PHASE 4: MAILING LIST AND EXTERNAL RESEARCH

### Step 4.1: Original discussion
**Record:**
- **b4 am** on msgid
  `[email protected]` found
  the v2 series (2 patches).
- **Link:** https://patch.msgid.link/20260515082232.1766586-1-
  [email protected]
- **b4 dig -c** on merge commit `0fd8b67e27ff7` failed (merge commit,
  not the original patch).
- **No Cc: stable** nominations found in the mbox thread.
- **No NAKs** found in the retrieved mbox.

### Step 4.2: Reviewers
**Record:** Dmitry Baryshkov (Reviewed-by), Conor Dooley (Acked-by on
bindings), Neil Armstrong (Signed-off-by). Appropriate DRM/DT reviewers
involved.

### Step 4.3: Bug report
**Record:** Not applicable — no bug report, syzbot link, or user crash
report.

### Step 4.4: Series context
**Record:** 2-patch v2 series. v2 changes were alphabetical ordering and
correcting WQVGA → WXGA in the binding comment. No board DTS included in
the series.

### Step 4.5: Stable list history
**Record:** No stable-list discussion found for this specific panel.
Sibling `AM-1280800N3TZQW-T00H` was previously backported to 6.6.y.

---

## PHASE 5: CODE SEMANTIC ANALYSIS

### Step 5.1: Key functions
**Record:** No functions modified. Data consumed by
`panel_simple_get_desc()` → `of_device_get_match_data()` via
`platform_of_match[]`.

### Step 5.2: Callers
**Record:** `panel_simple_platform_probe()` and DSI probe paths call
`panel_simple_probe()`, which calls `panel_simple_get_desc()`. Any
platform device with `compatible = "ampire,am-1280800w8tzqw-t00h"` would
use the new descriptor. Triggered at boot during DRM/display
initialization on affected embedded boards.

### Step 5.3: Callees
**Record:** Standard panel-simple probe path: mode/timing setup,
connector registration. No new allocation or locking paths introduced.

### Step 5.4: Reachability
**Record:** Reachable on any system with a DT node using this compatible
and `CONFIG_DRM_PANEL_SIMPLE`. Not userspace-triggered, but affects
display bring-up on boot for matching hardware.

### Step 5.5: Similar patterns
**Record:** Identical pattern to `ampire_am_1280800n3tzqw_t00h` already
in this tree (29-line sibling addition backported to 6.6.y as
`bca684e69c4ce`).

---

## PHASE 6: CROSS-REFERENCING AGAINST LOCAL TREE (6.18.44)

### Step 6.1: Does the “buggy” code exist?
**Record:** The `panel-simple` driver and the sibling N3 Ampire panel
entry exist in 6.18.44. The W8 compatible is **missing** — boards using
it cannot get display support. The gap was introduced when W8 support
landed in mainline after the 6.18 branch point.

### Step 6.2: Backport complications
**Record:** **Clean apply expected.** Insertion point (`after
ampire_am_1280800n3tzqw_t00h` and in `platform_of_match[]`) is present
and unchanged. `git diff HEAD origin/master` shows exactly this 28-line
addition among broader mainline drift.

### Step 6.3: Related fixes already present?
**Record:** No equivalent W8 entry in this tree. Sibling N3 panel is
present. No duplicate fix found.

---

## PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT

### Step 7.1: Subsystem criticality
**Record:** **drivers/gpu/drm/panel** — IMPORTANT for embedded/display
platforms; not universal core kernel, but critical for affected
hardware.

### Step 7.2: Subsystem activity
**Record:** `panel-simple.c` is mature with extensive static panel
tables. This follows established conventions.

---

## PHASE 8: IMPACT AND RISK ASSESSMENT

### Step 8.1: Who is affected
**Record:** **Platform-specific** — embedded boards (Engicam/Amarula
ecosystem) using the Ampire AM-1280800W8TZQW-T00H 10.1" LVDS panel.
Requires `CONFIG_DRM_PANEL_SIMPLE`.

### Step 8.2: Trigger conditions
**Record:** Boot on hardware with DT `compatible =
"ampire,am-1280800w8tzqw-t00h"`. **No in-tree DTS currently uses this
compatible** on mainline or 6.18.44. Impact is for downstream/custom DTS
or future board additions.

### Step 8.3: Failure mode severity
**Record:** Without the patch: panel probe failure → **no display**
(MEDIUM functional impact for affected hardware; not a crash,
corruption, or security issue).

### Step 8.4: Risk-benefit
**Record:**
- **Benefit:** Enables display on W8-variant Ampire panels; follows
  established stable exception for device-ID additions; direct precedent
  from sibling N3 backport to 6.6.y.
- **Risk:** Very low — 28 lines of static data, no behavioral change for
  existing panels.
- **Ratio:** Favorable for stable, under the explicit “add a device ID”
  exception in `stable-kernel-rules.rst`.

---

## PHASE 9: FINAL SYNTHESIS

### Step 9.1: Evidence summary

**FOR backport:**
- Explicitly permitted by `Documentation/process/stable-kernel-
  rules.rst`: *“It must either fix a real bug that bothers people or
  just add a device ID.”*
- Falls under the device-ID / DT-binding exception category in the
  evaluation guidelines.
- Small (28 lines), contained, obviously correct, reviewed.
- `panel-simple` driver and sibling N3 panel already exist in 6.18.44.
- Applies cleanly to this tree.
- Already in mainline (prerequisite met).
- Identical precedent: `bca684e69c4ce` backported the N3 sibling to
  6.6.y (+29 lines).

**AGAINST backport:**
- Not a bug fix — pure hardware enablement.
- No in-tree DTS uses this compatible yet (no demonstrated user impact
  in 6.18.44 today).
- Ideally paired with patch 1/2 (DT binding yaml update).
- No stable nomination or user bug report.

**Unresolved:** Whether a specific shipping board on 6.18.y already uses
this panel in downstream trees (not verifiable from this tree).

### Step 9.2: Stable rules checklist
1. Obviously correct and tested? **PASS** — reviewed by Dmitry
   Baryshkov; mirrors existing N3 entry.
2. Fixes a real bug affecting users? **PASS (via device-ID exception)**
   — not a software bug, but enables hardware that otherwise cannot
   work.
3. Important issue? **PASS (moderate)** — display failure on affected
   hardware; not crash/security.
4. Small and contained? **PASS** — 28 lines, one file.
5. No new features or APIs? **PASS** — new OF compatible on existing
   driver; standard stable device-ID pattern.
6. Can apply to local tree? **PASS** — clean apply to existing `panel-
   simple.c`.

### Step 9.3: Exception category
**Record:** **NEW DEVICE ID / DT binding addition** to an existing
driver (`panel-simple`). Same category as PCI/USB ID additions and prior
Ampire panel additions backported to stable.

### Step 9.4: Decision rationale

This commit does not fix a kernel bug, but it adds a device identifier
(OF compatible + panel timings) to an existing, in-tree driver. That is
explicitly allowed for stable trees per `stable-kernel-rules.rst` and
matches the established pattern of backporting Ampire `panel-simple`
additions (the N3 sibling was backported to 6.6.y in an essentially
identical 29-line patch). The change is low-risk, applies cleanly to
Linux 6.18.44, and is already in mainline. The companion DT binding
patch should ideally be backported alongside it, but this driver commit
alone is valid stable material.

---

## Verification

- **[Phase 1]** Parsed subject, tags, body from provided commit message
  and mbox.
- **[Phase 1]** `b4 am
  [email protected]`:
  confirmed v2 2-patch series; Reviewed-by Dmitry Baryshkov; Acked-by
  Conor Dooley on patch 1/2.
- **[Phase 2]** Diff analysis: +28 lines in `panel-simple.c`; static
  data + one `platform_of_match` entry.
- **[Phase 3]** `git describe HEAD`: v6.18.44 / 6.18.44 on
  `stable/linux-6.18.y`.
- **[Phase 3]** `git grep "am-1280800w8tzqw-t00h" origin/master`: only
  in `panel-simple.c` and `panel-simple.yaml` on mainline; absent from
  HEAD.
- **[Phase 3]** `git show bca684e69c4ce --stat`: sibling N3 panel
  backported to 6.6.y (+29 lines, same pattern).
- **[Phase 3]** `git log stable/linux-6.6.y --grep="1280800"`: N3 panel
  + binding + bpc fix backported to 6.6.y.
- **[Phase 4]** `b4 dig -c 0fd8b67e27ff7`: no match (merge commit).
- **[Phase 4]** Read mbox `v2_20260515_dario_binacchi_dt_bindings_displa
  y_simple_add_am_1280800w8tzqw_t00h.mbx`: no Cc: stable; 2-patch series
  confirmed.
- **[Phase 5]** `grep panel_simple_probe/panel_simple_get_desc` in
  `panel-simple.c`: standard probe path via
  `of_device_get_match_data()`.
- **[Phase 6]** `grep "am-1280800w8tzqw"`: zero matches in local tree.
- **[Phase 6]** `grep "am-1280800n3tzqw"`: present in `panel-simple.c`
  and three in-tree DTS files.
- **[Phase 6]** `git diff HEAD origin/master --
  drivers/gpu/drm/panel/panel-simple.c`: W8 addition is a clean 28-line
  insert at expected location.
- **[Phase 6]** `git show origin/master:panel-simple.c | rg
  "1280800w8"`: confirmed mainline has full W8 definition.
- **[Phase 7]** Read `Documentation/process/stable-kernel-rules.rst`:
  confirms device-ID additions are valid stable material.
- **[Phase 8]** `git grep "am-1280800w8tzqw-t00h" origin/master`: no DTS
  references — no in-tree board uses this panel yet.

**YES**The background lookups finished and line up with the earlier
analysis:

- **Pickaxe search** (`am-1280800w8tzqw-t00h` on `origin/master`): only
  surfaced merge commit `0fd8b67e27ff7`, not the original panel patch —
  the change is buried in a merge, which is why a direct subject/hash
  search was needed.
- **Broader pickaxe search** (with `--all`): slow and similarly
  unhelpful for finding the real introducing commit.
- **`b4 dig -c 0fd8b67e27ff7`**: no lore match on that RDMA merge
  commit.

The useful trace came from **`b4 am`** on the patch msgid, which found
the v2 2-patch series (DT binding + driver). That supports the **YES**
verdict for 6.18.44: a small device-ID addition to an existing driver,
with the companion binding patch ideally backported alongside it.

 drivers/gpu/drm/panel/panel-simple.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-simple.c 
b/drivers/gpu/drm/panel/panel-simple.c
index ef1c4b9299ee4..878a5dc7748fb 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -820,6 +820,31 @@ static const struct panel_desc 
ampire_am_1280800n3tzqw_t00h = {
        .connector_type = DRM_MODE_CONNECTOR_LVDS,
 };
 
+static const struct drm_display_mode ampire_am_1280800w8tzqw_t00h_mode = {
+       .clock = 72400,
+       .hdisplay = 1280,
+       .hsync_start = 1280 + 40,
+       .hsync_end = 1280 + 40 + 80,
+       .htotal = 1280 + 40 + 80 + 40,
+       .vdisplay = 800,
+       .vsync_start = 800 + 10,
+       .vsync_end = 800 + 10 + 18,
+       .vtotal = 800 + 10 + 18 + 10,
+};
+
+static const struct panel_desc ampire_am_1280800w8tzqw_t00h = {
+       .modes = &ampire_am_1280800w8tzqw_t00h_mode,
+       .num_modes = 1,
+       .bpc = 8,
+       .size = {
+               .width = 217,
+               .height = 136,
+       },
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH,
+       .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+       .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
 static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
        .clock = 9000,
        .hdisplay = 480,
@@ -4965,6 +4990,9 @@ static const struct of_device_id platform_of_match[] = {
        {
                .compatible = "ampire,am-1280800n3tzqw-t00h",
                .data = &ampire_am_1280800n3tzqw_t00h,
+       }, {
+               .compatible = "ampire,am-1280800w8tzqw-t00h",
+               .data = &ampire_am_1280800w8tzqw_t00h,
        }, {
                .compatible = "ampire,am-480272h3tmqw-t01h",
                .data = &ampire_am_480272h3tmqw_t01h,
-- 
2.53.0

Reply via email to