aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211/brcmutil
diff options
context:
space:
mode:
authorAlwin Beukers <alwin@broadcom.com>2011-10-12 14:51:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-10-14 14:48:19 -0400
commitef6ac17a20a424fdfb049ae475d62b92c192d1bc (patch)
tree72d66b705f1b16d8a8af65638b88e14200342ded /drivers/net/wireless/brcm80211/brcmutil
parentf53b170f465d52546c33faa962c3d2609a6bf5b3 (diff)
brcm80211: moved power conversion functions
Moved brcmu_mw_to_qdbm and brcmu_qdbm_to_mw functions into the only file using them. Names were adjusted accordingly. Reported-by: Johannes Berg <johannes@sipsolutions.net> Reviewed-by: Roland Vossen <rvossen@broadcom.com> Reviewed-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmutil')
-rw-r--r--drivers/net/wireless/brcm80211/brcmutil/utils.c86
1 files changed, 0 insertions, 86 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmutil/utils.c b/drivers/net/wireless/brcm80211/brcmutil/utils.c
index 0bb104f784fe..1851f93c9355 100644
--- a/drivers/net/wireless/brcm80211/brcmutil/utils.c
+++ b/drivers/net/wireless/brcm80211/brcmutil/utils.c
@@ -498,89 +498,3 @@ uint brcmu_mkiovar(char *name, char *data, uint datalen, char *buf, uint buflen)
498} 498}
499EXPORT_SYMBOL(brcmu_mkiovar); 499EXPORT_SYMBOL(brcmu_mkiovar);
500 500
501/* Quarter dBm units to mW
502 * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153
503 * Table is offset so the last entry is largest mW value that fits in
504 * a u16.
505 */
506
507#define QDBM_OFFSET 153 /* Offset for first entry */
508#define QDBM_TABLE_LEN 40 /* Table size */
509
510/* Smallest mW value that will round up to the first table entry, QDBM_OFFSET.
511 * Value is ( mW(QDBM_OFFSET - 1) + mW(QDBM_OFFSET) ) / 2
512 */
513#define QDBM_TABLE_LOW_BOUND 6493 /* Low bound */
514
515/* Largest mW value that will round down to the last table entry,
516 * QDBM_OFFSET + QDBM_TABLE_LEN-1.
517 * Value is ( mW(QDBM_OFFSET + QDBM_TABLE_LEN - 1) +
518 * mW(QDBM_OFFSET + QDBM_TABLE_LEN) ) / 2.
519 */
520#define QDBM_TABLE_HIGH_BOUND 64938 /* High bound */
521
522static const u16 nqdBm_to_mW_map[QDBM_TABLE_LEN] = {
523/* qdBm: +0 +1 +2 +3 +4 +5 +6 +7 */
524/* 153: */ 6683, 7079, 7499, 7943, 8414, 8913, 9441, 10000,
525/* 161: */ 10593, 11220, 11885, 12589, 13335, 14125, 14962, 15849,
526/* 169: */ 16788, 17783, 18836, 19953, 21135, 22387, 23714, 25119,
527/* 177: */ 26607, 28184, 29854, 31623, 33497, 35481, 37584, 39811,
528/* 185: */ 42170, 44668, 47315, 50119, 53088, 56234, 59566, 63096
529};
530
531u16 brcmu_qdbm_to_mw(u8 qdbm)
532{
533 uint factor = 1;
534 int idx = qdbm - QDBM_OFFSET;
535
536 if (idx >= QDBM_TABLE_LEN)
537 /* clamp to max u16 mW value */
538 return 0xFFFF;
539
540 /* scale the qdBm index up to the range of the table 0-40
541 * where an offset of 40 qdBm equals a factor of 10 mW.
542 */
543 while (idx < 0) {
544 idx += 40;
545 factor *= 10;
546 }
547
548 /* return the mW value scaled down to the correct factor of 10,
549 * adding in factor/2 to get proper rounding.
550 */
551 return (nqdBm_to_mW_map[idx] + factor / 2) / factor;
552}
553EXPORT_SYMBOL(brcmu_qdbm_to_mw);
554
555u8 brcmu_mw_to_qdbm(u16 mw)
556{
557 u8 qdbm;
558 int offset;
559 uint mw_uint = mw;
560 uint boundary;
561
562 /* handle boundary case */
563 if (mw_uint <= 1)
564 return 0;
565
566 offset = QDBM_OFFSET;
567
568 /* move mw into the range of the table */
569 while (mw_uint < QDBM_TABLE_LOW_BOUND) {
570 mw_uint *= 10;
571 offset -= 40;
572 }
573
574 for (qdbm = 0; qdbm < QDBM_TABLE_LEN - 1; qdbm++) {
575 boundary = nqdBm_to_mW_map[qdbm] + (nqdBm_to_mW_map[qdbm + 1] -
576 nqdBm_to_mW_map[qdbm]) / 2;
577 if (mw_uint < boundary)
578 break;
579 }
580
581 qdbm += (u8) offset;
582
583 return qdbm;
584}
585EXPORT_SYMBOL(brcmu_mw_to_qdbm);
586