Hi,
I have the structure for a Vesper VM3011 MEMS microphone:
struct vm3011_config { const struct device *i2c_dev; uint16_t i2c_address; gpio_pin_t data_pin; gpio_pin_t clk_pin; bool lr_pin_level; #if defined(CONFIG_VM3011_INT) const char *gpio_port; gpio_pin_t dout_pin; gpio_dt_flags_t dout_flags; #endif };
In the 'overlay' file, I define it as hardware:
&i2c1 { clock-frequency = <I2C_BITRATE_FAST>; vm3011: vm3011@60 { compatible = "i2c-device"; label = "VM3011"; reg = <0x60>; clk-pin = <41>; data-pin = <27>; dout-gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; }; }; / { chosen { zephyr,console = &cdc_acm_uart0; zephyr,shell-uart = &cdc_acm_uart0; nordic,pm-ext-flash = &mx25r64; }; aliases { mic0 = &i2c1; }; };
When I retrieve the properties from the '.c' file in this way:
static const struct vm3011_config vm3011_cfg = { .i2c_dev = DEVICE_DT_GET(DT_ALIAS(mic0)), .i2c_address = DT_INST_REG_ADDR(0), .data_pin = DT_INST_PROP(0, data_pin), .clk_pin = DT_INST_PROP(0, clk_pin), .lr_pin_level = DT_INST_PROP(0, lr_select), #if defined(CONFIG_VM3011_INT) //.gpio_port = DT_INST_GPIO_LABEL(0, dout_gpios), .dout_pin = DT_INST_GPIO_PIN(0, dout_gpios), .dout_flags = DT_INST_GPIO_FLAGS(0, dout_gpios), #endif };
I encounter several compilation errors, so I have to retrieve them like this:
static const struct vm3011_config vm3011_cfg = { .i2c_dev = DEVICE_DT_GET(DT_ALIAS(mic0)), .i2c_address = (uint16_t)DT_REG_ADDR(DT_ALIAS(mic0)), .data_pin = 27, .clk_pin = 41, .lr_pin_level = true, #if defined(CONFIG_VM3011_INT) .gpio_port = "gpio0", .dout_pin = 25, .dout_flags = GPIO_ACTIVE_HIGH, #endif };
This compiles, but I don't like hardcoding values in such an absolute way.
I believe these are Zephyr deprecations, but I cannot find relevant documentation.
Can you help me understand what's going on?
sdk 2.6.1 toolchain 2.7.0
Thank you.
BABOS