1*60d18d3fSSimon Glass /* 2*60d18d3fSSimon Glass * Copyright (c) 2013 Google, Inc 3*60d18d3fSSimon Glass * 4*60d18d3fSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 5*60d18d3fSSimon Glass */ 6*60d18d3fSSimon Glass 7*60d18d3fSSimon Glass #include "linux/crc8.h" 8*60d18d3fSSimon Glass 9*60d18d3fSSimon Glass unsigned int crc8(const unsigned char *vptr, int len) 10*60d18d3fSSimon Glass { 11*60d18d3fSSimon Glass const unsigned char *data = vptr; 12*60d18d3fSSimon Glass unsigned int crc = 0; 13*60d18d3fSSimon Glass int i, j; 14*60d18d3fSSimon Glass 15*60d18d3fSSimon Glass for (j = len; j; j--, data++) { 16*60d18d3fSSimon Glass crc ^= (*data << 8); 17*60d18d3fSSimon Glass for (i = 8; i; i--) { 18*60d18d3fSSimon Glass if (crc & 0x8000) 19*60d18d3fSSimon Glass crc ^= (0x1070 << 3); 20*60d18d3fSSimon Glass crc <<= 1; 21*60d18d3fSSimon Glass } 22*60d18d3fSSimon Glass } 23*60d18d3fSSimon Glass 24*60d18d3fSSimon Glass return (crc >> 8) & 0xff; 25*60d18d3fSSimon Glass } 26