how to describe a peripheral with power enable pin


Rafael Dias
 

Hi!
I'm starting with ZephyrProject and I'm playing with the development kit slstk3401a.

After implementing a very basic blinky app, I decided to use the si7021 sensor present at the board. I wrote an .overlay file with the definition of an I2C bus that is connected to the sensor but I'd like  also to define the GPIO that enables/disables the sensor operation. Bellow I share the circuit connection:

slstk3401a_tempsensor.png
And here is my overlay:

/ {
};

&i2c0 {
        status = "okay";
        si7021@40{
                compatible = "silabs,si7006";
                reg = <0x40>;
                label = "Si7021";
                status = "okay";
        };
};

Well, I don't know how to define the SENSOR_ENABLE pin at device three. I tried everything:
  • include a section called "resources":
/ {
resources {
power_en {
status = "okay";
compatible = "gpio-leds";
Si7021_power: Si7021_pwd0 {
gpios = <&gpiod 9 0>;
label = "Si7021_pwr";
};
};
};
};

  • include the section "resources" without "power_en":
/ {
resources {
status = "okay";
compatible = "gpio-leds";
Si7021_power: Si7021_pwd0 {
gpios = <&gpiod 9 0>;
label = "Si7021_pwr";
};
};
};

With these nodes, my firmware compiles, but when I call the function device_get_binding , I get a NULL return.

I solved this by the following code:
	const struct device* gpiod = device_get_binding( DT_LABEL( DT_NODELABEL( gpiod ) ) );
if (NULL == gpiod )
{
printf( "Could not get gpiod port\n" );
return;
} rc = gpio_pin_configure(gpiod, 9, GPIO_OUTPUT_ACTIVE | GPIO_OUTPUT_INIT_HIGH );
if (rc < 0) {
printk("Failed to configure gpio pin\n");
return;
}

I don't know, but I think that it isn't the beautiful way to do this.

Does anyone have advice on how to do this?

best regards,

--
Rafael Dias Menezes
tel.:
+436507008854

Join devel@lists.zephyrproject.org to automatically receive all group messages.