# Kconfig.atmel_sam3 - Atmel SAM3 I2C configuration options
#
#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig I2C_ATMEL_SAM3
	bool "Atmel SAM3 I2C Driver"
	depends on I2C && SOC_ATMEL_SAM3
	default n
	help
	Enable I2C support on the Atmel SAM3 family processor.

	Says y to enable additional options to enable support
	for individual controllers.

if I2C_ATMEL_SAM3

config I2C_ATMEL_SAM3_0
	bool "Atmel SAM3 I2C Controller 0 (TWI0)"
	depends on I2C_ATMEL_SAM3
	default n
	help
	Build driver for thw I2C Controller #0 (TWI0).

	Says y if you intend to use the TWI0.

config I2C_ATMEL_SAM3_0_NAME
	string "Device name for Atmel SAM3 I2C Controller 0"
	depends on I2C_ATMEL_SAM3_0
	default "I2C_0"
	help
	The device name for Atmel SAM3 I2C Controller 0.

	Default is "I2C_0".

config I2C_ATMEL_SAM3_0_IRQ_PRI
	int "IRQ Priority for Atmel SAM3 I2C Controller 0"
	depends on I2C_ATMEL_SAM3_0
	default 2
	help
	IRQ priority for Atmel SAM3 I2C Controller 0.

	Default is 2.

config I2C_ATMEL_SAM3_0_DEFAULT_CFG
	hex "Default configuration for Atmel SAM3 I2C Controller 0"
	depends on I2C_ATMEL_SAM3_0
	default 0x12
	help
	Allows the I2C port to be brought up with a default configuration.
	This is useful to set if other drivers depend upon using the I2C bus
	before the application has a chance to custom configure the port.
	Setting this value does not prohibit the application from customizing
	the values later.  Refer to the I2C driver for proper values.

	Default is 0x12 (master mode, standard speed).

config I2C_ATMEL_SAM3_1
	bool "Atmel SAM3 I2C Controller 1 (TWI1)"
	depends on I2C_ATMEL_SAM3
	default n
	help
	Build driver for thw I2C Controller #1 (TWI1).

	Says y if you intend to use the TWI1.

config I2C_ATMEL_SAM3_1_NAME
	string "Device name for Atmel SAM3 I2C Controller 1"
	depends on I2C_ATMEL_SAM3_1
	default "I2C_1"
	help
	The device name for Atmel SAM3 I2C Controller 1.

	Default is "I2C_1".

config I2C_ATMEL_SAM3_1_IRQ_PRI
	int "IRQ Priority for Atmel SAM3 I2C Controller 1"
	depends on I2C_ATMEL_SAM3_1
	default 2
	help
	IRQ priority for Atmel SAM3 I2C Controller 1.

	Default is 2.

config I2C_ATMEL_SAM3_1_DEFAULT_CFG
	hex "Default configuration for Atmel SAM3 I2C Controller 1"
	depends on I2C_ATMEL_SAM3_1
	default 0x12
	help
	Allows the I2C port to be brought up with a default configuration.
	This is useful to set if other drivers depend upon using the I2C bus
	before the application has a chance to custom configure the port.
	Setting this value does not prohibit the application from customizing
	the values later.  Refer to the I2C driver for proper values.

	Default is 0x12 (master mode, standard speed).

endif # I2C_ATMEL_SAM3
