Skip to content

Commit

Permalink
iio: backend: extend features
Browse files Browse the repository at this point in the history
Extend backend features with new calls needed later on this
patchset from axi version of ad3552r.

The follwoing calls are added:

iio_backend_ddr_enable()
	enable ddr bus transfer
iio_backend_ddr_disable()
	disable ddr bus transfer
iio_backend_data_stream_enable()
	enable data stream over bus interface
iio_backend_data_stream_disable()
	disable data stream over bus interface
iio_backend_data_transfer_addr()
	define the target register address where the DAC sample
	will be written.

Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20241028-wip-bl-ad3552r-axi-v0-iio-testing-v9-3-f6960b4f9719@kernel-space.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
  • Loading branch information
Angelo Dureghello authored and Jonathan Cameron committed Nov 1, 2024
1 parent 043e4e5 commit d3eeb1a
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
78 changes: 78 additions & 0 deletions drivers/iio/industrialio-backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,84 @@ static int __devm_iio_backend_get(struct device *dev, struct iio_backend *back)
return 0;
}

/**
* iio_backend_ddr_enable - Enable interface DDR (Double Data Rate) mode
* @back: Backend device
*
* Enable DDR, data is generated by the IP at each front (raising and falling)
* of the bus clock signal.
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int iio_backend_ddr_enable(struct iio_backend *back)
{
return iio_backend_op_call(back, ddr_enable);
}
EXPORT_SYMBOL_NS_GPL(iio_backend_ddr_enable, IIO_BACKEND);

/**
* iio_backend_ddr_disable - Disable interface DDR (Double Data Rate) mode
* @back: Backend device
*
* Disable DDR, setting into SDR mode (Single Data Rate).
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int iio_backend_ddr_disable(struct iio_backend *back)
{
return iio_backend_op_call(back, ddr_disable);
}
EXPORT_SYMBOL_NS_GPL(iio_backend_ddr_disable, IIO_BACKEND);

/**
* iio_backend_data_stream_enable - Enable data stream
* @back: Backend device
*
* Enable data stream over the bus interface.
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int iio_backend_data_stream_enable(struct iio_backend *back)
{
return iio_backend_op_call(back, data_stream_enable);
}
EXPORT_SYMBOL_NS_GPL(iio_backend_data_stream_enable, IIO_BACKEND);

/**
* iio_backend_data_stream_disable - Disable data stream
* @back: Backend device
*
* Disable data stream over the bus interface.
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int iio_backend_data_stream_disable(struct iio_backend *back)
{
return iio_backend_op_call(back, data_stream_disable);
}
EXPORT_SYMBOL_NS_GPL(iio_backend_data_stream_disable, IIO_BACKEND);

/**
* iio_backend_data_transfer_addr - Set data address.
* @back: Backend device
* @address: Data register address
*
* Some devices may need to inform the backend about an address
* where to read or write the data.
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int iio_backend_data_transfer_addr(struct iio_backend *back, u32 address)
{
return iio_backend_op_call(back, data_transfer_addr, address);
}
EXPORT_SYMBOL_NS_GPL(iio_backend_data_transfer_addr, IIO_BACKEND);

static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, const char *name,
struct fwnode_handle *fwnode)
{
Expand Down
17 changes: 17 additions & 0 deletions include/linux/iio/backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@ struct iio_dev;
enum iio_backend_data_type {
IIO_BACKEND_TWOS_COMPLEMENT,
IIO_BACKEND_OFFSET_BINARY,
IIO_BACKEND_DATA_UNSIGNED,
IIO_BACKEND_DATA_TYPE_MAX
};

enum iio_backend_data_source {
IIO_BACKEND_INTERNAL_CONTINUOUS_WAVE,
IIO_BACKEND_EXTERNAL,
IIO_BACKEND_INTERNAL_RAMP_16BIT,
IIO_BACKEND_DATA_SOURCE_MAX
};

Expand Down Expand Up @@ -89,6 +91,11 @@ enum iio_backend_sample_trigger {
* @read_raw: Read a channel attribute from a backend device
* @debugfs_print_chan_status: Print channel status into a buffer.
* @debugfs_reg_access: Read or write register value of backend.
* @ddr_enable: Enable interface DDR (Double Data Rate) mode.
* @ddr_disable: Disable interface DDR (Double Data Rate) mode.
* @data_stream_enable: Enable data stream.
* @data_stream_disable: Disable data stream.
* @data_transfer_addr: Set data address.
**/
struct iio_backend_ops {
int (*enable)(struct iio_backend *back);
Expand Down Expand Up @@ -129,6 +136,11 @@ struct iio_backend_ops {
size_t len);
int (*debugfs_reg_access)(struct iio_backend *back, unsigned int reg,
unsigned int writeval, unsigned int *readval);
int (*ddr_enable)(struct iio_backend *back);
int (*ddr_disable)(struct iio_backend *back);
int (*data_stream_enable)(struct iio_backend *back);
int (*data_stream_disable)(struct iio_backend *back);
int (*data_transfer_addr)(struct iio_backend *back, u32 address);
};

/**
Expand Down Expand Up @@ -164,6 +176,11 @@ int iio_backend_data_sample_trigger(struct iio_backend *back,
int devm_iio_backend_request_buffer(struct device *dev,
struct iio_backend *back,
struct iio_dev *indio_dev);
int iio_backend_ddr_enable(struct iio_backend *back);
int iio_backend_ddr_disable(struct iio_backend *back);
int iio_backend_data_stream_enable(struct iio_backend *back);
int iio_backend_data_stream_disable(struct iio_backend *back);
int iio_backend_data_transfer_addr(struct iio_backend *back, u32 address);
ssize_t iio_backend_ext_info_set(struct iio_dev *indio_dev, uintptr_t private,
const struct iio_chan_spec *chan,
const char *buf, size_t len);
Expand Down

0 comments on commit d3eeb1a

Please sign in to comment.