51#include "i3c_registers.h"
52#include "syna_device.h"
55#define I3C_MAX_TRANSFER_SIZE_BYTES (UINT32_MAX)
367 I3C_SDR_TIMING_PRESET_SDR0_FM,
368 I3C_SDR_TIMING_PRESET_SDR1_FMP,
369 I3C_SDR_TIMING_PRESET_SDR2,
370 I3C_SDR_TIMING_PRESET_SDR3,
371 I3C_SDR_TIMING_PRESET_SDR4
378 I3C_HDR_MODE_DISABLED = 0,
1079 uint8_t device_count,
1081 uint8_t *discovered_count);
1121 uint8_t device_index,
1144 uint8_t dynamic_addr,
1242 uint8_t *req_buffer,
1243 uint16_t req_length,
1244 uint8_t *resp_buffer,
1245 uint16_t resp_max_length,
1246 uint16_t *resp_length);
1309 uint8_t *payload_buffer,
1310 uint16_t payload_capacity);
1386 uint8_t static_addr,
1414 uint8_t dynamic_addr,
1521 uint8_t *cmd_queue_level,
1522 uint8_t *resp_queue_level,
1523 uint8_t *tx_fifo_level,
1524 uint8_t *rx_fifo_level);
1716 uint16_t *data_length);
1772 uint8_t *discovered_count);
i3c_instance_en
I3C instance for CM52.
Definition sl2610_cm52.h:424
void(* i3c_event_cb_t)(i3c_instance_en id, const i3c_event_info_t *event_info, void *user_data)
I³C event callback.
Definition i3c.h:653
i3c_sdr_timing_preset_en
Controller SDR timing preset selection.
Definition i3c.h:365
i3c_event_type_en
I³C callback event types.
Definition i3c.h:488
i3c_transfer_flags_en
Transfer option flags.
Definition i3c.h:417
i3c_transfer_status_en
Status codes for a non-blocking I³C transfer.
Definition i3c.h:526
i3c_xfer_speed_en
I³C bus speed configuration.
Definition i3c.h:352
i3c_mode_en
I³C operation modes.
Definition i3c.h:474
i3c_event_mask_en
Event notification mask bits.
Definition i3c.h:506
i3c_hdr_mode_en
HDR operation mode selection.
Definition i3c.h:377
i3c_ccc_type_en
CCC routing type.
Definition i3c.h:386
i3c_addr_mode_en
Address selection mode for transfer descriptors.
Definition i3c.h:405
i3c_transfer_dir_en
I³C transfer direction.
Definition i3c.h:397
i3c_target_type_t
I³C device type.
Definition i3c.h:341
i3c_status_en
I³C driver return status codes.
Definition i3c.h:431
@ I3C_SDR_TIMING_PRESET_MANUAL
Definition i3c.h:366
@ I3C_EVENT_TRANSFER_ERR
Definition i3c.h:489
@ I3C_EVENT_RESP_READY
Definition i3c.h:491
@ I3C_EVENT_IBI_HJ_REQ_RECEIVED
Definition i3c.h:493
@ I3C_EVENT_TRANSFER_ABORT
Definition i3c.h:490
@ I3C_EVENT_MR_RESPONSE
Definition i3c.h:497
@ I3C_EVENT_WRITE_COMPLETE
Definition i3c.h:495
@ I3C_EVENT_IBI_SIR_RECEIVED
Definition i3c.h:492
@ I3C_EVENT_MR_RECEIVED
Definition i3c.h:496
@ I3C_EVENT_READ_COMPLETE
Definition i3c.h:494
@ I3C_XFER_FLAG_NONE
Definition i3c.h:418
@ I3C_XFER_FLAG_RESTART
Definition i3c.h:420
@ I3C_XFER_FLAG_CCC
Definition i3c.h:422
@ I3C_XFER_FLAG_STOP
Definition i3c.h:419
@ I3C_XFER_FLAG_HDR
Definition i3c.h:421
@ I3C_TRANSFER_INVALID_ID
Definition i3c.h:534
@ I3C_TRANSFER_STATUS_IDLE
Definition i3c.h:527
@ I3C_TRANSFER_STATUS_WRITE_PENDING
Definition i3c.h:530
@ I3C_TRANSFER_STATUS_READ_PENDING
Definition i3c.h:529
@ I3C_TRANSFER_RESPONSE_PENDING
Definition i3c.h:535
@ I3C_TRANSFER_RESPONSE_READY
Definition i3c.h:536
@ I3C_TRANSFER_STATUS_COMPLETE
Definition i3c.h:531
@ I3C_TRANSFER_STATUS_ABORTED
Definition i3c.h:532
@ I3C_TRANSFER_STATUS_ERROR
Definition i3c.h:533
@ I3C_TRANSFER_STATUS_IN_PROGRESS
Definition i3c.h:528
@ I3C_SPEED_HDR_DDR
Definition i3c.h:359
@ I3C_SPEED_SDR0_FM
Definition i3c.h:353
@ I3C_SPEED_HDR_TS
Definition i3c.h:358
@ I3C_SPEED_SDR1_FMP
Definition i3c.h:354
@ I3C_SPEED_SDR4
Definition i3c.h:357
@ I3C_SPEED_SDR2
Definition i3c.h:355
@ I3C_SPEED_SDR3
Definition i3c.h:356
@ I3C_MODE_TARGET
Definition i3c.h:476
@ I3C_MODE_INVALID
Definition i3c.h:477
@ I3C_MODE_CONTROLLER
Definition i3c.h:475
@ I3C_EVENT_MASK_MR_RECEIVED
Definition i3c.h:514
@ I3C_EVENT_MASK_READ_COMPLETE
Definition i3c.h:512
@ I3C_EVENT_MASK_ALL
Definition i3c.h:516
@ I3C_EVENT_MASK_IBI_SIR_RECEIVED
Definition i3c.h:510
@ I3C_EVENT_MASK_TRANSFER_ABORT
Definition i3c.h:508
@ I3C_EVENT_MASK_RESP_READY
Definition i3c.h:509
@ I3C_EVENT_MASK_TRANSFER_ERR
Definition i3c.h:507
@ I3C_EVENT_MASK_WRITE_COMPLETE
Definition i3c.h:513
@ I3C_EVENT_MASK_IBI_HJ_REQ_RECEIVED
Definition i3c.h:511
@ I3C_EVENT_MASK_MR_RESPONSE
Definition i3c.h:515
@ I3C_CCC_DIRECT
Definition i3c.h:388
@ I3C_CCC_BROADCAST
Definition i3c.h:387
@ I3C_ADDR_MODE_BROADCAST
Definition i3c.h:409
@ I3C_ADDR_MODE_STATIC
Definition i3c.h:406
@ I3C_ADDR_MODE_DAT
Definition i3c.h:408
@ I3C_ADDR_MODE_DYNAMIC
Definition i3c.h:407
@ I3C_TRANSFER_READ
Definition i3c.h:399
@ I3C_TRANSFER_WRITE
Definition i3c.h:398
@ I3C_TARGET_TYPE_I3C
Definition i3c.h:342
@ I3C_TARGET_TYPE_I2C
Definition i3c.h:343
@ I3C_ERROR_RESPONSE
Definition i3c.h:455
@ I3C_ERROR_PARAMETER
Definition i3c.h:434
@ I3C_ERROR_BUSY
Definition i3c.h:435
@ I3C_ERROR_BUFFER_TOO_SMALL
Definition i3c.h:465
@ I3C_ERROR_INVALID_ARGUMENT
Definition i3c.h:463
@ I3C_ERROR_QUEUE_EMPTY
Definition i3c.h:439
@ I3C_ERROR_PEC
Definition i3c.h:452
@ I3C_ERROR_RESP_BUFFER_FULL
Definition i3c.h:457
@ I3C_ERROR_CRC
Definition i3c.h:448
@ I3C_ERROR_TIMEOUT
Definition i3c.h:436
@ I3C_ERROR_TRANSFER_TERMINATED
Definition i3c.h:453
@ I3C_ERROR_NO_DATA
Definition i3c.h:461
@ I3C_ERROR_INVALID_CCC
Definition i3c.h:454
@ I3C_ERROR_ADDR_NACK
Definition i3c.h:442
@ I3C_ERROR_TRANSFER
Definition i3c.h:437
@ I3C_ERROR_CCC_TARGET
Definition i3c.h:447
@ I3C_ERROR_IBI_NOT_ATTEMPTED
Definition i3c.h:460
@ I3C_ERROR_PARITY
Definition i3c.h:449
@ I3C_ERROR_IBI_EARLY_TERMINATE
Definition i3c.h:459
@ I3C_ERROR_UNSUPPORTED_MODE
Definition i3c.h:441
@ I3C_ERROR_RESP_BUFFER_SMALL
Definition i3c.h:458
@ I3C_ERROR
Definition i3c.h:433
@ I3C_ERROR_FRAME
Definition i3c.h:450
@ I3C_ERROR_IBI_NACK
Definition i3c.h:445
@ I3C_ERROR_BROADCAST_ADDR_NACK
Definition i3c.h:443
@ I3C_OK
Definition i3c.h:432
@ I3C_ERROR_I2C_WR_DATA_NACK
Definition i3c.h:444
@ I3C_ERROR_QUEUE_FULL
Definition i3c.h:440
@ I3C_ERROR_HDR_BUF_OVF_UNF
Definition i3c.h:451
@ I3C_ERROR_RESP_TIMEOUT
Definition i3c.h:456
@ I3C_ERROR_CCC_ROUTE
Definition i3c.h:446
@ I3C_ERROR_HW_INCAPABLE
Definition i3c.h:438
@ I3C_ERROR_UNAVAILABLE
Definition i3c.h:464
i3c_status_en i3c_target_prep_controller_write(i3c_instance_en id, uint8_t *buf, uint32_t size)
i3c_status_en i3c_disable(i3c_instance_en id)
i3c_status_en i3c_controller_read_ibi_data(i3c_instance_en id, uint8_t *buffer, uint16_t *data_length)
i3c_status_en i3c_controller_get_queue_status(i3c_instance_en id, uint8_t *cmd_queue_level, uint8_t *resp_queue_level, uint8_t *tx_fifo_level, uint8_t *rx_fifo_level)
i3c_status_en i3c_controller_config_hot_join(i3c_instance_en id, bool enable_hot_join)
i3c_status_en i3c_controller_read_non_blocking(i3c_instance_en id, i3c_transfer_t *xfer)
i3c_status_en i3c_controller_set_target_device_by_addr(i3c_instance_en id, uint8_t static_addr, i3c_xfer_speed_en speed)
i3c_status_en i3c_controller_read_blocking(i3c_instance_en id, i3c_transfer_t *xfer)
i3c_status_en i3c_controller_ccc_response_peek(i3c_instance_en id, i3c_ccc_response_entry_t *entry)
i3c_status_en i3c_controller_process_hot_join_and_enumerate(i3c_instance_en id, i3c_device_t *discovered_devices, uint8_t *discovered_count)
INIT_CODE i3c_status_en i3c_deinit(i3c_instance_en id)
i3c_status_en i3c_controller_peek_response_word(i3c_instance_en id, uint32_t *response_word)
i3c_status_en i3c_controller_ccc_response_get_count(i3c_instance_en id, uint8_t *count)
i3c_status_en i3c_controller_process_hot_join_req(i3c_instance_en id)
i3c_status_en i3c_controller_ccc_response_read(i3c_instance_en id, i3c_ccc_response_entry_t *entry, uint8_t *payload_buffer, uint16_t payload_capacity)
i3c_transfer_status_en i3c_controller_get_transfer_status(i3c_instance_en id)
i3c_status_en i3c_controller_set_config(i3c_instance_en id, i3c_controller_config_t *cfg)
i3c_status_en i3c_controller_get_device_count(i3c_instance_en id, uint8_t *device_count)
INIT_CODE i3c_status_en i3c_init(i3c_instance_en id, i3c_peripheral_mode_t mode)
i3c_status_en i3c_controller_get_device(i3c_instance_en id, uint8_t device_index, i3c_device_t *device)
i3c_status_en i3c_controller_set_target_device_by_id(i3c_instance_en id, i3c_target_id_t device_id, i3c_xfer_speed_en speed)
i3c_status_en i3c_controller_set_target_device_by_dynamic_addr(i3c_instance_en id, uint8_t dynamic_addr, i3c_xfer_speed_en speed)
i3c_status_en i3c_target_get_ibi_sir_response(i3c_instance_en id)
i3c_status_en i3c_controller_set_interrupt_config(i3c_instance_en id, const i3c_interrupt_config_t *cfg)
i3c_status_en i3c_target_prep_controller_read(i3c_instance_en id, uint8_t *buf, uint32_t size)
i3c_status_en i3c_controller_find_device_by_pid(i3c_instance_en id, uint64_t pid, i3c_device_t *device)
i3c_status_en i3c_controller_get_dat_entry(i3c_instance_en id, uint8_t dat_index, i3c_dat_entry_t *dat_entry)
i3c_status_en i3c_controller_abort(i3c_instance_en id)
i3c_status_en i3c_controller_find_device_by_dynamic_addr(i3c_instance_en id, uint8_t dynamic_addr, i3c_device_t *device)
i3c_status_en i3c_register_callback(i3c_instance_en id, i3c_event_cb_t cb, void *user_data)
i3c_status_en i3c_controller_config_hdr_mode(i3c_instance_en id, const i3c_hdr_config_t *cfg)
i3c_status_en i3c_target_get_master_request_response(i3c_instance_en id)
i3c_status_en i3c_controller_config_targets(i3c_instance_en id, const i3c_device_config_t *device_configs, uint8_t device_count)
i3c_status_en i3c_controller_send_ccc(i3c_instance_en id, uint8_t ccc_id, i3c_ccc_type_en ccc_type, int8_t dat_index, uint8_t *req_buffer, uint16_t req_length, uint8_t *resp_buffer, uint16_t resp_max_length, uint16_t *resp_length)
i3c_status_en i3c_controller_set_policy_config(i3c_instance_en id, const i3c_controller_policy_config_t *cfg)
i3c_status_en i3c_controller_perform_daa(i3c_instance_en id, const i3c_device_config_t *device_configs, uint8_t device_count, i3c_device_t *discovered_devices, uint8_t *discovered_count)
i3c_status_en i3c_target_set_config(i3c_instance_en id, i3c_target_config_t *cfg)
i3c_status_en i3c_controller_enable_ibi(i3c_instance_en id, i3c_ibi_config_t *ibi_cfg)
i3c_status_en i3c_target_raise_master_request(i3c_instance_en id)
i3c_status_en i3c_target_config_hot_join(i3c_instance_en id, bool enable)
i3c_status_en i3c_controller_write_blocking(i3c_instance_en id, i3c_transfer_t *xfer)
i3c_status_en i3c_target_raise_ibi_sir(i3c_instance_en id, i3c_sir_config_t *xfer)
i3c_status_en i3c_controller_write_non_blocking(i3c_instance_en id, i3c_transfer_t *xfer)
i3c_status_en i3c_enable(i3c_instance_en id)
i3c_status_en i3c_clear_all_interrupts(i3c_instance_en id)
Threshold configuration for I³C data buffers. Supported values in dwords are 1, 4,...
Definition i3c.h:671
uint8_t rx_buf_thld
Definition i3c.h:674
uint8_t rx_start_thld
Definition i3c.h:672
uint8_t tx_empty_buf_thld
Definition i3c.h:675
uint8_t tx_start_thld
Definition i3c.h:673
Bus availability timing configuration.
Definition i3c.h:731
uint32_t bus_free_time_pure_ns
Definition i3c.h:733
uint32_t bus_free_time_mixed_ns
Definition i3c.h:732
One CCC response queue entry.
Definition i3c.h:622
uint8_t ccc_id
Definition i3c.h:624
uint8_t dat_index
Definition i3c.h:623
i3c_status_en status
Definition i3c.h:625
uint16_t payload_length
Definition i3c.h:626
I³C controller configuration structure.
Definition i3c.h:783
uint8_t self_dynamic_addr
Definition i3c.h:795
uint32_t slave_bus_idle_time_ns
Definition i3c.h:784
i3c_scl_timing_t scl_timing
Definition i3c.h:789
bool i2c_target_present
Definition i3c.h:799
uint8_t num_of_devices
Definition i3c.h:797
i3c_sdr_timing_preset_en sdr_timing_preset
Definition i3c.h:788
uint8_t self_static_addr
Definition i3c.h:793
uint16_t slave_bus_available_time_ns
Definition i3c.h:791
i3c_threshold_ctrl_t threshold_ctrl
Definition i3c.h:787
i3c_mode_en op_mode
Definition i3c.h:786
i3c_bus_avail_timing_t bus_avail_timing
Definition i3c.h:790
Controller behavior policy independent from hardware timing/setup.
Definition i3c.h:769
bool enable_hot_join
Definition i3c.h:770
bool iba_include
Definition i3c.h:771
Information about the current I³C transfer.
Definition i3c.h:613
uint8_t dat_index
Definition i3c.h:616
i3c_transfer_status_en transfer_status
Definition i3c.h:614
i3c_xfer_speed_en xfer_speed
Definition i3c.h:615
Logical DAT entry view exposed by API.
Definition i3c.h:600
bool accept_ibi
Definition i3c.h:605
uint8_t dynamic_address
Definition i3c.h:603
bool enable_ibi_pec
Definition i3c.h:607
uint8_t nack_retry_count
Definition i3c.h:604
bool ibi_has_payload
Definition i3c.h:606
uint8_t static_address
Definition i3c.h:602
i3c_target_type_t device_type
Definition i3c.h:601
Abstracted I³C device configuration structure.
Definition i3c.h:560
i3c_target_type_t device_type
Definition i3c.h:561
bool enable_ibi_pec
Definition i3c.h:567
bool ibi_has_payload
Definition i3c.h:566
bool accept_ibi
Definition i3c.h:565
uint8_t nack_retry_count
Definition i3c.h:564
uint8_t dynamic_address
Definition i3c.h:563
uint8_t static_address
Definition i3c.h:562
Persistent descriptor for an I³C/I²C target device.
Definition i3c.h:584
bool ibi_has_payload
Definition i3c.h:591
bool enable_ibi_pec
Definition i3c.h:592
i3c_target_id_t target_id
Definition i3c.h:586
uint8_t dat_index
Definition i3c.h:589
bool accept_ibi
Definition i3c.h:590
uint8_t dynamic_address
Definition i3c.h:588
uint8_t static_address
Definition i3c.h:587
i3c_target_type_t device_type
Definition i3c.h:585
Structured I³C callback event information.
Definition i3c.h:632
i3c_status_en status
Definition i3c.h:634
i3c_event_type_en event_type
Definition i3c.h:633
uint8_t target_addr
Definition i3c.h:635
uint8_t dat_index
Definition i3c.h:636
uint32_t transferred_length
Definition i3c.h:637
uint32_t flags
Definition i3c.h:638
HDR mode configuration.
Definition i3c.h:750
bool enable_data
Definition i3c.h:753
i3c_hdr_mode_en mode
Definition i3c.h:751
bool enable_cmd
Definition i3c.h:752
IBI (In-Band Interrupt) configuration.
Definition i3c.h:859
bool is_ibi_with_data
Definition i3c.h:861
bool set_reject
Definition i3c.h:860
Notification and interrupt policy for controller mode.
Definition i3c.h:759
bool notify_mr_rejected
Definition i3c.h:762
bool notify_hj_rejected
Definition i3c.h:763
bool notify_sir_rejected
Definition i3c.h:761
uint32_t event_mask
Definition i3c.h:760
Complete SCL timing configuration for I³C.
Definition i3c.h:739
scl_open_drain_timing_t open_drain_timing
Definition i3c.h:740
scl_fast_mode_timing_t fast_mode_timing
Definition i3c.h:742
scl_fast_mode_plus_timing_t fast_mode_plus_timing
Definition i3c.h:743
scl_push_pull_timing_t push_pull_timing
Definition i3c.h:741
scl_ext_low_count_timing_t ext_low_count_timing
Definition i3c.h:744
SIR (Target-Initiated Request) configuration.
Definition i3c.h:869
uint8_t * buf
Definition i3c.h:870
uint16_t size
Definition i3c.h:871
I³C target mode configuration structure. Contains timing, addressing, and operational parameters for ...
Definition i3c.h:808
uint8_t max_write_speed
Definition i3c.h:821
uint8_t self_static_addr
Definition i3c.h:816
i3c_target_type_t target_type
Definition i3c.h:812
i3c_device_t self_device
Definition i3c.h:814
uint32_t bus_idle_time_ns
Definition i3c.h:809
uint8_t max_read_speed
Definition i3c.h:819
uint8_t clk_data_turn
Definition i3c.h:818
uint8_t idle_cnt_multiplier
Definition i3c.h:817
uint16_t bus_available_time_ns
Definition i3c.h:815
i3c_threshold_ctrl_t threshold_ctrl
Definition i3c.h:813
bool is_adaptive_i2c
Definition i3c.h:823
i3c_mode_en op_mode
Definition i3c.h:811
BCR, DCR, PID details of the i3c target.
Definition i3c.h:573
uint64_t pid
Definition i3c.h:576
uint8_t bcr
Definition i3c.h:574
uint8_t dcr
Definition i3c.h:575
Combined threshold configuration for I³C.
Definition i3c.h:681
queue_thld_t queue_thld
Definition i3c.h:682
data_buffer_thld_t data_buffer_thld
Definition i3c.h:683
Unified transfer descriptor.
Definition i3c.h:836
i3c_addr_mode_en addr_mode
Definition i3c.h:837
i3c_xfer_speed_en speed
Definition i3c.h:849
uint8_t * buf
Definition i3c.h:841
uint8_t address
Definition i3c.h:838
uint32_t timeout
Definition i3c.h:848
uint8_t dat_index
Definition i3c.h:840
i3c_transfer_dir_en direction
Definition i3c.h:850
uint32_t flags
Definition i3c.h:851
uint32_t size
Definition i3c.h:847
Threshold configuration for I³C queues.
Definition i3c.h:660
uint8_t cmd_empty_buf_thld
Definition i3c.h:664
uint8_t ibi_data_thld
Definition i3c.h:662
uint8_t resp_buf_thld
Definition i3c.h:663
uint8_t ibi_status_thld
Definition i3c.h:661
Extended low count timing configuration.
Definition i3c.h:721
uint32_t ext_low_ns_1
Definition i3c.h:725
uint32_t ext_low_ns_3
Definition i3c.h:723
uint32_t ext_low_ns_2
Definition i3c.h:724
uint32_t ext_low_ns_4
Definition i3c.h:722
I²C Fast Mode Plus timing for SCL.
Definition i3c.h:713
uint32_t fmp_high_ns
Definition i3c.h:714
uint32_t fmp_low_ns
Definition i3c.h:715
I²C Fast Mode timing for SCL.
Definition i3c.h:705
uint32_t fm_low_ns
Definition i3c.h:707
uint32_t fm_high_ns
Definition i3c.h:706
I³C open-drain timing for SCL.
Definition i3c.h:689
uint32_t od_high_ns
Definition i3c.h:690
uint32_t od_low_ns
Definition i3c.h:691
I³C push-pull timing for SCL.
Definition i3c.h:697
uint32_t pp_high_ns
Definition i3c.h:698
uint32_t pp_low_ns
Definition i3c.h:699