Linux 7.3 si u USB-C kabelu ověří schopnosti dřív, než v něm nabídne DisplayPort
Jádro Linuxu dosud nabízelo alternativní režimy jako DisplayPort nebo Thunderbolt bez ohledu na to, co připojený kabel USB-C umí. Od verze 7.3 si nejdřív přečte jeho elektronickou identitu a pasivnímu kabelu s rychlostí USB 2.0 ani kabelu bez elektronické značky režim nenabídne. Sérii záplat napsal Andrei Kuchynski z týmu ChromeOS u Googlu.

Kód alternativních režimů v jádře Linuxu měl dosud přímočaré pravidlo. Jakmile se protějšek na konektoru USB-C ohlásil, že umí DisplayPort nebo Thunderbolt, ovladač mu zaregistroval sadu obslužných funkcí a režim byl připravený k použití. Kabel mezi oběma stroji do toho rozhodnutí nemluvil, i když je to on, kdo signál musí přenést.
To mění série tří záplat nazvaná Restrict alternate modes based on cable capabilities. Jejím autorem je Andrei Kuchynski z týmu kolem ChromeOS u Googlu, návrh podal Heikki Krogerus z Intelu. Do hlavní větve jádra ji spolu s ostatními změnami podsystému USB a Thunderbolt poslal Greg Kroah-Hartman 25. srpna 2026.
Průvodní dopis popisuje, co bylo špatně: ovladače přiřazovaly obslužné funkce i tehdy, když je vlastnosti kabelu podepřít nemohly. Systém pak podle něj hlásil stav konfigurace, který neplatil, nebo alternativní režim selhal až při inicializaci.
Co si jádro o kabelu zjistí
Novou kontrolu dělá funkce typec_cable_altmode_unsupported() v souboru drivers/usb/typec/class.c. Uvnitř ní sedí pomocná funkce, která vrací tři stavy: podporováno, nepodporováno a neznámo. Zakazuje se jen prostřední z nich.
Nejdřív se jádro ptá, jestli pro daný režim existuje uzel na straně kabelové zástrčky. V řeči USB Power Delivery je to komunikace SOP', tedy pakety adresované čipu v kabelu, ne zařízení na druhém konci. Když takový uzel existuje, kabel se k režimu hlásí sám a kontrola tím končí.
Teprve když uzel chybí, sáhne jádro po identitě, kterou kabel vrátil na dotaz Discover Identity. Prázdná hlavička identity znamená kabel bez elektronické značky, takzvaného e-markeru, a alternativní režim se nepovolí. U pasivního kabelu rozhoduje pole rychlosti: hodnota odpovídající pouhému USB 2.0 režim vyloučí, cokoli rychlejšího ho pustí. A aktivní kabel, který uzel SOP' nenavázal, režim nedostane – aktivní kabel takovou komunikaci navázat musí, jinak ten konkrétní režim neumí.
Kontrola má slepé místo, které autor popisuje v komentáři sám. Když kabel žádnou identitu zaregistrovanou nemá, zůstává stav neznámo a režim se nabídne jako dřív. Pravidlo tedy vyřadí kabel, který o sobě něco řekne a to řečené nestačí, ne kabel, který mlčí.
Kde se kontrola volá
Oba ovladače alternativních režimů ji volají při navázání na zařízení. U Thunderboltu stačí jediná podmínka před registrací obslužných funkcí; když kabel režim neunese, funkce navázání skončí nulou. Ovladač tedy zůstane navázaný, ale bez obsluhy, takže se režim nedá aktivovat.
U DisplayPortu je podmínka o kousek složitější:
if ((alt->vdo & DP_CAP_RECEPTACLE) && typec_cable_altmode_unsupported(alt))
return 0;
Přibylo v ní ověření, že zařízení má konektor, do kterého se kabel zapojuje. Pevně připojený kabel se totiž nekontroluje: podle popisu záplaty nemusí své schopnosti hlásit, ale je z výroby navržený tak, aby zařízení stačil. Ve stejné záplatě se registrace obslužných funkcí posunula až za tuhle podmínku – dřív stála hned na začátku.
Druhá změna: aktivní dotazování u USB4STREAM
Vedle toho přibyla v podsystému Thunderboltu volba busy_poll. Týká se rozhraní USB4STREAM, kterým si dva počítače spojené kabelem USB4 posílají data přímo; Intel ho do jádra dostal ve verzi 7.2.
Nový atribut v ConfigFS přepne vysílací i přijímací kruhy do režimu, kdy je čtení a zápis samy obcházejí dokola místo čekání na přerušení. Autor Mika Westerberg z Intelu v popisu záplaty píše i cenu za nižší prodlevu: spálí to víc cyklů procesoru, volání poll(2) začne vracet chybu, protože přerušení už nikoho nebudí, a blokující read(2) bez dostupných dat se točí dokola, dokud data nepřijdou nebo nedorazí signál. Záplata nese řádek Assisted-by: Claude:claude-opus-4-8.
Dokumentace rozhraní v jádře u toho atributu uvádí verzi 7.3 a datum listopad 2026. Samotná verze zatím vydaná není: kód v hlavní větvi je, ověřit se dá otevřením zmíněných dvou souborů, ale soubor Makefile v ní pořád nese číslo 7.2, protože slévací okno se v době psaní zavíralo teprve teď. Do téhož vydání míří i opravy v šifrovaném souborovém systému eCryptfs.
Zdroje
- Greg Kroah-Hartman: [GIT PULL] USB/Thunderbolt driver updates for 7.3-rc1, konference vývojářů jádra, 25. srpna 2026
- Andrei Kuchynski: usb: typec: Add helper to check cable altmode support, konference linux-usb, 26. června 2026
- Andrei Kuchynski: usb: typec: displayport: Check cable altmode support, konference linux-usb, 26. června 2026
- Mika Westerberg: thunderbolt: stream: Add support for busy polling, konference linux-usb, 28. července 2026
- Michael Larabel: Linux 7.3 Will Begin Checking USB-C Cables For Alt-Mode Support, Phoronix, 28. srpna 2026