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