From 6d3fc76b7720c6eeb5f38cce32290cbbe28ae146 Mon Sep 17 00:00:00 2001 From: Antony Pavlov Date: Wed, 30 Jul 2014 00:10:17 +0400 Subject: [PATCH] lib: import 'bcd' from linux-3.15 Signed-off-by: Antony Pavlov Signed-off-by: Sascha Hauer --- include/linux/bcd.h | 22 ++++++++++++++++++++++ lib/Makefile | 1 + lib/bcd.c | 14 ++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 include/linux/bcd.h create mode 100644 lib/bcd.c diff --git a/include/linux/bcd.h b/include/linux/bcd.h new file mode 100644 index 000000000..18fff11fb --- /dev/null +++ b/include/linux/bcd.h @@ -0,0 +1,22 @@ +#ifndef _BCD_H +#define _BCD_H + +#include + +#define bcd2bin(x) \ + (__builtin_constant_p((u8 )(x)) ? \ + const_bcd2bin(x) : \ + _bcd2bin(x)) + +#define bin2bcd(x) \ + (__builtin_constant_p((u8 )(x)) ? \ + const_bin2bcd(x) : \ + _bin2bcd(x)) + +#define const_bcd2bin(x) (((x) & 0x0f) + ((x) >> 4) * 10) +#define const_bin2bcd(x) ((((x) / 10) << 4) + (x) % 10) + +unsigned _bcd2bin(unsigned char val) __attribute_const__; +unsigned char _bin2bcd(unsigned val) __attribute_const__; + +#endif /* _BCD_H */ diff --git a/lib/Makefile b/lib/Makefile index e8769a9be..14442a7be 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,3 +1,4 @@ +obj-y += bcd.o obj-$(CONFIG_BOOTSTRAP) += bootstrap/ obj-y += ctype.o obj-y += rbtree.o diff --git a/lib/bcd.c b/lib/bcd.c new file mode 100644 index 000000000..b072d50a9 --- /dev/null +++ b/lib/bcd.c @@ -0,0 +1,14 @@ +#include +#include + +unsigned _bcd2bin(unsigned char val) +{ + return (val & 0x0f) + (val >> 4) * 10; +} +EXPORT_SYMBOL(_bcd2bin); + +unsigned char _bin2bcd(unsigned val) +{ + return ((val / 10) << 4) + val % 10; +} +EXPORT_SYMBOL(_bin2bcd);