Exemple #1
0
/***************************************************************************//**
 * @brief Writes a value to the selected register.
 *
 * @param registerAddress - The address of the register to write to.
 * @param registerValue - The value to write to the register.
 *
 * @return Returns 0 in case of success or negative error code.
*******************************************************************************/
int32_t ad9523_write(uint32_t registerAddress,
				     uint32_t registerValue)
{
	uint32_t i = 0;
	int32_t ret = -1;
	uint16_t regAddr = 0;

	regAddr = (registerAddress & 0x1FFF);
	for(i = 0; i < AD9523_TRANSF_LEN(registerAddress); i++)
	{
		ret = SPI_Write(SPI_SEL_AD9523, regAddr, (registerValue >> ((AD9523_TRANSF_LEN(registerAddress) - i - 1) * 8)) & 0xFF);
		if(ret < 0)
			return ret;
		regAddr--;
	}

	return ret;
}
Exemple #2
0
/***************************************************************************//**
 * @brief Reads the value of the selected register.
 *
 * @param registerAddress - The address of the register to read.
 *
 * @return registerValue - The register's value or negative error code.
*******************************************************************************/
int32_t ad9523_read(uint32_t registerAddress)
{
	uint16_t	regAddr = 0;
	uint32_t	registerValue = 0;
	uint32_t	registerValue1 = 0;
	int32_t ret;
	uint32_t i = 0;

	regAddr = 0x8000 + (registerAddress & 0x1FFF);
	for(i = 0; i < AD9523_TRANSF_LEN(registerAddress); i++)
	{
		ret = SPI_Read(SPI_SEL_AD9523, regAddr, &registerValue1);
		if(ret < 0)
			return ret;
		regAddr--;
		registerValue <<= 8;
		registerValue |= registerValue1;
	}
	return (int32_t)registerValue;
}
Exemple #3
0
static int ad9523_read(struct iio_dev *indio_dev, unsigned addr)
{
	struct ad9523_state *st = iio_priv(indio_dev);
	int ret;

	/* We encode the register size 1..3 bytes into the register address.
	 * On transfer we get the size from the register datum, and make sure
	 * the result is properly aligned.
	 */

	struct spi_transfer t[] = {
		{
			.tx_buf = &st->data[0].d8[2],
			.len = 2,
		}, {
			.rx_buf = &st->data[1].d8[4 - AD9523_TRANSF_LEN(addr)],
			.len = AD9523_TRANSF_LEN(addr),
		},
	};

	st->data[0].d32 = cpu_to_be32(AD9523_READ |
				      AD9523_CNT(AD9523_TRANSF_LEN(addr)) |
				      AD9523_ADDR(addr));

	ret = spi_sync_transfer(st->spi, t, ARRAY_SIZE(t));
	if (ret < 0)
		dev_err(&indio_dev->dev, "read failed (%d)", ret);
	else
		ret = be32_to_cpu(st->data[1].d32) & (0xFFFFFF >>
				  (8 * (3 - AD9523_TRANSF_LEN(addr))));