pinctrl: mcp23s08: spi: Fix duplicate pinctrl debugfs entries
This is a bit more involved because the pinctrl core so far always assumed that one device (with a unique dev_name) only contains a single pinctrl thing. This is not true for the mcp23s08 driver for chips connected over SPI. They have a "logical address" which means that several chips can share one physical CS signal. A downside of this patch are some possibly ugly names for the debugfs entries, such as "spi1.1-mcp23xxx-pinctrl.2", etc. Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Родитель
ed23175141
Коммит
1781af563a
|
@ -1866,9 +1866,23 @@ static struct dentry *debugfs_root;
|
|||
static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
|
||||
{
|
||||
struct dentry *device_root;
|
||||
const char *debugfs_name;
|
||||
|
||||
device_root = debugfs_create_dir(dev_name(pctldev->dev),
|
||||
debugfs_root);
|
||||
if (pctldev->desc->name &&
|
||||
strcmp(dev_name(pctldev->dev), pctldev->desc->name)) {
|
||||
debugfs_name = devm_kasprintf(pctldev->dev, GFP_KERNEL,
|
||||
"%s-%s", dev_name(pctldev->dev),
|
||||
pctldev->desc->name);
|
||||
if (!debugfs_name) {
|
||||
pr_warn("failed to determine debugfs dir name for %s\n",
|
||||
dev_name(pctldev->dev));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
debugfs_name = dev_name(pctldev->dev);
|
||||
}
|
||||
|
||||
device_root = debugfs_create_dir(debugfs_name, debugfs_root);
|
||||
pctldev->device_root = device_root;
|
||||
|
||||
if (IS_ERR(device_root) || !device_root) {
|
||||
|
|
|
@ -918,7 +918,14 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
|
|||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
mcp->pinctrl_desc.name = "mcp23xxx-pinctrl";
|
||||
if (one_regmap_config) {
|
||||
mcp->pinctrl_desc.name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"mcp23xxx-pinctrl.%d", raw_chip_address);
|
||||
if (!mcp->pinctrl_desc.name)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
mcp->pinctrl_desc.name = "mcp23xxx-pinctrl";
|
||||
}
|
||||
mcp->pinctrl_desc.pctlops = &mcp_pinctrl_ops;
|
||||
mcp->pinctrl_desc.confops = &mcp_pinconf_ops;
|
||||
mcp->pinctrl_desc.npins = mcp->chip.ngpio;
|
||||
|
|
Загрузка…
Ссылка в новой задаче