checkpatch: Add warnings for unexpected struct names

As a way of keeping the driver declarations more consistent, add a warning
if the struct used does not end with _priv or _plat.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 4ed7e12..01ab570 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2320,6 +2320,23 @@
 	return $comment;
 }
 
+# Args:
+#   line: Patch line to check
+#   auto: Auto variable name, e.g. "per_child_auto"
+#   suffix: Suffix to expect on member, e.g. "_priv"
+#   warning: Warning name, e.g. "PRIV_AUTO"
+sub u_boot_struct_name {
+	my ($line, $auto, $suffix, $warning) = @_;
+
+	# Use _priv as a suffix for the device-private data struct
+	if ($line =~ /^\+\s*\.${auto}\s*=\s*sizeof\(struct\((\w+)\).*/) {
+		my $struct_name = $1;
+		if ($struct_name !~ /^\w+${suffix}/) {
+			WARN($warning, "struct \'$struct_name\' should have a ${suffix} suffix");
+		}
+	}
+}
+
 # Checks specific to U-Boot
 sub u_boot_line {
 	my ($realfile, $line, $rawline, $herecurr) = @_;
@@ -2371,6 +2388,27 @@
 		ERROR("CONFIG_IS_ENABLED_CONFIG",
 		      "CONFIG_IS_ENABLED() takes values without the CONFIG_ prefix\n" . $herecurr);
 	}
+
+	# Use _priv as a suffix for the device-private data struct
+	if ($line =~ /^\+\s*\.priv_auto\s*=\s*sizeof\(struct\((\w+)\).*/) {
+		my $struct_name = $1;
+		if ($struct_name !~ /^\w+_priv/) {
+			WARN("PRIV_AUTO", "struct \'$struct_name\' should have a _priv suffix");
+		}
+	}
+
+	# Check struct names for the 'auto' members of struct driver
+	u_boot_struct_name($line, "priv_auto", "_priv", "PRIV_AUTO");
+	u_boot_struct_name($line, "plat_auto", "_plat", "PLAT_AUTO");
+	u_boot_struct_name($line, "per_child_auto", "_priv", "CHILD_PRIV_AUTO");
+	u_boot_struct_name($line, "per_child_plat_auto", "_plat",
+		"CHILD_PLAT_AUTO");
+
+	# Now the ones for struct uclass, skipping those in common with above
+	u_boot_struct_name($line, "per_device_auto", "_priv",
+		"DEVICE_PRIV_AUTO");
+	u_boot_struct_name($line, "per_device_plat_auto", "_plat",
+		"DEVICE_PLAT_AUTO");
 }
 
 sub process {