int wacom_checksum(struct wacom_i2c *wac_i2c) { int ret = 0, retry = 10; int i = 0; u8 buf[5] = {0, }; buf[0] = COM_CHECKSUM; while (retry--) { ret = wacom_i2c_send(wac_i2c, &buf[0], 1, false); if (ret < 0) { printk(KERN_DEBUG "[E-PEN] i2c fail, retry, %d\n", __LINE__); continue; } msleep(200); ret = wacom_i2c_recv(wac_i2c, buf, 5, false); if (ret < 0) { printk(KERN_DEBUG "[E-PEN] i2c fail, retry, %d\n", __LINE__); continue; } else if (buf[0] == 0x1f) break; printk(KERN_DEBUG "[E-PEN] checksum retry\n"); } if (ret >= 0) { printk(KERN_DEBUG "[E-PEN] received checksum %x, %x, %x, %x, %x\n", buf[0], buf[1], buf[2], buf[3], buf[4]); } for (i = 0; i < 5; ++i) { if (buf[i] != Firmware_checksum[i]) { printk(KERN_DEBUG "[E-PEN] checksum fail %dth %x %x\n", i, buf[i], Firmware_checksum[i]); break; } } wac_i2c->checksum_result = (5 == i); #ifdef WACOM_CONNECTION_CHECK if (!wac_i2c->connection_check) wacom_open_test(wac_i2c); #endif return ret; }
static ssize_t epen_connection_show(struct device *dev, struct device_attribute *attr, char *buf) { struct wacom_i2c *wac_i2c = dev_get_drvdata(dev); printk(KERN_DEBUG"epen:%s\n", __func__); wacom_open_test(wac_i2c); printk(KERN_DEBUG "epen:connection_check : %d\n", wac_i2c->connection_check); return sprintf(buf, "%s\n", wac_i2c->connection_check ? "OK" : "NG"); }