[PATCH] serial: max310x: fix I2C-only build

From: Arnd Bergmann

Date: Tue May 19 2026 - 16:35:34 EST


From: Arnd Bergmann <arnd@xxxxxxxx>

Allowing the driver to be built when CONFIG_SPI_MASTER is turned off
now causes build failures:

drivers/tty/serial/max310x.c: In function 'max310x_uart_init':
drivers/tty/serial/max310x.c:1737:32: error: 'max310x_spi_driver' undeclared (first use in this function); did you mean 'max310x_i2c_driver'?
1737 | spi_unregister_driver(&max310x_spi_driver);
| ^~~~~~~~~~~~~~~~~~
| max310x_i2c_driver
drivers/tty/serial/max310x.c:1737:32: note: each undeclared identifier is reported only once for each function it appears in
drivers/tty/serial/max310x.c:1740:1: error: label 'err_spi_register' defined but not used [-Werror=unused-label]
1740 | err_spi_register:
| ^~~~~~~~~~~~~~~~
drivers/tty/serial/max310x.c: At top level:
drivers/tty/serial/max310x.c:1502:29: error: 'regcfg' defined but not used [-Werror=unused-variable]
1502 | static struct regmap_config regcfg = {
| ^~~~~~

While fixing this, I ran into another problem with I2C=m, which
previously would just not use I2C support.

Fix the #ifdef checks to handle all combinations correctly, and
change the Kconfig dependency to ensure that the driver cannot
be built-in when I2C=m.

Fixes: 20ffe4b3330a ("serial: max310x: allow driver to be built with SPI or I2C")
Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
---
drivers/tty/serial/Kconfig | 1 +
drivers/tty/serial/max310x.c | 40 +++++++++++++++++++-----------------
2 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 811250bbbd39..b9b40e80ea81 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -323,6 +323,7 @@ config SERIAL_MAX3100
config SERIAL_MAX310X
tristate "MAX310X support"
depends on SPI_MASTER || I2C
+ depends on I2C || !I2C
select SERIAL_CORE
select REGMAP_SPI if SPI_MASTER
select REGMAP_I2C if I2C
diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
index 5168490a1cbb..042ae962c1f6 100644
--- a/drivers/tty/serial/max310x.c
+++ b/drivers/tty/serial/max310x.c
@@ -1499,6 +1499,20 @@ static const struct of_device_id __maybe_unused max310x_dt_ids[] = {
};
MODULE_DEVICE_TABLE(of, max310x_dt_ids);

+static const char *max310x_regmap_name(u8 port_id)
+{
+ switch (port_id) {
+ case 0: return "port0";
+ case 1: return "port1";
+ case 2: return "port2";
+ case 3: return "port3";
+ default:
+ WARN_ON(true);
+ return NULL;
+ }
+}
+
+#ifdef CONFIG_SPI_MASTER
static struct regmap_config regcfg = {
.reg_bits = 8,
.val_bits = 8,
@@ -1514,20 +1528,6 @@ static struct regmap_config regcfg = {
.max_raw_write = MAX310X_FIFO_SIZE,
};

-static const char *max310x_regmap_name(u8 port_id)
-{
- switch (port_id) {
- case 0: return "port0";
- case 1: return "port1";
- case 2: return "port2";
- case 3: return "port3";
- default:
- WARN_ON(true);
- return NULL;
- }
-}
-
-#ifdef CONFIG_SPI_MASTER
static int max310x_spi_extended_reg_enable(struct device *dev, bool enable)
{
struct max310x_port *s = dev_get_drvdata(dev);
@@ -1598,7 +1598,7 @@ static struct spi_driver max310x_spi_driver = {
};
#endif

-#ifdef CONFIG_I2C
+#if IS_ENABLED(CONFIG_I2C)
static int max310x_i2c_extended_reg_enable(struct device *dev, bool enable)
{
return 0;
@@ -1724,7 +1724,7 @@ static int __init max310x_uart_init(void)
goto err_spi_register;
#endif

-#ifdef CONFIG_I2C
+#if IS_ENABLED(CONFIG_I2C)
ret = i2c_add_driver(&max310x_i2c_driver);
if (ret)
goto err_i2c_register;
@@ -1732,12 +1732,14 @@ static int __init max310x_uart_init(void)

return 0;

-#ifdef CONFIG_I2C
+#if IS_ENABLED(CONFIG_I2C)
err_i2c_register:
+#endif
+#ifdef CONFIG_SPI_MASTER
spi_unregister_driver(&max310x_spi_driver);
+err_spi_register:
#endif

-err_spi_register:
uart_unregister_driver(&max310x_uart);

return ret;
@@ -1746,7 +1748,7 @@ module_init(max310x_uart_init);

static void __exit max310x_uart_exit(void)
{
-#ifdef CONFIG_I2C
+#if IS_ENABLED(CONFIG_I2C)
i2c_del_driver(&max310x_i2c_driver);
#endif

--
2.39.5