diff options
author | Geert Uytterhoeven <geert@linux-m68k.org> | 2013-05-09 08:01:05 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-05-16 13:15:07 -0400 |
commit | 151978bf671dd2f741eab79c91d7d74bad49929c (patch) | |
tree | 5cdee5f5b224a4d950e7ac86a9ed92bf7a69fd4f /drivers/mfd/si476x-cmd.c | |
parent | c34924b9503ca73ae36573d6ce08a34677c05081 (diff) |
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>
Diffstat (limited to 'drivers/mfd/si476x-cmd.c')
-rw-r--r-- | drivers/mfd/si476x-cmd.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/mfd/si476x-cmd.c b/drivers/mfd/si476x-cmd.c index f12f0163feff..6f1ef63086c9 100644 --- a/drivers/mfd/si476x-cmd.c +++ b/drivers/mfd/si476x-cmd.c | |||
@@ -29,6 +29,8 @@ | |||
29 | 29 | ||
30 | #include <linux/mfd/si476x-core.h> | 30 | #include <linux/mfd/si476x-core.h> |
31 | 31 | ||
32 | #include <asm/unaligned.h> | ||
33 | |||
32 | #define msb(x) ((u8)((u16) x >> 8)) | 34 | #define msb(x) ((u8)((u16) x >> 8)) |
33 | #define lsb(x) ((u8)((u16) x & 0x00FF)) | 35 | #define lsb(x) ((u8)((u16) x & 0x00FF)) |
34 | 36 | ||
@@ -483,7 +485,7 @@ int si476x_core_cmd_get_property(struct si476x_core *core, u16 property) | |||
483 | if (err < 0) | 485 | if (err < 0) |
484 | return err; | 486 | return err; |
485 | else | 487 | else |
486 | return be16_to_cpup((__be16 *)(resp + 2)); | 488 | return get_unaligned_be16(resp + 2); |
487 | } | 489 | } |
488 | EXPORT_SYMBOL_GPL(si476x_core_cmd_get_property); | 490 | EXPORT_SYMBOL_GPL(si476x_core_cmd_get_property); |
489 | 491 | ||
@@ -783,7 +785,7 @@ int si476x_core_cmd_am_rsq_status(struct si476x_core *core, | |||
783 | report->afcrl = 0x02 & resp[2]; | 785 | report->afcrl = 0x02 & resp[2]; |
784 | report->valid = 0x01 & resp[2]; | 786 | report->valid = 0x01 & resp[2]; |
785 | 787 | ||
786 | report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); | 788 | report->readfreq = get_unaligned_be16(resp + 3); |
787 | report->freqoff = resp[5]; | 789 | report->freqoff = resp[5]; |
788 | report->rssi = resp[6]; | 790 | report->rssi = resp[6]; |
789 | report->snr = resp[7]; | 791 | report->snr = resp[7]; |
@@ -944,7 +946,7 @@ int si476x_core_cmd_fm_rds_status(struct si476x_core *core, | |||
944 | report->tp = 0x20 & resp[3]; | 946 | report->tp = 0x20 & resp[3]; |
945 | report->pty = 0x1f & resp[3]; | 947 | report->pty = 0x1f & resp[3]; |
946 | 948 | ||
947 | report->pi = be16_to_cpup((__be16 *)(resp + 4)); | 949 | report->pi = get_unaligned_be16(resp + 4); |
948 | report->rdsfifoused = resp[6]; | 950 | report->rdsfifoused = resp[6]; |
949 | 951 | ||
950 | report->ble[V4L2_RDS_BLOCK_A] = 0xc0 & resp[7]; | 952 | report->ble[V4L2_RDS_BLOCK_A] = 0xc0 & resp[7]; |
@@ -991,9 +993,9 @@ int si476x_core_cmd_fm_rds_blockcount(struct si476x_core *core, | |||
991 | SI476X_DEFAULT_TIMEOUT); | 993 | SI476X_DEFAULT_TIMEOUT); |
992 | 994 | ||
993 | if (!err) { | 995 | if (!err) { |
994 | report->expected = be16_to_cpup((__be16 *)(resp + 2)); | 996 | report->expected = get_unaligned_be16(resp + 2); |
995 | report->received = be16_to_cpup((__be16 *)(resp + 4)); | 997 | report->received = get_unaligned_be16(resp + 4); |
996 | report->uncorrectable = be16_to_cpup((__be16 *)(resp + 6)); | 998 | report->uncorrectable = get_unaligned_be16(resp + 6); |
997 | } | 999 | } |
998 | 1000 | ||
999 | return err; | 1001 | return err; |
@@ -1210,7 +1212,7 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core, | |||
1210 | report->afcrl = 0x02 & resp[2]; | 1212 | report->afcrl = 0x02 & resp[2]; |
1211 | report->valid = 0x01 & resp[2]; | 1213 | report->valid = 0x01 & resp[2]; |
1212 | 1214 | ||
1213 | report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); | 1215 | report->readfreq = get_unaligned_be16(resp + 3); |
1214 | report->freqoff = resp[5]; | 1216 | report->freqoff = resp[5]; |
1215 | report->rssi = resp[6]; | 1217 | report->rssi = resp[6]; |
1216 | report->snr = resp[7]; | 1218 | report->snr = resp[7]; |
@@ -1218,7 +1220,7 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core, | |||
1218 | report->hassi = resp[10]; | 1220 | report->hassi = resp[10]; |
1219 | report->mult = resp[11]; | 1221 | report->mult = resp[11]; |
1220 | report->dev = resp[12]; | 1222 | report->dev = resp[12]; |
1221 | report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); | 1223 | report->readantcap = get_unaligned_be16(resp + 13); |
1222 | report->assi = resp[15]; | 1224 | report->assi = resp[15]; |
1223 | report->usn = resp[16]; | 1225 | report->usn = resp[16]; |
1224 | 1226 | ||
@@ -1264,7 +1266,7 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core, | |||
1264 | report->afcrl = 0x02 & resp[2]; | 1266 | report->afcrl = 0x02 & resp[2]; |
1265 | report->valid = 0x01 & resp[2]; | 1267 | report->valid = 0x01 & resp[2]; |
1266 | 1268 | ||
1267 | report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); | 1269 | report->readfreq = get_unaligned_be16(resp + 3); |
1268 | report->freqoff = resp[5]; | 1270 | report->freqoff = resp[5]; |
1269 | report->rssi = resp[6]; | 1271 | report->rssi = resp[6]; |
1270 | report->snr = resp[7]; | 1272 | report->snr = resp[7]; |
@@ -1272,7 +1274,7 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core, | |||
1272 | report->hassi = resp[10]; | 1274 | report->hassi = resp[10]; |
1273 | report->mult = resp[11]; | 1275 | report->mult = resp[11]; |
1274 | report->dev = resp[12]; | 1276 | report->dev = resp[12]; |
1275 | report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); | 1277 | report->readantcap = get_unaligned_be16(resp + 13); |
1276 | report->assi = resp[15]; | 1278 | report->assi = resp[15]; |
1277 | report->usn = resp[16]; | 1279 | report->usn = resp[16]; |
1278 | 1280 | ||
@@ -1320,7 +1322,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, | |||
1320 | report->afcrl = 0x02 & resp[2]; | 1322 | report->afcrl = 0x02 & resp[2]; |
1321 | report->valid = 0x01 & resp[2]; | 1323 | report->valid = 0x01 & resp[2]; |
1322 | 1324 | ||
1323 | report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); | 1325 | report->readfreq = get_unaligned_be16(resp + 3); |
1324 | report->freqoff = resp[5]; | 1326 | report->freqoff = resp[5]; |
1325 | report->rssi = resp[6]; | 1327 | report->rssi = resp[6]; |
1326 | report->snr = resp[7]; | 1328 | report->snr = resp[7]; |
@@ -1329,7 +1331,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, | |||
1329 | report->hassi = resp[10]; | 1331 | report->hassi = resp[10]; |
1330 | report->mult = resp[11]; | 1332 | report->mult = resp[11]; |
1331 | report->dev = resp[12]; | 1333 | report->dev = resp[12]; |
1332 | report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); | 1334 | report->readantcap = get_unaligned_be16(resp + 13); |
1333 | report->assi = resp[15]; | 1335 | report->assi = resp[15]; |
1334 | report->usn = resp[16]; | 1336 | report->usn = resp[16]; |
1335 | 1337 | ||
@@ -1337,7 +1339,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, | |||
1337 | report->rdsdev = resp[18]; | 1339 | report->rdsdev = resp[18]; |
1338 | report->assidev = resp[19]; | 1340 | report->assidev = resp[19]; |
1339 | report->strongdev = resp[20]; | 1341 | report->strongdev = resp[20]; |
1340 | report->rdspi = be16_to_cpup((__be16 *)(resp + 21)); | 1342 | report->rdspi = get_unaligned_be16(resp + 21); |
1341 | 1343 | ||
1342 | return err; | 1344 | return err; |
1343 | } | 1345 | } |