diff options
| -rw-r--r-- | drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c index b9794212b2fb..8936e50eddf7 100644 --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c @@ -14,6 +14,10 @@ #include <linux/pci.h> #include <linux/platform_device.h> +struct mipi_i3c_hci_pci { + struct platform_device *pdev; +}; + struct mipi_i3c_hci_pci_info { int (*init)(struct pci_dev *pci); }; @@ -68,10 +72,14 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) { const struct mipi_i3c_hci_pci_info *info; - struct platform_device *pdev; + struct mipi_i3c_hci_pci *hci; struct resource res[2]; int dev_id, ret; + hci = devm_kzalloc(&pci->dev, sizeof(*hci), GFP_KERNEL); + if (!hci) + return -ENOMEM; + ret = pcim_enable_device(pci); if (ret) return ret; @@ -92,14 +100,14 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci, if (dev_id < 0) return dev_id; - pdev = platform_device_alloc("mipi-i3c-hci", dev_id); - if (!pdev) + hci->pdev = platform_device_alloc("mipi-i3c-hci", dev_id); + if (!hci->pdev) return -ENOMEM; - pdev->dev.parent = &pci->dev; - device_set_node(&pdev->dev, dev_fwnode(&pci->dev)); + hci->pdev->dev.parent = &pci->dev; + device_set_node(&hci->pdev->dev, dev_fwnode(&pci->dev)); - ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); + ret = platform_device_add_resources(hci->pdev, res, ARRAY_SIZE(res)); if (ret) goto err; @@ -110,23 +118,24 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci, goto err; } - ret = platform_device_add(pdev); + ret = platform_device_add(hci->pdev); if (ret) goto err; - pci_set_drvdata(pci, pdev); + pci_set_drvdata(pci, hci); return 0; err: - platform_device_put(pdev); + platform_device_put(hci->pdev); ida_free(&mipi_i3c_hci_pci_ida, dev_id); return ret; } static void mipi_i3c_hci_pci_remove(struct pci_dev *pci) { - struct platform_device *pdev = pci_get_drvdata(pci); + struct mipi_i3c_hci_pci *hci = pci_get_drvdata(pci); + struct platform_device *pdev = hci->pdev; int dev_id = pdev->id; platform_device_unregister(pdev); |
