1 /* 2 * Copyright (c) 2013 Google, Inc 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #include "linux/crc8.h" 8 9 #define POLY (0x1070U << 3) 10 11 static unsigned char _crc8(unsigned short data) 12 { 13 int i; 14 15 for (i = 0; i < 8; i++) { 16 if (data & 0x8000) 17 data = data ^ POLY; 18 data = data << 1; 19 } 20 21 return (unsigned char)(data >> 8); 22 } 23 24 unsigned int crc8(unsigned int crc, const unsigned char *vptr, int len) 25 { 26 int i; 27 28 for (i = 0; i < len; i++) 29 crc = _crc8((crc ^ vptr[i]) << 8); 30 31 return crc; 32 } 33