| | 1029 | print_diff $package_root,$kernel_root,$kernel_file,$package_file; |
|---|
| | 1030 | } |
|---|
| | 1031 | |
|---|
| | 1032 | # Generate the diffs for dmi_scan.c and i386_ksyms.c |
|---|
| | 1033 | # $_[0]: i2c package root (like /tmp/i2c) |
|---|
| | 1034 | # $_[1]: Linux kernel tree (like /usr/src/linux) |
|---|
| | 1035 | sub gen_dmi_scan |
|---|
| | 1036 | { |
|---|
| | 1037 | my ($package_root,$kernel_root) = @_; |
|---|
| | 1038 | my $kernel_file = "arch/i386/kernel/dmi_scan.c"; |
|---|
| | 1039 | my $package_file = $temp; |
|---|
| | 1040 | my $done = 0; |
|---|
| | 1041 | |
|---|
| | 1042 | open INPUT,"$kernel_root/$kernel_file" |
|---|
| | 1043 | or die "Can't open `$kernel_root/$kernel_file'"; |
|---|
| | 1044 | open OUTPUT,">$package_root/$package_file" |
|---|
| | 1045 | or die "Can't open $package_root/$package_file"; |
|---|
| | 1046 | MAIN: while(<INPUT>) { |
|---|
| | 1047 | if ($done == 0 && m/^\s*int is_sony_vaio_laptop;\s*$/) { |
|---|
| | 1048 | print OUTPUT <<'EOF'; |
|---|
| | 1049 | int is_unsafe_smbus; |
|---|
| | 1050 | EOF |
|---|
| | 1051 | $done++; |
|---|
| | 1052 | } |
|---|
| | 1053 | if ($done == 1 && m/^\s*\* Check for a Sony Vaio system\s*$/) { |
|---|
| | 1054 | print OUTPUT <<'EOF'; |
|---|
| | 1055 | * Don't access SMBus on IBM systems which get corrupted eeproms |
|---|
| | 1056 | */ |
|---|
| | 1057 | |
|---|
| | 1058 | static __init int disable_smbus(struct dmi_blacklist *d) |
|---|
| | 1059 | { |
|---|
| | 1060 | if (is_unsafe_smbus == 0) { |
|---|
| | 1061 | is_unsafe_smbus = 1; |
|---|
| | 1062 | printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident); |
|---|
| | 1063 | } |
|---|
| | 1064 | return 0; |
|---|
| | 1065 | } |
|---|
| | 1066 | |
|---|
| | 1067 | /* |
|---|
| | 1068 | EOF |
|---|
| | 1069 | $done++; |
|---|
| | 1070 | } |
|---|
| | 1071 | if ($done == 2 && m/^\s*\{ sony_vaio_laptop, "Sony Vaio", \{ \/\* This is a Sony Vaio laptop \*\/\s*$/) { |
|---|
| | 1072 | print OUTPUT <<'EOF'; |
|---|
| | 1073 | { disable_smbus, "IBM", { |
|---|
| | 1074 | MATCH(DMI_SYS_VENDOR, "IBM"), |
|---|
| | 1075 | NO_MATCH, NO_MATCH, NO_MATCH |
|---|
| | 1076 | } }, |
|---|
| | 1077 | EOF |
|---|
| | 1078 | $done++; |
|---|
| | 1079 | } |
|---|
| | 1080 | print OUTPUT; |
|---|
| | 1081 | } |
|---|
| | 1082 | close INPUT; |
|---|
| | 1083 | close OUTPUT; |
|---|
| | 1084 | die "Automatic patch generation for `$kernel_file' failed.\n". |
|---|
| | 1085 | "See our home page http://www.lm-sensors.nu for assistance!" if $done != 3; |
|---|
| | 1086 | print_diff $package_root,$kernel_root,$kernel_file,$package_file; |
|---|
| | 1087 | |
|---|
| | 1088 | $kernel_file = "arch/i386/kernel/i386_ksyms.c"; |
|---|
| | 1089 | $done = 0; |
|---|
| | 1090 | |
|---|
| | 1091 | open INPUT,"$kernel_root/$kernel_file" |
|---|
| | 1092 | or die "Can't open `$kernel_root/$kernel_file'"; |
|---|
| | 1093 | open OUTPUT,">$package_root/$package_file" |
|---|
| | 1094 | or die "Can't open $package_root/$package_file"; |
|---|
| | 1095 | MAIN: while(<INPUT>) { |
|---|
| | 1096 | if ($done == 0 && m/^\s*extern int is_sony_vaio_laptop;\s*$/) { |
|---|
| | 1097 | print OUTPUT <<'EOF'; |
|---|
| | 1098 | extern int is_unsafe_smbus; |
|---|
| | 1099 | EXPORT_SYMBOL(is_unsafe_smbus); |
|---|
| | 1100 | |
|---|
| | 1101 | EOF |
|---|
| | 1102 | $done++; |
|---|
| | 1103 | } |
|---|
| | 1104 | print OUTPUT; |
|---|
| | 1105 | } |
|---|
| | 1106 | close INPUT; |
|---|
| | 1107 | close OUTPUT; |
|---|
| | 1108 | die "Automatic patch generation for `$kernel_file' failed.\n". |
|---|
| | 1109 | "See our home page http://www.lm-sensors.nu for assistance!" if $done != 1; |
|---|