no-OS
Loading...
Searching...
No Matches
adgm3121.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef ADGM3121_H_
34#define ADGM3121_H_
35
36#include <stdint.h>
37#include <stdbool.h>
38#include "no_os_spi.h"
39#include "no_os_gpio.h"
40#include "no_os_util.h"
41
42/* ADGM3121 Register Addresses */
43#define ADGM3121_REG_SWITCH_DATA 0x20
44
45/* ADGM3121 Register Bits */
46#define ADGM3121_SW1_EN NO_OS_BIT(0)
47#define ADGM3121_SW2_EN NO_OS_BIT(1)
48#define ADGM3121_SW3_EN NO_OS_BIT(2)
49#define ADGM3121_SW4_EN NO_OS_BIT(3)
50#define ADGM3121_INTERNAL_ERROR NO_OS_GENMASK(7, 6)
51#define ADGM3121_RESERVED NO_OS_GENMASK(5, 4)
52
53/* SPI Command Format */
54#define ADGM3121_SPI_READ NO_OS_BIT(15)
55#define ADGM3121_SPI_WRITE 0
56#define ADGM3121_SPI_ADDR_MSK NO_OS_GENMASK(14, 8)
57#define ADGM3121_SPI_DAISY_CHAIN_CMD 0x2500
58
59/* Default timeout values */
60#define ADGM3121_SWITCHING_TIME_US 200
61#define ADGM3121_POWER_UP_TIME_MS 45
62#define ADGM3053_POWER_UP_TIME_MS 5
63
72
78 ADGM3121_SW1, /* ADGM3121: RF1A-RFCA, ADGM3053: S1-D1 */
79 ADGM3121_SW2, /* ADGM3121: RF2A-RFCA, ADGM3053: S2-D2 */
80 ADGM3121_SW3, /* ADGM3121: RF2B-RFCB, ADGM3053: S3-D3 */
81 ADGM3121_SW4, /* ADGM3121: RF1B-RFCB, ADGM3053: S4-D4 */
82};
83
92
98 ADGM3121_MODE_PARALLEL, /* GPIO parallel control mode */
99 ADGM3121_MODE_SPI, /* SPI control mode */
100};
101
107 /* SPI descriptor */
109 /* GPIO descriptors for parallel mode */
114 /* PIN/SPI mode select GPIO */
116 /* Device type */
118 /* Control mode */
120 /* Current switch states cache */
122 /* SPI daisy chain mode */
124};
125
131 /* SPI initialization parameters */
133 /* GPIO initialization parameters for parallel mode */
138 /* PIN/SPI mode select GPIO */
140 /* Device type */
142 /* Control mode */
144};
145
146/* Function prototypes */
147
148/* Initialize the device */
151
152/* Free resources allocated by adgm3121_init() */
153int adgm3121_remove(struct adgm3121_dev *dev);
154
155/* Set the state of a specific switch */
157 enum adgm3121_switch sw,
158 enum adgm3121_state state);
159
160/* Get the current state of a specific switch */
162 enum adgm3121_switch sw,
163 enum adgm3121_state *state);
164
165/* Set multiple switches at once using bitmask */
166int adgm3121_set_switches(struct adgm3121_dev *dev, uint8_t switch_mask);
167
168/* Get all switch states as bitmask */
169int adgm3121_get_switches(struct adgm3121_dev *dev, uint8_t *switch_mask);
170
171/* Reset all switches to off state */
173
174/* Enter SPI daisy chain mode */
176
177/* Check for internal errors */
179 uint8_t *error_status);
180
181/* Write to device register (SPI mode only) */
182int adgm3121_write_register(struct adgm3121_dev *dev, uint8_t reg_addr,
183 uint8_t data);
184
185/* Read from device register (SPI mode only) */
186int adgm3121_read_register(struct adgm3121_dev *dev, uint8_t reg_addr,
187 uint8_t *data);
188
189#endif /* ADGM3121_H_ */
struct ad7616_init_param init_param
Definition ad7616_sdz.c:109
adgm3121_mode
Control mode enumeration.
Definition adgm3121.h:97
@ ADGM3121_MODE_PARALLEL
Definition adgm3121.h:98
@ ADGM3121_MODE_SPI
Definition adgm3121.h:99
int adgm3121_get_switch_state(struct adgm3121_dev *dev, enum adgm3121_switch sw, enum adgm3121_state *state)
Get the current state of a specific switch.
Definition adgm3121.c:275
int adgm3121_remove(struct adgm3121_dev *dev)
Free resources allocated by adgm3121_init()
Definition adgm3121.c:554
int adgm3121_reset_switches(struct adgm3121_dev *dev)
Reset all switches to off state.
Definition adgm3121.c:372
int adgm3121_enter_daisy_chain_mode(struct adgm3121_dev *dev)
Enter SPI daisy chain mode.
Definition adgm3121.c:382
int adgm3121_init(struct adgm3121_dev **device, struct adgm3121_init_param *init_param)
Initialize the device.
Definition adgm3121.c:435
int adgm3121_read_register(struct adgm3121_dev *dev, uint8_t reg_addr, uint8_t *data)
Read from device register via SPI.
Definition adgm3121.c:80
adgm3121_state
Switch state enumeration.
Definition adgm3121.h:88
@ ADGM3121_ENABLE
Definition adgm3121.h:90
@ ADGM3121_DISABLE
Definition adgm3121.h:89
int adgm3121_set_switch_state(struct adgm3121_dev *dev, enum adgm3121_switch sw, enum adgm3121_state state)
Set the state of a specific switch.
Definition adgm3121.c:255
int adgm3121_set_switches(struct adgm3121_dev *dev, uint8_t switch_mask)
Set multiple switches at once using bitmask.
Definition adgm3121.c:294
int adgm3121_write_register(struct adgm3121_dev *dev, uint8_t reg_addr, uint8_t data)
Write to device register via SPI.
Definition adgm3121.c:48
adgm3121_switch
Switch enumeration (valid for both devices)
Definition adgm3121.h:77
@ ADGM3121_SW3
Definition adgm3121.h:80
@ ADGM3121_SW4
Definition adgm3121.h:81
@ ADGM3121_SW2
Definition adgm3121.h:79
@ ADGM3121_SW1
Definition adgm3121.h:78
int adgm3121_check_internal_error(struct adgm3121_dev *dev, uint8_t *error_status)
Check for internal errors.
Definition adgm3121.c:411
int adgm3121_get_switches(struct adgm3121_dev *dev, uint8_t *switch_mask)
Get all switch states as bitmask.
Definition adgm3121.c:334
adgm3121_type
Device type enumeration.
Definition adgm3121.h:68
@ ID_ADGM3053
Definition adgm3121.h:70
@ ID_ADGM3121
Definition adgm3121.h:69
Header file of GPIO Interface.
Header file of SPI Interface.
Header file of utility functions.
Device structure.
Definition adgm3121.h:106
struct no_os_gpio_desc * gpio_pin_spi
Definition adgm3121.h:115
enum adgm3121_type type
Definition adgm3121.h:117
struct no_os_gpio_desc * gpio_in1
Definition adgm3121.h:110
struct no_os_gpio_desc * gpio_in4
Definition adgm3121.h:113
struct no_os_gpio_desc * gpio_in3
Definition adgm3121.h:112
uint8_t switch_states
Definition adgm3121.h:121
struct no_os_spi_desc * spi_desc
Definition adgm3121.h:108
bool daisy_chain_mode
Definition adgm3121.h:123
enum adgm3121_mode mode
Definition adgm3121.h:119
struct no_os_gpio_desc * gpio_in2
Definition adgm3121.h:111
Initialization parameters.
Definition adgm3121.h:130
struct no_os_gpio_init_param gpio_in4
Definition adgm3121.h:137
struct no_os_gpio_init_param gpio_in2
Definition adgm3121.h:135
struct no_os_gpio_init_param gpio_in1
Definition adgm3121.h:134
struct no_os_gpio_init_param gpio_in3
Definition adgm3121.h:136
enum adgm3121_mode mode
Definition adgm3121.h:143
enum adgm3121_type type
Definition adgm3121.h:141
struct no_os_spi_init_param spi_init
Definition adgm3121.h:132
struct no_os_gpio_init_param gpio_pin_spi
Definition adgm3121.h:139
Definition ad9361_util.h:63
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128