Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: si476x: Use get_unaligned_be16() for unaligned be16 loads

Loading be16 values from byte buffers may cause unaligned accesses, so use
get_unaligned_be16() to avoid problems on architectures that do not support
these.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

Geert Uytterhoeven and committed by
Samuel Ortiz
151978bf c34924b9

+15 -13
+15 -13
drivers/mfd/si476x-cmd.c
··· 29 29 30 30 #include <linux/mfd/si476x-core.h> 31 31 32 + #include <asm/unaligned.h> 33 + 32 34 #define msb(x) ((u8)((u16) x >> 8)) 33 35 #define lsb(x) ((u8)((u16) x & 0x00FF)) 34 36 ··· 485 483 if (err < 0) 486 484 return err; 487 485 else 488 - return be16_to_cpup((__be16 *)(resp + 2)); 486 + return get_unaligned_be16(resp + 2); 489 487 } 490 488 EXPORT_SYMBOL_GPL(si476x_core_cmd_get_property); 491 489 ··· 785 783 report->afcrl = 0x02 & resp[2]; 786 784 report->valid = 0x01 & resp[2]; 787 785 788 - report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); 786 + report->readfreq = get_unaligned_be16(resp + 3); 789 787 report->freqoff = resp[5]; 790 788 report->rssi = resp[6]; 791 789 report->snr = resp[7]; ··· 946 944 report->tp = 0x20 & resp[3]; 947 945 report->pty = 0x1f & resp[3]; 948 946 949 - report->pi = be16_to_cpup((__be16 *)(resp + 4)); 947 + report->pi = get_unaligned_be16(resp + 4); 950 948 report->rdsfifoused = resp[6]; 951 949 952 950 report->ble[V4L2_RDS_BLOCK_A] = 0xc0 & resp[7]; ··· 993 991 SI476X_DEFAULT_TIMEOUT); 994 992 995 993 if (!err) { 996 - report->expected = be16_to_cpup((__be16 *)(resp + 2)); 997 - report->received = be16_to_cpup((__be16 *)(resp + 4)); 998 - report->uncorrectable = be16_to_cpup((__be16 *)(resp + 6)); 994 + report->expected = get_unaligned_be16(resp + 2); 995 + report->received = get_unaligned_be16(resp + 4); 996 + report->uncorrectable = get_unaligned_be16(resp + 6); 999 997 } 1000 998 1001 999 return err; ··· 1212 1210 report->afcrl = 0x02 & resp[2]; 1213 1211 report->valid = 0x01 & resp[2]; 1214 1212 1215 - report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); 1213 + report->readfreq = get_unaligned_be16(resp + 3); 1216 1214 report->freqoff = resp[5]; 1217 1215 report->rssi = resp[6]; 1218 1216 report->snr = resp[7]; ··· 1220 1218 report->hassi = resp[10]; 1221 1219 report->mult = resp[11]; 1222 1220 report->dev = resp[12]; 1223 - report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); 1221 + report->readantcap = get_unaligned_be16(resp + 13); 1224 1222 report->assi = resp[15]; 1225 1223 report->usn = resp[16]; 1226 1224 ··· 1266 1264 report->afcrl = 0x02 & resp[2]; 1267 1265 report->valid = 0x01 & resp[2]; 1268 1266 1269 - report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); 1267 + report->readfreq = get_unaligned_be16(resp + 3); 1270 1268 report->freqoff = resp[5]; 1271 1269 report->rssi = resp[6]; 1272 1270 report->snr = resp[7]; ··· 1274 1272 report->hassi = resp[10]; 1275 1273 report->mult = resp[11]; 1276 1274 report->dev = resp[12]; 1277 - report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); 1275 + report->readantcap = get_unaligned_be16(resp + 13); 1278 1276 report->assi = resp[15]; 1279 1277 report->usn = resp[16]; 1280 1278 ··· 1322 1320 report->afcrl = 0x02 & resp[2]; 1323 1321 report->valid = 0x01 & resp[2]; 1324 1322 1325 - report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); 1323 + report->readfreq = get_unaligned_be16(resp + 3); 1326 1324 report->freqoff = resp[5]; 1327 1325 report->rssi = resp[6]; 1328 1326 report->snr = resp[7]; ··· 1331 1329 report->hassi = resp[10]; 1332 1330 report->mult = resp[11]; 1333 1331 report->dev = resp[12]; 1334 - report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); 1332 + report->readantcap = get_unaligned_be16(resp + 13); 1335 1333 report->assi = resp[15]; 1336 1334 report->usn = resp[16]; 1337 1335 ··· 1339 1337 report->rdsdev = resp[18]; 1340 1338 report->assidev = resp[19]; 1341 1339 report->strongdev = resp[20]; 1342 - report->rdspi = be16_to_cpup((__be16 *)(resp + 21)); 1340 + report->rdspi = get_unaligned_be16(resp + 21); 1343 1341 1344 1342 return err; 1345 1343 }