Hi,
I am running the no-OS AD9361 driver on Linux.
It looks like ad9361_init is initialising the axi_adc_init but I would have to initialise the axi_dac_init manually, fair enough, I'm doing something like this:
module_initialize_ad9361() { int32_t ret = ad9361_init(&ad9361_phy, init_param); axi_dac_init(&ad9361_phy->tx_dac, &tx_dac_init); axi_dac_set_datasel(ad9361_phy->tx_dac, -1, AXI_DAC_DATA_SEL_DMA); }
Given that I want to switch between TDD and FDD, I also created a function to remove the allocated memory, hence I'm able to call module_initialize_ad9361 again, passing a modified version of init_param struct:
module_remove_ad9361() { axi_dac_remove(&ad9361_phy->tx_dac); int32_t ret = ad9361_remove(ad9361_phy); }
However, this doesn't work on 1RX1TX mode(but it works on 2RX2TX), I have to initialize the axi_dac only once and not remove it anymore:
module_initialize_ad9361() {
static bool once{false};
int32_t ret = ad9361_init(&ad9361_phy, init_param);
if(!once) {
axi_dac_init(&ad9361_phy->tx_dac, &tx_dac_init);
axi_dac_set_datasel(ad9361_phy->tx_dac, -1, AXI_DAC_DATA_SEL_DMA);
once=true;
}
}
module_remove_ad9361() {
int32_t ret = ad9361_remove(ad9361_phy);
}
is this the expected way to modify the AD9361_InitParam struct?
On the other hand, as I already mentioned, the ad9361_init will initialise the axi_adc_init:
ad9361_init --> axi_adc_init --> axi_adc_init_begin --> malloc(axi_adc)
However, I am not able to find where the axi_adc struct is freed, could you tell me where that allocated memory is released?
Thanks
Indentation
[edited by: JFelipe at 5:18 PM (GMT -5) on 15 Dec 2022]