# SPDX-License-Identifier: GPL-2.0
#
# Makefile for the input core drivers.
#

# Each configuration option enables a list of files.

# ADC Keys driver
obj-$(CONFIG_KEYBOARD_ADC)		+= adc-keys-drv.o
adc-keys-drv-y := adc-keys.o
# ADP5520 keyboard driver
obj-$(CONFIG_KEYBOARD_ADP5520)		+= adp5520-keys-drv.o
adp5520-keys-drv-y := adp5520-keys.o
# ADP5588 keyboard driver
obj-$(CONFIG_KEYBOARD_ADP5588)		+= adp5588-keys-drv.o
adp5588-keys-drv-y := adp5588-keys.o
# ADP5589 keyboard driver
obj-$(CONFIG_KEYBOARD_ADP5589)		+= adp5589-keys-drv.o
adp5589-keys-drv-y := adp5589-keys.o
obj-$(CONFIG_KEYBOARD_AMIGA)		+= amikbd.o
# Apple SPI keyboard driver
obj-$(CONFIG_KEYBOARD_APPLESPI)		+= applespi-drv.o
applespi-drv-y := applespi.o
obj-$(CONFIG_KEYBOARD_ATARI)		+= atakbd.o
# AT Keyboard driver
obj-$(CONFIG_KEYBOARD_ATKBD)		+= atkbd-drv.o
atkbd-drv-y := atkbd.o
# BCM Keypad driver
obj-$(CONFIG_KEYBOARD_BCM)		+= bcm-keypad-drv.o
bcm-keypad-drv-y := bcm-keypad.o
# CAP11XX keyboard driver
obj-$(CONFIG_KEYBOARD_CAP11XX)		+= cap11xx-drv.o
cap11xx-drv-y := cap11xx.o
# CLPS711X Keypad driver
obj-$(CONFIG_KEYBOARD_CLPS711X)		+= clps711x-keypad-drv.o
clps711x-keypad-drv-y := clps711x-keypad.o
# ChromeOS EC Keyboard driver
obj-$(CONFIG_KEYBOARD_CROS_EC)		+= cros-ec-keyb-drv.o
cros-ec-keyb-drv-y := cros_ec_keyb.o
# Cypress SF keyboard driver
obj-$(CONFIG_KEYBOARD_CYPRESS_SF)	+= cypress-sf-drv.o
cypress-sf-drv-y := cypress-sf.o
# D-Link DIR685 Touchkeys driver
obj-$(CONFIG_KEYBOARD_DLINK_DIR685)	+= dlink-dir685-touchkeys-drv.o
dlink-dir685-touchkeys-drv-y := dlink-dir685-touchkeys.o
# EP93XX Keypad driver
obj-$(CONFIG_KEYBOARD_EP93XX)		+= ep93xx-keypad-drv.o
ep93xx-keypad-drv-y := ep93xx_keypad.o
# Goldfish Events keyboard driver
obj-$(CONFIG_KEYBOARD_GOLDFISH_EVENTS)	+= goldfish-events-drv.o
goldfish-events-drv-y := goldfish_events.o
obj-$(CONFIG_KEYBOARD_GPIO)			+= gpio_keys-drv.o
gpio_keys-drv-y := gpio_keys.o
# GPIO Keys Polled driver
obj-$(CONFIG_KEYBOARD_GPIO_POLLED)	+= gpio-keys-polled-drv.o
gpio-keys-polled-drv-y := gpio_keys_polled.o
# TCA8418 keyboard driver
obj-$(CONFIG_KEYBOARD_TCA8418)		+= tca8418-keypad-drv.o
tca8418-keypad-drv-y := tca8418_keypad.o
# TCA6416 keypad driver
obj-$(CONFIG_KEYBOARD_TCA6416)		+= tca6416-keypad-drv.o
tca6416-keypad-drv-y := tca6416-keypad.o
obj-$(CONFIG_KEYBOARD_HIL)		+= hil_kbd.o
obj-$(CONFIG_KEYBOARD_HIL_OLD)		+= hilkbd.o
# iPAQ Micro Keys driver
obj-$(CONFIG_KEYBOARD_IPAQ_MICRO)	+= ipaq-micro-keys-drv.o
ipaq-micro-keys-drv-y := ipaq-micro-keys.o
# IQS62X Keys driver
obj-$(CONFIG_KEYBOARD_IQS62X)		+= iqs62x-keys-drv.o
iqs62x-keys-drv-y := iqs62x-keys.o
# i.MX Keypad driver
obj-$(CONFIG_KEYBOARD_IMX)		+= imx-keypad-drv.o
imx-keypad-drv-y := imx_keypad.o
# i.MX SCU Key driver
obj-$(CONFIG_KEYBOARD_IMX_SC_KEY)	+= imx-sc-key-drv.o
imx-sc-key-drv-y := imx_sc_key.o
obj-$(CONFIG_KEYBOARD_HP6XX)		+= jornada680_kbd.o
obj-$(CONFIG_KEYBOARD_HP7XX)		+= jornada720_kbd.o
# LK Keyboard driver
obj-$(CONFIG_KEYBOARD_LKKBD)		+= lkkbd-drv.o
lkkbd-drv-y := lkkbd.o
# LM8333 keyboard driver
obj-$(CONFIG_KEYBOARD_LM8333)		+= lm8333-drv.o
lm8333-drv-y := lm8333.o
# LM8323 keyboard driver (composite object with Rust support)
obj-$(CONFIG_KEYBOARD_LM8323)		+= lm8323-keypad-drv.o
lm8323-keypad-drv-y := lm8323.o
obj-$(CONFIG_KEYBOARD_LOCOMO)		+= locomokbd.o
# LPC32XX Keys driver
obj-$(CONFIG_KEYBOARD_LPC32XX)		+= lpc32xx-keys-drv.o
lpc32xx-keys-drv-y := lpc32xx-keys.o
obj-$(CONFIG_KEYBOARD_MAPLE)		+= maple_keyb.o
# MAX7359 keyboard driver
obj-$(CONFIG_KEYBOARD_MAX7359)		+= max7359-keypad-drv.o
max7359-keypad-drv-y := max7359_keypad.o
# Matrix keypad driver with Rust support
obj-$(CONFIG_KEYBOARD_MATRIX)       +=  matrix-keypad-drv.o
matrix-keypad-drv-y := matrix_keypad.o
# MCS Touchkey driver
obj-$(CONFIG_KEYBOARD_MCS)		+= mcs-touchkey-drv.o
mcs-touchkey-drv-y := mcs_touchkey.o
# MPR121 Touchkey driver
obj-$(CONFIG_KEYBOARD_MPR121)		+= mpr121-touchkey-drv.o
mpr121-touchkey-drv-y := mpr121_touchkey.o
# MT6779 Keypad driver
obj-$(CONFIG_KEYBOARD_MT6779)		+= mt6779-keypad-drv.o
mt6779-keypad-drv-y := mt6779-keypad.o
# MTK PMIC Keys driver
obj-$(CONFIG_KEYBOARD_MTK_PMIC) 	+= mtk-pmic-keys-drv.o
mtk-pmic-keys-drv-y := mtk-pmic-keys.o
# Newton Keyboard driver
obj-$(CONFIG_KEYBOARD_NEWTON)		+= newtonkbd-drv.o
newtonkbd-drv-y := newtonkbd.o
# Nomadik SKE Keypad driver
obj-$(CONFIG_KEYBOARD_NOMADIK)		+= nomadik-ske-keypad-drv.o
nomadik-ske-keypad-drv-y := nomadik-ske-keypad.o
obj-$(CONFIG_KEYBOARD_NSPIRE)		+= nspire-keypad.o
obj-$(CONFIG_KEYBOARD_OMAP)		+= omap-keypad.o
# OMAP4 keyboard driver
obj-$(CONFIG_KEYBOARD_OMAP4)		+= omap4-keypad-drv.o
omap4-keypad-drv-y := omap4-keypad.o
# OpenCores Keyboard driver
obj-$(CONFIG_KEYBOARD_OPENCORES)	+= opencores-kbd-drv.o
opencores-kbd-drv-y := opencores-kbd.o
# PinePhone Keyboard driver
obj-$(CONFIG_KEYBOARD_PINEPHONE)	+= pinephone-keyboard-drv.o
pinephone-keyboard-drv-y := pinephone-keyboard.o
# PMIC8XXX Keypad driver
obj-$(CONFIG_KEYBOARD_PMIC8XXX)		+= pmic8xxx-keypad-drv.o
pmic8xxx-keypad-drv-y := pmic8xxx-keypad.o
obj-$(CONFIG_KEYBOARD_PXA27x)		+= pxa27x_keypad.o
# QT1050 keyboard driver (composite object with Rust support)
obj-$(CONFIG_KEYBOARD_QT1050)           += qt1050-drv.o
qt1050-drv-y := qt1050.o
# QT1070 keyboard driver (composite object with Rust support)
obj-$(CONFIG_KEYBOARD_QT1070)           += qt1070-drv.o
qt1070-drv-y := qt1070.o
obj-$(CONFIG_KEYBOARD_QT2160)		+= qt2160-drv.o
qt2160-drv-y := qt2160.o
# Samsung Keypad driver
obj-$(CONFIG_KEYBOARD_SAMSUNG)		+= samsung-keypad-drv.o
samsung-keypad-drv-y := samsung-keypad.o
# SH KeySC driver
obj-$(CONFIG_KEYBOARD_SH_KEYSC)		+= sh-keysc-drv.o
sh-keysc-drv-y := sh_keysc.o
# SNVS Power Key driver
obj-$(CONFIG_KEYBOARD_SNVS_PWRKEY)	+= snvs-pwrkey-drv.o
snvs-pwrkey-drv-y := snvs_pwrkey.o
# SPEAR Keyboard driver
obj-$(CONFIG_KEYBOARD_SPEAR)		+= spear-keyboard-drv.o
spear-keyboard-drv-y := spear-keyboard.o
# STMPE Keypad driver
obj-$(CONFIG_KEYBOARD_STMPE)		+= stmpe-keypad-drv.o
stmpe-keypad-drv-y := stmpe-keypad.o
# Stowaway Keyboard driver
obj-$(CONFIG_KEYBOARD_STOWAWAY)		+= stowaway-drv.o
stowaway-drv-y := stowaway.o
# ST KeyScan driver
obj-$(CONFIG_KEYBOARD_ST_KEYSCAN)	+= st-keyscan-drv.o
st-keyscan-drv-y := st-keyscan.o

# Sun Keyboard driver
obj-$(CONFIG_KEYBOARD_SUNKBD)		+= sunkbd-drv.o
sunkbd-drv-y := sunkbd.o
# TC3589X Keypad driver
obj-$(CONFIG_KEYBOARD_TC3589X)		+= tc3589x-keypad-drv.o
tc3589x-keypad-drv-y := tc3589x-keypad.o
# Tegra KBC driver
obj-$(CONFIG_KEYBOARD_TEGRA)		+= tegra-kbc-drv.o
tegra-kbc-drv-y := tegra-kbc.o
# TM2 Touchkey driver
obj-$(CONFIG_KEYBOARD_TM2_TOUCHKEY)	+= tm2-touchkey-drv.o
tm2-touchkey-drv-y := tm2-touchkey.o
# TWL4030 Keypad driver
obj-$(CONFIG_KEYBOARD_TWL4030)		+= twl4030-keypad-drv.o
twl4030-keypad-drv-y := twl4030_keypad.o
# XT Keyboard driver
obj-$(CONFIG_KEYBOARD_XTKBD)		+= xtkbd-drv.o
xtkbd-drv-y := xtkbd.o
# Phytium Keypad driver
obj-$(CONFIG_KEYBOARD_PHYTIUM)		+= phytium-keypad-drv.o
phytium-keypad-drv-y := phytium-keypad.o



# Rust driver integration
# Note: shim code is compiled into vmlinux, drivers only need to link Rust objects
# Directory structure is consistent with C code: drivers/rust/drivers/input/keyboard
ifdef CONFIG_RUST_DRIVERS
RUST_DRV := input/keyboard
include $(srctree)/drivers/rust/templates/kbuild-rust-driver.mk

# Link Rust object files to driver modules (shim is already in vmlinux)
adp5520-keys-drv-y += $(RUST_DRV_OBJ)
adp5589-keys-drv-y += $(RUST_DRV_OBJ)
adp5588-keys-drv-y += $(RUST_DRV_OBJ)
gpio_keys-drv-y += $(RUST_DRV_OBJ)
matrix-keypad-drv-y += $(RUST_DRV_OBJ)
max7359-keypad-drv-$(CONFIG_RUST_DRIVERS) += $(RUST_DRV_OBJ)
tca8418-keypad-drv-y += $(RUST_DRV_OBJ)
qt1050-drv-y += $(RUST_DRV_OBJ)
qt1070-drv-y += $(RUST_DRV_OBJ)
tca6416-keypad-drv-y += $(RUST_DRV_OBJ)
omap4-keypad-drv-y += $(RUST_DRV_OBJ)
qt2160-drv-y += $(RUST_DRV_OBJ)
applespi-drv-y += $(RUST_DRV_OBJ)
atkbd-drv-y += $(RUST_DRV_OBJ)
bcm-keypad-drv-y += $(RUST_DRV_OBJ)
cap11xx-drv-y += $(RUST_DRV_OBJ)
clps711x-keypad-drv-y += $(RUST_DRV_OBJ)
cypress-sf-drv-y += $(RUST_DRV_OBJ)
dlink-dir685-touchkeys-drv-y += $(RUST_DRV_OBJ)
ep93xx-keypad-drv-y += $(RUST_DRV_OBJ)
goldfish-events-drv-y += $(RUST_DRV_OBJ)
gpio-keys-polled-drv-y += $(RUST_DRV_OBJ)
lkkbd-drv-y += $(RUST_DRV_OBJ)
lm8333-drv-y += $(RUST_DRV_OBJ)
lpc32xx-keys-drv-y += $(RUST_DRV_OBJ)
mcs-touchkey-drv-y += $(RUST_DRV_OBJ)
mpr121-touchkey-drv-y += $(RUST_DRV_OBJ)
mt6779-keypad-drv-y += $(RUST_DRV_OBJ)
mtk-pmic-keys-drv-y += $(RUST_DRV_OBJ)
newtonkbd-drv-y += $(RUST_DRV_OBJ)
nomadik-ske-keypad-drv-y += $(RUST_DRV_OBJ)
opencores-kbd-drv-y += $(RUST_DRV_OBJ)
phytium-keypad-drv-y += $(RUST_DRV_OBJ)
pinephone-keyboard-drv-y += $(RUST_DRV_OBJ)
samsung-keypad-drv-y += $(RUST_DRV_OBJ)
sh-keysc-drv-y += $(RUST_DRV_OBJ)
snvs-pwrkey-drv-y += $(RUST_DRV_OBJ)
spear-keyboard-drv-y += $(RUST_DRV_OBJ)
st-keyscan-drv-y += $(RUST_DRV_OBJ)
stmpe-keypad-drv-y += $(RUST_DRV_OBJ)
stowaway-drv-y += $(RUST_DRV_OBJ)
sunkbd-drv-y += $(RUST_DRV_OBJ)
tc3589x-keypad-drv-y += $(RUST_DRV_OBJ)
tegra-kbc-drv-y += $(RUST_DRV_OBJ)
tm2-touchkey-drv-y += $(RUST_DRV_OBJ)
twl4030-keypad-drv-y += $(RUST_DRV_OBJ)
xtkbd-drv-y += $(RUST_DRV_OBJ)
imx-keypad-drv-y += $(RUST_DRV_OBJ)
lm8323-keypad-drv-y += $(RUST_DRV_OBJ)
adc-keys-drv-y += $(RUST_DRV_OBJ)
cros-ec-keyb-drv-y += $(RUST_DRV_OBJ)
ipaq-micro-keys-drv-y += $(RUST_DRV_OBJ)
iqs62x-keys-drv-y += $(RUST_DRV_OBJ)
imx-sc-key-drv-y += $(RUST_DRV_OBJ)
pmic8xxx-keypad-drv-y += $(RUST_DRV_OBJ)
endif
