Commit 2256f37e authored by Nuno Sa's avatar Nuno Sa Committed by Jonathan Cameron

iio: backend: introduce struct iio_backend_info

Instead of only passing the backend ops when calling
devm_iio_backend_register(), pass an info like structure that will
contains the ops and additional information. Fow now, the backend name
is being added as that will be used by the debugFS interface introduced
in a later patch.

It also opens the door for further customizations passed by backends.

All users of devm_iio_backend_register() were updated accordingly.
Signed-off-by: default avatarNuno Sa <nuno.sa@analog.com>
Link: https://patch.msgid.link/20240802-dev-iio-backend-add-debugfs-v2-1-4cb62852f0d0@analog.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 958000df
......@@ -273,7 +273,7 @@ static const struct regmap_config axi_adc_regmap_config = {
.reg_stride = 4,
};
static const struct iio_backend_ops adi_axi_adc_generic = {
static const struct iio_backend_ops adi_axi_adc_ops = {
.enable = axi_adc_enable,
.disable = axi_adc_disable,
.data_format_set = axi_adc_data_format_set,
......@@ -287,6 +287,11 @@ static const struct iio_backend_ops adi_axi_adc_generic = {
.chan_status = axi_adc_chan_status,
};
static const struct iio_backend_info adi_axi_adc_generic = {
.name = "axi-adc",
.ops = &adi_axi_adc_ops,
};
static int adi_axi_adc_probe(struct platform_device *pdev)
{
const unsigned int *expected_ver;
......
......@@ -507,7 +507,7 @@ static int axi_dac_set_sample_rate(struct iio_backend *back, unsigned int chan,
return 0;
}
static const struct iio_backend_ops axi_dac_generic = {
static const struct iio_backend_ops axi_dac_generic_ops = {
.enable = axi_dac_enable,
.disable = axi_dac_disable,
.request_buffer = axi_dac_request_buffer,
......@@ -519,6 +519,11 @@ static const struct iio_backend_ops axi_dac_generic = {
.set_sample_rate = axi_dac_set_sample_rate,
};
static const struct iio_backend_info axi_dac_generic = {
.name = "axi-dac",
.ops = &axi_dac_generic_ops,
};
static const struct regmap_config axi_dac_regmap_config = {
.val_bits = 32,
.reg_bits = 32,
......
......@@ -641,20 +641,20 @@ static void iio_backend_unregister(void *arg)
/**
* devm_iio_backend_register - Device managed backend device register
* @dev: Backend device being registered
* @ops: Backend ops
* @info: Backend info
* @priv: Device private data
*
* @ops is mandatory. Not providing it results in -EINVAL.
* @info is mandatory. Not providing it results in -EINVAL.
*
* RETURNS:
* 0 on success, negative error number on failure.
*/
int devm_iio_backend_register(struct device *dev,
const struct iio_backend_ops *ops, void *priv)
const struct iio_backend_info *info, void *priv)
{
struct iio_backend *back;
if (!ops)
if (!info || !info->ops)
return dev_err_probe(dev, -EINVAL, "No backend ops given\n");
/*
......@@ -667,7 +667,7 @@ int devm_iio_backend_register(struct device *dev,
if (!back)
return -ENOMEM;
back->ops = ops;
back->ops = info->ops;
back->owner = dev->driver->owner;
back->dev = dev;
back->priv = priv;
......
......@@ -115,6 +115,16 @@ struct iio_backend_ops {
const struct iio_chan_spec *chan, char *buf);
};
/**
* struct iio_backend_info - info structure for an iio_backend
* @name: Backend name.
* @ops: Backend operations.
*/
struct iio_backend_info {
const char *name;
const struct iio_backend_ops *ops;
};
int iio_backend_chan_enable(struct iio_backend *back, unsigned int chan);
int iio_backend_chan_disable(struct iio_backend *back, unsigned int chan);
int devm_iio_backend_enable(struct device *dev, struct iio_backend *back);
......@@ -151,6 +161,6 @@ __devm_iio_backend_get_from_fwnode_lookup(struct device *dev,
struct fwnode_handle *fwnode);
int devm_iio_backend_register(struct device *dev,
const struct iio_backend_ops *ops, void *priv);
const struct iio_backend_info *info, void *priv);
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment