# 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 I2C0"
        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 "I2C0"

choice
	prompt "I2C0 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 I2C1"
        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 "I2C1"

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
