# Kconfig - Clock controller driver configuration options

#
# Copyright (c) 2015-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.
#

if SOC_QUARK_SE

menuconfig  CLOCK_CONTROL_QUARK_SE
       bool
       prompt "Quark SE Clock controller support"
       depends on CLOCK_CONTROL && SOC_QUARK_SE
       default n
       help
         Enable support for the Quark SE clock driver.

config  CLOCK_CONTROL_QUARK_SE_PERIPHERAL
       bool
       prompt "Quark SE peripheral clock support"
       depends on CLOCK_CONTROL && CLOCK_CONTROL_QUARK_SE
       default n
       help
         Enable support for Quark SE peripheral clock which controls the
         clock of I2C, SPI, GPIO controllers and more.

config  CLOCK_CONTROL_QUARK_SE_PERIPHERAL_DRV_NAME
       string
       prompt "Quark SE peripheral clock device name"
       depends on CLOCK_CONTROL_QUARK_SE_PERIPHERAL
       default "clk_peripheral"

config  CLOCK_CONTROL_QUARK_SE_EXTERNAL
       bool
       prompt "Quark SE external clock support"
       depends on CLOCK_CONTROL && CLOCK_CONTROL_QUARK_SE
       default n
       help
         Enable support for Quark SE external sub-system clock.

config  CLOCK_CONTROL_QUARK_SE_EXTERNAL_DRV_NAME
       string
       prompt "Quark SE external clock device name"
       depends on CLOCK_CONTROL_QUARK_SE_EXTERNAL
       default "clk_external"

config  CLOCK_CONTROL_QUARK_SE_SENSOR
       bool
       prompt "Quark SE sensor clock support"
       depends on CLOCK_CONTROL && CLOCK_CONTROL_QUARK_SE
       default n
       help
         Enable support for Quark SE sensor sub-system clock.

config  CLOCK_CONTROL_QUARK_SE_SENSOR_DRV_NAME
       string
       prompt "Quark SE sensor clock device name"
       depends on CLOCK_CONTROL_QUARK_SE_SENSOR
       default "clk_sensor"

endif # SOC_QUARK_SE
