Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion chips/s8003.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ stages = ["iBSS", "iBEC"]

[evidence]
page_size = "xnu-6153.141.1 osfmk/arm/proc_reg.h"
platform = "J71t on hardware"
platform = "J71t on hardware; USB serial and networking verified"
stages = "remote_boot two-stage CPID list"
4 changes: 2 additions & 2 deletions devices/j71t/device.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ charging = "untested"
charging_control = "untested"
suspend = "untested"
resume = "untested"
usb_serial = "untested"
usb_network = "untested"
usb_serial = "working"
usb_network = "working"
audio_output = "working"
audio_input = "untested"
camera = "missing"
Expand Down
2 changes: 1 addition & 1 deletion docs/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ Boards Orchard builds for. States: working, untested, missing, none (no such har
| `n66` | untested | missing | untested | missing | untested | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | untested | untested | untested | untested | missing | missing | missing | missing |
| `n69u` | untested | missing | untested | missing | untested | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | untested | untested | untested | untested | missing | missing | missing | missing |
| `n71` | untested | missing | untested | missing | untested | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | untested | untested | untested | untested | missing | missing | missing | missing |
| `j71t` | untested | untested | untested | untested | untested | missing | missing | untested | missing | untested | untested | untested | untested | untested | none | untested | untested | untested | untested | untested | untested | untested | working | untested | missing | working |
| `j71t` | untested | untested | untested | untested | untested | missing | missing | untested | missing | untested | untested | untested | untested | untested | none | untested | untested | untested | untested | untested | working | working | working | untested | missing | working |
| `j72t` | untested | untested | untested | untested | untested | missing | missing | untested | missing | untested | untested | untested | untested | untested | missing | untested | untested | untested | untested | untested | untested | untested | untested | untested | missing | untested |
| `n66m` | untested | missing | untested | missing | untested | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | untested | untested | untested | untested | missing | missing | missing | missing |
| `n69` | untested | missing | untested | missing | untested | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | missing | untested | untested | untested | untested | missing | missing | missing | missing |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Berkay=20K=C3=B6sebay?= <brkosebay@users.noreply.github.com>
Date: Thu, 12 Nov 2026 00:08:20 +0000
Subject: [PATCH] power: supply: apple_tristar_charger: Release the USB hold
for every attachment

USB data stays off from attach until the source is identified, at most
TRISTAR_HOLD_MS; only the first attachment since probe got that bound.
The PMIC can stay in a transitional state (e.g. 0x62) for any later
attachment too, and then USB data stayed off for good: no USB serial
and no USB network until a reboot. Release the hold for every
attachment, at the fallback limit, and start the hold when input
returns after an unplug, not when it went away, so a cable reinserted
after a long unplug is still identified first.

The charger's queue asked for neither WQ_PERCPU nor WQ_UNBOUND, so every
boot warned in alloc_workqueue(). The poll sleeps on I2C and the HDQ
gauge and keeps no per-CPU state: make the queue unbound.

[Orchard: from orchard PR #127 (commits 339bd296; patches 0031-0033
there), folded into one patch that extends the existing hold instead
of adding a second timer]

Assisted-by: LLM
---
diff --git a/drivers/power/supply/apple_tristar_charger.c b/drivers/power/supply/apple_tristar_charger.c
index a953ced..f632874 100644
--- a/drivers/power/supply/apple_tristar_charger.c
+++ b/drivers/power/supply/apple_tristar_charger.c
@@ -155,7 +155,6 @@ struct tristar_charger {
unsigned int source_ma;
/* USB data is on for this attachment: the mux must stay untouched. */
bool usb_on;
- bool source_seen; /* an attachment since probe */
/* What the USB host allows (vbus_draw), valid for usb_epoch only. */
unsigned int usb_ma;
unsigned int usb_epoch;
@@ -698,7 +697,6 @@ static void tristar_new_attachment(struct tristar_charger *chg, u64 now)
{
/* Before anything else: a host must not start a session yet. */
tristar_set_usb(chg, false);
- chg->source_seen = true;
chg->present = true;
chg->phase = TRISTAR_SETTLING;
chg->attach_ns = now;
@@ -910,12 +908,18 @@ static void tristar_guard(struct tristar_charger *chg, u64 now)
* up on the source: USB serial and SSH must not depend on charging. An attachment
* later holds USB data off again and identifies as usual. Caller holds lock.
*/
+/*
+ * Input is present but no source was identified: the PMIC can stay in a
+ * transitional state (e.g. 0x62) for any attachment, not only the first
+ * since probe. USB data must not stay off for it: after TRISTAR_HOLD_MS
+ * turn it on, at the fallback limit. Caller holds lock.
+ */
static void tristar_no_source(struct tristar_charger *chg, unsigned int status, u64 now)
{
- if (chg->usb_on || chg->source_seen ||
+ if (chg->usb_on ||
(s64)(now - chg->hold_ns) < (s64)TRISTAR_HOLD_MS * NSEC_PER_MSEC)
return;
- dev_warn(chg->dev, "no source seen since probe (status %#x), turning USB data on\n", status);
+ dev_info(chg->dev, "no source identified (status %#x), turning USB data on\n", status);
tristar_set_usb(chg, true);
}

@@ -939,6 +943,8 @@ static void tristar_poll(struct work_struct *work)
}
chg->online = status != 0;
if (!status) {
+ /* The hold of the next attachment starts when input returns. */
+ chg->hold_ns = now;
if (chg->present) {
tristar_set_usb(chg, false);
chg->present = false;
@@ -1335,7 +1341,8 @@ static int tristar_probe(struct platform_device *pdev)
if (ret)
return ret;
init_completion(&chg->adc_done);
- chg->wq = devm_alloc_workqueue(dev, "tristar-charger", WQ_HIGHPRI | WQ_FREEZABLE, 1);
+ chg->wq = devm_alloc_workqueue(dev, "tristar-charger",
+ WQ_UNBOUND | WQ_HIGHPRI | WQ_FREEZABLE, 1);
if (!chg->wq)
return -ENOMEM;
INIT_DELAYED_WORK(&chg->poll_work, tristar_poll);
--
2.54.0
Loading