# nrfx I2C support

# Copyright (c) 2018, Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menuconfig I2C_NRFX
	bool "nRF TWI nrfx drivers"
	default y
	depends on SOC_FAMILY_NORDIC_NRF
	depends on MULTITHREADING
	select PINCTRL
	help
	  Enable support for nrfx TWI drivers for nRF MCU series.

if I2C_NRFX

config I2C_NRFX_TWI
	def_bool y
	depends on DT_HAS_NORDIC_NRF_TWI_ENABLED
	select NRFX_TWI0 if HAS_HW_NRF_TWI0
	select NRFX_TWI1 if HAS_HW_NRF_TWI1

config I2C_NRFX_TWIM
	def_bool y
	depends on DT_HAS_NORDIC_NRF_TWIM_ENABLED
	select NRFX_TWIM0 if HAS_HW_NRF_TWIM0
	select NRFX_TWIM1 if HAS_HW_NRF_TWIM1
	select NRFX_TWIM2 if HAS_HW_NRF_TWIM2
	select NRFX_TWIM3 if HAS_HW_NRF_TWIM3
	select NRFX_TWIM20 if HAS_HW_NRF_TWIM20
	select NRFX_TWIM21 if HAS_HW_NRF_TWIM21
	select NRFX_TWIM22 if HAS_HW_NRF_TWIM22
	select NRFX_TWIM30 if HAS_HW_NRF_TWIM30
	select NRFX_TWIM120 if HAS_HW_NRF_TWIM120
	select NRFX_TWIM130 if HAS_HW_NRF_TWIM130
	select NRFX_TWIM131 if HAS_HW_NRF_TWIM131
	select NRFX_TWIM132 if HAS_HW_NRF_TWIM132
	select NRFX_TWIM133 if HAS_HW_NRF_TWIM133
	select NRFX_TWIM134 if HAS_HW_NRF_TWIM134
	select NRFX_TWIM135 if HAS_HW_NRF_TWIM135
	select NRFX_TWIM136 if HAS_HW_NRF_TWIM136
	select NRFX_TWIM137 if HAS_HW_NRF_TWIM137

config I2C_NRFX_TRANSFER_TIMEOUT
	int "Transfer timeout [ms]"
	default 500
	help
	  Timeout in milliseconds used for each I2C transfer.
	  0 means that the driver should use the K_FOREVER value,
	  i.e. it should wait as long as necessary.

config I2C_NRFX_TWIS
	def_bool y
	depends on DT_HAS_NORDIC_NRF_TWIS_ENABLED
	depends on I2C_TARGET
	depends on I2C_TARGET_BUFFER_MODE
	select NRFX_TWIS0 if HAS_HW_NRF_TWIS0
	select NRFX_TWIS1 if HAS_HW_NRF_TWIS1
	select NRFX_TWIS2 if HAS_HW_NRF_TWIS2
	select NRFX_TWIS3 if HAS_HW_NRF_TWIS3
	select NRFX_TWIS20 if HAS_HW_NRF_TWIS20
	select NRFX_TWIS21 if HAS_HW_NRF_TWIS21
	select NRFX_TWIS22 if HAS_HW_NRF_TWIS22
	select NRFX_TWIS30 if HAS_HW_NRF_TWIS30
	select NRFX_TWIS130 if HAS_HW_NRF_TWIS130
	select NRFX_TWIS131 if HAS_HW_NRF_TWIS131
	select NRFX_TWIS133 if HAS_HW_NRF_TWIS133
	select NRFX_TWIS134 if HAS_HW_NRF_TWIS134
	select NRFX_TWIS135 if HAS_HW_NRF_TWIS135
	select NRFX_TWIS136 if HAS_HW_NRF_TWIS136
	select NRFX_TWIS137 if HAS_HW_NRF_TWIS137

if I2C_NRFX_TWIS

config I2C_NRFX_TWIS_BUF_SIZE
	int "DMA buffer size in bytes"
	default 64

endif # I2C_NRFX_TWIS

endif # I2C_NRFX
