Lines Matching refs:data

161  * struct si1145_data - si1145 chip state data
171 * @buffer: Used to pack data read from sensor.
187 * 6*2 bytes channels data + 4 bytes alignment +
196 * Does not modify data->rsp_seq
200 static int __si1145_command_reset(struct si1145_data *data)
202 struct device *dev = &data->client->dev;
206 ret = i2c_smbus_write_byte_data(data->client, SI1145_REG_COMMAND,
214 ret = i2c_smbus_read_byte_data(data->client,
235 static int si1145_command(struct si1145_data *data, u8 cmd)
237 struct device *dev = &data->client->dev;
241 mutex_lock(&data->cmdlock);
243 if (data->rsp_seq < 0) {
244 ret = __si1145_command_reset(data);
250 data->rsp_seq = 0;
253 ret = i2c_smbus_write_byte_data(data->client, SI1145_REG_COMMAND, cmd);
263 ret = i2c_smbus_read_byte_data(data->client,
271 if (ret == data->rsp_seq) {
281 if (ret == ((data->rsp_seq + 1) &
283 data->rsp_seq = ret;
288 ret, (data->rsp_seq + 1) &
305 data->rsp_seq = -1;
310 mutex_unlock(&data->cmdlock);
315 static int si1145_param_update(struct si1145_data *data, u8 op, u8 param,
320 ret = i2c_smbus_write_byte_data(data->client,
325 return si1145_command(data, op | (param & 0x1F));
328 static int si1145_param_set(struct si1145_data *data, u8 param, u8 value)
330 return si1145_param_update(data, SI1145_CMD_PARAM_SET, param, value);
334 static int si1145_param_query(struct si1145_data *data, u8 param)
338 ret = si1145_command(data, SI1145_CMD_PARAM_QUERY | (param & 0x1F));
342 return i2c_smbus_read_byte_data(data->client, SI1145_REG_PARAM_RD);
399 static int si1145_set_meas_rate(struct si1145_data *data, int interval)
401 if (data->part_info->uncompressed_meas_rate)
402 return i2c_smbus_write_word_data(data->client,
405 return i2c_smbus_write_byte_data(data->client,
409 static int si1145_read_samp_freq(struct si1145_data *data, int *val, int *val2)
412 if (data->part_info->uncompressed_meas_rate)
413 *val2 = data->meas_rate;
415 *val2 = si1145_uncompress(data->meas_rate);
419 /* Set the samp freq in driver private data */
420 static int si1145_store_samp_freq(struct si1145_data *data, int val)
429 mutex_lock(&data->lock);
430 if (data->autonomous) {
431 ret = si1145_set_meas_rate(data, meas_rate);
435 if (data->part_info->uncompressed_meas_rate)
436 data->meas_rate = meas_rate;
438 data->meas_rate = si1145_compress(meas_rate);
441 mutex_unlock(&data->lock);
450 struct si1145_data *data = iio_priv(indio_dev);
455 if (!data->autonomous) {
456 ret = si1145_command(data, SI1145_CMD_PSALS_FORCE);
460 irq_status = ret = i2c_smbus_read_byte_data(data->client,
482 data->client, indio_dev->channels[i].address,
483 sizeof(u16) * run, &data->buffer[j]);
490 if (data->autonomous) {
491 ret = i2c_smbus_write_byte_data(data->client,
498 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
508 struct si1145_data *data = iio_priv(indio_dev);
514 if (data->scan_mask == scan_mask)
545 ret = si1145_param_set(data,
555 data->scan_mask = scan_mask;
556 ret = si1145_param_set(data, SI1145_PARAM_CHLIST, reg);
564 struct si1145_data *data = iio_priv(indio_dev);
574 ret = si1145_command(data, cmd);
578 return i2c_smbus_read_word_data(data->client, chan->address);
625 struct si1145_data *data = iio_priv(indio_dev);
650 ret = i2c_smbus_read_byte_data(data->client,
685 ret = si1145_param_query(data, reg);
707 ret = si1145_param_query(data, SI1145_PARAM_ADC_OFFSET);
714 return si1145_read_samp_freq(data, val, val2);
724 struct si1145_data *data = iio_priv(indio_dev);
758 ret = si1145_param_set(data, reg1, val);
764 ret = si1145_param_set(data, reg2, (~val & 0x07) << 4);
781 ret = i2c_smbus_read_byte_data(data->client, reg1);
786 ret = i2c_smbus_write_byte_data(data->client, reg1,
792 return si1145_store_samp_freq(data, val);
1012 static int si1145_initialize(struct si1145_data *data)
1014 struct i2c_client *client = data->client;
1030 ret = si1145_set_meas_rate(data, 0);
1035 ret = si1145_store_samp_freq(data, 10);
1040 switch (data->part_info->num_leds) {
1067 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_MISC,
1072 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_GAIN, 0x01);
1077 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_COUNTER, 0x06 << 4);
1082 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_MISC,
1087 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_GAIN, 0x03);
1091 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_COUNTER,
1097 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_MISC,
1102 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_GAIN, 0x01);
1106 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_COUNTER,
1115 if (data->part_info == &si1145_part_info[SI1132] ||
1116 data->part_info == &si1145_part_info[SI1145] ||
1117 data->part_info == &si1145_part_info[SI1146] ||
1118 data->part_info == &si1145_part_info[SI1147]) {
1119 ret = i2c_smbus_write_byte_data(data->client,
1124 ret = i2c_smbus_write_byte_data(data->client,
1128 ret = i2c_smbus_write_byte_data(data->client,
1132 ret = i2c_smbus_write_byte_data(data->client,
1148 struct si1145_data *data = iio_priv(indio_dev);
1151 mutex_lock(&data->lock);
1153 mutex_unlock(&data->lock);
1161 struct si1145_data *data = iio_priv(indio_dev);
1166 for_each_set_bit(i, scan_mask, data->part_info->num_channels) {
1188 struct si1145_data *data = iio_priv(indio_dev);
1191 mutex_lock(&data->lock);
1194 data->autonomous = true;
1195 err = i2c_smbus_write_byte_data(data->client,
1199 err = i2c_smbus_write_byte_data(data->client,
1203 err = si1145_set_meas_rate(data, data->meas_rate);
1206 err = si1145_command(data, SI1145_CMD_PSALS_AUTO);
1212 ret = si1145_command(data, SI1145_CMD_PSALS_PAUSE);
1215 ret = si1145_set_meas_rate(data, 0);
1218 ret = i2c_smbus_write_byte_data(data->client,
1222 ret = i2c_smbus_write_byte_data(data->client,
1226 data->autonomous = false;
1229 mutex_unlock(&data->lock);
1239 struct si1145_data *data = iio_priv(indio_dev);
1240 struct i2c_client *client = data->client;
1266 data->trig = trig;
1267 indio_dev->trig = iio_trigger_get(data->trig);
1275 struct si1145_data *data;
1280 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
1284 data = iio_priv(indio_dev);
1286 data->client = client;
1287 data->part_info = &si1145_part_info[id->driver_data];
1289 part_id = ret = i2c_smbus_read_byte_data(data->client,
1293 rev_id = ret = i2c_smbus_read_byte_data(data->client,
1297 seq_id = ret = i2c_smbus_read_byte_data(data->client,
1303 if (part_id != data->part_info->part) {
1305 part_id, data->part_info->part);
1310 indio_dev->channels = data->part_info->channels;
1311 indio_dev->num_channels = data->part_info->num_channels;
1312 indio_dev->info = data->part_info->iio_info;
1315 mutex_init(&data->lock);
1316 mutex_init(&data->cmdlock);
1318 ret = si1145_initialize(data);