Lines Matching refs:data
313 static int si1133_cmd_reset_sw(struct si1133_data *data)
315 struct device *dev = &data->client->dev;
320 err = regmap_write(data->regmap, SI1133_REG_COMMAND,
327 err = regmap_read(data->regmap, SI1133_REG_RESPONSE0, &resp);
344 data->rsp_seq = SI1133_MAX_CMD_CTR;
375 static int si1133_cmd_reset_counter(struct si1133_data *data)
377 int err = regmap_write(data->regmap, SI1133_REG_COMMAND,
382 data->rsp_seq = 0;
387 static int si1133_command(struct si1133_data *data, u8 cmd)
389 struct device *dev = &data->client->dev;
394 mutex_lock(&data->mutex);
396 expected_seq = (data->rsp_seq + 1) & SI1133_MAX_CMD_CTR;
399 reinit_completion(&data->completion);
401 err = regmap_write(data->regmap, SI1133_REG_COMMAND, cmd);
410 if (!wait_for_completion_timeout(&data->completion,
415 err = regmap_read(data->regmap, SI1133_REG_RESPONSE0, &resp);
419 err = regmap_read_poll_timeout(data->regmap,
436 si1133_cmd_reset_counter(data);
438 data->rsp_seq = expected_seq;
442 mutex_unlock(&data->mutex);
447 static int si1133_param_set(struct si1133_data *data, u8 param, u32 value)
449 int err = regmap_write(data->regmap, SI1133_REG_HOSTIN0, value);
454 return si1133_command(data, SI1133_CMD_PARAM_SET |
458 static int si1133_param_query(struct si1133_data *data, u8 param, u32 *result)
460 int err = si1133_command(data, SI1133_CMD_PARAM_QUERY |
465 return regmap_read(data->regmap, SI1133_REG_RESPONSE1, result);
530 static int si1133_set_integration_time(struct si1133_data *data, u8 adc,
539 data->adc_sens[adc] &= 0xF0;
540 data->adc_sens[adc] |= index;
542 return si1133_param_set(data, SI1133_PARAM_REG_ADCSENS(0),
543 data->adc_sens[adc]);
546 static int si1133_set_chlist(struct si1133_data *data, u8 scan_mask)
549 if (data->scan_mask == scan_mask)
552 data->scan_mask = scan_mask;
554 return si1133_param_set(data, SI1133_PARAM_REG_CHAN_LIST, scan_mask);
557 static int si1133_chan_set_adcconfig(struct si1133_data *data, u8 adc,
562 err = si1133_param_set(data, SI1133_PARAM_REG_ADCCONFIG(adc),
567 data->adc_config[adc] = adc_config;
572 static int si1133_update_adcconfig(struct si1133_data *data, uint8_t adc,
578 err = si1133_param_query(data, SI1133_PARAM_REG_ADCCONFIG(adc),
586 return si1133_chan_set_adcconfig(data, adc, adc_config);
589 static int si1133_set_adcmux(struct si1133_data *data, u8 adc, u8 mux)
591 if ((mux & data->adc_config[adc]) == mux)
594 return si1133_update_adcconfig(data, adc, SI1133_ADCMUX_MASK, 0, mux);
597 static int si1133_force_measurement(struct si1133_data *data)
599 return si1133_command(data, SI1133_CMD_FORCE);
602 static int si1133_bulk_read(struct si1133_data *data, u8 start_reg, u8 length,
607 err = si1133_force_measurement(data);
611 return regmap_bulk_read(data->regmap, start_reg, buffer, length);
614 static int si1133_measure(struct si1133_data *data,
622 err = si1133_set_adcmux(data, 0, chan->channel);
627 err = si1133_set_chlist(data, BIT(0));
631 err = si1133_bulk_read(data, SI1133_REG_HOSTOUT(0), sizeof(buffer),
644 struct si1133_data *data = iio_priv(iio_dev);
648 err = regmap_read(data->regmap, SI1133_REG_IRQ_STATUS, &irq_status);
654 if (irq_status != data->scan_mask)
658 complete(&data->completion);
675 static int si1133_chan_set_adcsens(struct si1133_data *data, u8 adc,
680 err = si1133_param_set(data, SI1133_PARAM_REG_ADCSENS(adc), adc_sens);
684 data->adc_sens[adc] = adc_sens;
689 static int si1133_update_adcsens(struct si1133_data *data, u8 mask,
695 err = si1133_param_query(data, SI1133_PARAM_REG_ADCSENS(0),
703 return si1133_chan_set_adcsens(data, 0, adc_sens);
706 static int si1133_get_lux(struct si1133_data *data, int *val)
716 err = si1133_set_chlist(data, SI1133_LUX_ADC_MASK);
720 err = si1133_bulk_read(data, SI1133_REG_HOSTOUT(0),
751 struct si1133_data *data = iio_priv(iio_dev);
752 u8 adc_sens = data->adc_sens[0];
759 err = si1133_get_lux(data, val);
771 err = si1133_measure(data, chan, val);
825 struct si1133_data *data = iio_priv(iio_dev);
836 return si1133_update_adcsens(data,
844 return si1133_set_integration_time(data, 0, val, val2);
852 return si1133_update_adcsens(data,
887 static int si1133_init_lux_channels(struct si1133_data *data)
891 err = si1133_chan_set_adcconfig(data, 1,
897 err = si1133_param_set(data, SI1133_PARAM_REG_ADCPOST(1),
902 err = si1133_chan_set_adcsens(data, 1, SI1133_ADCSENS_HSIG_MASK |
907 err = si1133_chan_set_adcconfig(data, 2,
913 err = si1133_param_set(data, SI1133_PARAM_REG_ADCPOST(2),
919 err = si1133_chan_set_adcsens(data, 2, SI1133_ADCSENS_HSIG_MASK |
924 err = si1133_chan_set_adcconfig(data, 3,
930 err = si1133_param_set(data, SI1133_PARAM_REG_ADCPOST(3),
936 return si1133_chan_set_adcsens(data, 3, SI1133_ADCSENS_HSIG_MASK |
940 static int si1133_initialize(struct si1133_data *data)
944 err = si1133_cmd_reset_sw(data);
949 err = si1133_param_set(data, SI1133_REG_MEAS_RATE, 0);
953 err = si1133_init_lux_channels(data);
957 return regmap_write(data->regmap, SI1133_REG_IRQ_ENABLE,
963 struct si1133_data *data = iio_priv(iio_dev);
968 err = regmap_read(data->regmap, SI1133_REG_PART_ID, &part_id);
972 err = regmap_read(data->regmap, SI1133_REG_REV_ID, &rev_id);
976 err = regmap_read(data->regmap, SI1133_REG_MFR_ID, &mfr_id);
996 struct si1133_data *data;
1000 iio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
1004 data = iio_priv(iio_dev);
1006 init_completion(&data->completion);
1008 data->regmap = devm_regmap_init_i2c(client, &si1133_regmap_config);
1009 if (IS_ERR(data->regmap)) {
1010 err = PTR_ERR(data->regmap);
1016 data->client = client;
1024 mutex_init(&data->mutex);
1030 err = si1133_initialize(data);