serial: max310x: use separate regmap name for each port
authorHugo Villeneuve <hvilleneuve@dimonoff.com>
Thu, 18 Jan 2024 15:22:04 +0000 (10:22 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 28 Jan 2024 03:05:04 +0000 (19:05 -0800)
Use a separate regmap name for each port so they can each have their own
debugfs entry, allowing to access each port registers independently.

For example, a four channels/ports device like the MAX14830 will have four
entries in its regmap debugfs:

$ find /sys/kernel/debug/regmap -type d | grep spi0.0
/sys/kernel/debug/regmap/spi0.0-port0
/sys/kernel/debug/regmap/spi0.0-port1
/sys/kernel/debug/regmap/spi0.0-port2
/sys/kernel/debug/regmap/spi0.0-port3

Cc: Jan Kundrát <jan.kundrat@cesnet.cz>
Link: https://lore.kernel.org/all/77f101f1-897d-4e6d-a8fd-27b818caf768@cesnet.cz/
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Link: https://lore.kernel.org/r/20240118152213.2644269-9-hugo@hugovil.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/max310x.c

index 6549eee4f6a61ae827fe9d4ae99ff4d6d11f92f6..d6219077d23c99dee73bb1d8f013059cdf40b24e 100644 (file)
@@ -1486,6 +1486,19 @@ 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)
 {
@@ -1521,6 +1534,8 @@ static int max310x_spi_probe(struct spi_device *spi)
 
        for (i = 0; i < devtype->nr; i++) {
                u8 port_mask = i * 0x20;
+
+               regcfg.name = max310x_regmap_name(i);
                regcfg.read_flag_mask = port_mask;
                regcfg.write_flag_mask = port_mask | MAX310X_WRITE_BIT;
                regmaps[i] = devm_regmap_init_spi(spi, &regcfg);
@@ -1620,6 +1635,7 @@ static int max310x_i2c_probe(struct i2c_client *client)
                                     client->addr, devtype->slave_addr.min,
                                     devtype->slave_addr.max);
 
+       regcfg_i2c.name = max310x_regmap_name(0);
        regmaps[0] = devm_regmap_init_i2c(client, &regcfg_i2c);
 
        for (i = 1; i < devtype->nr; i++) {
@@ -1628,6 +1644,7 @@ static int max310x_i2c_probe(struct i2c_client *client)
                                                        client->adapter,
                                                        port_addr);
 
+               regcfg_i2c.name = max310x_regmap_name(i);
                regmaps[i] = devm_regmap_init_i2c(port_client, &regcfg_i2c);
        }