160d18d3fSSimon Glass /* 260d18d3fSSimon Glass * Copyright (c) 2013 Google, Inc 360d18d3fSSimon Glass * 460d18d3fSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 560d18d3fSSimon Glass */ 660d18d3fSSimon Glass 760d18d3fSSimon Glass #include "linux/crc8.h" 860d18d3fSSimon Glass 9*456ecd08SStefan Roese #define POLY (0x1070U << 3) 10*456ecd08SStefan Roese _crc8(unsigned short data)11*456ecd08SStefan Roesestatic unsigned char _crc8(unsigned short data) 1260d18d3fSSimon Glass { 13*456ecd08SStefan Roese int i; 1460d18d3fSSimon Glass 15*456ecd08SStefan Roese for (i = 0; i < 8; i++) { 16*456ecd08SStefan Roese if (data & 0x8000) 17*456ecd08SStefan Roese data = data ^ POLY; 18*456ecd08SStefan Roese data = data << 1; 1960d18d3fSSimon Glass } 2060d18d3fSSimon Glass 21*456ecd08SStefan Roese return (unsigned char)(data >> 8); 22*456ecd08SStefan Roese } 23*456ecd08SStefan Roese crc8(unsigned int crc,const unsigned char * vptr,int len)24*456ecd08SStefan Roeseunsigned int crc8(unsigned int crc, const unsigned char *vptr, int len) 25*456ecd08SStefan Roese { 26*456ecd08SStefan Roese int i; 27*456ecd08SStefan Roese 28*456ecd08SStefan Roese for (i = 0; i < len; i++) 29*456ecd08SStefan Roese crc = _crc8((crc ^ vptr[i]) << 8); 30*456ecd08SStefan Roese 31*456ecd08SStefan Roese return crc; 3260d18d3fSSimon Glass } 33