ADT7516 传感器的 DT 绑定

ADT7516 传感器的 DT 绑定

我有一个 BeagleBone 绿色和 ADT7516 的评估板,与 SDA 和 SCL 引脚连接。

当我执行 i2cdetect -y -r 2 时,我可以看到 i2c 地址为 0x4b,并且我能够探测 IIO 子系统中存在的 adt7316 驱动程序。

adt7316驱动程序使用平台数据来获取硬件描述。但我的目标是删除平台数据并使用 DT 绑定。

我了解有关 DT 绑定的一些基本知识,例如......

  1. 兼容的
  2. 注册

但是当我仔细查看驱动程序时,我可以看到有些东西是从平台数据中获取并在整个驱动程序中使用的。

所以我的问题是,如果我删除平台数据并使用 DT 绑定,如何替换驱动程序中的这些内容。

我将探测函数的代码放在这里。

int adt7316_probe(struct device *dev, struct adt7316_bus *bus,
    const char *name)
{
struct adt7316_chip_info *chip;
struct iio_dev *indio_dev;
unsigned short *adt7316_platform_data = dev->platform_data;
int ret = 0;

indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
if (!indio_dev)
    return -ENOMEM;
chip = iio_priv(indio_dev);
/* this is only used for device removal purposes */
dev_set_drvdata(dev, indio_dev);

chip->bus = *bus;

if (name[4] == '3')
    chip->id = ID_ADT7316 + (name[6] - '6');
else if (name[4] == '5')
    chip->id = ID_ADT7516 + (name[6] - '6');
else
    return -ENODEV;

chip->ldac_pin = adt7316_platform_data[1];
if (chip->ldac_pin) {
    chip->config3 |= ADT7316_DA_EN_VIA_DAC_LDCA;
    if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
        chip->config1 |= ADT7516_SEL_AIN3;
}
chip->int_mask = ADT7316_TEMP_INT_MASK | ADT7316_VDD_INT_MASK;
if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
    chip->int_mask |= ADT7516_AIN_INT_MASK;

indio_dev->dev.parent = dev;
if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
    indio_dev->info = &adt7516_info;
else
    indio_dev->info = &adt7316_info;
indio_dev->name = name;
indio_dev->modes = INDIO_DIRECT_MODE;

if (chip->bus.irq > 0) {
    if (adt7316_platform_data[0])
        chip->bus.irq_flags = adt7316_platform_data[0];

    ret = devm_request_threaded_irq(dev, chip->bus.irq,
                    NULL,
                    adt7316_event_handler,
                    chip->bus.irq_flags |
                    IRQF_ONESHOT,
                    indio_dev->name,
                    indio_dev);
    if (ret)
        return ret;

    if (chip->bus.irq_flags & IRQF_TRIGGER_HIGH)
        chip->config1 |= ADT7316_INT_POLARITY;
}

ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, chip->config1);
if (ret)
    return -EIO;

ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, chip->config3);
if (ret)
    return -EIO;

ret = devm_iio_device_register(dev, indio_dev);
if (ret)
    return ret;

dev_info(dev, "%s temperature sensor, ADC and DAC registered.\n",
        indio_dev->name);

return 0;
}
EXPORT_SYMBOL(adt7316_probe);

所以在代码中我们可以看到芯片->ldac_pin芯片->总线.irq_flags使用平台数据。如果我使用 DT 绑定,那么平台数据中将包含 NULL 值。

那么我该如何在这里设计我的 DT 绑定以及如何在驱动程序中获取该数据呢?

我见过许多 DT 绑定的示例,但我需要有关 adt7516 传感器的具体帮助。

adt7516传感器数据表

http://www.analog.com/media/en/technical-documentation/data-sheets/ADT7516_7517_7519.pdf

相关内容