/* set l3g4200d digital gyroscope bandwidth */ int l3g4200d_set_bandwidth(char bw) { int res = 0; unsigned char data; res = i2c_smbus_read_word_data(gyro->client, CTRL_REG1); if (res >= 0) data = res & 0x000F; data = data + bw; res = l3g4200d_i2c_write(CTRL_REG1, &data, 1); return res; }
int l3g4200d_set_selftest(char status) { int res = 0; unsigned char data; res = i2c_smbus_read_word_data(gyro->client, CTRL_REG4); if (res >= 0) data = res & 0x00F1; data = status + data; res = l3g4200d_i2c_write(CTRL_REG4, &data, 1); return res; }
int l3g4200d_set_range(char range) { int res = 0; unsigned char data; res = i2c_smbus_read_word_data(gyro->client, CTRL_REG4); if (res >= 0) data = res & 0x00CF; data = range + data; res = l3g4200d_i2c_write(CTRL_REG4, &data, 1); return res; }
int l3g4200d_set_mode(char mode) { int res = 0; unsigned char data; res = i2c_smbus_read_word_data(gyro->client, CTRL_REG1); if (res >= 0) data = res & 0x00F7; data = mode + data; res = l3g4200d_i2c_write(CTRL_REG1, &data, 1); return res; }
static int selftest_init_l3g4200d(void) { unsigned char buf[5]; pr_info("%s\n", __func__); /* BDU=1, ODR=200Hz, Cut-Off Freq=50Hz, FS=2000 DPS */ /* Noted by qudao, for l3gd20: * ODR = 190Hz, Cut-Off Freq = 50Hz, x/y/z anxis enabled, Normal mode, FS = 2000DPS */ buf[0] = 0x6F; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0xA0; buf[4] = 0x02; return l3g4200d_i2c_write(CTRL_REG1, &buf[0], 5); }
int l3g4200d_set_range(char range) { int ret = 0; unsigned char data; if (!gyro || !gyro->client) { pr_err("%s(), Sorry, Gyro driver L3GD20 has not been initialized properly!\n", __func__); return -1; } ret = i2c_smbus_read_word_data(gyro->client, CTRL_REG4); if (ret >= 0) data = ret & 0x00CF; data = range + data; ret = l3g4200d_i2c_write(CTRL_REG4, &data, 1); return ret; }
/* set l3g4200d digital gyroscope bandwidth */ int l3g4200d_set_bandwidth(char bw) { int ret = 0; unsigned char data; if (!gyro || !gyro->client) { pr_err("%s(), Error!gyro has not been initialized properly!\n", __func__); return -1; } ret = i2c_smbus_read_word_data(gyro->client, CTRL_REG1); if (ret >= 0) data = ret & 0x000F; data = data + bw; ret = l3g4200d_i2c_write(CTRL_REG1, &data, 1); return ret; }
int l3g4200d_set_mode(char mode) { int ret = 0; unsigned char data; if (!gyro || !gyro->client) { pr_err("%s(), Sorry, Gyro driver L3GD20 has not been initialized properly!\n", __func__); return -1; } pr_info("%s(), gyro is %p, gyro->client is %p\n", __func__, gyro, gyro->client); ret = i2c_smbus_read_word_data(gyro->client, CTRL_REG1); if (ret >= 0) data = ret & 0x00F7; data = mode + data; ret = l3g4200d_i2c_write(CTRL_REG1, &data, 1); return ret; }