# Kconfig - PWM configuration options

#
# Copyright (c) 2015 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 PWM
	bool "PWM (Pulse Width Modulation) Drivers"
	default n
	help
	  Enable config options for PWM drivers.

config PWM_PCA9685
	bool "PCA9685 I2C-based PWM chip"
	depends on PWM && I2C
	default n
	help
	  Enable driver for PCA9685 I2C-based PWM chip.

config PWM_PCA9685_INIT_PRIORITY
	int
	depends on PWM_PCA9685
	default 70
	prompt "Init priority"
	help
	  Device driver initialization priority.

config PWM_PCA9685_0
	bool "PCA9685 PWM chip #0"
	depends on PWM_PCA9685
	default n
	help
	  Enable config options for the PCA9685 I2C-based PWM chip #0.

config PWM_PCA9685_0_DEV_NAME
	string "PCA9685 PWM chip #0 Device Name"
	depends on PWM_PCA9685_0
	default "PWM_P0"
	help
	  Specify the device name for the PCA9685 I2C-based PWM chip #0.

config PWM_PCA9685_0_I2C_ADDR
	hex "PCA9685 PWM chip #0 I2C slave address"
	depends on PWM_PCA9685_0
	default 0x0
	help
	  Specify the I2C slave address for the PCA9685 I2C-based PWM chip #0.

config PWM_PCA9685_0_I2C_MASTER_DEV_NAME
	string "I2C Master where PCA9685 PWM chip #0 is connected"
	depends on PWM_PCA9685_0
	default ""
	help
	  Specify the device name of the I2C master device to which this
	  PCA9685 chip #0 is binded.

config PWM_DW
	bool "DesignWare PWM"
	depends on PWM
	default n
	help
	  Enable driver to utilize PWM on the DesignWare Timer IP block.
	  Care must be taken if one is also to use the timer feature, as
	  they both use the same set of registers.

config PWM_DW_DEV_NAME
	string "DesignWare PWM Device Name"
	depends on PWM_DW
	default "PWM_DW"
	help
	  Specify the device name for the DesignWare PWM driver.

config PWM_DW_BASE_ADDR
	hex "DesignWare PWM Base Address"
	depends on PWM_DW
	help
	  Specify the base address for registers for DesignWare PWM.

config PWM_DW_NUM_PORTS
	int "Number of PWM ports for DesignWare PWM"
	depends on PWM_DW
	default 1
	help
	  Specify how many PWM ports on the IP block.

	  Default is 1.
