Exemplo n.º 1
0
int  mpu3050_i2c_write(unsigned char *buffer,int length)
{
	int status = 0;

	//status = mpu3050_write_reg_in_burst(mpu3050_i2c_client,buffer,length);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buffer[0], &buffer[1], length-1);

	return status;

}
Exemplo n.º 2
0
void mpu3050_sleep_wake_up(void)
{
	unsigned char value = 0;
	unsigned char buf[5] = {0,};

	//mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_PWR_MGM,&value);
	NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, MPU3050_GYRO_I2C_PWR_MGM ,&value , 1 );


	if(value & 0x78)
	{
	     value&= ~0x78;

	    buf[0] = MPU3050_GYRO_I2C_PWR_MGM;
	    buf[1] = value;

	    //mpu3050_write_reg(mpu3050_i2c_client,buf);
		NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	}
}
Exemplo n.º 3
0
void mpu3050_i2c_through_pass(int benable)
{
	unsigned char value;
	unsigned char buf[3]={0,};
	int status = 0;
		
	value = 0;
	//printk("[MPU3050].......mpu3050_i2c_through_pass................\n"); 
    //status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_USER_CTRL,&value);    
    printk("[MPU3050] [%s:%d]\n",__FUNCTION__, __LINE__);
	NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, MPU3050_GYRO_I2C_USER_CTRL ,&value , 1 );
	if(status <0)
	{
	     printk("[MPU3050] MPU3050_GYRO_I2C_USER_CTRL. i2c ERROR: 0x%x................................\n",value);
      	     return;
	}

	printk("[MPU3050]................................\n");
      	     	
      	if(benable ==MPU3050_BYPASS_MODE_ON)
      	{
	      	printk("[MPU3050] bypass on.....................................\n");
      	     if(value & 0x20)
      	        value&= ~(0x20);	
      	}
      	else  // bypass off
      	{
      		printk("[MPU3050] bypass off.....................................\n");
      	      if(!(value & 0x20))
      	           value|= 0x20;      
      	}
      	
      	if(!(value & 0x08))
      	       value|=0x08;	
      	       
      	buf[0] = MPU3050_GYRO_I2C_USER_CTRL;
      	buf[1] = value;
      	//status = mpu3050_write_reg(mpu3050_i2c_client,buf);	
		NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
      	
}
Exemplo n.º 4
0
static int star_motion_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg)
{
	void __user *argp = (void __user *)arg;
	unsigned char   	data[MAX_MOTION_DATA_LENGTH]={0,};	
	int                        buf[5] = {0,};
	int     		     	flag = 0;
	int                        delay = 0;
	
	unsigned char   	tempbuf[200]={0,};     /* MPU3050 i2c MAX data length */
       int 				ret = 0;
   unsigned char value;

	switch (cmd) 
	{
	case MOTION_IOCTL_ENABLE_DISABLE:
		 /*
			0 : disable sensor
			1:  orientation (tilt)
			2:  accelerometer
			3: tap
			4: shake
		*/
		 //printk(".............star_motion_ioctl................\n"); 
		flag = STAR_SENSOR_NONE;

		if(atomic_read(&accel_flag)){
		 //printk(".............if(atomic_read(&snap_flag)){................\n"); 			
			flag |= STAR_ACCELEROMETER;
		}

		if(atomic_read(&tilt_flag)){
		 //printk(".............if(atomic_read(&tilt_flag)){................\n"); 
			flag |= STAR_TILT;
		}
		
		if(atomic_read(&shake_flag)){
		 //printk(".............if(atomic_read(&shake_flag)){................\n"); 
			flag |= STAR_SHAKE;
		}

		if(atomic_read(&tap_flag)){
		 //printk(".............if(atomic_read(&tap_flag)){................\n"); 			
			flag |= STAR_TAP;
		}

		if(atomic_read(&flip_flag)){
		 //printk(".............if(atomic_read(&flip_flag)){................\n"); 			
			flag |= STAR_FLIP;
		}

		if(atomic_read(&snap_flag)){
		 //printk(".............if(atomic_read(&snap_flag)){................\n"); 			
			flag |= STAR_SNAP;
		}
		
		if(atomic_read(&gyro_flag)){
		 //printk(".............if(atomic_read(&snap_flag)){................\n"); 			
			flag |= STAR_GYRO;
		}
		
		 if (copy_to_user(argp,&flag, sizeof(flag)))
		 {
		 		 //printk(".............MOTION_IOCTL_SNAP................\n"); 
			return -EFAULT;
		 } 
		 break;
	case MOTION_IOCTL_ACCEL_RAW:
		  if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 /* 	buf[0], [1], [2] = accel_x,  accel_y,  accel_z;	 */
		 
		   atomic_set(&accel_x,buf[0]);  
		   atomic_set(&accel_y,buf[1]);
		   atomic_set(&accel_z,buf[2]);
		   
		   //motion_send_tilt_detection(buf[0],buf[1],buf[2]);
   		 //printk(".............MOTION_IOCTL_TILT................\n"); 
		   break;  		 		
	case MOTION_IOCTL_GYRO_RAW:
		  if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 /* 	buf[0], [1], [2] = gyro_x,  gyro_y,  gyro_z; */
		 
		   atomic_set(&gyro_x,buf[0]);  
		   atomic_set(&gyro_y,buf[1]);
		   atomic_set(&gyro_z,buf[2]);
		   
		   //motion_send_tilt_detection(buf[0],buf[1],buf[2]);
   		 //printk(".............MOTION_IOCTL_TILT................\n"); 
		   break;  		 		   			   
	case MOTION_IOCTL_SENSOR_DELAY:
		  delay = atomic_read(&tilt_delay);

		  //printk("MOTION_IOCTL_SENSOR_DELAY[%d]",delay);
		  
		 if (copy_to_user(argp, &delay, sizeof(delay)))
		 {
		 	 return -EFAULT;
		 }
		 break;
		 
	case MOTION_IOCTL_TILT:
		  if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 /* 	buf[0], [1], [2] = roll,  pitch,  yaw;	 */
		 
		   atomic_set(&tilt_roll,buf[0]);  
		   atomic_set(&tilt_pitch,buf[1]);
		   atomic_set(&tilt_yaw,buf[2]);
		   //motion_send_tilt_detection(buf[0],buf[1],buf[2]);
   		 //printk(".............MOTION_IOCTL_TILT................\n"); 
		   break;  		 		   
       case MOTION_IOCTL_SHAKE:   
	   	  if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 /* 			buf[0] = event;   		  */
		 //printk(".............MOTION_IOCTL_SHAKE................\n"); 		  
		   motion_send_shake_detection(buf[0]);
		 break;
	case MOTION_IOCTL_FLIP:
		 if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 //printk(".............MOTION_IOCTL_FLIP................\n"); 		

		   motion_send_flip_detection(buf[0]);
		 break;
	case MOTION_IOCTL_TAP:         
		 if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		   }		  
		 /* 
			buf[0] = type;   
			buf[1] = direction;			 
		  */
  		 //printk(".............MOTION_IOCTL_TAP................\n"); 
		   motion_send_tap_detection(buf[0],buf[1]);
		 break;
	case MOTION_IOCTL_SNAP:    
		 if (copy_from_user(&buf, argp, sizeof(buf)))
		  {
			return -EFAULT;
		  }
		 /* 
			buf[0] = direction;
		  */
		 //printk(".............MOTION_IOCTL_SNAP................\n"); 
		 motion_send_snap_detection(buf[0]);
		 break;	 
	case MOTION_IOCTL_MPU3050_SLEEP_MODE:
		 //printk(".............MOTION_IOCTL_MPU3050_SLEEP_MODE................\n");
		 //motion_gyro_sensor_sleep_mode();
		 motion_sensor_power_off();
		 
		 //twl4030_i2c_write_u8(0x13, 0x00,0x1b );
		 //msleep(100);	
		 break;
	case MOTION_IOCTL_MPU3050_SLEEP_WAKE_UP:
		 //printk(".............MOTION_IOCTL_MPU3050_SLEEP_WAKE_UP................\n");
		 //motion_gyro_sensor_sleep_wake_up();
		 
		 motion_sensor_power_on();
		 break;	 
	case MOTION_IOCTL_MPU3050_I2C_READ:
		//printk(".............MOTION_IOCTL_MPU3050_I2C_READ................\n");
		if (copy_from_user(&rwbuf, argp, sizeof(rwbuf)))
		{
			//printk("FAIL!!!!!!copy_from_user.................MOTION_IOCTL_MPU3050_I2C_READ");
			return -EFAULT;
		}

		write_lock(&getbuflock);
		memcpy(&accelrwbuf[0], rwbuf, sizeof(rwbuf));
		write_unlock(&getbuflock); 	

		if (rwbuf[1] < 1)
		{
			printk("EINVAL ERROR......I2C SLAVE MOTION_IOCTL_I2C_READ : rwbuf[1] < 1...\n");
			
		        return -EINVAL;
		}

		if(rwbuf[0] == GYRO_I2C_SLAVE_ADDR)
		{
			//printk("############ (_0_)############ rwbuf[2]: %d(%x) / rwbuf[3]: %d(%x)/ rwbuf[1] : %d(%x)\n",rwbuf[2],rwbuf[2], rwbuf[3],rwbuf[3], rwbuf[1], rwbuf[1]);
			NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, rwbuf[2] ,&rwbuf[3] , rwbuf[1]);
			if (ret < 0){
				printk("MOTION_IOCTL_I2C_READ : GYRO_I2C_SLAVE_ADDR Address ERROR[%d]\n",rwbuf[0]);
				return -EINVAL;
			}

			if (copy_to_user(argp, &rwbuf, sizeof(rwbuf)))
			{
		       printk("EINVAL ERROR.### GYRO ### I2C SLAVE MOTION_IOCTL_I2C_READ : rwbuf[1] < 1...\n");
		 	 return -EFAULT;
			}
		}
		else if(accelrwbuf[0] == 0x0F)
		{
			//printk("#### (_0_) #### accelrwbuf[2]: %d(%x) / accelrwbuf[3]: %d(%x)/ accelrwbuf[1] : %d(%x)\n",accelrwbuf[2],accelrwbuf[2], accelrwbuf[3],accelrwbuf[3], accelrwbuf[1], accelrwbuf[1]);
			//printk("######################## accel get(read) ##########################\n");
			if ((!accelrwbuf)){
				printk("### EEROR #### accelrwbuf is NULL pointer \n");
				return -1;
			} else{
				NvAccelerometerI2CGetRegsPassThrough (accelrwbuf[2] ,&accelrwbuf[3] , accelrwbuf[1]);
			}
			
			if (ret < 0){
				printk("MOTION_IOCTL_I2C_READ : ACCEL_I2C_SLAVE_ADDR Address ERROR[%d]\n",accelrwbuf[0]);
				return -EINVAL;
			}

			if (copy_to_user(argp, &accelrwbuf, sizeof(accelrwbuf)))
			{
		       printk("EINVAL ERROR  ### ACCEL ## I2C SLAVE MOTION_IOCTL_I2C_READ : rwbuf[1] < 1...\n");
		 	 return -EFAULT;
			}
		}
		#if 0 /**/
		else if(accelrwbuf[0] == 0x0e)
		{
			//printk("#### (_0_) #### accelrwbuf[2]: %d(%x) / accelrwbuf[3]: %d(%x)/ accelrwbuf[1] : %d(%x)\n",accelrwbuf[2],accelrwbuf[2], accelrwbuf[3],accelrwbuf[3], accelrwbuf[1], accelrwbuf[1]);
			//printk("######################## accel get(read) ##########################\n");
			if ((!accelrwbuf)){
				printk("### EEROR #### accelrwbuf is NULL pointer \n");
				return -1;
			} else{
				NvGyroAccelI2CGetRegs (accelrwbuf[2] ,&accelrwbuf[3] , accelrwbuf[1]);
			}
			
			if (ret < 0){
				printk("MOTION_IOCTL_I2C_READ : ACCEL_I2C_SLAVE_ADDR Address ERROR[%d]\n",accelrwbuf[0]);
				return -EINVAL;
			}

			if (copy_to_user(argp, &accelrwbuf, sizeof(accelrwbuf)))
			{
		       printk("EINVAL ERROR  ### ACCEL ## I2C SLAVE MOTION_IOCTL_I2C_READ : rwbuf[1] < 1...\n");
		 	 return -EFAULT;
			}
		}
		#endif
		else
		{
			printk("......I2C SLAVE ADDRESS ERROR!!!...[0x%x]...\n",buf[0]);
			return -EINVAL;
		}
		
		
			
		break;
	case MOTION_IOCTL_MPU3050_I2C_WRITE:
		//printk(".............MOTION_IOCTL_MPU3050_I2C_WRITE................\n");
		if (copy_from_user(&rwbuf, argp, sizeof(rwbuf)))
		{
		       printk("EINVAL ERROR.....copy_from_user.I2C SLAVE MOTION_IOCTL_I2C_WRITE \n");
			return -EFAULT;
		}
		/*	
   		rwbuf[0] = slave_addr;  // slave addr - GYRO(0x68-MPU) 
     		rwbuf[1] = 2;                   // number of bytes to write +1
     		rwbuf[2] = reg;               // register address
     		rwbuf[3] = value;          // register value		
		*/
		if (rwbuf[1] < 2)
		{
		       printk("MOTION_IOCTL_WRITE ..length ERROR!!![%d].....\n",rwbuf[1]);
			return -EINVAL;
		}

		if(rwbuf[0] == GYRO_I2C_SLAVE_ADDR)
		{
			//ret = mpu3050_i2c_write(&rwbuf[2],rwbuf[1]);
			NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, rwbuf[2] ,&rwbuf[3] , rwbuf[1]-1);
			if (ret < 0){
				 printk("MOTION_IOCTL_WRITE  : GYRO_I2C_SLAVE_ADDR Address ERROR[%d]\n",rwbuf[0]);
				return -EINVAL;
			}
		}
		else if(rwbuf[0] == 0x0F)
		{
			//ret = kxtf9_i2c_write(&rwbuf[2],rwbuf[1]);
			//printk("(_6_)rwbuf[2]: %d(%x) /  rwbuf[1] : %d(%x)\n",rwbuf[2],rwbuf[2], rwbuf[1], rwbuf[1]);
//			printk("######################## accel set(write) ##########################\n");
			NvAccelerometerI2CSetRegsPassThrough(rwbuf[2] ,&rwbuf[3] , rwbuf[1]-1);
			//printk("(_7_) rwbuf[3]: %d(%x) \n", rwbuf[3],rwbuf[3]);
			if (ret < 0){
				  printk("[KXTF9] MOTION_IOCTL_WRITE  : ACCEL_I2C_SLAVE_ADDR ERROR[%d]\n",rwbuf[0]);
				return -EINVAL;
			}
		}
		#if 0
		else if(rwbuf[0] == 0x0e)
		{
			//ret = kxtf9_i2c_write(&rwbuf[2],rwbuf[1]);
			//printk("(_6_)rwbuf[2]: %d(%x) /  rwbuf[1] : %d(%x)\n",rwbuf[2],rwbuf[2], rwbuf[1], rwbuf[1]);
//			printk("######################## accel set(write) ##########################\n");
			NvGyroAccelI2CSetRegs(rwbuf[2] ,&rwbuf[3] , rwbuf[1]-1);
			//printk("(_7_) rwbuf[3]: %d(%x) \n", rwbuf[3],rwbuf[3]);
			if (ret < 0){
				  printk("[KXTF9] MOTION_IOCTL_WRITE  : ACCEL_I2C_SLAVE_ADDR ERROR[%d]\n",rwbuf[0]);
				return -EINVAL;
			}
		}
		#endif
		else
		{
			printk("......I2C SLAVE ADDRESS ERROR!!!...[0x%x]...\n",buf[0]);
			return -EINVAL;
		}
		break;
	default:
		break;
	}

	return 0;
	
}
Exemplo n.º 5
0
int mpu3050_write_reg_in_burst(struct i2c_client *client, unsigned char *buffer,int length)
{
	int err;
#if 1
	struct i2c_msg msg ={
		.addr = client->addr,
		.flags = 0,
		.len	= length,
		.buf	= buffer};
#else
	unsigned char buf[length];
	struct i2c_msg msg ={
		.addr = client->addr,
		.flags = 0,
		.len	= sizeof(buf),
		.buf	= buf};

	memcpy(buf,buffer,length);
#endif
	if ((err = i2c_transfer(client->adapter, &msg, 1)) < 0)
	{
		dev_err(&client->dev, "i2c write error\n");
		return -EIO;
	}

	return 0;

}
int mpu3050_read_reg(struct i2c_client *client, unsigned char reg, unsigned char *val)
{
	int err;
	unsigned char buf = reg;

	struct i2c_msg msg[2] = {
		{ client->addr, 0, 1, &buf },
		{ client->addr, I2C_M_RD, 1, val}
	};

	if ((err = i2c_transfer(client->adapter, msg, 2)) < 0)
	{
		dev_err(&client->dev, "i2c read error\n");
		return -1;
	}

	return 0;
}

 int mpu3050_write_reg(struct i2c_client *client, unsigned char *buffer)
 {
	unsigned char buf[2];
	int err;

	struct i2c_msg msg ={
			 .addr = client->addr,
			 .flags = 0,
			 .len	= 2,
			 .buf	= buf};

	buf[0] = buffer[0];
	buf[1] = buffer[1];

	if ((err = i2c_transfer(client->adapter, &msg, 1)) < 0)
	{
		dev_err(&client->dev, "i2c write error\n");
	}

	return 0;

}

void mpu3050_sleep_mode(void)
{
	unsigned char value = 0;
	unsigned char buf[5] = {0,};

	 //mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_PWR_MGM,&value);
	 NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&value , 1 );

         /*
		Bit 6   SLEEP
		Bit 5   STBY_XG
		Bit 4   STBY_YG
		Bit 3   STBY_ZG
	   */

	 if(!(value & 0x78))
	 {
	 	value|= 0x78;

		buf[0] = MPU3050_GYRO_I2C_PWR_MGM;
		buf[1] = value;

		//mpu3050_write_reg(mpu3050_i2c_client,buf);
		NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );

	 }
}
Exemplo n.º 6
0
void mpu3050_initialize(void)
{
	unsigned char buf[3]={0,};
	unsigned char value = 0;
	int status = 0;

	//  Read WHO AM I
	value = 0;
	//status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_WHO_AM_I,&value);
	NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, MPU3050_GYRO_I2C_WHO_AM_I ,&value , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_WHO_AM_I : %x\n",value);

	// Read Product ID
	value = 0;
	//status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_PRODUCT_ID,&value);
	NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, MPU3050_GYRO_I2C_PRODUCT_ID ,&value , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_PRODUCT_ID : %x\n",value);

    //  Set to reset the MPU-3000
    buf[0] = MPU3050_GYRO_I2C_PWR_MGM;
    buf[1] = 0x80;
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk(" [MPU3050]Reset the MPU-3000 : %x\n",value);

   	// Set ACCEL. slave address
    buf[0] = MPU3050_GYRO_I2C_ACCEL_SLAVE_ADDR;
    buf[1] = 0x0F;//KR3DH_ACCEL_I2C_SLAVE_ADDR;
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] Set ACCEL. slave address \n");

     // Set to reset IME interface
     value = 0;
    //status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_USER_CTRL,&value);
 	NvGyroAccelI2CGetRegs(star_motion_dev->hOdmGyroAccel, MPU3050_GYRO_I2C_USER_CTRL ,&value[1] , 1 );

    if(!(value & 0x08))
          value |= 0x08;
    buf[0] = MPU3050_GYRO_I2C_USER_CTRL;
    buf[1] = value;
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
 	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] Reset IME interface \n");

	  #if 0
        //klp  -- disable passthrough mode
       value = 0;
      	status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_USER_CTRL,&value);
       buf[0] = MPU3050_GYRO_I2C_USER_CTRL;
       buf[1] = value | 0x20;
       mpu3050_write_reg(mpu3050_i2c_client,buf);
       #endif

	// Set to disable ISR
    buf[0] = MPU3050_GYRO_I2C_INT_CFG;
    buf[1] = 0x00;//0x83;    //0xC1;//0xE1;   //0x81 or 0x83;    // Enable ISR
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] Disable ISR :  MPU3050_GYRO_I2C_INT_CFG\n");

    // Set to Cfg Sampling MPU
    buf[0] = MPU3050_GYRO_I2C_SMPLR_DIV;
    buf[1] = 0x04;
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_SMPLR_DIV\n");

    buf[0] = MPU3050_GYRO_I2C_DLPF_FS_SYNC;
    buf[1] =((0x3<<3)|0x3);
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_DLPF_FS_SYNC\n");

    /*----------------------------------CLKSource------------------------------------------*/
    value = 0;
    status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_PWR_MGM,&value);

    value &= ~(0x07);   //clear clk_sel bits
    value |= 0x03;        //set pll gyro z clk source
    buf[0] = MPU3050_GYRO_I2C_PWR_MGM;
    buf[1] = value;
    //status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_PWR_MGM --- clk source \n");


    /*------------------------------ Set Accelerometer --------------------------------------*/
	// Accel Data Start
	buf[0] = MPU3050_GYRO_I2C_ACCEL_BURST_ADDR;
	buf[1] = 0x28; /*0xA8*/;
	//status = mpu3050_write_reg(mpu3050_i2c_client,buf);
	NvGyroAccelI2CSetRegs(star_motion_dev->hOdmGyroAccel, buf[0] ,&buf[1] , 1 );
	printk("[MPU3050] MPU3050_GYRO_I2C_ACCEL_BURST_ADDR --- clk source \n");

	printk("[MPU3050] MPU3050_BYPASS_MODE_ON --- \n");

	mpu3050_i2c_through_pass(MPU3050_BYPASS_MODE_ON);

   /*---------------------------------------------------------------------------------------*/
#if 0
       value = 0;
       status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_ACCEL_BURST_ADDR,value);
	printk("[MPU3050_GYRO_I2C_ACCEL_BURST_ADDR] read value [0x%x]\n",value);

	if(value & 0x80)
	{
		value &= ~(0x80);
	}
	else
	{
		value |= 0x80;
	}

	printk("[MPU3050_GYRO_I2C_ACCEL_BURST_ADDR] setting value [0x%x]\n",value);

	buf[0] = MPU3050_GYRO_I2C_ACCEL_BURST_ADDR;
	buf[1] = value;
	status = mpu3050_write_reg(mpu3050_i2c_client,buf);

	mpu3050_i2c_through_pass(MPU3050_BYPASS_MODE_ON);
#endif

#if 1
        // ACCEL i2c pass through on
 //	 mpu3050_i2c_through_pass(MPU3050_BYPASS_MODE_ON);

//    	kr3dh_initialize();

      	//ACCEL i2c pass through off
//       mpu3050_i2c_through_pass(MPU3050_BYPASS_MODE_OFF);

      /*
	value = 0;
      	status = mpu3050_read_reg(mpu3050_i2c_client,MPU3050_GYRO_I2C_USER_CTRL,&value);
      	//value &= ~(0x09);
      	  if(!(value & 0x10))
      	       value|=0x10;

	buf[0] = MPU3050_GYRO_I2C_USER_CTRL;
      	//buf[1] = value;
      	buf[1] = 0x30;
      	status = mpu3050_write_reg(mpu3050_i2c_client,buf);
      	*/
#endif

}