Пример #1
0
static int mma7660_get_data(struct i2c_client *client)
{
	char buffer[3];
	int ret;
	int x, y, z;
    struct mma7660_axis axis;
    struct mma8452_platform_data *pdata = client->dev.platform_data;
    do {
        memset(buffer, 0, 3);
        buffer[0] = MMA7660_REG_X_OUT;
        ret = mma7660_rx_data(client, &buffer[0], 3);
        if (ret < 0)
            return ret;
    } while ((buffer[0] & 0x40) || (buffer[1] & 0x40) || (buffer[2] & 0x40));

	x =  mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT])*YSENSIT;
	y =  mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT])*XSENSIT;
	z =  mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT])*ZSENSIT;

#if defined(CONFIG_MACH_RK29_ODYS_NEOX8)
	axis.x = x;
	axis.y = -z;
	axis.z = y;
#elif defined(CONFIG_MACH_RK29_ODYS_NEOX7)
	axis.x = -x;
	axis.y = -z;
	axis.z = -y;
#elif  defined(CONFIG_MACH_ODYS_LOOX_PLUS) || defined(CONFIG_MACH_ODYS_NEXT)
	axis.x = x;
	axis.y = z;
	axis.z = -y;
#else
	axis.x = y;
	axis.y = -x;
	axis.z = z;
#endif

	//	printk("l=%-4d,x=%-5d, y=%-5d, z=%-5d. %s:\n",__LINE__,axis.x, axis.y, axis.z, __func__);
	//	printk("%s: x=%-5d, y=%-5d, z=%-d\n",__func__, axis.x, axis.y, axis.z);
		mma7660_report_value(client, &axis);
	//	Xaverage = Yaverage = Zaverage = 0;

	//����RawDataLength��ֵ��ƽ��ֵ
	Xaverage += axis.x;
	Yaverage += axis.y;
	Zaverage += axis.z;
    rk28printk( "%s: ------------------mma7660_GetData axis = %d  %d  %d,average=%d %d %d--------------\n",
           __func__, axis.x, axis.y, axis.z,Xaverage,Yaverage,Zaverage); 
	
	if((++RawDataNum)>=RawDataLength){
		RawDataNum = 0;
		axis.x = Xaverage/RawDataLength;
		axis.y = Yaverage/RawDataLength;
		axis.z = Zaverage/RawDataLength;
	    mma7660_report_value(client, &axis);
		Xaverage = Yaverage = Zaverage = 0;
	}

	return 0;
}
Пример #2
0
static int mma7660_get_data(struct i2c_client *client)
{
	char buffer[3];
	int ret;
    struct mma7660_axis axis;
    //struct rk2818_gs_platform_data *pdata = client->dev.platform_data;
    do {
        memset(buffer, 0, 3);
        buffer[0] = MMA7660_REG_X_OUT;
        ret = mma7660_rx_data(client, &buffer[0], 3);
        if (ret < 0)
            return ret;
    } while ((buffer[0] & 0x40) || (buffer[1] & 0x40) || (buffer[2] & 0x40));

	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
/*
	if(pdata->swap_xy)
	{
		axis.y = -axis.y;
		swap(axis.x,axis.y);		
	}
*/
	//计算RawDataLength次值的平均值
	Xaverage += axis.x;
	Yaverage += axis.y;
	Zaverage += axis.z;
    rk28printk( "%s: ------------------mma7660_GetData axis = %d  %d  %d,average=%d %d %d--------------\n",
           __func__, axis.x, axis.y, axis.z,Xaverage,Yaverage,Zaverage); 
	
	if((++RawDataNum)>=RawDataLength){
		RawDataNum = 0;
		axis.x = Xaverage/RawDataLength;
		axis.y = Yaverage/RawDataLength;
		axis.z = Zaverage/RawDataLength;
	    mma7660_report_value(client, &axis);
		Xaverage = Yaverage = Zaverage = 0;
	}
#if 0	
  //  rk28printk( "%s: ------------------mma7660_GetData axis = %d  %d  %d--------------\n",
  //         __func__, axis.x, axis.y, axis.z); 
     
    //memcpy(sense_data, &axis, sizeof(axis));
    mma7660_report_value(client, &axis);
	//atomic_set(&data_ready, 0);
	//wake_up(&data_ready_wq);
#endif
	return 0;
}
Пример #3
0
static int mma7660_get_data(struct i2c_client *client)
{
	char buffer[3];
	int ret;
	int x, y, z;
    struct mma7660_axis axis;
    struct mma8452_platform_data *pdata = client->dev.platform_data;
    do {
        memset(buffer, 0, 3);
        buffer[0] = MMA7660_REG_X_OUT;
        ret = mma7660_rx_data(client, &buffer[0], 3);
        if (ret < 0)
            return ret;
    } while ((buffer[0] & 0x40) || (buffer[1] & 0x40) || (buffer[2] & 0x40));
	x =  mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT])*YSENSIT;
	y =  mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT])*XSENSIT;
	z =  mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT])*ZSENSIT;
	
#if defined(CONFIG_MACH_RK29_ODYS_NEOX8) || defined(CONFIG_MACH_RK29_BQ_KEPLER2HD)
#if defined(CM10_KERNEL)
/* CM10 */
	axis.x = -x;
	axis.y = -y;
	axis.z = z;
#elif defined(JB422_KERNEL)
	axis.x = -y;
	axis.y = x;
	axis.z = -z;
#else
/* JB */
	axis.x = x;
	axis.y = -z;
	axis.z = y;
#endif
#elif defined(CONFIG_MACH_RK29_ODYS_NEOX7)
#if defined(CM10_KERNEL)
/* CM10 */
	axis.x = x;
	axis.y = y;
	axis.z = z;
#elif defined(JB422_KERNEL)
	axis.x = y;
	axis.y = -x;
	axis.z = z;
#else
/* JB */
	axis.x = -x;
	axis.y = -z;
	axis.z = -y;
#endif
#else
	axis.x = y;
	axis.y = -x;
	axis.z = z;
#endif
	//	printk("l=%-4d,x=%-5d, y=%-5d, z=%-5d. %s:\n",__LINE__,axis.x, axis.y, axis.z, __func__);
	//	printk("%s: x=%-5d, y=%-5d, z=%-d\n",__func__, axis.x, axis.y, axis.z);
		mma7660_report_value(client, &axis);
	//	Xaverage = Yaverage = Zaverage = 0;
	return 0;
}
Пример #4
0
static int mma7660_get_data(struct i2c_client *client)
{
	char buffer[3];
	int ret;
	struct mma7660_axis axis;
//    struct mma7660_platform_data *pdata = client->dev.platform_data;
	
	do {
		memset(buffer, 0, 3);
		buffer[0] = MMA7660_REG_X_OUT;
		ret = mma7660_rx_data(client, &buffer[0], 3);
		if (ret < 0)
			return ret;
	} while ((buffer[0] & 0x40) || (buffer[1] & 0x40) || (buffer[2] & 0x40));
	WPRINTK("raw x=%d,y=%d,z=%d\n",buffer[0],buffer[1],buffer[2]);
#if defined(WISKY_GSENSOR_NX_PY_PZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_NX_PZ_PY)
    axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
    axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
    axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
#elif defined(WISKY_GSENSOR_NX_PY_NZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_PX_PY_PZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_NX_NY_PZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_NX_NY_NZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_NY_NX_NZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_PY_PX_NZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_PY_PX_PZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);	
#elif defined(WISKY_GSENSOR_NY_NX_PZ)
	axis.x = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]); 
#elif defined(WISKY_GSENSOR_PX_NY_PZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_PY_NX_PZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);	
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#elif defined(WISKY_GSENSOR_PX_NY_NZ)
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.y = -mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.z = -mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#else
	axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
	axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
	axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
#endif

	#ifdef MMA7660_DATA_FILTER
	axis.x += GSENSOR_ADJUST_X;
	axis.y += GSENSOR_ADJUST_Y;
	axis.z += GSENSOR_ADJUST_Z;
	#endif
	WPRINTK("x=%d,y=%d,z=%d\n",axis.x,axis.y,axis.z);
	mma7660_report_value(client, &axis);

	return 0;
}