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,
236 static int si1145_command(struct si1145_data *data, u8 cmd)
238 struct device *dev = &data->client->dev;
242 mutex_lock(&data->cmdlock);
244 if (data->rsp_seq < 0) {
245 ret = __si1145_command_reset(data);
251 data->rsp_seq = 0;
254 ret = i2c_smbus_write_byte_data(data->client, SI1145_REG_COMMAND, cmd);
264 ret = i2c_smbus_read_byte_data(data->client,
272 if (ret == data->rsp_seq) {
282 if (ret == ((data->rsp_seq + 1) &
284 data->rsp_seq = ret;
289 ret, (data->rsp_seq + 1) &
306 data->rsp_seq = -1;
311 mutex_unlock(&data->cmdlock);
316 static int si1145_param_update(struct si1145_data *data, u8 op, u8 param,
321 ret = i2c_smbus_write_byte_data(data->client,
326 return si1145_command(data, op | (param & 0x1F));
329 static int si1145_param_set(struct si1145_data *data, u8 param, u8 value)
331 return si1145_param_update(data, SI1145_CMD_PARAM_SET, param, value);
335 static int si1145_param_query(struct si1145_data *data, u8 param)
339 ret = si1145_command(data, SI1145_CMD_PARAM_QUERY | (param & 0x1F));
343 return i2c_smbus_read_byte_data(data->client, SI1145_REG_PARAM_RD);
400 static int si1145_set_meas_rate(struct si1145_data *data, int interval)
402 if (data->part_info->uncompressed_meas_rate)
403 return i2c_smbus_write_word_data(data->client,
406 return i2c_smbus_write_byte_data(data->client,
410 static int si1145_read_samp_freq(struct si1145_data *data, int *val, int *val2)
413 if (data->part_info->uncompressed_meas_rate)
414 *val2 = data->meas_rate;
416 *val2 = si1145_uncompress(data->meas_rate);
420 /* Set the samp freq in driver private data */
421 static int si1145_store_samp_freq(struct si1145_data *data, int val)
430 mutex_lock(&data->lock);
431 if (data->autonomous) {
432 ret = si1145_set_meas_rate(data, meas_rate);
436 if (data->part_info->uncompressed_meas_rate)
437 data->meas_rate = meas_rate;
439 data->meas_rate = si1145_compress(meas_rate);
442 mutex_unlock(&data->lock);
451 struct si1145_data *data = iio_priv(indio_dev);
456 if (!data->autonomous) {
457 ret = si1145_command(data, SI1145_CMD_PSALS_FORCE);
461 irq_status = ret = i2c_smbus_read_byte_data(data->client,
483 data->client, indio_dev->channels[i].address,
484 sizeof(u16) * run, &data->buffer[j]);
491 if (data->autonomous) {
492 ret = i2c_smbus_write_byte_data(data->client,
499 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
509 struct si1145_data *data = iio_priv(indio_dev);
515 if (data->scan_mask == scan_mask)
546 ret = si1145_param_set(data,
556 data->scan_mask = scan_mask;
557 ret = si1145_param_set(data, SI1145_PARAM_CHLIST, reg);
565 struct si1145_data *data = iio_priv(indio_dev);
575 ret = si1145_command(data, cmd);
579 return i2c_smbus_read_word_data(data->client, chan->address);
626 struct si1145_data *data = iio_priv(indio_dev);
651 ret = i2c_smbus_read_byte_data(data->client,
686 ret = si1145_param_query(data, reg);
708 ret = si1145_param_query(data, SI1145_PARAM_ADC_OFFSET);
715 return si1145_read_samp_freq(data, val, val2);
725 struct si1145_data *data = iio_priv(indio_dev);
759 ret = si1145_param_set(data, reg1, val);
765 ret = si1145_param_set(data, reg2, (~val & 0x07) << 4);
782 ret = i2c_smbus_read_byte_data(data->client, reg1);
787 ret = i2c_smbus_write_byte_data(data->client, reg1,
793 return si1145_store_samp_freq(data, val);
1013 static int si1145_initialize(struct si1145_data *data)
1015 struct i2c_client *client = data->client;
1031 ret = si1145_set_meas_rate(data, 0);
1036 ret = si1145_store_samp_freq(data, 10);
1041 switch (data->part_info->num_leds) {
1068 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_MISC,
1073 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_GAIN, 0x01);
1078 ret = si1145_param_set(data, SI1145_PARAM_PS_ADC_COUNTER, 0x06 << 4);
1083 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_MISC,
1088 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_GAIN, 0x03);
1092 ret = si1145_param_set(data, SI1145_PARAM_ALSVIS_ADC_COUNTER,
1098 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_MISC,
1103 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_GAIN, 0x01);
1107 ret = si1145_param_set(data, SI1145_PARAM_ALSIR_ADC_COUNTER,
1116 if (data->part_info == &si1145_part_info[SI1132] ||
1117 data->part_info == &si1145_part_info[SI1145] ||
1118 data->part_info == &si1145_part_info[SI1146] ||
1119 data->part_info == &si1145_part_info[SI1147]) {
1120 ret = i2c_smbus_write_byte_data(data->client,
1125 ret = i2c_smbus_write_byte_data(data->client,
1129 ret = i2c_smbus_write_byte_data(data->client,
1133 ret = i2c_smbus_write_byte_data(data->client,
1149 struct si1145_data *data = iio_priv(indio_dev);
1152 mutex_lock(&data->lock);
1154 mutex_unlock(&data->lock);
1162 struct si1145_data *data = iio_priv(indio_dev);
1167 for_each_set_bit(i, scan_mask, data->part_info->num_channels) {
1189 struct si1145_data *data = iio_priv(indio_dev);
1192 mutex_lock(&data->lock);
1195 data->autonomous = true;
1196 err = i2c_smbus_write_byte_data(data->client,
1200 err = i2c_smbus_write_byte_data(data->client,
1204 err = si1145_set_meas_rate(data, data->meas_rate);
1207 err = si1145_command(data, SI1145_CMD_PSALS_AUTO);
1213 ret = si1145_command(data, SI1145_CMD_PSALS_PAUSE);
1216 ret = si1145_set_meas_rate(data, 0);
1219 ret = i2c_smbus_write_byte_data(data->client,
1223 ret = i2c_smbus_write_byte_data(data->client,
1227 data->autonomous = false;
1230 mutex_unlock(&data->lock);
1240 struct si1145_data *data = iio_priv(indio_dev);
1241 struct i2c_client *client = data->client;
1268 data->trig = trig;
1269 indio_dev->trig = iio_trigger_get(data->trig);
1277 struct si1145_data *data;
1282 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
1286 data = iio_priv(indio_dev);
1288 data->client = client;
1289 data->part_info = &si1145_part_info[id->driver_data];
1291 part_id = ret = i2c_smbus_read_byte_data(data->client,
1295 rev_id = ret = i2c_smbus_read_byte_data(data->client,
1299 seq_id = ret = i2c_smbus_read_byte_data(data->client,
1305 if (part_id != data->part_info->part) {
1307 part_id, data->part_info->part);
1312 indio_dev->channels = data->part_info->channels;
1313 indio_dev->num_channels = data->part_info->num_channels;
1314 indio_dev->info = data->part_info->iio_info;
1317 mutex_init(&data->lock);
1318 mutex_init(&data->cmdlock);
1320 ret = si1145_initialize(data);