Re: [PATCH] checkpatch: Don't emit warnings for USB & PCI device DT compatible prefixes
From: Brian Norris
Date: Thu May 14 2026 - 13:43:14 EST
Hi Chen-Yu,
On Thu, May 14, 2026 at 06:51:50PM +0800, Chen-Yu Tsai wrote:
> The USB and PCI device bindings define some compatible patterns based
> on device IDs that use the comma to separate vendor and product IDs.
>
> These patterns include:
>
> - usb[0-9a-f]{1,4},[0-9a-f]{1,4}
> - pci[0-9a-f]{2,4},[0-9a-f]{1,4}
> - pciclass,[01][0-9a-f]{3}([0-9a-f]{2})?
>
> These are not real vendor prefixes. Don't emit warnings for them.
>
> Signed-off-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>
> ---
> This is a simplified version of what Brian Norris previously posted [1],
Wow, almost forgot about that one. Thanks for the blast from the past.
> but more comprehensive and more perl-y than what Yingying Tang posted
Is "perl-y" a good thing? :)
> [2], which only covered the second pattern.
>
> Hopefully everyone likes this version.
I like any version that eliminates obvious false positives!
But one thing that can be improved: your version still requires that the
full ID string be documented explicitly. For example, this still gives a
false warning:
$ git format-patch -1 --stdout 24af105962c8004edb9f5bf84bc587cbb30e52de | scripts/checkpatch.pl
[...]
WARNING: DT compatible string "pci0014,7a24.0" appears un-documented -- check ./Documentation/devicetree/bindings/
#234: FILE: arch/mips/boot/dts/loongson/ls7a-pch.dtsi:37:
+ compatible = "pci0014,7a24.0",
WARNING: DT compatible string "pci0014,7a14.0" appears un-documented -- check ./Documentation/devicetree/bindings/
#245: FILE: arch/mips/boot/dts/loongson/ls7a-pch.dtsi:48:
+ compatible = "pci0014,7a14.0",
[...]
The dtschema is clear that anything matching the pci pattern is OK, and
we don't need to list every possible variation in a yaml file.
> This is based on next-20260508.
>
> [1] https://lore.kernel.org/all/20190223022440.146915-1-briannorris@xxxxxxxxxxxx/
> [2] https://lore.kernel.org/all/20251210073812.1380803-1-yingying.tang@xxxxxxxxxxxxxxxx/
>
> scripts/checkpatch.pl | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 3727156e4cca..ccedf152acfd 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -3795,6 +3795,9 @@ sub process {
>
> next if $compat !~ /^([a-zA-Z0-9\-]+)\,/;
> my $vendor = $1;
> + next if $vendor eq "pciclass";
> + next if $vendor =~ /^pci[a-f0-9]{2,4}$/;
> + next if $vendor =~ /^usb(if)?[a-f0-9]{1,4}$/;
Maybe we can move this "skip pciclass/pci/usb" stuff up a few lines?
Brian
> `grep -Eq "\\"\\^\Q$vendor\E,\\.\\*\\":" $vp_file`;
> if ( $? >> 8 ) {
> WARN("UNDOCUMENTED_DT_STRING",
> --
> 2.54.0.563.g4f69b47b94-goog
>