コード例 #1
0
ファイル: focaltech_ex_fun.c プロジェクト: EvlisChen/git_test
/************************************************************************
*   Name: fts_debug_read
*  Brief:interface of read proc
* Input: point to the data, no use, no use, read len, no use, no use 
* Output: page point to data
* Return: read char number
***********************************************************************/
static ssize_t fts_debug_read(struct file *filp, char __user *buff, size_t count, loff_t *ppos)
{
	int ret = 0;
	int num_read_chars = 0;
	int readlen = 0;
	u8 regvalue = 0x00, regaddr = 0x00;
	unsigned char buf[READ_BUF_SIZE];
	
	switch (proc_operate_mode) {
	case PROC_UPGRADE:
		//after calling fts_debug_write to upgrade
		regaddr = 0xA6;
		ret = fts_read_reg(fts_i2c_client, regaddr, &regvalue);
		if (ret < 0)
			num_read_chars = sprintf(buf, "%s", "get fw version failed.\n");
		else
			num_read_chars = sprintf(buf, "current fw version:0x%02x\n", regvalue);
		break;
	case PROC_READ_REGISTER:
		readlen = 1;
		ret = fts_i2c_read(fts_i2c_client, NULL, 0, buf, readlen);
		if (ret < 0) {
			dev_err(&fts_i2c_client->dev, "%s:read iic error\n", __func__);
			return ret;
		} 
		num_read_chars = 1;
		break;
	case PROC_READ_DATA:
		readlen = count;
		ret = fts_i2c_read(fts_i2c_client, NULL, 0, buf, readlen);
		if (ret < 0) {
			dev_err(&fts_i2c_client->dev, "%s:read iic error\n", __func__);
			return ret;
		}
		
		num_read_chars = readlen;
		break;
	case PROC_WRITE_DATA:
		break;
	default:
		break;
	}
	
	if (copy_to_user(buff, buf, num_read_chars)) {
		dev_err(&fts_i2c_client->dev, "%s:copy to user error\n", __func__);
		return -EFAULT;
	}

	return num_read_chars;
}
コード例 #2
0
ファイル: focaltech_ex_fun.c プロジェクト: EvlisChen/git_test
/************************************************************************
*   Name: fts_debug_read
*  Brief:interface of read proc
* Input: point to the data, no use, no use, read len, no use, no use 
* Output: page point to data
* Return: read char number
***********************************************************************/
static int fts_debug_read( char *page, char **start,
	off_t off, int count, int *eof, void *data )
{
	int ret = 0;
	unsigned char buf[READ_BUF_SIZE];
	int num_read_chars = 0;
	int readlen = 0;
	u8 regvalue = 0x00, regaddr = 0x00;
	
	switch (proc_operate_mode) {
	case PROC_UPGRADE:
		//after calling fts_debug_write to upgrade
		regaddr = 0xA6;
		ret = fts_read_reg(fts_i2c_client, regaddr, &regvalue);
		if (ret < 0)
			num_read_chars = sprintf(buf, "%s", "get fw version failed.\n");
		else
			num_read_chars = sprintf(buf, "current fw version:0x%02x\n", regvalue);
		break;
	case PROC_READ_REGISTER:
		readlen = 1;
		ret = fts_i2c_read(fts_i2c_client, NULL, 0, buf, readlen);
		if (ret < 0) {
			dev_err(&fts_i2c_client->dev, "%s:read iic error\n", __func__);
			return ret;
		} 
		num_read_chars = 1;
		break;
	case PROC_READ_DATA:
		readlen = count;
		ret = fts_i2c_read(fts_i2c_client, NULL, 0, buf, readlen);
		if (ret < 0) {
			dev_err(&fts_i2c_client->dev, "%s:read iic error\n", __func__);
			return ret;
		}
		
		num_read_chars = readlen;
		break;
	case PROC_WRITE_DATA:
		break;
	default:
		break;
	}
	
	memcpy(page, buf, num_read_chars);
	return num_read_chars;
}
コード例 #3
0
 /************************************************************************
*   Name: fts_read_Gestruedata
* Brief: read data from TP register
* Input: no
* Output: no
* Return: fail <0
***********************************************************************/
int fts_read_Gestruedata(void)
{
	unsigned char buf[FTS_GESTRUE_POINTS * 3] = { 0 };
	int ret = -1;
	int i = 0;
	int gestrue_id = 0;

	buf[0] = 0xd3;
	pointnum = 0;

	ret =
	    fts_i2c_read(fts_i2c_client, buf, 1, buf,
			 FTS_GESTRUE_POINTS_HEADER);
	/*printk( "tpd read FTS_GESTRUE_POINTS_HEADER.\n");*/

	if (ret < 0) {
		printk("%s read touchdata failed.\n", __func__);
		return ret;
	}

	/* FW */
	if (fts_updateinfo_curr.CHIP_ID == 0x54
	    || fts_updateinfo_curr.CHIP_ID == 0x58) {
		gestrue_id = buf[0];
		pointnum = (short)(buf[1]) & 0xff;
		buf[0] = 0xd3;

		if ((pointnum * 4 + 8) < 255) {
			ret =
			    fts_i2c_read(fts_i2c_client, buf, 1, buf,
					 (pointnum * 4 + 8));
		} else {
			ret = fts_i2c_read(fts_i2c_client, buf, 1, buf, 255);
			ret =
			    fts_i2c_read(fts_i2c_client, buf, 0, buf + 255,
					 (pointnum * 4 + 8) - 255);
		}
		if (ret < 0) {
			printk("%s read touchdata failed.\n", __func__);
			return ret;
		}

		fts_check_gesture(fts_input_dev, gestrue_id);
		for (i = 0; i < pointnum; i++) {
			coordinate_x[i] = (((s16) buf[0 + (4 * i)]) & 0x0F) <<
			    8 | (((s16) buf[1 + (4 * i)]) & 0xFF);
			coordinate_y[i] = (((s16) buf[2 + (4 * i)]) & 0x0F) <<
			    8 | (((s16) buf[3 + (4 * i)]) & 0xFF);
		}
		return -1;
	}
	/*other IC's gestrue in driver*/
	if (0x24 == buf[0]) {
		gestrue_id = 0x24;
		fts_check_gesture(fts_input_dev, gestrue_id);
		printk("%d check_gesture gestrue_id.\n", gestrue_id);
		return -1;
	}

	pointnum = (short)(buf[1]) & 0xff;
	buf[0] = 0xd3;
	if ((pointnum * 4 + 8) < 255) {
		ret =
		    fts_i2c_read(fts_i2c_client, buf, 1, buf,
				 (pointnum * 4 + 8));
	} else {
		ret = fts_i2c_read(fts_i2c_client, buf, 1, buf, 255);
		ret =
		    fts_i2c_read(fts_i2c_client, buf, 0, buf + 255,
				 (pointnum * 4 + 8) - 255);
	}
	if (ret < 0) {
		printk("%s read touchdata failed.\n", __func__);
		return ret;
	}

	gestrue_id = fetch_object_sample(buf, pointnum);
	fts_check_gesture(fts_input_dev, gestrue_id);
	printk("%d read gestrue_id.\n", gestrue_id);

	for (i = 0; i < pointnum; i++) {
		coordinate_x[i] = (((s16) buf[0 + (4 * i)]) & 0x0F) <<
		    8 | (((s16) buf[1 + (4 * i)]) & 0xFF);
		coordinate_y[i] = (((s16) buf[2 + (4 * i)]) & 0x0F) <<
		    8 | (((s16) buf[3 + (4 * i)]) & 0xFF);
	}
	return -1;
}