如何在我的 iio_info 结构中添加 write_raw 函数
How to add write_raw function in my iio_info structure
我正在使用 iio 框架编写驱动程序。到目前为止一切顺利。所有输入和 sysfs 条目都运行良好,测量值也很好。 (它有很好的记录并且很容易)。但我需要一个小扩展才能在其中一个频道上写作。当我在 iio_info 中添加函数时,编译器向我发出错误消息:
drivers/iio/adc/iio-ccuss.c:197:15: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.write_raw = ccuss_iio_write_raw,
^~~~~~~~~~~~~~~~~~~
这对我来说很奇怪。我什至不敢相信我在这里无耻地问这个,但我非常沮丧。我为此损失了将近半天的时间。
我的结构是:
static const struct iio_info ccuss_iio_info = {
.driver_module = THIS_MODULE,
.attrs = &ccuss_iio_attribute_group,
.read_raw = ccuss_iio_read_raw,
.write_raw = ccuss_iio_write_raw,
};
我的频道类型是 IIO_VOLTAGE、IIO_TEMP 和 IIO_HUMIDITYRELATIVE。
我开始考虑将其作为设备属性:-( 如果我在接下来的 12 小时内没有收到答复。
更新:
根据 Murphy 的评论,只是为了更显眼。
static int ccuss_iio_write_raw(struct iio_dev *iio,
struct iio_chan_spec const *channel, int *val1,
int *val2, long mask);
P.S。我不想以最知名的方式消除此错误。 QA(和我)会不高兴。
谢谢
根据reference,write_raw()
函数声明如下:
int (*write_raw)(
struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val,
int val2,
long mask);
您的实现声明如下:
static int ccuss_iio_write_raw(
struct iio_dev *iio,
struct iio_chan_spec const *channel,
int *val1,
int *val2,
long mask);
所以你把这两个整型参数声明为指针,但它们应该是按值传递的。我认为这是导致 "incompatible pointer type" 错误的不匹配。
我正在使用 iio 框架编写驱动程序。到目前为止一切顺利。所有输入和 sysfs 条目都运行良好,测量值也很好。 (它有很好的记录并且很容易)。但我需要一个小扩展才能在其中一个频道上写作。当我在 iio_info 中添加函数时,编译器向我发出错误消息:
drivers/iio/adc/iio-ccuss.c:197:15: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.write_raw = ccuss_iio_write_raw,
^~~~~~~~~~~~~~~~~~~
这对我来说很奇怪。我什至不敢相信我在这里无耻地问这个,但我非常沮丧。我为此损失了将近半天的时间。 我的结构是:
static const struct iio_info ccuss_iio_info = {
.driver_module = THIS_MODULE,
.attrs = &ccuss_iio_attribute_group,
.read_raw = ccuss_iio_read_raw,
.write_raw = ccuss_iio_write_raw,
};
我的频道类型是 IIO_VOLTAGE、IIO_TEMP 和 IIO_HUMIDITYRELATIVE。 我开始考虑将其作为设备属性:-( 如果我在接下来的 12 小时内没有收到答复。
更新: 根据 Murphy 的评论,只是为了更显眼。
static int ccuss_iio_write_raw(struct iio_dev *iio,
struct iio_chan_spec const *channel, int *val1,
int *val2, long mask);
P.S。我不想以最知名的方式消除此错误。 QA(和我)会不高兴。 谢谢
根据reference,write_raw()
函数声明如下:
int (*write_raw)(
struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val,
int val2,
long mask);
您的实现声明如下:
static int ccuss_iio_write_raw(
struct iio_dev *iio,
struct iio_chan_spec const *channel,
int *val1,
int *val2,
long mask);
所以你把这两个整型参数声明为指针,但它们应该是按值传递的。我认为这是导致 "incompatible pointer type" 错误的不匹配。