Commit af340b7a authored by Marek Behún's avatar Marek Behún Committed by Arnd Bergmann

platform: cznic: turris-omnia-mcu: Make GPIO code optional

Make the GPIO part of the driver optional, under a boolean config
option. Move the dependency to GPIOLIB and OF and the selection of
GPIOLIB_IRQCHIP to this new option.

This makes the turris-omnia-mcu driver available for compilation even if
GPIOLIB or OF are disabled.

Fixes: ed46f1f7 ("platform: cznic: turris-omnia-mcu: fix Kconfig dependencies")
Signed-off-by: default avatarMarek Behún <kabel@kernel.org>
Link: https://lore.kernel.org/r/20240719085756.30598-5-kabel@kernel.orgSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 74a22fce
...@@ -16,31 +16,38 @@ config TURRIS_OMNIA_MCU ...@@ -16,31 +16,38 @@ config TURRIS_OMNIA_MCU
tristate "Turris Omnia MCU driver" tristate "Turris Omnia MCU driver"
depends on MACH_ARMADA_38X || COMPILE_TEST depends on MACH_ARMADA_38X || COMPILE_TEST
depends on I2C depends on I2C
depends on OF
depends on GPIOLIB
select GPIOLIB_IRQCHIP
help help
Say Y here to add support for the features implemented by the Say Y here to add support for the features implemented by the
microcontroller on the CZ.NIC's Turris Omnia SOHO router. microcontroller on the CZ.NIC's Turris Omnia SOHO router.
The features include: This option only enables the core part of the driver. Specific
- GPIO pins features can be enabled by subsequent config options.
- to get front button press events (the front button can be
configured either to generate press events to the CPU or to change
front LEDs panel brightness)
- to enable / disable USB port voltage regulators and to detect
USB overcurrent
- to detect MiniPCIe / mSATA card presence in MiniPCIe port 0
- to configure resets of various peripherals on board revisions 32+
- to enable / disable the VHV voltage regulator to the SOC in order
to be able to program SOC's OTP on board revisions 32+
- to get input from the LED output pins of the WAN ethernet PHY, LAN
switch and MiniPCIe ports
Other features can be enabled by subsequent config options.
To compile this driver as a module, choose M here; the module will be To compile this driver as a module, choose M here; the module will be
called turris-omnia-mcu. called turris-omnia-mcu.
if TURRIS_OMNIA_MCU if TURRIS_OMNIA_MCU
config TURRIS_OMNIA_MCU_GPIO
bool "Turris Omnia MCU GPIOs"
default y
depends on GPIOLIB
depends on OF
select GPIOLIB_IRQCHIP
help
Say Y here to add support for controlling MCU GPIO pins and receiving
MCU interrupts on CZ.NIC's Turris Omnia.
This enables you to
- get front button press events (the front button can be configured
either to generate press events to the CPU or to change front LEDs
panel brightness),
- enable / disable USB port voltage regulators and to detect USB
overcurrent,
- detect MiniPCIe / mSATA card presence in MiniPCIe port 0,
- configure resets of various peripherals on board revisions 32+,
- enable / disable the VHV voltage regulator to the SOC in order to be
able to program SOC's OTP on board revisions 32+,
- get input from the LED output pins of the WAN ethernet PHY, LAN
switch and MiniPCIe ports.
config TURRIS_OMNIA_MCU_SYSOFF_WAKEUP config TURRIS_OMNIA_MCU_SYSOFF_WAKEUP
bool "Turris Omnia MCU system off and RTC wakeup" bool "Turris Omnia MCU system off and RTC wakeup"
default y default y
...@@ -62,6 +69,7 @@ config TURRIS_OMNIA_MCU_WATCHDOG ...@@ -62,6 +69,7 @@ config TURRIS_OMNIA_MCU_WATCHDOG
config TURRIS_OMNIA_MCU_TRNG config TURRIS_OMNIA_MCU_TRNG
bool "Turris Omnia MCU true random number generator" bool "Turris Omnia MCU true random number generator"
default y default y
depends on TURRIS_OMNIA_MCU_GPIO
depends on HW_RANDOM depends on HW_RANDOM
help help
Say Y here to add support for the true random number generator Say Y here to add support for the true random number generator
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
obj-$(CONFIG_TURRIS_OMNIA_MCU) += turris-omnia-mcu.o obj-$(CONFIG_TURRIS_OMNIA_MCU) += turris-omnia-mcu.o
turris-omnia-mcu-y := turris-omnia-mcu-base.o turris-omnia-mcu-y := turris-omnia-mcu-base.o
turris-omnia-mcu-y += turris-omnia-mcu-gpio.o turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_GPIO) += turris-omnia-mcu-gpio.o
turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP) += turris-omnia-mcu-sys-off-wakeup.o turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP) += turris-omnia-mcu-sys-off-wakeup.o
turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_TRNG) += turris-omnia-mcu-trng.o turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_TRNG) += turris-omnia-mcu-trng.o
turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_WATCHDOG) += turris-omnia-mcu-watchdog.o turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_WATCHDOG) += turris-omnia-mcu-watchdog.o
...@@ -197,7 +197,9 @@ static const struct attribute_group omnia_mcu_base_group = { ...@@ -197,7 +197,9 @@ static const struct attribute_group omnia_mcu_base_group = {
static const struct attribute_group *omnia_mcu_groups[] = { static const struct attribute_group *omnia_mcu_groups[] = {
&omnia_mcu_base_group, &omnia_mcu_base_group,
#ifdef CONFIG_TURRIS_OMNIA_MCU_GPIO
&omnia_mcu_gpio_group, &omnia_mcu_gpio_group,
#endif
#ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP #ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP
&omnia_mcu_poweroff_group, &omnia_mcu_poweroff_group,
#endif #endif
......
...@@ -33,6 +33,7 @@ struct omnia_mcu { ...@@ -33,6 +33,7 @@ struct omnia_mcu {
u8 board_first_mac[ETH_ALEN]; u8 board_first_mac[ETH_ALEN];
u8 board_revision; u8 board_revision;
#ifdef CONFIG_TURRIS_OMNIA_MCU_GPIO
/* GPIO chip */ /* GPIO chip */
struct gpio_chip gc; struct gpio_chip gc;
struct mutex lock; struct mutex lock;
...@@ -41,6 +42,7 @@ struct omnia_mcu { ...@@ -41,6 +42,7 @@ struct omnia_mcu {
struct delayed_work button_release_emul_work; struct delayed_work button_release_emul_work;
unsigned long last_status; unsigned long last_status;
bool button_pressed_emul; bool button_pressed_emul;
#endif
#ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP #ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP
/* RTC device for configuring wake-up */ /* RTC device for configuring wake-up */
...@@ -188,9 +190,16 @@ static inline int omnia_cmd_read_u8(const struct i2c_client *client, u8 cmd, ...@@ -188,9 +190,16 @@ static inline int omnia_cmd_read_u8(const struct i2c_client *client, u8 cmd,
return omnia_cmd_read(client, cmd, reply, sizeof(*reply)); return omnia_cmd_read(client, cmd, reply, sizeof(*reply));
} }
#ifdef CONFIG_TURRIS_OMNIA_MCU_GPIO
extern const u8 omnia_int_to_gpio_idx[32]; extern const u8 omnia_int_to_gpio_idx[32];
extern const struct attribute_group omnia_mcu_gpio_group; extern const struct attribute_group omnia_mcu_gpio_group;
int omnia_mcu_register_gpiochip(struct omnia_mcu *mcu); int omnia_mcu_register_gpiochip(struct omnia_mcu *mcu);
#else
static inline int omnia_mcu_register_gpiochip(struct omnia_mcu *mcu)
{
return 0;
}
#endif
#ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP #ifdef CONFIG_TURRIS_OMNIA_MCU_SYSOFF_WAKEUP
extern const struct attribute_group omnia_mcu_poweroff_group; extern const struct attribute_group omnia_mcu_poweroff_group;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment