# SPDX-License-Identifier: GPL-2.0
if GREYBUS

config GREYBUS_AUDIO
	tristate "Greybus Audio Class driver"
	depends on SOUND && SND_SOC
	help
	  Select this option if you have a device that follows the
	  Greybus Audio Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-audio.ko

config GREYBUS_AUDIO_APB_CODEC
	tristate "Greybus APBridge Audio codec driver"
	depends on SND_SOC && GREYBUS_AUDIO
	help
	  Select this option if you have a Toshiba APB device that has I2S
          ports and acts as a Greybus "Dummy codec". This device is a
          bridge from an APB-I2S port to a Unipro network.

	  To compile this code as a module, chose M here: the module
	  will be called gb-audio-codec.ko


config GREYBUS_BOOTROM
	tristate "Greybus Bootrom Class driver"
	help
	  Select this option if you have a device that follows the
	  Greybus Bootrom Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-bootrom.ko

config GREYBUS_CAMERA
	tristate "Greybus Camera Class driver"
	depends on MEDIA_SUPPORT && LEDS_CLASS_FLASH && BROKEN
	help
	  Select this option if you have a device that follows the
	  Greybus Camera Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-camera.ko

config GREYBUS_FIRMWARE
	tristate "Greybus Firmware Download Class driver"
	depends on SPI
	help
	  Select this option if you have a device that follows the
	  Greybus Firmware Download Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-firmware.ko

config GREYBUS_HID
	tristate "Greybus HID Class driver"
	depends on HID && INPUT
	help
	  Select this option if you have a device that follows the
	  Greybus HID Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-hid.ko

config GREYBUS_LIGHT
	tristate "Greybus LED Class driver"
	depends on LEDS_CLASS
	help
	  Select this option if you have a device that follows the
	  Greybus LED Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-light.ko

config GREYBUS_LOG
	tristate "Greybus Debug Log Class driver"
	help
	  Select this option if you have a device that follows the
	  Greybus Debug Log Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-log.ko

config GREYBUS_LOOPBACK
	tristate "Greybus Loopback Class driver"
	help
	  Select this option if you have a device that follows the
	  Greybus Debug Log Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-log.ko

config GREYBUS_POWER
	tristate "Greybus Powersupply Class driver"
	depends on POWER_SUPPLY
	help
	  Select this option if you have a device that follows the
	  Greybus Powersupply Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-power-supply.ko

config GREYBUS_RAW
	tristate "Greybus Raw Class driver"
	help
	  Select this option if you have a device that follows the
	  Greybus Raw Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-raw.ko

config GREYBUS_VIBRATOR
	tristate "Greybus Vibrator Motor Class driver"
	help
	  Select this option if you have a device that follows the
	  Greybus Vibrator Motor Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-vibrator.ko

menuconfig GREYBUS_BRIDGED_PHY
	tristate "Greybus Bridged PHY Class drivers"
	help
	  Select this option to pick from a variety of Greybus Bridged
	  PHY class drivers.  These drivers emulate a number of
	  different "traditional" busses by tunneling them over Greybus.
	  Examples of this include serial, SPI, USB, and others.

	  To compile this code as a module, chose M here: the module
	  will be called gb-phy.ko

if GREYBUS_BRIDGED_PHY

config GREYBUS_GPIO
	tristate "Greybus GPIO Bridged PHY driver"
	depends on GPIOLIB
	select GPIOLIB_IRQCHIP
	help
	  Select this option if you have a device that follows the
	  Greybus GPIO Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-gpio.ko

config GREYBUS_I2C
	tristate "Greybus I2C Bridged PHY driver"
	depends on I2C
	help
	  Select this option if you have a device that follows the
	  Greybus I2C Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-i2c.ko

config GREYBUS_PWM
	tristate "Greybus PWM Bridged PHY driver"
	depends on PWM
	help
	  Select this option if you have a device that follows the
	  Greybus PWM Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-pwm.ko

config GREYBUS_SDIO
	tristate "Greybus SDIO Bridged PHY driver"
	depends on MMC
	help
	  Select this option if you have a device that follows the
	  Greybus SDIO Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-sdio.ko

config GREYBUS_SPI
	tristate "Greybus SPI Bridged PHY driver"
	depends on SPI
	help
	  Select this option if you have a device that follows the
	  Greybus SPI Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-spi.ko

config GREYBUS_UART
	tristate "Greybus UART Bridged PHY driver"
	depends on TTY
	help
	  Select this option if you have a device that follows the
	  Greybus UART Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-uart.ko

config GREYBUS_USB
	tristate "Greybus USB Host Bridged PHY driver"
	depends on USB
	help
	  Select this option if you have a device that follows the
	  Greybus USB Host Bridged PHY Class specification.

	  To compile this code as a module, chose M here: the module
	  will be called gb-usb.ko

endif	# GREYBUS_BRIDGED_PHY

config GREYBUS_ARCHE
	tristate "Greybus Arche Platform driver"
	depends on USB_HSIC_USB3613 || COMPILE_TEST
	help
	  Select this option if you have an Arche device.

	  To compile this code as a module, chose M here: the module
	  will be called gb-arche.ko

endif	# GREYBUS
