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; }
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; }
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; }
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; }