no-OS
Loading...
Searching...
No Matches
iio_adar300x.c File Reference

Implementation of the ADAR300X IIO driver. More...

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include "iio_adar300x.h"
#include "no_os_alloc.h"
#include "no_os_util.h"
Include dependency graph for iio_adar300x.c:

Macros

#define ADAR300X_IIO_BEAMSTATE_CHANNELS
 
#define ADAR300X_IIO_BEAM_SCAN_MSK(beam)
 
#define ADAR300X_IIO_DELAY_SCALE_NUM   865
 
#define ADAR300X_IIO_DELAY_SCALE_DEN   1000
 
#define ADAR300X_IIO_ATTEN_SCALE_NUM   1
 
#define ADAR300X_IIO_ATTEN_SCALE_DEN   2
 
#define ADAR300X_IIO_AMP_PRIV(element, state, idx)
 
#define ADAR300X_IIO_AMP_IS_ELEMENT(priv)
 
#define ADAR300X_IIO_AMP_STATE(priv)
 
#define ADAR300X_IIO_AMP_INDEX(priv)
 
#define ADAR300X_IIO_VALUE_CH(_type, _beam, _el, _param)
 
#define ADAR300X_IIO_ELEMENT_CHS(_beam, _el)
 
#define ADAR300X_IIO_BEAM_CHS(_beam)
 
#define ADAR300X_IIO_BEAM_ATTR(_beam, _suffix, _show, _store)
 
#define ADAR300X_IIO_BEAM_ATTRS(_beam)
 
#define ADAR300X_IIO_AMP_ATTR(_bank, _idx, _field, _state_name, _el, _state)
 
#define ADAR300X_IIO_AMP_ATTRS(_bank, _idx, _state_name, _el, _state)
 
#define ADAR300X_IIO_BEAM_AMP_ATTRS(_beam)
 
#define ADAR300X_IIO_ELEMENT_AMP_ATTRS(_el)
 

Functions

int adar300x_iio_init (struct adar300x_iio_dev **iio_dev, struct adar300x_iio_dev_init_param *init_param)
 Initializes the ADAR300X IIO device.
 
int adar300x_iio_remove (struct adar300x_iio_dev *desc)
 Frees the resources allocated by adar300x_iio_init().
 

Detailed Description

Implementation of the ADAR300X IIO driver.

Author
Stefan Popa (stefa.nosp@m.n.po.nosp@m.pa@an.nosp@m.alog.nosp@m..com)

Copyright 2026(c) Analog Devices, Inc.

SPDX-License-Identifier: BSD-3-Clause

Macro Definition Documentation

◆ ADAR300X_IIO_AMP_ATTR

#define ADAR300X_IIO_AMP_ATTR ( _bank,
_idx,
_field,
_state_name,
_el,
_state )
Value:
{ \
.name = #_bank #_idx "_amp_" #_field "_" _state_name, \
.priv = ADAR300X_IIO_AMP_PRIV(_el, _state, _idx), \
.show = adar300x_iio_show_amp_##_field, \
.store = adar300x_iio_store_amp_##_field, \
}
#define ADAR300X_IIO_AMP_PRIV(element, state, idx)
Definition iio_adar300x.c:31

◆ ADAR300X_IIO_AMP_ATTRS

#define ADAR300X_IIO_AMP_ATTRS ( _bank,
_idx,
_state_name,
_el,
_state )
Value:
ADAR300X_IIO_AMP_ATTR(_bank, _idx, bias, _state_name, _el, _state), \
ADAR300X_IIO_AMP_ATTR(_bank, _idx, en, _state_name, _el, _state)
#define ADAR300X_IIO_AMP_ATTR(_bank, _idx, _field, _state_name, _el, _state)
Definition iio_adar300x.c:879

◆ ADAR300X_IIO_AMP_INDEX

#define ADAR300X_IIO_AMP_INDEX ( priv)
Value:
((priv) & 0xF)

◆ ADAR300X_IIO_AMP_IS_ELEMENT

#define ADAR300X_IIO_AMP_IS_ELEMENT ( priv)
Value:
((priv) >> 8)

◆ ADAR300X_IIO_AMP_PRIV

#define ADAR300X_IIO_AMP_PRIV ( element,
state,
idx )
Value:
((element) << 8 | (state) << 4 | (idx))

◆ ADAR300X_IIO_AMP_STATE

#define ADAR300X_IIO_AMP_STATE ( priv)
Value:
(((priv) >> 4) & 0xF)

◆ ADAR300X_IIO_ATTEN_SCALE_DEN

#define ADAR300X_IIO_ATTEN_SCALE_DEN   2

◆ ADAR300X_IIO_ATTEN_SCALE_NUM

#define ADAR300X_IIO_ATTEN_SCALE_NUM   1

◆ ADAR300X_IIO_BEAM_AMP_ATTRS

#define ADAR300X_IIO_BEAM_AMP_ATTRS ( _beam)
Value:
ADAR300X_IIO_AMP_ATTRS(beam, _beam, "reset", 0, \
ADAR300X_IIO_AMP_ATTRS(beam, _beam, "operational", 0, \
ADAR300X_IIO_AMP_ATTRS(beam, _beam, "mute", 0, \
ADAR300X_IIO_AMP_ATTRS(beam, _beam, "sleep", 0, \
@ ADAR300X_BEAM_AMP_SLEEP
Definition adar300x.h:259
@ ADAR300X_BEAM_AMP_MUTE
Definition adar300x.h:258
@ ADAR300X_BEAM_AMP_RESET
Definition adar300x.h:256
@ ADAR300X_BEAM_AMP_OPERATIONAL
Definition adar300x.h:257
#define ADAR300X_IIO_AMP_ATTRS(_bank, _idx, _state_name, _el, _state)
Definition iio_adar300x.c:886

◆ ADAR300X_IIO_BEAM_ATTR

#define ADAR300X_IIO_BEAM_ATTR ( _beam,
_suffix,
_show,
_store )
Value:
{ \
.name = "beam" #_beam "_" _suffix, \
.priv = _beam, \
.show = _show, \
.store = _store, \
}

◆ ADAR300X_IIO_BEAM_ATTRS

#define ADAR300X_IIO_BEAM_ATTRS ( _beam)
Value:
ADAR300X_IIO_BEAM_ATTR(_beam, "mode", adar300x_iio_show_mode, \
adar300x_iio_store_mode), \
ADAR300X_IIO_BEAM_ATTR(_beam, "mode_available", \
adar300x_iio_show_modes, NULL), \
ADAR300X_IIO_BEAM_ATTR(_beam, "update", \
adar300x_iio_show_update, \
adar300x_iio_store_update), \
ADAR300X_IIO_BEAM_ATTR(_beam, "load_mode", \
adar300x_iio_show_load_mode, \
adar300x_iio_store_load_mode), \
ADAR300X_IIO_BEAM_ATTR(_beam, "load_mode_available", \
adar300x_iio_show_modes, NULL), \
ADAR300X_IIO_BEAM_ATTR(_beam, "ram_index", \
adar300x_iio_show_ram_index, \
adar300x_iio_store_ram_index), \
ADAR300X_IIO_BEAM_ATTR(_beam, "ram_start", \
adar300x_iio_show_ram_start, \
adar300x_iio_store_ram_start), \
ADAR300X_IIO_BEAM_ATTR(_beam, "ram_stop", \
adar300x_iio_show_ram_stop, \
adar300x_iio_store_ram_stop), \
ADAR300X_IIO_BEAM_ATTR(_beam, "fifo_rd", \
adar300x_iio_show_fifo_rd, NULL), \
ADAR300X_IIO_BEAM_ATTR(_beam, "fifo_wr", \
adar300x_iio_show_fifo_wr, NULL)
#define ADAR300X_IIO_BEAM_ATTR(_beam, _suffix, _show, _store)
Definition iio_adar300x.c:845
#define NULL
Definition wrapper.h:67

◆ ADAR300X_IIO_BEAM_CHS

#define ADAR300X_IIO_BEAM_CHS ( _beam)
Value:
ADAR300X_IIO_ELEMENT_CHS(_beam, 1), \
ADAR300X_IIO_ELEMENT_CHS(_beam, 2), \
ADAR300X_IIO_ELEMENT_CHS(_beam, 3)
#define ADAR300X_IIO_ELEMENT_CHS(_beam, _el)
Definition iio_adar300x.c:821

◆ ADAR300X_IIO_BEAM_SCAN_MSK

#define ADAR300X_IIO_BEAM_SCAN_MSK ( beam)
Value:
(NO_OS_GENMASK(7, 0) << \
#define ADAR300X_UNPACKED_BEAMSTATE_LEN
Definition adar300x.h:132
#define NO_OS_GENMASK(h, l)
Definition no_os_util.h:60

◆ ADAR300X_IIO_BEAMSTATE_CHANNELS

#define ADAR300X_IIO_BEAMSTATE_CHANNELS
Value:
#define ADAR300X_IIO_BEAMS
Definition iio_adar300x.h:17

◆ ADAR300X_IIO_DELAY_SCALE_DEN

#define ADAR300X_IIO_DELAY_SCALE_DEN   1000

◆ ADAR300X_IIO_DELAY_SCALE_NUM

#define ADAR300X_IIO_DELAY_SCALE_NUM   865

◆ ADAR300X_IIO_ELEMENT_AMP_ATTRS

#define ADAR300X_IIO_ELEMENT_AMP_ATTRS ( _el)
Value:
ADAR300X_IIO_AMP_ATTRS(element, _el, "operational", 1, \
ADAR300X_IIO_AMP_ATTRS(element, _el, "sleep", 1, \
@ ADAR300X_ELEMENT_AMP_OPERATIONAL
Definition adar300x.h:274
@ ADAR300X_ELEMENT_AMP_SLEEP
Definition adar300x.h:275

◆ ADAR300X_IIO_ELEMENT_CHS

#define ADAR300X_IIO_ELEMENT_CHS ( _beam,
_el )
Value:
ADAR300X_IIO_VALUE_CH(IIO_POWER, _beam, _el, ADAR300X_ATTENUATION)
@ ADAR300X_ATTENUATION
Definition adar300x.h:303
@ ADAR300X_DELAY
Definition adar300x.h:301
#define ADAR300X_IIO_VALUE_CH(_type, _beam, _el, _param)
Definition iio_adar300x.c:808
@ IIO_POWER
Definition iio_types.h:50
@ IIO_PHASE
Definition iio_types.h:51

◆ ADAR300X_IIO_VALUE_CH

#define ADAR300X_IIO_VALUE_CH ( _type,
_beam,
_el,
_param )
Value:
{ \
.ch_type = _type, \
.channel = (_beam) * ADAR300X_ELEMENTS_PER_BEAM + (_el), \
.address = (_beam) * ADAR300X_UNPACKED_BEAMSTATE_LEN + \
(_el) * 2 + (_param), \
.scan_index = (_beam) * ADAR300X_UNPACKED_BEAMSTATE_LEN + \
(_el) * 2 + (_param), \
.scan_type = &adar300x_iio_scan_type, \
.attributes = adar300x_iio_beamstate_attrs, \
.ch_out = true, \
.indexed = true, \
}
#define ADAR300X_ELEMENTS_PER_BEAM
Definition adar300x.h:86

Function Documentation

◆ adar300x_iio_init()

int adar300x_iio_init ( struct adar300x_iio_dev ** iio_dev,
struct adar300x_iio_dev_init_param * init_param )

Initializes the ADAR300X IIO device.

Parameters
iio_dev- The IIO device descriptor.
init_param- The initialization parameters.
Returns
- 0 in case of success or negative error code otherwise.

◆ adar300x_iio_remove()

int adar300x_iio_remove ( struct adar300x_iio_dev * desc)

Frees the resources allocated by adar300x_iio_init().

Parameters
desc- The IIO device descriptor.
Returns
- 0 in case of success or negative error code otherwise.