diff options
| -rw-r--r-- | drivers/iio/adc/ad7779.c | 86 | 
1 files changed, 46 insertions, 40 deletions
| diff --git a/drivers/iio/adc/ad7779.c b/drivers/iio/adc/ad7779.c index 845adc510239..4e6fa6370593 100644 --- a/drivers/iio/adc/ad7779.c +++ b/drivers/iio/adc/ad7779.c @@ -752,6 +752,51 @@ static int ad7779_conf(struct ad7779_state *st, struct gpio_desc *start_gpio)  	return 0;  } +static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev *indio_dev) +{ +	int ret; +	struct device *dev = &st->spi->dev; + +	indio_dev->info = &ad7779_info; +	indio_dev->channels = st->chip_info->channels; +	indio_dev->num_channels = ARRAY_SIZE(ad7779_channels); + +	st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name, +					  iio_device_id(indio_dev)); +	if (!st->trig) +		return -ENOMEM; + +	st->trig->ops = &ad7779_trigger_ops; + +	iio_trigger_set_drvdata(st->trig, st); + +	ret = devm_request_irq(dev, st->spi->irq, iio_trigger_generic_data_rdy_poll, +			       IRQF_ONESHOT | IRQF_NO_AUTOEN, indio_dev->name, +			       st->trig); +	if (ret) +		return dev_err_probe(dev, ret, "request IRQ %d failed\n", +				     st->spi->irq); + +	ret = devm_iio_trigger_register(dev, st->trig); +	if (ret) +		return ret; + +	indio_dev->trig = iio_trigger_get(st->trig); + +	init_completion(&st->completion); + +	ret = devm_iio_triggered_buffer_setup(dev, indio_dev, +					      &iio_pollfunc_store_time, +					      &ad7779_trigger_handler, +					      &ad7779_buffer_setup_ops); +	if (ret) +		return ret; + +	return ad7779_spi_write_mask(st, AD7779_REG_DOUT_FORMAT, +				     AD7779_DCLK_CLK_DIV_MSK, +				     FIELD_PREP(AD7779_DCLK_CLK_DIV_MSK, 7)); +} +  static int ad7779_probe(struct spi_device *spi)  {  	struct iio_dev *indio_dev; @@ -760,9 +805,6 @@ static int ad7779_probe(struct spi_device *spi)  	struct device *dev = &spi->dev;  	int ret = -EINVAL; -	if (!spi->irq) -		return dev_err_probe(dev, ret, "DRDY irq not present\n"); -  	indio_dev = devm_iio_device_alloc(dev, sizeof(*st));  	if (!indio_dev)  		return -ENOMEM; @@ -804,45 +846,9 @@ static int ad7779_probe(struct spi_device *spi)  		return ret;  	indio_dev->name = st->chip_info->name; -	indio_dev->info = &ad7779_info;  	indio_dev->modes = INDIO_DIRECT_MODE; -	indio_dev->channels = st->chip_info->channels; -	indio_dev->num_channels = ARRAY_SIZE(ad7779_channels); - -	st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name, -					  iio_device_id(indio_dev)); -	if (!st->trig) -		return -ENOMEM; -	st->trig->ops = &ad7779_trigger_ops; - -	iio_trigger_set_drvdata(st->trig, st); - -	ret = devm_request_irq(dev, spi->irq, iio_trigger_generic_data_rdy_poll, -			       IRQF_ONESHOT | IRQF_NO_AUTOEN, indio_dev->name, -			       st->trig); -	if (ret) -		return dev_err_probe(dev, ret, "request IRQ %d failed\n", -				     st->spi->irq); - -	ret = devm_iio_trigger_register(dev, st->trig); -	if (ret) -		return ret; - -	indio_dev->trig = iio_trigger_get(st->trig); - -	init_completion(&st->completion); - -	ret = devm_iio_triggered_buffer_setup(dev, indio_dev, -					      &iio_pollfunc_store_time, -					      &ad7779_trigger_handler, -					      &ad7779_buffer_setup_ops); -	if (ret) -		return ret; - -	ret = ad7779_spi_write_mask(st, AD7779_REG_DOUT_FORMAT, -				    AD7779_DCLK_CLK_DIV_MSK, -				    FIELD_PREP(AD7779_DCLK_CLK_DIV_MSK, 7)); +	ret = ad7779_setup_without_backend(st, indio_dev);  	if (ret)  		return ret; | 
