# Kconfig.dw - DesignWare 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_DW
        bool "Design Ware I2C support"
	depends on I2C
        default n
	help
	Enable Design Ware I2C support on the selected platform

if I2C_DW

config I2C_DW_SHARED_IRQ
	bool
	default n
	depends on I2C_DW

config I2C_DW_0
        bool "Enable I2C_0"
        default n
	depends on I2C_DW

config I2C_DW_0_NAME
        string "Select a name for finding the device"
        depends on I2C_DW_0
        default "I2C_0"

choice
	prompt "I2C_0 Interrupts via"
	default I2C_DW_0_IRQ_DIRECT
	depends on I2C_DW_0

config I2C_DW_0_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config I2C_DW_0_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select I2C_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config I2C_DW_0_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on I2C_DW_0 && I2C_DW_0_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config I2C_DW_0_IRQ_PRI
        int "Controller interrupt priority"
        depends on I2C_DW_0 && I2C_DW_0_IRQ_DIRECT
        help
        IRQ priority

config I2C_DW_0_DEFAULT_CFG
	hex "I2C default configuration"
        depends on I2C_DW_0
        default 0x0
        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 datasheet for proper values.

config I2C_DW_1
        bool "Enable I2C_1"
        default n
	depends on I2C_DW

config I2C_DW_1_NAME
        string "Select a name for finding the device"
        depends on I2C_DW_1
        default "I2C_1"

config I2C_DW_1_IRQ_PRI
        int "Controller interrupt priority"
        depends on I2C_DW_1
        help
        IRQ priority

config I2C_DW_1_DEFAULT_CFG
	hex "I2C default configuration"
        depends on I2C_DW_1
        default 0x0
        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 datasheet for proper values.

endif # I2C_DW
