nrf9160 TCA6416

Hi,

I'm stuck with setting up device tree section about the TCA6416 and the associated C code.

the TCA6416 is connected to nrf9160 gpio P0.28 as interrupt active low.

I want to set up pin 2 as output and pin 3 as input (specifically as an interrupt) I would have other pins as interrupt also.

1- would there be a callback per pin or a single callback for all interupt pins (with a switch case) ?

here where I am, and got errors when building

device tree:

&i2c2 {
    compatible = "nordic,nrf-twim";
    status = "okay";
    clock-frequency = <I2C_BITRATE_FAST>;

    pinctrl-0 = <&i2c2_default>;
    pinctrl-1 = <&i2c2_sleep>;
    pinctrl-names = "default", "sleep";

    tca6416: tca6416@20 {
        compatible = "ti,tca6416";
        reg = <0x20>; // I2C address of the TCA6416
        #gpio-cells = <2>; // Number of cells for GPIO
        gpio-controller;
        label = "TCA6416";
        reg = <0x20>;
        #address-cells = <1>;
        #size-cells = <0>;
        signal_enable: signal-enable {
            gpio-controller;
            #gpio-cells = <2>;
            gpio-pin = <2 0>; /* Output */
        };
        signal_detect: signal-detect {
            gpio-controller;
            #gpio-cells = <2>;
            gpio-pin = <3 1>; /* Input */
        };
    };
};

C code:

/* Define the device tree node for the TCA6416 */
#define TCA6416_NAME "TCA6416"

// Define the pin numbers for TAMPER_REARM and TAMPER_DETECT
// #define SIGNAL_ENABLE_PIN 2
// #define SIGNAL_DETECT_PIN 3

#define TCA6416_NODE DT_NODELABEL(tca6416)

#define SIGNAL_ENABLE_PIN DT_GPIO_PIN(TCA6416_NODE, signal_rearm_gpios)
#define SIGNAL_DETECT_PIN DT_GPIO_PIN(TCA6416_NODE, signal_detect_gpios)

void tca6416_init(void)
{
    /* Get the GPIO device for the TCA6416 */
    struct device *gpio_expander_dev = device_get_binding(TCA6416_NAME);

    if (!gpio_expander_dev) {
        printk("Failed to get GPIO device\n");
        return;
    }
    gpio_pin_configure(gpio_expander_dev, SIGNAL_ENABLE_PIN , GPIO_OUTPUT_ACTIVE);
    gpio_pin_configure(gpio_expander_dev, SIGNAL_DETECT_PIN , GPIO_INPUT);

}

much appreciate any help.

Related