Lines Matching defs:data
63 /* Timeout (us) for ADC data conversion according to ADC datasheet */
102 * in the device data structure.
111 void (*init_scale)(struct sc27xx_adc_data *data);
164 /* get the adc nvmem cell calibration data */
165 static int adc_nvmem_cell_calib_data(struct sc27xx_adc_data *data, const char *cell_name)
172 if (!data)
175 cell = nvmem_cell_get(data->dev, cell_name);
192 static int sc27xx_adc_scale_calibration(struct sc27xx_adc_data *data,
201 calib_graph = data->var_data->bscale_cal;
205 calib_graph = data->var_data->sscale_cal;
210 calib_data = adc_nvmem_cell_calib_data(data, cell_name);
410 static void sc2720_adc_scale_init(struct sc27xx_adc_data *data)
417 data->channel_scale[i] = 3;
421 data->channel_scale[i] = 2;
424 data->channel_scale[i] = 1;
429 data->channel_scale[i] = 3;
432 data->channel_scale[i] = 0;
438 static void sc2730_adc_scale_init(struct sc27xx_adc_data *data)
449 data->channel_scale[i] = 3;
453 data->channel_scale[i] = 2;
456 data->channel_scale[i] = 1;
459 data->channel_scale[i] = 0;
465 static void sc2731_adc_scale_init(struct sc27xx_adc_data *data)
475 data->channel_scale[i] = 1;
478 data->channel_scale[i] = 0;
484 static int sc27xx_adc_read(struct sc27xx_adc_data *data, int channel,
490 ret = hwspin_lock_timeout_raw(data->hwlock, SC27XX_ADC_HWLOCK_TIMEOUT);
492 dev_err(data->dev, "timeout to get the hwspinlock\n");
497 * According to the sc2721 chip data sheet, the reference voltage of
501 if ((data->var_data->set_volref) && (channel == 30 || channel == 31)) {
502 ret = regulator_set_voltage(data->volref,
506 dev_err(data->dev, "failed to set the volref 3.5v\n");
511 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL,
516 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_INT_CLR,
522 tmp = (scale << data->var_data->scale_shift) & data->var_data->scale_mask;
524 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CH_CFG,
526 data->var_data->scale_mask,
534 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL,
540 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL,
545 ret = regmap_read_poll_timeout(data->regmap,
546 data->base + SC27XX_ADC_INT_RAW,
551 dev_err(data->dev, "read adc timeout, status = 0x%x\n", status);
555 ret = regmap_read(data->regmap, data->base + SC27XX_ADC_DATA, &value);
562 regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL,
565 if ((data->var_data->set_volref) && (channel == 30 || channel == 31)) {
566 ret_volref = regulator_set_voltage(data->volref,
570 dev_err(data->dev, "failed to set the volref 2.8v,ret_volref = 0x%x\n",
576 hwspin_unlock_raw(data->hwlock);
584 static void sc27xx_adc_volt_ratio(struct sc27xx_adc_data *data, int channel, int scale,
589 ratio = data->var_data->get_ratio(channel, scale);
616 static int sc27xx_adc_convert_volt(struct sc27xx_adc_data *data, int channel,
641 sc27xx_adc_volt_ratio(data, channel, scale, &fract);
646 static int sc27xx_adc_read_processed(struct sc27xx_adc_data *data,
651 ret = sc27xx_adc_read(data, channel, scale, &raw_adc);
655 *val = sc27xx_adc_convert_volt(data, channel, scale, raw_adc);
663 struct sc27xx_adc_data *data = iio_priv(indio_dev);
664 int scale = data->channel_scale[chan->channel];
669 mutex_lock(&data->lock);
670 ret = sc27xx_adc_read(data, chan->channel, scale, &tmp);
671 mutex_unlock(&data->lock);
680 mutex_lock(&data->lock);
681 ret = sc27xx_adc_read_processed(data, chan->channel, scale,
683 mutex_unlock(&data->lock);
704 struct sc27xx_adc_data *data = iio_priv(indio_dev);
708 data->channel_scale[chan->channel] = val;
764 static int sc27xx_adc_enable(struct sc27xx_adc_data *data)
768 ret = regmap_update_bits(data->regmap, data->var_data->module_en,
774 ret = regmap_update_bits(data->regmap, data->var_data->clk_en,
781 ret = sc27xx_adc_scale_calibration(data, true);
785 ret = sc27xx_adc_scale_calibration(data, false);
792 regmap_update_bits(data->regmap, data->var_data->clk_en,
795 regmap_update_bits(data->regmap, data->var_data->module_en,
803 struct sc27xx_adc_data *data = _data;
806 regmap_update_bits(data->regmap, data->var_data->clk_en,
809 regmap_update_bits(data->regmap, data->var_data->module_en,
872 dev_err(dev, "No matching driver data found\n");
950 { .compatible = "sprd,sc2731-adc", .data = &sc2731_data},
951 { .compatible = "sprd,sc2730-adc", .data = &sc2730_data},
952 { .compatible = "sprd,sc2721-adc", .data = &sc2721_data},
953 { .compatible = "sprd,sc2720-adc", .data = &sc2720_data},