{
        int status, ret;
        bool mirror = false;
+       struct regmap_config *one_regmap_config = NULL;
 
        mutex_init(&mcp->lock);
 
        switch (type) {
 #ifdef CONFIG_SPI_MASTER
        case MCP_TYPE_S08:
-               mcp->regmap = devm_regmap_init(dev, &mcp23sxx_spi_regmap, mcp,
-                                              &mcp23x08_regmap);
-               mcp->reg_shift = 0;
-               mcp->chip.ngpio = 8;
-               mcp->chip.label = "mcp23s08";
-               break;
-
        case MCP_TYPE_S17:
+               switch (type) {
+               case MCP_TYPE_S08:
+                       one_regmap_config =
+                               devm_kmemdup(dev, &mcp23x08_regmap,
+                                       sizeof(struct regmap_config), GFP_KERNEL);
+                       mcp->reg_shift = 0;
+                       mcp->chip.ngpio = 8;
+                       mcp->chip.label = "mcp23s08";
+                       break;
+               case MCP_TYPE_S17:
+                       one_regmap_config =
+                               devm_kmemdup(dev, &mcp23x17_regmap,
+                                       sizeof(struct regmap_config), GFP_KERNEL);
+                       mcp->reg_shift = 1;
+                       mcp->chip.ngpio = 16;
+                       mcp->chip.label = "mcp23s17";
+                       break;
+               }
+               if (!one_regmap_config)
+                       return -ENOMEM;
+
+               one_regmap_config->name = devm_kasprintf(dev, GFP_KERNEL, "%d", (addr & ~0x40) >> 1);
                mcp->regmap = devm_regmap_init(dev, &mcp23sxx_spi_regmap, mcp,
-                                              &mcp23x17_regmap);
-               mcp->reg_shift = 1;
-               mcp->chip.ngpio = 16;
-               mcp->chip.label = "mcp23s17";
+                                              one_regmap_config);
                break;
 
        case MCP_TYPE_S18:
+               if (!one_regmap_config)
+                       return -ENOMEM;
                mcp->regmap = devm_regmap_init(dev, &mcp23sxx_spi_regmap, mcp,
                                               &mcp23x17_regmap);
                mcp->reg_shift = 1;