#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "tpd_custom_fts.h"
#include "focaltech_ctl.h"
#include "focaltech_ex_fun.h"
#include
extern u8 *I2CDMABuf_va ;
extern volatile u32 I2CDMABuf_pa;
static int ft_rw_iic_drv_major = FT_RW_IIC_DRV_MAJOR;
struct ft_rw_i2c_dev
{
struct cdev cdev;
struct semaphore ft_rw_i2c_sem;
struct i2c_client *client;
};
struct ft_rw_i2c_dev *ft_rw_i2c_dev_tt;
static struct class *fts_class;
static int ft_rw_iic_drv_myread(struct i2c_client *client, u8 *buf, int length)
{
int ret = 0;
ret = fts_i2c_Read(client, NULL, 0, buf, length);
if(ret<0)
dev_err(&client->dev, "%s:IIC Read failed\n",
__func__);
return ret;
}
static int ft_rw_iic_drv_mywrite(struct i2c_client *client, u8 *buf, int length)
{
int ret = 0;
ret = fts_i2c_Write(client, buf, length);
if(ret<0)
dev_err(&client->dev, "%s:IIC Write failed\n",
__func__);
return ret;
}
static int ft_rw_iic_drv_RDWR(struct i2c_client *client, unsigned long arg)
{
struct ft_rw_i2c_queue i2c_rw_queue;
u8 __user **data_ptrs;
struct ft_rw_i2c * i2c_rw_msg;
int ret = 0;
int i;
if (!access_ok(VERIFY_READ, (struct ft_rw_i2c_queue *)arg, sizeof(struct ft_rw_i2c_queue)))
return -EFAULT;
if (copy_from_user