Ligações DT para o sensor ADT7516

1

Eu tenho uma placa de avaliação BeagleBone verde e ADT7516 conectada com pinos SDA e SCL.

Quando faço i2cdetect -y -r 2, consigo ver o endereço i2c como 0x4b e sou capaz de sondar o driver adt7316 presente no subsistema IIO.

O driver adt7316 usa dados da plataforma para obter a descrição do hardware. Mas meu objetivo é remover dados de plataforma e usar ligações de DT.

Eu entendo algumas coisas básicas sobre as ligações do DT, como ...

  1. Compatível
  2. reg

Mas quando olho de perto para o motorista, vejo que há certas coisas que são retiradas dos dados da plataforma e são usadas em todo o driver.

Então, minha pergunta é como substituir essas coisas no driver, se eu remover os dados da plataforma e usar ligações DT.

Estou colocando o código da função de teste aqui.

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);

Assim, no código, podemos ver que chip- > ldac_pin e chip- > bus.irq_flags dados da plataforma. Se eu usar ligações DT, os dados da plataforma terão um valor NULL.

Então, como eu desenho minhas ligações DT aqui e como posso buscar esses dados no driver?

Eu tenho visto muitos exemplos de ligações DT, mas eu preciso de ajuda específica com o sensor adt7516.

Ficha técnica do sensor adt7516

link

    
por Shreeya Patel 10.09.2018 / 20:05

0 respostas