• Home
  • Raw
  • Download

Lines Matching refs:priv

181 meson_saradc_get_fifo_count(struct meson_saradc_priv *priv)  in meson_saradc_get_fifo_count()  argument
185 regmap_read(priv->regmap, MESON_SAR_ADC_REG0, &regval); in meson_saradc_get_fifo_count()
190 static int meson_saradc_lock(struct meson_saradc_priv *priv) in meson_saradc_lock() argument
195 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_lock()
204 regmap_read(priv->regmap, MESON_SAR_ADC_DELAY, &val); in meson_saradc_lock()
215 static void meson_saradc_unlock(struct meson_saradc_priv *priv) in meson_saradc_unlock() argument
218 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_unlock()
222 static void meson_saradc_clear_fifo(struct meson_saradc_priv *priv) in meson_saradc_clear_fifo() argument
227 if (!meson_saradc_get_fifo_count(priv)) in meson_saradc_clear_fifo()
230 regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, &tmp); in meson_saradc_clear_fifo()
234 static int meson_saradc_calib_val(struct meson_saradc_priv *priv, int val) in meson_saradc_calib_val() argument
239 tmp = div_s64((s64)val * priv->calibscale, MILLION) + priv->calibbias; in meson_saradc_calib_val()
241 return clamp(tmp, 0, (1 << priv->data->num_bits) - 1); in meson_saradc_calib_val()
244 static int meson_saradc_wait_busy_clear(struct meson_saradc_priv *priv) in meson_saradc_wait_busy_clear() argument
255 regmap_read(priv->regmap, MESON_SAR_ADC_REG0, &regval); in meson_saradc_wait_busy_clear()
264 static int meson_saradc_read_raw_sample(struct meson_saradc_priv *priv, in meson_saradc_read_raw_sample() argument
270 ret = meson_saradc_wait_busy_clear(priv); in meson_saradc_read_raw_sample()
274 count = meson_saradc_get_fifo_count(priv); in meson_saradc_read_raw_sample()
280 regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, &regval); in meson_saradc_read_raw_sample()
289 fifo_val &= GENMASK(priv->data->num_bits - 1, 0); in meson_saradc_read_raw_sample()
290 *val = meson_saradc_calib_val(priv, fifo_val); in meson_saradc_read_raw_sample()
295 static void meson_saradc_start_sample_engine(struct meson_saradc_priv *priv) in meson_saradc_start_sample_engine() argument
297 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_start_sample_engine()
301 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_start_sample_engine()
305 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_start_sample_engine()
310 static void meson_saradc_stop_sample_engine(struct meson_saradc_priv *priv) in meson_saradc_stop_sample_engine() argument
312 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_stop_sample_engine()
315 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_stop_sample_engine()
320 meson_saradc_wait_busy_clear(priv); in meson_saradc_stop_sample_engine()
322 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_stop_sample_engine()
339 static void meson_saradc_set_averaging(struct meson_saradc_priv *priv, in meson_saradc_set_averaging() argument
347 regmap_update_bits(priv->regmap, MESON_SAR_ADC_AVG_CNTL, in meson_saradc_set_averaging()
352 regmap_update_bits(priv->regmap, MESON_SAR_ADC_AVG_CNTL, in meson_saradc_set_averaging()
356 static void meson_saradc_enable_channel(struct meson_saradc_priv *priv, in meson_saradc_enable_channel() argument
367 regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_LIST, in meson_saradc_enable_channel()
372 regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_LIST, in meson_saradc_enable_channel()
377 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DETECT_IDLE_SW, in meson_saradc_enable_channel()
383 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DETECT_IDLE_SW, in meson_saradc_enable_channel()
388 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELTA_10, in meson_saradc_enable_channel()
392 static int meson_saradc_get_sample(struct meson_saradc_priv *priv, in meson_saradc_get_sample() argument
397 ret = meson_saradc_lock(priv); in meson_saradc_get_sample()
402 meson_saradc_clear_fifo(priv); in meson_saradc_get_sample()
404 meson_saradc_set_averaging(priv, chan, MEAN_AVERAGING, EIGHT_SAMPLES); in meson_saradc_get_sample()
406 meson_saradc_enable_channel(priv, chan); in meson_saradc_get_sample()
408 meson_saradc_start_sample_engine(priv); in meson_saradc_get_sample()
409 ret = meson_saradc_read_raw_sample(priv, chan, val); in meson_saradc_get_sample()
410 meson_saradc_stop_sample_engine(priv); in meson_saradc_get_sample()
412 meson_saradc_unlock(priv); in meson_saradc_get_sample()
426 struct meson_saradc_priv *priv = dev_get_priv(dev); in meson_saradc_channel_data() local
428 if (channel != priv->active_channel) { in meson_saradc_channel_data()
433 return meson_saradc_get_sample(priv, channel, data); in meson_saradc_channel_data()
445 static void meson_saradc_set_chan7_mux(struct meson_saradc_priv *priv, in meson_saradc_set_chan7_mux() argument
451 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, in meson_saradc_set_chan7_mux()
457 static int meson_saradc_calib(struct meson_saradc_priv *priv) in meson_saradc_calib() argument
463 nominal0 = (1 << priv->data->num_bits) / 4; in meson_saradc_calib()
464 nominal1 = (1 << priv->data->num_bits) * 3 / 4; in meson_saradc_calib()
466 meson_saradc_set_chan7_mux(priv, CHAN7_MUX_VDD_DIV4); in meson_saradc_calib()
468 ret = meson_saradc_get_sample(priv, 7, &value0); in meson_saradc_calib()
472 meson_saradc_set_chan7_mux(priv, CHAN7_MUX_VDD_MUL3_DIV4); in meson_saradc_calib()
474 ret = meson_saradc_get_sample(priv, 7, &value1); in meson_saradc_calib()
483 priv->calibscale = div_s64((nominal1 - nominal0) * (s64)MILLION, in meson_saradc_calib()
485 priv->calibbias = nominal0 - div_s64((s64)value0 * priv->calibscale, in meson_saradc_calib()
489 meson_saradc_set_chan7_mux(priv, CHAN7_MUX_CH7_INPUT); in meson_saradc_calib()
494 static int meson_saradc_init(struct meson_saradc_priv *priv) in meson_saradc_init() argument
499 priv->calibscale = MILLION; in meson_saradc_init()
505 meson_saradc_set_chan7_mux(priv, CHAN7_MUX_CH7_INPUT); in meson_saradc_init()
512 regmap_read(priv->regmap, MESON_SAR_ADC_REG3, &regval); in meson_saradc_init()
516 meson_saradc_stop_sample_engine(priv); in meson_saradc_init()
519 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_init()
524 regmap_write(priv->regmap, MESON_SAR_ADC_CHAN_LIST, 0x0); in meson_saradc_init()
526 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, in meson_saradc_init()
528 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, in meson_saradc_init()
533 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_init()
537 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_init()
543 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_init()
547 regmap_update_bits(priv->regmap, MESON_SAR_ADC_DELAY, in meson_saradc_init()
557 regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_10_SW, in meson_saradc_init()
561 regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_10_SW, in meson_saradc_init()
576 regmap_write(priv->regmap, MESON_SAR_ADC_AUX_SW, regval); in meson_saradc_init()
578 ret = meson_saradc_lock(priv); in meson_saradc_init()
583 ret = clk_enable(&priv->core_clk); in meson_saradc_init()
589 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG0, in meson_saradc_init()
592 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG11, in meson_saradc_init()
596 regmap_update_bits(priv->regmap, MESON_SAR_ADC_REG3, in meson_saradc_init()
603 ret = clk_enable(&priv->adc_clk); in meson_saradc_init()
608 meson_saradc_unlock(priv); in meson_saradc_init()
610 ret = meson_saradc_calib(priv); in meson_saradc_init()
621 struct meson_saradc_priv *priv = dev_get_priv(dev); in meson_saradc_start_channel() local
628 if (!priv->initialized) { in meson_saradc_start_channel()
631 ret = meson_saradc_init(priv); in meson_saradc_start_channel()
635 priv->initialized = true; in meson_saradc_start_channel()
638 priv->active_channel = channel; in meson_saradc_start_channel()
645 struct meson_saradc_priv *priv = dev_get_priv(dev); in meson_saradc_stop() local
647 priv->active_channel = -1; in meson_saradc_stop()
654 struct meson_saradc_priv *priv = dev_get_priv(dev); in meson_saradc_probe() local
657 ret = regmap_init_mem(dev_ofnode(dev), &priv->regmap); in meson_saradc_probe()
662 ret = clk_get_by_name(dev, "core", &priv->core_clk); in meson_saradc_probe()
666 ret = clk_get_by_name(dev, "adc_clk", &priv->adc_clk); in meson_saradc_probe()
671 priv->active_channel = -1; in meson_saradc_probe()
679 struct meson_saradc_priv *priv = dev_get_priv(dev); in meson_saradc_ofdata_to_platdata() local
681 priv->data = (struct meson_saradc_data *)dev_get_driver_data(dev); in meson_saradc_ofdata_to_platdata()
683 uc_pdata->data_mask = GENMASK(priv->data->num_bits - 1, 0); in meson_saradc_ofdata_to_platdata()