fsi: Add aliased device numbering
authorEddie James <eajames@linux.ibm.com>
Mon, 12 Jun 2023 19:56:45 +0000 (14:56 -0500)
committerJoel Stanley <joel@jms.id.au>
Wed, 9 Aug 2023 06:11:59 +0000 (15:41 +0930)
The I2C and SPI subsystems can use an aliased name to number the device.
Add similar support to the FSI subsystem for any device type.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Link: https://lore.kernel.org/r/20230612195657.245125-3-eajames@linux.ibm.com
Signed-off-by: Joel Stanley <joel@jms.id.au>
drivers/fsi/fsi-core.c

index 66706e7de010fd463d7ebe83175b3354ef143cd0..778e7d0af34f5fd4100ec7c14204f2ecb278fae6 100644 (file)
@@ -934,9 +934,34 @@ static int __fsi_get_new_minor(struct fsi_slave *slave, enum fsi_dev_type type,
        return 0;
 }
 
+static const char *const fsi_dev_type_names[] = {
+       "cfam",
+       "sbefifo",
+       "scom",
+       "occ",
+};
+
 int fsi_get_new_minor(struct fsi_device *fdev, enum fsi_dev_type type,
                      dev_t *out_dev, int *out_index)
 {
+       if (fdev->dev.of_node) {
+               int aid = of_alias_get_id(fdev->dev.of_node, fsi_dev_type_names[type]);
+
+               if (aid >= 0) {
+                       int id = (aid << 4) | type;
+
+                       id = ida_simple_get(&fsi_minor_ida, id, id + 1, GFP_KERNEL);
+                       if (id >= 0) {
+                               *out_index = aid;
+                               *out_dev = fsi_base_dev + id;
+                               return 0;
+                       }
+
+                       if (id != -ENOSPC)
+                               return id;
+               }
+       }
+
        return __fsi_get_new_minor(fdev->slave, type, out_dev, out_index);
 }
 EXPORT_SYMBOL_GPL(fsi_get_new_minor);