Lines Matching refs:st

136 static int __admv1014_spi_read(struct admv1014_state *st, unsigned int reg,  in __admv1014_spi_read()  argument
142 st->data[0] = ADMV1014_READ | FIELD_PREP(ADMV1014_REG_ADDR_READ_MSK, reg); in __admv1014_spi_read()
143 st->data[1] = 0; in __admv1014_spi_read()
144 st->data[2] = 0; in __admv1014_spi_read()
146 t.rx_buf = &st->data[0]; in __admv1014_spi_read()
147 t.tx_buf = &st->data[0]; in __admv1014_spi_read()
148 t.len = sizeof(st->data); in __admv1014_spi_read()
150 ret = spi_sync_transfer(st->spi, &t, 1); in __admv1014_spi_read()
154 *val = FIELD_GET(ADMV1014_REG_DATA_MSK, get_unaligned_be24(&st->data[0])); in __admv1014_spi_read()
159 static int admv1014_spi_read(struct admv1014_state *st, unsigned int reg, in admv1014_spi_read() argument
164 mutex_lock(&st->lock); in admv1014_spi_read()
165 ret = __admv1014_spi_read(st, reg, val); in admv1014_spi_read()
166 mutex_unlock(&st->lock); in admv1014_spi_read()
171 static int __admv1014_spi_write(struct admv1014_state *st, in __admv1014_spi_write() argument
176 FIELD_PREP(ADMV1014_REG_ADDR_WRITE_MSK, reg), &st->data[0]); in __admv1014_spi_write()
178 return spi_write(st->spi, &st->data[0], 3); in __admv1014_spi_write()
181 static int admv1014_spi_write(struct admv1014_state *st, unsigned int reg, in admv1014_spi_write() argument
186 mutex_lock(&st->lock); in admv1014_spi_write()
187 ret = __admv1014_spi_write(st, reg, val); in admv1014_spi_write()
188 mutex_unlock(&st->lock); in admv1014_spi_write()
193 static int __admv1014_spi_update_bits(struct admv1014_state *st, unsigned int reg, in __admv1014_spi_update_bits() argument
199 ret = __admv1014_spi_read(st, reg, &data); in __admv1014_spi_update_bits()
205 return __admv1014_spi_write(st, reg, temp); in __admv1014_spi_update_bits()
208 static int admv1014_spi_update_bits(struct admv1014_state *st, unsigned int reg, in admv1014_spi_update_bits() argument
213 mutex_lock(&st->lock); in admv1014_spi_update_bits()
214 ret = __admv1014_spi_update_bits(st, reg, mask, val); in admv1014_spi_update_bits()
215 mutex_unlock(&st->lock); in admv1014_spi_update_bits()
220 static int admv1014_update_quad_filters(struct admv1014_state *st) in admv1014_update_quad_filters() argument
223 u64 rate = clk_get_rate(st->clkin); in admv1014_update_quad_filters()
234 return __admv1014_spi_update_bits(st, ADMV1014_REG_QUAD, in admv1014_update_quad_filters()
239 static int admv1014_update_vcm_settings(struct admv1014_state *st) in admv1014_update_vcm_settings() argument
244 vcm_mv = regulator_get_voltage(st->regulators[0].consumer) / 1000; in admv1014_update_vcm_settings()
250 ret = __admv1014_spi_update_bits(st, ADMV1014_REG_MIXER, in admv1014_update_vcm_settings()
260 return __admv1014_spi_update_bits(st, ADMV1014_REG_BB_AMP_AGC, in admv1014_update_vcm_settings()
274 struct admv1014_state *st = iio_priv(indio_dev); in admv1014_read_raw() local
280 ret = admv1014_spi_read(st, ADMV1014_REG_IF_AMP_BB_AMP, &data); in admv1014_read_raw()
291 ret = admv1014_spi_read(st, ADMV1014_REG_LO_AMP_PHASE_ADJUST1, &data); in admv1014_read_raw()
302 ret = admv1014_spi_read(st, ADMV1014_REG_MIXER, &data); in admv1014_read_raw()
309 ret = admv1014_spi_read(st, ADMV1014_REG_BB_AMP_AGC, &data); in admv1014_read_raw()
326 struct admv1014_state *st = iio_priv(indio_dev); in admv1014_write_raw() local
338 return admv1014_spi_update_bits(st, ADMV1014_REG_IF_AMP_BB_AMP, msk, data); in admv1014_write_raw()
348 return admv1014_spi_update_bits(st, ADMV1014_REG_LO_AMP_PHASE_ADJUST1, msk, data); in admv1014_write_raw()
350 return admv1014_spi_update_bits(st, ADMV1014_REG_MIXER, in admv1014_write_raw()
354 return admv1014_spi_update_bits(st, ADMV1014_REG_BB_AMP_AGC, in admv1014_write_raw()
367 struct admv1014_state *st = iio_priv(indio_dev); in admv1014_read() local
374 ret = admv1014_spi_read(st, ADMV1014_REG_IF_AMP, &data); in admv1014_read()
380 ret = admv1014_spi_read(st, ADMV1014_REG_IF_AMP_BB_AMP, &data); in admv1014_read()
388 ret = admv1014_spi_read(st, ADMV1014_REG_IF_AMP, &data); in admv1014_read()
409 struct admv1014_state *st = iio_priv(indio_dev); in admv1014_write() local
444 ret = admv1014_spi_update_bits(st, addr, msk, data); in admv1014_write()
471 struct admv1014_state *st = iio_priv(indio_dev); in admv1014_reg_access() local
474 return admv1014_spi_read(st, reg, read_val); in admv1014_reg_access()
476 return admv1014_spi_write(st, reg, write_val); in admv1014_reg_access()
493 struct admv1014_state *st = container_of(nb, struct admv1014_state, nb); in admv1014_freq_change() local
497 mutex_lock(&st->lock); in admv1014_freq_change()
498 ret = notifier_from_errno(admv1014_update_quad_filters(st)); in admv1014_freq_change()
499 mutex_unlock(&st->lock); in admv1014_freq_change()
609 static int admv1014_init(struct admv1014_state *st) in admv1014_init() argument
612 struct spi_device *spi = st->spi; in admv1014_init()
615 ret = regulator_bulk_enable(ADMV1014_NUM_REGULATORS, st->regulators); in admv1014_init()
621 ret = devm_add_action_or_reset(&spi->dev, admv1014_reg_disable, st->regulators); in admv1014_init()
625 ret = clk_prepare_enable(st->clkin); in admv1014_init()
629 ret = devm_add_action_or_reset(&spi->dev, admv1014_clk_disable, st->clkin); in admv1014_init()
633 st->nb.notifier_call = admv1014_freq_change; in admv1014_init()
634 ret = devm_clk_notifier_register(&spi->dev, st->clkin, &st->nb); in admv1014_init()
638 ret = devm_add_action_or_reset(&spi->dev, admv1014_powerdown, st); in admv1014_init()
643 ret = __admv1014_spi_update_bits(st, ADMV1014_REG_SPI_CONTROL, in admv1014_init()
651 ret = __admv1014_spi_update_bits(st, ADMV1014_REG_SPI_CONTROL, in admv1014_init()
659 ret = __admv1014_spi_write(st, ADMV1014_REG_VVA_TEMP_COMP, 0x727C); in admv1014_init()
665 ret = __admv1014_spi_read(st, ADMV1014_REG_SPI_CONTROL, &chip_id); in admv1014_init()
675 ret = __admv1014_spi_update_bits(st, ADMV1014_REG_QUAD, in admv1014_init()
678 st->quad_se_mode)); in admv1014_init()
684 ret = admv1014_update_quad_filters(st); in admv1014_init()
690 ret = admv1014_update_vcm_settings(st); in admv1014_init()
701 enable_reg = FIELD_PREP(ADMV1014_P1DB_COMPENSATION_MSK, st->p1db_comp ? 3 : 0) | in admv1014_init()
703 (st->input_mode == ADMV1014_IF_MODE) ? 0 : 1) | in admv1014_init()
705 (st->input_mode == ADMV1014_IF_MODE) ? 1 : 0) | in admv1014_init()
706 FIELD_PREP(ADMV1014_DET_EN_MSK, st->det_en); in admv1014_init()
708 return __admv1014_spi_update_bits(st, ADMV1014_REG_ENABLE, enable_reg_msk, enable_reg); in admv1014_init()
711 static int admv1014_properties_parse(struct admv1014_state *st) in admv1014_properties_parse() argument
715 struct spi_device *spi = st->spi; in admv1014_properties_parse()
718 st->det_en = device_property_read_bool(&spi->dev, "adi,detector-enable"); in admv1014_properties_parse()
720 st->p1db_comp = device_property_read_bool(&spi->dev, "adi,p1db-compensation-enable"); in admv1014_properties_parse()
724 st->input_mode = ADMV1014_IQ_MODE; in admv1014_properties_parse()
730 st->input_mode = ret; in admv1014_properties_parse()
735 st->quad_se_mode = ADMV1014_SE_MODE_POS; in admv1014_properties_parse()
741 st->quad_se_mode = ADMV1014_SE_MODE_POS + (ret * 3); in admv1014_properties_parse()
745 st->regulators[i].supply = admv1014_reg_name[i]; in admv1014_properties_parse()
747 ret = devm_regulator_bulk_get(&st->spi->dev, ADMV1014_NUM_REGULATORS, in admv1014_properties_parse()
748 st->regulators); in admv1014_properties_parse()
754 st->clkin = devm_clk_get(&spi->dev, "lo_in"); in admv1014_properties_parse()
755 if (IS_ERR(st->clkin)) in admv1014_properties_parse()
756 return dev_err_probe(&spi->dev, PTR_ERR(st->clkin), in admv1014_properties_parse()
765 struct admv1014_state *st; in admv1014_probe() local
768 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in admv1014_probe()
772 st = iio_priv(indio_dev); in admv1014_probe()
774 ret = admv1014_properties_parse(st); in admv1014_probe()
781 if (st->input_mode == ADMV1014_IQ_MODE) { in admv1014_probe()
789 st->spi = spi; in admv1014_probe()
791 mutex_init(&st->lock); in admv1014_probe()
793 ret = admv1014_init(st); in admv1014_probe()