Commit da8116a9 authored by Adrian Hunter's avatar Adrian Hunter Committed by Alexandre Belloni
Browse files

i3c: mipi-i3c-hci-pci: Allocate a structure for mipi_i3c_hci_pci device information



Allocate a structure for mipi_i3c_hci_pci device information, in
preparation for additional changes that need to store mipi_i3c_hci_pci
device-specific information.

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarFrank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20251128064038.55158-9-adrian.hunter@intel.com


Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 6f6efdd1
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -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);