# SPDX-License-Identifier: GPL-2.0-only

menuconfig MACINTOSH_DRIVERS
	bool "Macintosh device drivers"
	depends on PPC || MAC || X86
	default y if (PPC_PMAC || MAC)
	help
	  Say Y here to get to see options for devices used with Macintosh
	  computers. This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if MACINTOSH_DRIVERS

config ADB
	bool "Apple Desktop Bus (ADB) support"
	depends on MAC || (PPC_PMAC && PPC32)
	help
	  Apple Desktop Bus (ADB) support is for support of devices which
	  are connected to an ADB port.  ADB devices tend to have 4 pins.
	  If you have an Apple Macintosh prior to the iMac, an iBook or
	  PowerBook, or a "Blue and White G3", you probably want to say Y
	  here.  Otherwise say N.

config ADB_MACII
	bool "Include Mac II ADB driver"
	depends on ADB && MAC
	help
	  Say Y here if want your kernel to support Macintosh systems that use
	  the Mac II style ADB.  This includes the II, IIx, IIcx, SE/30, IIci,
	  Quadra 610, Quadra 650, Quadra 700, Quadra 800, Centris 610 and
	  Centris 650.

config ADB_IOP
	bool "Include IOP (IIfx/Quadra 9x0) ADB driver"
	depends on ADB && MAC
	help
	  The I/O Processor (IOP) is an Apple custom IC designed to provide
	  intelligent support for I/O controllers.  It is described at
	  <http://www.angelfire.com/ca2/dev68k/iopdesc.html> to enable direct
	  support for it, say 'Y' here.

# we want to change this to something like CONFIG_SYSCTRL_CUDA/PMU
config ADB_CUDA
	bool "Support for Cuda/Egret based Macs and PowerMacs"
	depends on (ADB || PPC_PMAC) && !PPC_PMAC64
	select RTC_LIB
	help
	  This provides support for Cuda/Egret based Macintosh and
	  Power Macintosh systems. This includes most m68k based Macs,
	  most Old World PowerMacs, the first generation iMacs, the
	  Blue & White G3 and the "Yikes" G4 (PCI Graphics). All later
	  models should use CONFIG_ADB_PMU instead. It is safe to say Y
	  here even if your machine doesn't have a Cuda or Egret device.

	  If unsure say Y.

config ADB_PMU
	bool "Support for PMU based PowerMacs and PowerBooks"
	depends on PPC_PMAC || MAC
	select RTC_LIB
	help
	  On PowerBooks, iBooks, and recent iMacs and Power Macintoshes, the
	  PMU is an embedded microprocessor whose primary function is to
	  control system power, and battery charging on the portable models.
	  The PMU also controls the ADB (Apple Desktop Bus) which connects to
	  the keyboard and mouse on some machines, as well as the non-volatile
	  RAM and the RTC (real time clock) chip.  Say Y to enable support for
	  this device; you should do so if your machine is one of those
	  mentioned above.

config ADB_PMU_EVENT
	def_bool y
	depends on ADB_PMU && INPUT=y

config ADB_PMU_LED
	bool "Support for the Power/iBook front LED"
	depends on PPC_PMAC && ADB_PMU
	select NEW_LEDS
	select LEDS_CLASS
	help
	  Support the front LED on Power/iBooks as a generic LED that can
	  be triggered by any of the supported triggers. To get the
	  behaviour of the old CONFIG_BLK_DEV_IDE_PMAC_BLINK, select this
	  and the disk LED trigger and configure appropriately through sysfs.

config ADB_PMU_LED_DISK
	bool "Use front LED as DISK LED by default"
	depends on ATA
	depends on ADB_PMU_LED
	depends on LEDS_CLASS
	select LEDS_TRIGGERS
	select LEDS_TRIGGER_DISK
	help
	  This option makes the front LED default to the disk trigger
	  so that it blinks on disk activity.

config PMAC_SMU
	bool "Support for SMU  based PowerMacs"
	depends on PPC_PMAC64
	help
	  This option adds support for the newer G5 iMacs and PowerMacs based
	  on the "SMU" system control chip which replaces the old PMU.
	  If you don't know, say Y.

config PMAC_APM_EMU
	tristate "APM emulation"
	select APM_EMULATION
	depends on ADB_PMU && PM && PPC32

config PMAC_MEDIABAY
	bool "Support PowerBook hotswap media bay"
	depends on PPC_PMAC && PPC32 && BLOCK
	help
	  This option adds support for older PowerBook's hotswap media bay
	  that can contains batteries, floppy drives, or IDE devices. PCI
	  devices are not fully supported in the bay as I never had one to
	  try with

config PMAC_BACKLIGHT
	bool "Backlight control for LCD screens"
	depends on PPC_PMAC && ADB_PMU && FB = y && (BROKEN || !PPC64)
	select FB_BACKLIGHT
	help
	  Say Y here to enable Macintosh specific extensions of the generic
	  backlight code. With this enabled, the brightness keys on older
	  PowerBooks will be enabled so you can change the screen brightness.
	  Newer models should use a userspace daemon like pbbuttonsd.

config PMAC_BACKLIGHT_LEGACY
	bool "Provide legacy ioctl's on /dev/pmu for the backlight"
	depends on PMAC_BACKLIGHT && (BROKEN || !PPC64)
	help
	  Say Y if you want to enable legacy ioctl's on /dev/pmu. This is for
	  programs which use this old interface. New and updated programs
	  should use the backlight classes in sysfs.

config ADB_MACIO
	bool "Include MacIO (CHRP) ADB driver"
	depends on ADB && PPC_CHRP && !PPC_PMAC64
	help
	  Say Y here to include direct support for the ADB controller in the
	  Hydra chip used on PowerPC Macintoshes of the CHRP type.  (The Hydra
	  also includes a MESH II SCSI controller, DBDMA controller, VIA chip,
	  OpenPIC controller and two RS422/Geoports.)

config INPUT_ADBHID
	bool "Support for ADB input devices (keyboard, mice, ...)"
	depends on ADB && INPUT=y
	help
	  Say Y here if you want to have ADB (Apple Desktop Bus) HID devices
	  such as keyboards, mice, joysticks, trackpads  or graphic tablets
	  handled by the input layer.  If you say Y here, make sure to say Y to
	  the corresponding drivers "Mouse Support" (CONFIG_INPUT_MOUSEDEV) and
	  "Event interface support" (CONFIG_INPUT_EVDEV) as well.

	  If unsure, say Y.

config MAC_EMUMOUSEBTN
	tristate "Support for mouse button 2+3 emulation"
	depends on SYSCTL && INPUT
	help
	  This provides generic support for emulating the 2nd and 3rd mouse
	  button with keypresses.  If you say Y here, the emulation is still
	  disabled by default.  The emulation is controlled by these sysctl
	  entries:
	  /proc/sys/dev/mac_hid/mouse_button_emulation
	  /proc/sys/dev/mac_hid/mouse_button2_keycode
	  /proc/sys/dev/mac_hid/mouse_button3_keycode

	  If you have an Apple machine with a 1-button mouse, say Y here.

	  To compile this driver as a module, choose M here: the
	  module will be called mac_hid.

config THERM_WINDTUNNEL
	tristate "Support for thermal management on Windtunnel G4s"
	depends on I2C && I2C_POWERMAC && PPC_PMAC && !PPC_PMAC64
	help
	  This driver provides some thermostat and fan control for the desktop
	  G4 "Windtunnel"

config THERM_ADT746X
	tristate "Support for thermal mgmnt on laptops with ADT 746x chipset"
	depends on I2C && I2C_POWERMAC && PPC_PMAC && !PPC_PMAC64
	help
	  This driver provides some thermostat and fan control for the
	  iBook G4, and the ATI based aluminium PowerBooks, allowing slightly
	  better fan behaviour by default, and some manual control.

config WINDFARM
	tristate "New PowerMac thermal control infrastructure"
	depends on PPC

config WINDFARM_PM81
	tristate "Support for thermal management on iMac G5"
	depends on WINDFARM && I2C && CPU_FREQ_PMAC64 && PMAC_SMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the iMacG5

config WINDFARM_PM72
	tristate "Support for thermal management on PowerMac G5 (AGP)"
	depends on WINDFARM && I2C && CPU_FREQ_PMAC64 && ADB_PMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the PowerMac G5
	  "AGP" variants (PowerMac 7,2 and 7,3)

config WINDFARM_RM31
	tristate "Support for thermal management on Xserve G5"
	depends on WINDFARM && I2C && CPU_FREQ_PMAC64 && ADB_PMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the Xserve G5
	  (RackMac3,1)

config WINDFARM_PM91
	tristate "Support for thermal management on PowerMac9,1"
	depends on WINDFARM && I2C && CPU_FREQ_PMAC64 && PMAC_SMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the PowerMac9,1
	  which is the recent (SMU based) single CPU desktop G5

config WINDFARM_PM112
	tristate "Support for thermal management on PowerMac11,2"
	depends on WINDFARM && I2C && PMAC_SMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the PowerMac11,2
	  which are the recent dual and quad G5 machines using the
	  970MP dual-core processor.

config WINDFARM_PM121
	tristate "Support for thermal management on PowerMac12,1"
	depends on WINDFARM && I2C && PMAC_SMU
	select I2C_POWERMAC
	help
	  This driver provides thermal control for the PowerMac12,1
	  which is the iMac G5 (iSight).

config ANSLCD
	tristate "Support for ANS LCD display"
	depends on ADB_CUDA && PPC_PMAC

config PMAC_RACKMETER
	tristate "Support for Apple XServe front panel LEDs"
	depends on PPC_PMAC
	help
	  This driver provides some support to control the front panel
	  blue LEDs "vu-meter" of the XServer macs.

config SENSORS_AMS
	tristate "Apple Motion Sensor driver"
	depends on PPC_PMAC && !PPC64 && INPUT && ((ADB_PMU && I2C = y) || (ADB_PMU && !I2C) || I2C)
	help
	  Support for the motion sensor included in PowerBooks. Includes
	  implementations for PMU and I2C.

	  This driver can also be built as a module. If so, the module
	  will be called ams.

config SENSORS_AMS_PMU
	bool "PMU variant"
	depends on SENSORS_AMS && ADB_PMU
	default y
	help
	  PMU variant of motion sensor, found in late 2005 PowerBooks.

config SENSORS_AMS_I2C
	bool "I2C variant"
	depends on SENSORS_AMS && I2C
	default y
	help
	  I2C variant of motion sensor, found in early 2005 PowerBooks and
	  iBooks.

endif # MACINTOSH_DRIVERS
