Skip to content

Commit 040dcd7

Browse files
ahunter6alexandrebelloni
authored andcommitted
i3c: mipi-i3c-hci-pci: Add exit callback
Prepare to add device-specific features that require cleanup upon driver removal. Add ->exit() callback as a counterpart to ->init(). Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20251128064038.55158-11-adrian.hunter@intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
1 parent 0f9ef14 commit 040dcd7

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
struct mipi_i3c_hci_pci {
1818
struct pci_dev *pci;
1919
struct platform_device *pdev;
20+
const struct mipi_i3c_hci_pci_info *info;
2021
};
2122

2223
struct mipi_i3c_hci_pci_info {
2324
int (*init)(struct mipi_i3c_hci_pci *hci);
25+
void (*exit)(struct mipi_i3c_hci_pci *hci);
2426
};
2527

2628
static DEFINE_IDA(mipi_i3c_hci_pci_ida);
@@ -72,7 +74,6 @@ static const struct mipi_i3c_hci_pci_info intel_info = {
7274
static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
7375
const struct pci_device_id *id)
7476
{
75-
const struct mipi_i3c_hci_pci_info *info;
7677
struct mipi_i3c_hci_pci *hci;
7778
struct resource res[2];
7879
int dev_id, ret;
@@ -114,21 +115,24 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
114115
if (ret)
115116
goto err;
116117

117-
info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
118-
if (info && info->init) {
119-
ret = info->init(hci);
118+
hci->info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
119+
if (hci->info && hci->info->init) {
120+
ret = hci->info->init(hci);
120121
if (ret)
121122
goto err;
122123
}
123124

124125
ret = platform_device_add(hci->pdev);
125126
if (ret)
126-
goto err;
127+
goto err_exit;
127128

128129
pci_set_drvdata(pci, hci);
129130

130131
return 0;
131132

133+
err_exit:
134+
if (hci->info && hci->info->exit)
135+
hci->info->exit(hci);
132136
err:
133137
platform_device_put(hci->pdev);
134138
ida_free(&mipi_i3c_hci_pci_ida, dev_id);
@@ -141,6 +145,9 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
141145
struct platform_device *pdev = hci->pdev;
142146
int dev_id = pdev->id;
143147

148+
if (hci->info && hci->info->exit)
149+
hci->info->exit(hci);
150+
144151
platform_device_unregister(pdev);
145152
ida_free(&mipi_i3c_hci_pci_ida, dev_id);
146153
}

0 commit comments

Comments
 (0)