Lines Matching refs:data

181 	struct aspeed_adc_data *data = iio_priv(indio_dev);
185 dev_warn(data->dev, "Couldn't find syscon node\n");
191 dev_warn(data->dev, "Failed to get syscon regmap\n");
194 if (data->model_data->trim_locate) {
195 if (regmap_read(scu, data->model_data->trim_locate->offset,
197 dev_warn(data->dev,
198 "Failed to get adc trimming data\n");
203 (data->model_data->trim_locate->field)) >>
204 __ffs(data->model_data->trim_locate->field);
208 dev_dbg(data->dev,
210 trimming_val, data->model_data->trim_locate->offset,
211 data->model_data->trim_locate->field);
212 writel(trimming_val, data->base + ASPEED_REG_COMPENSATION_TRIM);
219 struct aspeed_adc_data *data = iio_priv(indio_dev);
224 readl(data->base + ASPEED_REG_ENGINE_CONTROL);
232 * voltage. So the expected reading raw data will become half of the max
238 data->base + ASPEED_REG_ENGINE_CONTROL);
250 ndelay(data->sample_period_ns);
251 adc_raw += readw(data->base + aspeed_adc_iio_channels[0].address);
254 data->cv = BIT(ASPEED_RESOLUTION_BITS - 1) - adc_raw;
256 data->base + ASPEED_REG_ENGINE_CONTROL);
257 dev_dbg(data->dev, "Compensating value = %d\n", data->cv);
264 struct aspeed_adc_data *data = iio_priv(indio_dev);
266 if (rate < data->model_data->min_sampling_rate ||
267 rate > data->model_data->max_sampling_rate)
270 clk_set_rate(data->clk_scaler->clk, rate * ASPEED_CLOCKS_PER_SAMPLE);
271 rate = clk_get_rate(data->clk_scaler->clk);
272 data->sample_period_ns = DIV_ROUND_UP_ULL(
274 dev_dbg(data->dev, "Adc clock = %d sample period = %d ns", rate,
275 data->sample_period_ns);
284 struct aspeed_adc_data *data = iio_priv(indio_dev);
289 if (data->battery_sensing && chan->channel == 7) {
291 readl(data->base + ASPEED_REG_ENGINE_CONTROL);
296 data->base + ASPEED_REG_ENGINE_CONTROL);
302 *val = readw(data->base + chan->address);
303 *val = (*val * data->battery_mode_gain.mult) /
304 data->battery_mode_gain.div;
307 data->base + ASPEED_REG_ENGINE_CONTROL);
309 *val = readw(data->base + chan->address);
313 if (data->battery_sensing && chan->channel == 7)
314 *val = (data->cv * data->battery_mode_gain.mult) /
315 data->battery_mode_gain.div;
317 *val = data->cv;
321 *val = data->vref_mv;
326 *val = clk_get_rate(data->clk_scaler->clk) /
362 struct aspeed_adc_data *data = iio_priv(indio_dev);
367 *readval = readl(data->base + reg);
378 static void aspeed_adc_unregister_fixed_divider(void *data)
380 struct clk_hw *clk = data;
385 static void aspeed_adc_reset_assert(void *data)
387 struct reset_control *rst = data;
392 static void aspeed_adc_clk_disable_unprepare(void *data)
394 struct clk *clk = data;
399 static void aspeed_adc_power_down(void *data)
401 struct aspeed_adc_data *priv_data = data;
407 static void aspeed_adc_reg_disable(void *data)
409 struct regulator *reg = data;
416 struct aspeed_adc_data *data = iio_priv(indio_dev);
420 if (data->model_data->vref_fixed_mv) {
421 data->vref_mv = data->model_data->vref_fixed_mv;
425 readl(data->base + ASPEED_REG_ENGINE_CONTROL);
426 data->regulator = devm_regulator_get_optional(data->dev, "vref");
427 if (!IS_ERR(data->regulator)) {
428 ret = regulator_enable(data->regulator);
432 data->dev, aspeed_adc_reg_disable, data->regulator);
435 data->vref_mv = regulator_get_voltage(data->regulator);
437 data->vref_mv /= 1000;
438 if ((data->vref_mv >= 1550) && (data->vref_mv <= 2700))
443 data->base + ASPEED_REG_ENGINE_CONTROL);
444 else if ((data->vref_mv >= 900) && (data->vref_mv <= 1650))
449 data->base + ASPEED_REG_ENGINE_CONTROL);
451 dev_err(data->dev, "Regulator voltage %d not support",
452 data->vref_mv);
456 if (PTR_ERR(data->regulator) != -ENODEV)
457 return PTR_ERR(data->regulator);
458 data->vref_mv = 2500000;
459 of_property_read_u32(data->dev->of_node,
461 &data->vref_mv);
463 data->vref_mv /= 1000;
464 if (data->vref_mv == 2500)
468 data->base + ASPEED_REG_ENGINE_CONTROL);
469 else if (data->vref_mv == 1200)
473 data->base + ASPEED_REG_ENGINE_CONTROL);
475 dev_err(data->dev, "Voltage %d not support", data->vref_mv);
486 struct aspeed_adc_data *data;
492 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*data));
496 data = iio_priv(indio_dev);
497 data->dev = &pdev->dev;
498 data->model_data = of_device_get_match_data(&pdev->dev);
501 data->base = devm_platform_ioremap_resource(pdev, 0);
502 if (IS_ERR(data->base))
503 return PTR_ERR(data->base);
506 spin_lock_init(&data->clk_lock);
510 data->model_data->model_name);
511 data->fixed_div_clk = clk_hw_register_fixed_factor(
513 if (IS_ERR(data->fixed_div_clk))
514 return PTR_ERR(data->fixed_div_clk);
516 ret = devm_add_action_or_reset(data->dev,
518 data->fixed_div_clk);
523 if (data->model_data->need_prescaler) {
525 data->model_data->model_name);
526 data->clk_prescaler = devm_clk_hw_register_divider(
528 data->base + ASPEED_REG_CLOCK_CONTROL, 17, 15, 0,
529 &data->clk_lock);
530 if (IS_ERR(data->clk_prescaler))
531 return PTR_ERR(data->clk_prescaler);
541 data->model_data->model_name);
542 data->clk_scaler = devm_clk_hw_register_divider(
544 data->base + ASPEED_REG_CLOCK_CONTROL, 0,
545 data->model_data->scaler_bit_width,
546 data->model_data->need_prescaler ? CLK_DIVIDER_ONE_BASED : 0,
547 &data->clk_lock);
548 if (IS_ERR(data->clk_scaler))
549 return PTR_ERR(data->clk_scaler);
551 data->rst = devm_reset_control_get_shared(&pdev->dev, NULL);
552 if (IS_ERR(data->rst)) {
555 return PTR_ERR(data->rst);
557 reset_control_deassert(data->rst);
559 ret = devm_add_action_or_reset(data->dev, aspeed_adc_reset_assert,
560 data->rst);
572 if (of_find_property(data->dev->of_node, "aspeed,battery-sensing",
574 if (data->model_data->bat_sense_sup) {
575 data->battery_sensing = 1;
576 if (readl(data->base + ASPEED_REG_ENGINE_CONTROL) &
578 data->battery_mode_gain.mult = 3;
579 data->battery_mode_gain.div = 1;
581 data->battery_mode_gain.mult = 3;
582 data->battery_mode_gain.div = 2;
589 ret = clk_prepare_enable(data->clk_scaler->clk);
592 ret = devm_add_action_or_reset(data->dev,
594 data->clk_scaler->clk);
603 readl(data->base + ASPEED_REG_ENGINE_CONTROL);
609 data->base + ASPEED_REG_ENGINE_CONTROL);
611 ret = devm_add_action_or_reset(data->dev, aspeed_adc_power_down,
612 data);
616 if (data->model_data->wait_init_sequence) {
618 ret = readl_poll_timeout(data->base + ASPEED_REG_ENGINE_CONTROL,
631 readl(data->base + ASPEED_REG_ENGINE_CONTROL);
634 data->base + ASPEED_REG_ENGINE_CONTROL);
636 indio_dev->name = data->model_data->model_name;
639 indio_dev->channels = data->battery_sensing ?
642 indio_dev->num_channels = data->model_data->num_channels;
644 ret = devm_iio_device_register(data->dev, indio_dev);
708 { .compatible = "aspeed,ast2400-adc", .data = &ast2400_model_data },
709 { .compatible = "aspeed,ast2500-adc", .data = &ast2500_model_data },
710 { .compatible = "aspeed,ast2600-adc0", .data = &ast2600_adc0_model_data },
711 { .compatible = "aspeed,ast2600-adc1", .data = &ast2600_adc1_model_data },