mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
iio: adc: ad_sigma_delta: Store information about reset sequence length
The various chips can be reset using a sequence of SPI transfers with MOSI = 1. The length of such a sequence varies from chip to chip. Store that length in struct ad_sigma_delta_info and replace the respective parameter to ad_sd_reset() with it. Note the ad7192 used to pass 48 as length but the documentation specifies 40 as the required length. Assuming the latter is right. (Using a too long sequence doesn't hurt apart from using a longer spi transfer than necessary, so this is no relevant fix.) The motivation for storing this information is that this is useful to clear a pending R̅D̅Y̅ signal in the next change. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Link: https://patch.msgid.link/9750db62fce638bf140ff48172c23bff7f785e5b.1733504533.git.u.kleine-koenig@baylibre.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
f522589c13
commit
07a28874bb
|
@ -571,6 +571,7 @@ static const struct ad_sigma_delta_info ad7124_sigma_delta_info = {
|
|||
.data_reg = AD7124_DATA,
|
||||
.num_slots = 8,
|
||||
.irq_flags = IRQF_TRIGGER_FALLING,
|
||||
.num_resetclks = 64,
|
||||
};
|
||||
|
||||
static int ad7124_read_raw(struct iio_dev *indio_dev,
|
||||
|
@ -756,7 +757,7 @@ static int ad7124_soft_reset(struct ad7124_state *st)
|
|||
unsigned int readval, timeout;
|
||||
int ret;
|
||||
|
||||
ret = ad_sd_reset(&st->sd, 64);
|
||||
ret = ad_sd_reset(&st->sd);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -763,6 +763,7 @@ static struct ad_sigma_delta_info ad7173_sigma_delta_info = {
|
|||
.read_mask = BIT(6),
|
||||
.status_ch_mask = GENMASK(3, 0),
|
||||
.data_reg = AD7173_REG_DATA,
|
||||
.num_resetclks = 64,
|
||||
};
|
||||
|
||||
static int ad7173_setup(struct iio_dev *indio_dev)
|
||||
|
|
|
@ -361,6 +361,7 @@ static const struct ad_sigma_delta_info ad7192_sigma_delta_info = {
|
|||
.status_ch_mask = GENMASK(3, 0),
|
||||
.num_slots = 4,
|
||||
.irq_flags = IRQF_TRIGGER_FALLING,
|
||||
.num_resetclks = 40,
|
||||
};
|
||||
|
||||
static const struct ad_sigma_delta_info ad7194_sigma_delta_info = {
|
||||
|
@ -373,6 +374,7 @@ static const struct ad_sigma_delta_info ad7194_sigma_delta_info = {
|
|||
.read_mask = BIT(6),
|
||||
.status_ch_mask = GENMASK(3, 0),
|
||||
.irq_flags = IRQF_TRIGGER_FALLING,
|
||||
.num_resetclks = 40,
|
||||
};
|
||||
|
||||
static const struct ad_sd_calib_data ad7192_calib_arr[8] = {
|
||||
|
@ -565,7 +567,7 @@ static int ad7192_setup(struct iio_dev *indio_dev, struct device *dev)
|
|||
int i, ret, id;
|
||||
|
||||
/* reset the serial interface */
|
||||
ret = ad_sd_reset(&st->sd, 48);
|
||||
ret = ad_sd_reset(&st->sd);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
usleep_range(500, 1000); /* Wait for at least 500us */
|
||||
|
|
|
@ -254,6 +254,7 @@ static const struct ad_sigma_delta_info ad7791_sigma_delta_info = {
|
|||
.addr_shift = 4,
|
||||
.read_mask = BIT(3),
|
||||
.irq_flags = IRQF_TRIGGER_FALLING,
|
||||
.num_resetclks = 32,
|
||||
};
|
||||
|
||||
static int ad7791_read_raw(struct iio_dev *indio_dev,
|
||||
|
|
|
@ -206,6 +206,7 @@ static const struct ad_sigma_delta_info ad7793_sigma_delta_info = {
|
|||
.addr_shift = 3,
|
||||
.read_mask = BIT(6),
|
||||
.irq_flags = IRQF_TRIGGER_FALLING,
|
||||
.num_resetclks = 32,
|
||||
};
|
||||
|
||||
static const struct ad_sd_calib_data ad7793_calib_arr[6] = {
|
||||
|
@ -265,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
|
|||
return ret;
|
||||
|
||||
/* reset the serial interface */
|
||||
ret = ad_sd_reset(&st->sd, 32);
|
||||
ret = ad_sd_reset(&st->sd);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
usleep_range(500, 2000); /* Wait for at least 500us */
|
||||
|
|
|
@ -178,13 +178,12 @@ EXPORT_SYMBOL_NS_GPL(ad_sd_read_reg, "IIO_AD_SIGMA_DELTA");
|
|||
* ad_sd_reset() - Reset the serial interface
|
||||
*
|
||||
* @sigma_delta: The sigma delta device
|
||||
* @reset_length: Number of SCLKs with DIN = 1
|
||||
*
|
||||
* Returns 0 on success, an error code otherwise.
|
||||
**/
|
||||
int ad_sd_reset(struct ad_sigma_delta *sigma_delta,
|
||||
unsigned int reset_length)
|
||||
int ad_sd_reset(struct ad_sigma_delta *sigma_delta)
|
||||
{
|
||||
unsigned int reset_length = sigma_delta->info->num_resetclks;
|
||||
uint8_t *buf;
|
||||
unsigned int size;
|
||||
int ret;
|
||||
|
|
|
@ -54,6 +54,7 @@ struct iio_dev;
|
|||
* @irq_flags: flags for the interrupt used by the triggered buffer
|
||||
* @num_slots: Number of sequencer slots
|
||||
* @irq_line: IRQ for reading conversions. If 0, spi->irq will be used
|
||||
* @num_resetclks: Number of SPI clk cycles with MOSI=1 to reset the chip.
|
||||
*/
|
||||
struct ad_sigma_delta_info {
|
||||
int (*set_channel)(struct ad_sigma_delta *, unsigned int channel);
|
||||
|
@ -70,6 +71,7 @@ struct ad_sigma_delta_info {
|
|||
unsigned long irq_flags;
|
||||
unsigned int num_slots;
|
||||
int irq_line;
|
||||
unsigned int num_resetclks;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -181,8 +183,7 @@ int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg,
|
|||
int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg,
|
||||
unsigned int size, unsigned int *val);
|
||||
|
||||
int ad_sd_reset(struct ad_sigma_delta *sigma_delta,
|
||||
unsigned int reset_length);
|
||||
int ad_sd_reset(struct ad_sigma_delta *sigma_delta);
|
||||
|
||||
int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
|
||||
const struct iio_chan_spec *chan, int *val);
|
||||
|
|
Loading…
Reference in New Issue
Block a user