static ssize_t mma845x_register_store(struct i2c_client *client,const char *buf)
{
    int address, value;
    sscanf(buf, "%x %x", &address, &value);
    printk("going to set val[0x%x] > reg[0x%x] \n",value, address);
    if (mma845x_write_reg(client, (unsigned char)address,
    		(unsigned char *)&value) < 0){
        printk("failed to set val[0x%x] > reg[0x%x] \n",value, address);
        return -EINVAL;
    }

    return 0;
}
Exemple #2
0
static int mma845x_active(struct i2c_client *client,int enable)
{
	int tmp;
	int ret = 0;
	
	tmp = mma845x_read_reg(client,MMA8452_REG_CTRL_REG1);
	if(enable)
		tmp |=ACTIVE_MASK;
	else
		tmp &=~ACTIVE_MASK;
	mmaprintkd("mma845x_active %s (0x%x)\n",enable?"active":"standby",tmp);	
	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG1,tmp);
	return ret;
}
Exemple #3
0
static int mma8452_start_dev(struct i2c_client *client, char rate)
{
	int ret = 0;
	int tmp;
	struct mma8452_data *mma8452 = (struct mma8452_data *)i2c_get_clientdata(client);   // mma8452_data 定义在 mma8452.h 中. 

	mmaprintkf("-------------------------mma8452 start ------------------------\n");	
	/* standby */
	mma845x_active(client,0);
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));

	/* disable FIFO  FMODE = 0*/
	ret = mma845x_write_reg(client,MMA8452_REG_F_SETUP,0);
	mmaprintkd("mma8452 MMA8452_REG_F_SETUP:%x\n",mma845x_read_reg(client,MMA8452_REG_F_SETUP));

	/* set full scale range to 2g */
	ret = mma845x_write_reg(client,MMA8452_REG_XYZ_DATA_CFG,0);
	mmaprintkd("mma8452 MMA8452_REG_XYZ_DATA_CFG:%x\n",mma845x_read_reg(client,MMA8452_REG_XYZ_DATA_CFG));

	/* set bus 8bit/14bit(FREAD = 1,FMODE = 0) ,data rate*/
	tmp = (rate<< MMA8452_RATE_SHIFT) | FREAD_MASK;
	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG1,tmp);
	mma8452->curr_tate = rate;
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG1:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG1));
	
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));

	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG3,5);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG3:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG3));
	
	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG4,1);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG4:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG4));

	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG5,1);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG5:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG5));	

	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));
	mma845x_active(client,1);
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));
	
	enable_irq(client->irq);
	return ret;

}
Exemple #4
0
static int mma8452_start_test(struct i2c_client *client)
{
	int ret = 0;
	int tmp;

	mmaprintkf("-------------------------mma8452 start test------------------------\n");	
	
	/* standby */
	mma845x_active(client,0);
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));

	/* disable FIFO  FMODE = 0*/
	ret = mma845x_write_reg(client,MMA8452_REG_F_SETUP,0);
	mmaprintkd("mma8452 MMA8452_REG_F_SETUP:%x\n",mma845x_read_reg(client,MMA8452_REG_F_SETUP));

	/* set full scale range to 2g */
	ret = mma845x_write_reg(client,MMA8452_REG_XYZ_DATA_CFG,0);
	mmaprintkd("mma8452 MMA8452_REG_XYZ_DATA_CFG:%x\n",mma845x_read_reg(client,MMA8452_REG_XYZ_DATA_CFG));

	/* set bus 8bit/14bit(FREAD = 1,FMODE = 0) ,data rate*/
	tmp = (MMA8452_RATE_12P5<< MMA8452_RATE_SHIFT) | FREAD_MASK;
	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG1,tmp);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG1:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG1));
	
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));

	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG3,5);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG3:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG3));
	
	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG4,1);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG4:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG4));

	ret = mma845x_write_reg(client,MMA8452_REG_CTRL_REG5,1);
	mmaprintkd("mma8452 MMA8452_REG_CTRL_REG5:%x\n",mma845x_read_reg(client,MMA8452_REG_CTRL_REG5));	

	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));
	mma845x_active(client,1);
	mmaprintkd("mma8452 MMA8452_REG_SYSMOD:%x\n",mma845x_read_reg(client,MMA8452_REG_SYSMOD));

	enable_irq(client->irq);
	msleep(50);

	return ret;
}