static int bma150_set_mode(struct i2c_client *client, unsigned char Mode)
{
	int comres = 0;
	unsigned char data1, data2;
	struct bma150_data *bma150 = i2c_get_clientdata(client);

	if (client == NULL) {
		comres = -1;
	} else{
		if (Mode < 4 && Mode != 1) {

			comres = bma150_smbus_read_byte(client,
						BMA150_WAKE_UP__REG, &data1);
			data1 = BMA150_SET_BITSLICE(data1,
						BMA150_WAKE_UP, Mode);
			comres += bma150_smbus_read_byte(client,
						BMA150_SLEEP__REG, &data2);
			data2 = BMA150_SET_BITSLICE(data2,
						BMA150_SLEEP, (Mode>>1));
			comres += bma150_smbus_write_byte(client,
						BMA150_WAKE_UP__REG, &data1);
			comres += bma150_smbus_write_byte(client,
						BMA150_SLEEP__REG, &data2);
			mutex_lock(&bma150->mode_mutex);
			bma150->mode = (unsigned char) Mode;
			mutex_unlock(&bma150->mode_mutex);

		} else{
Example #2
0
void bma150_set_ee_w(struct i2c_client *client,unsigned char eew)
{
	unsigned char data;

	data = SENSOR_READ_DAT(client,BMA150_EE_W__REG);
	data = BMA150_SET_BITSLICE(data, BMA150_EE_W, eew);
	SENSOR_SEND_CMD(client,BMA150_EE_W__REG,data);
}
Example #3
0
int bma150_set_bandwidth(struct i2c_client *client,char bw) 
{
	unsigned char data;

	data = SENSOR_READ_DAT(client,BMA150_BANDWIDTH__REG);
	data = BMA150_SET_BITSLICE(data, BMA150_BANDWIDTH, bw);
	SENSOR_SEND_CMD(client,BMA150_BANDWIDTH__REG, data);
	return 1;
}
Example #4
0
int bma150_set_range(struct i2c_client *client,char range) 
{			
	unsigned char data;
	if (range<3) {	
		data = SENSOR_READ_DAT(client,BMA150_RANGE__REG);
		data = BMA150_SET_BITSLICE(data, BMA150_RANGE, range);		  	
		SENSOR_SEND_CMD(client,BMA150_RANGE__REG, data);
	}
	return 1;
}
Example #5
0
void bma150_set_offset(struct i2c_client *client,unsigned char xyz, unsigned short offset) 
{
	unsigned char data;

	data = SENSOR_READ_DAT(client,BMA150_OFFSET_X_LSB__REG+xyz);
	data = BMA150_SET_BITSLICE(data, BMA150_OFFSET_X_LSB, offset);
	SENSOR_SEND_CMD(client,BMA150_OFFSET_X_LSB__REG + xyz,data);
	//printk("%s: data offset 0x%x %d LSB 0x%x ", __func__, offset,offset,data);

	data = (offset&0x3ff)>>BMA150_OFFSET_X_LSB__LEN;
	SENSOR_SEND_CMD(client,BMA150_OFFSET_X_MSB__REG + xyz,data);
	//printk(" MSB 0x%x\n", data);
}
Example #6
0
static int enter_mode(unsigned char mode)
{
    unsigned char data1, data2;
    int ret;

    DBG_MSG("Mode = %d, (0 = Normal, 2 = Sleep)", mode);

    if((mode==BMA150_MODE_NORMAL) || (mode==BMA150_MODE_SLEEP)) 
    {
        ret = bma150_read_reg(bma150_i2c_client, WAKE_UP_REG, &data1, 1);
        if (ret)
        {
            ERR_MSG("Read WAKE UP REG fail, ret = %d", ret);
            return ret;
        }

        DBG_MSG("WAKE_UP_REG (0x%x)", data1);
        data1 = BMA150_SET_BITSLICE(data1, WAKE_UP, mode);

        ret = bma150_read_reg(bma150_i2c_client, SLEEP_REG, &data2, 1);
        if (ret)
        {
            ERR_MSG("Read SLEEP REG fail, ret = %d", ret);
            return ret;
        }

        DBG_MSG("SLEEP_REG (0x%x)", data2);		
        data2 = BMA150_SET_BITSLICE(data2, SLEEP, (mode>>1));

        ret = bma150_write_reg(bma150_i2c_client, WAKE_UP_REG, &data1, 1);
        if (ret)
        {
            ERR_MSG("Write WAKE UP REG fail, ret = %d", ret);
            return ret;
        }

        ret = bma150_write_reg(bma150_i2c_client, SLEEP_REG, &data2, 1);
        if (ret)
        {
            ERR_MSG("Write SLEEP REG fail, ret = %d", ret);
            return ret;
        }
    }