Zephyr Project API  3.2.0
A Scalable Open Source RTOS
I3C Address-related Helper Code

I3C Address-related Helper Code. More...

Data Structures

struct  i3c_addr_slots
 Structure to keep track of addresses on I3C bus. More...
 

Macros

#define I3C_BROADCAST_ADDR   0x7E
 
#define I3C_MAX_ADDR   0x7F
 

Enumerations

enum  i3c_addr_slot_status {
  I3C_ADDR_SLOT_STATUS_FREE = 0U , I3C_ADDR_SLOT_STATUS_RSVD , I3C_ADDR_SLOT_STATUS_I3C_DEV , I3C_ADDR_SLOT_STATUS_I2C_DEV ,
  I3C_ADDR_SLOT_STATUS_MASK = 0x03U
}
 

Functions

int i3c_addr_slots_init (struct i3c_addr_slots *slots, const struct i3c_dev_list *dev_list)
 Initialize the I3C address slots struct. More...
 
void i3c_addr_slots_set (struct i3c_addr_slots *slots, uint8_t dev_addr, enum i3c_addr_slot_status status)
 Set the address status of a device. More...
 
enum i3c_addr_slot_status i3c_addr_slots_status (struct i3c_addr_slots *slots, uint8_t dev_addr)
 Get the address status of a device. More...
 
bool i3c_addr_slots_is_free (struct i3c_addr_slots *slots, uint8_t dev_addr)
 Check if the address is free. More...
 
uint8_t i3c_addr_slots_next_free_find (struct i3c_addr_slots *slots)
 Find the next free address. More...
 
static void i3c_addr_slots_mark_free (struct i3c_addr_slots *addr_slots, uint8_t addr)
 Mark the address as free (not used) in device list. More...
 
static void i3c_addr_slots_mark_rsvd (struct i3c_addr_slots *addr_slots, uint8_t addr)
 Mark the address as reserved in device list. More...
 
static void i3c_addr_slots_mark_i3c (struct i3c_addr_slots *addr_slots, uint8_t addr)
 Mark the address as I3C device in device list. More...
 
static void i3c_addr_slots_mark_i2c (struct i3c_addr_slots *addr_slots, uint8_t addr)
 Mark the address as I2C device in device list. More...
 

Detailed Description

I3C Address-related Helper Code.

Macro Definition Documentation

◆ I3C_BROADCAST_ADDR

#define I3C_BROADCAST_ADDR   0x7E

◆ I3C_MAX_ADDR

#define I3C_MAX_ADDR   0x7F

Enumeration Type Documentation

◆ i3c_addr_slot_status

#include <include/zephyr/drivers/i3c/addresses.h>

Enumerator
I3C_ADDR_SLOT_STATUS_FREE 
I3C_ADDR_SLOT_STATUS_RSVD 
I3C_ADDR_SLOT_STATUS_I3C_DEV 
I3C_ADDR_SLOT_STATUS_I2C_DEV 
I3C_ADDR_SLOT_STATUS_MASK 

Function Documentation

◆ i3c_addr_slots_init()

int i3c_addr_slots_init ( struct i3c_addr_slots slots,
const struct i3c_dev_list dev_list 
)

#include <include/zephyr/drivers/i3c/addresses.h>

Initialize the I3C address slots struct.

This clears out the assigned address bits, and set the reserved address bits according to the I3C specification.

Parameters
slotsPointer to address slots struct.
dev_listPointer to device list struct.
Return values
0if successful.
-EINVALif duplicate addresses.

◆ i3c_addr_slots_is_free()

bool i3c_addr_slots_is_free ( struct i3c_addr_slots slots,
uint8_t  dev_addr 
)

#include <include/zephyr/drivers/i3c/addresses.h>

Check if the address is free.

Parameters
slotsPointer to the address slots structure.
dev_addrDevice address.
Return values
trueif address is free.
falseif address is not free.

◆ i3c_addr_slots_mark_free()

static void i3c_addr_slots_mark_free ( struct i3c_addr_slots addr_slots,
uint8_t  addr 
)
inlinestatic

#include <include/zephyr/drivers/i3c/addresses.h>

Mark the address as free (not used) in device list.

Parameters
addr_slotsPointer to the address slots struct.
addrDevice address.

◆ i3c_addr_slots_mark_i2c()

static void i3c_addr_slots_mark_i2c ( struct i3c_addr_slots addr_slots,
uint8_t  addr 
)
inlinestatic

#include <include/zephyr/drivers/i3c/addresses.h>

Mark the address as I2C device in device list.

Parameters
addr_slotsPointer to the address slots struct.
addrDevice address.

◆ i3c_addr_slots_mark_i3c()

static void i3c_addr_slots_mark_i3c ( struct i3c_addr_slots addr_slots,
uint8_t  addr 
)
inlinestatic

#include <include/zephyr/drivers/i3c/addresses.h>

Mark the address as I3C device in device list.

Parameters
addr_slotsPointer to the address slots struct.
addrDevice address.

◆ i3c_addr_slots_mark_rsvd()

static void i3c_addr_slots_mark_rsvd ( struct i3c_addr_slots addr_slots,
uint8_t  addr 
)
inlinestatic

#include <include/zephyr/drivers/i3c/addresses.h>

Mark the address as reserved in device list.

Parameters
addr_slotsPointer to the address slots struct.
addrDevice address.

◆ i3c_addr_slots_next_free_find()

uint8_t i3c_addr_slots_next_free_find ( struct i3c_addr_slots slots)

#include <include/zephyr/drivers/i3c/addresses.h>

Find the next free address.

This can be used to find the next free address that can be assigned to a new device.

Parameters
slotsPointer to the address slots structure.
Returns
The next free address, or 0 if none found.

◆ i3c_addr_slots_set()

void i3c_addr_slots_set ( struct i3c_addr_slots slots,
uint8_t  dev_addr,
enum i3c_addr_slot_status  status 
)

#include <include/zephyr/drivers/i3c/addresses.h>

Set the address status of a device.

Parameters
slotsPointer to the address slots structure.
dev_addrDevice address.
statusNew status for the address dev_addr.

◆ i3c_addr_slots_status()

enum i3c_addr_slot_status i3c_addr_slots_status ( struct i3c_addr_slots slots,
uint8_t  dev_addr 
)

#include <include/zephyr/drivers/i3c/addresses.h>

Get the address status of a device.

Parameters
slotsPointer to the address slots structure.
dev_addrDevice address.
Returns
Address status for the address dev_addr.