Skip to content

Commit 9bc5f4f

Browse files
svenpeter42wsakernel
authored andcommitted
i2c: pasemi: Split pci driver to its own file
Split off the PCI driver so that we can reuse common code for the platform driver. Reviewed-by: Arnd Bergmann <[email protected]> Signed-off-by: Sven Peter <[email protected]> Acked-by: Olof Johansson <[email protected]> Tested-by: Christian Zigotzky <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent 6adb00c commit 9bc5f4f

File tree

4 files changed

+118
-86
lines changed

4 files changed

+118
-86
lines changed

drivers/i2c/busses/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ obj-$(CONFIG_I2C_NPCM7XX) += i2c-npcm7xx.o
8484
obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o
8585
obj-$(CONFIG_I2C_OMAP) += i2c-omap.o
8686
obj-$(CONFIG_I2C_OWL) += i2c-owl.o
87+
i2c-pasemi-objs := i2c-pasemi-core.o i2c-pasemi-pci.o
8788
obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
8889
obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pca-platform.o
8990
obj-$(CONFIG_I2C_PNX) += i2c-pnx.o

drivers/i2c/busses/i2c-pasemi.c renamed to drivers/i2c/busses/i2c-pasemi-core.c

Lines changed: 2 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,7 @@
1515
#include <linux/slab.h>
1616
#include <linux/io.h>
1717

18-
static struct pci_driver pasemi_smb_driver;
19-
20-
struct pasemi_smbus {
21-
struct device *dev;
22-
struct i2c_adapter adapter;
23-
void __iomem *ioaddr;
24-
unsigned long base;
25-
int size;
26-
};
18+
#include "i2c-pasemi-core.h"
2719

2820
/* Register offsets */
2921
#define REG_MTXFIFO 0x00
@@ -329,7 +321,7 @@ static const struct i2c_algorithm smbus_algorithm = {
329321
.functionality = pasemi_smb_func,
330322
};
331323

332-
static int pasemi_i2c_common_probe(struct pasemi_smbus *smbus)
324+
int pasemi_i2c_common_probe(struct pasemi_smbus *smbus)
333325
{
334326
int error;
335327

@@ -352,79 +344,3 @@ static int pasemi_i2c_common_probe(struct pasemi_smbus *smbus)
352344

353345
return 0;
354346
}
355-
356-
static int pasemi_smb_probe(struct pci_dev *dev,
357-
const struct pci_device_id *id)
358-
{
359-
struct pasemi_smbus *smbus;
360-
int error;
361-
362-
if (!(pci_resource_flags(dev, 0) & IORESOURCE_IO))
363-
return -ENODEV;
364-
365-
smbus = kzalloc(sizeof(struct pasemi_smbus), GFP_KERNEL);
366-
if (!smbus)
367-
return -ENOMEM;
368-
369-
smbus->dev = &dev->dev;
370-
smbus->base = pci_resource_start(dev, 0);
371-
smbus->size = pci_resource_len(dev, 0);
372-
373-
if (!request_region(smbus->base, smbus->size,
374-
pasemi_smb_driver.name)) {
375-
error = -EBUSY;
376-
goto out_kfree;
377-
}
378-
379-
smbus->ioaddr = pci_iomap(dev, 0, 0);
380-
if (!smbus->ioaddr) {
381-
error = -EBUSY;
382-
goto out_release_region;
383-
}
384-
385-
int error = pasemi_i2c_common_probe(smbus);
386-
if (error)
387-
goto out_ioport_unmap;
388-
389-
pci_set_drvdata(dev, smbus);
390-
391-
return 0;
392-
393-
out_ioport_unmap:
394-
pci_iounmap(dev, smbus->ioaddr);
395-
out_release_region:
396-
release_region(smbus->base, smbus->size);
397-
out_kfree:
398-
kfree(smbus);
399-
return error;
400-
}
401-
402-
static void pasemi_smb_remove(struct pci_dev *dev)
403-
{
404-
struct pasemi_smbus *smbus = pci_get_drvdata(dev);
405-
406-
i2c_del_adapter(&smbus->adapter);
407-
pci_iounmap(dev, smbus->ioaddr);
408-
release_region(smbus->base, smbus->size);
409-
kfree(smbus);
410-
}
411-
412-
static const struct pci_device_id pasemi_smb_ids[] = {
413-
{ PCI_DEVICE(0x1959, 0xa003) },
414-
{ 0, }
415-
};
416-
417-
MODULE_DEVICE_TABLE(pci, pasemi_smb_ids);
418-
419-
static struct pci_driver pasemi_smb_driver = {
420-
.name = "i2c-pasemi",
421-
.id_table = pasemi_smb_ids,
422-
.probe = pasemi_smb_probe,
423-
.remove = pasemi_smb_remove,
424-
};
425-
426-
module_pci_driver(pasemi_smb_driver);
427-
428-
MODULE_LICENSE("GPL");
429-
MODULE_AUTHOR ("Olof Johansson <[email protected]>");
430-
MODULE_DESCRIPTION("PA Semi PWRficient SMBus driver");

drivers/i2c/busses/i2c-pasemi-core.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
#include <linux/atomic.h>
3+
#include <linux/clk.h>
4+
#include <linux/delay.h>
5+
#include <linux/device.h>
6+
#include <linux/i2c.h>
7+
#include <linux/i2c-smbus.h>
8+
#include <linux/io.h>
9+
#include <linux/kernel.h>
10+
11+
struct pasemi_smbus {
12+
struct device *dev;
13+
struct i2c_adapter adapter;
14+
void __iomem *ioaddr;
15+
unsigned long base;
16+
int size;
17+
};
18+
19+
int pasemi_i2c_common_probe(struct pasemi_smbus *smbus);

drivers/i2c/busses/i2c-pasemi-pci.c

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
/*
3+
* Copyright (C) 2006-2007 PA Semi, Inc
4+
*
5+
* SMBus host driver for PA Semi PWRficient
6+
*/
7+
8+
#include <linux/module.h>
9+
#include <linux/pci.h>
10+
#include <linux/kernel.h>
11+
#include <linux/stddef.h>
12+
#include <linux/sched.h>
13+
#include <linux/i2c.h>
14+
#include <linux/delay.h>
15+
#include <linux/slab.h>
16+
#include <linux/io.h>
17+
18+
#include "i2c-pasemi-core.h"
19+
20+
static struct pci_driver pasemi_smb_pci_driver;
21+
22+
static int pasemi_smb_pci_probe(struct pci_dev *dev,
23+
const struct pci_device_id *id)
24+
{
25+
struct pasemi_smbus *smbus;
26+
int error;
27+
28+
if (!(pci_resource_flags(dev, 0) & IORESOURCE_IO))
29+
return -ENODEV;
30+
31+
smbus = kzalloc(sizeof(struct pasemi_smbus), GFP_KERNEL);
32+
if (!smbus)
33+
return -ENOMEM;
34+
35+
smbus->dev = &dev->dev;
36+
smbus->base = pci_resource_start(dev, 0);
37+
smbus->size = pci_resource_len(dev, 0);
38+
39+
if (!request_region(smbus->base, smbus->size,
40+
pasemi_smb_pci_driver.name)) {
41+
error = -EBUSY;
42+
goto out_kfree;
43+
}
44+
45+
smbus->ioaddr = pci_iomap(dev, 0, 0);
46+
if (!smbus->ioaddr) {
47+
error = -EBUSY;
48+
goto out_release_region;
49+
}
50+
51+
error = pasemi_i2c_common_probe(smbus);
52+
if (error)
53+
goto out_ioport_unmap;
54+
55+
pci_set_drvdata(dev, smbus);
56+
57+
return 0;
58+
59+
out_ioport_unmap:
60+
pci_iounmap(dev, smbus->ioaddr);
61+
out_release_region:
62+
release_region(smbus->base, smbus->size);
63+
out_kfree:
64+
kfree(smbus);
65+
return error;
66+
}
67+
68+
static void pasemi_smb_pci_remove(struct pci_dev *dev)
69+
{
70+
struct pasemi_smbus *smbus = pci_get_drvdata(dev);
71+
72+
i2c_del_adapter(&smbus->adapter);
73+
pci_iounmap(dev, smbus->ioaddr);
74+
release_region(smbus->base, smbus->size);
75+
kfree(smbus);
76+
}
77+
78+
static const struct pci_device_id pasemi_smb_pci_ids[] = {
79+
{ PCI_DEVICE(0x1959, 0xa003) },
80+
{ 0, }
81+
};
82+
83+
MODULE_DEVICE_TABLE(pci, pasemi_smb_pci_ids);
84+
85+
static struct pci_driver pasemi_smb_pci_driver = {
86+
.name = "i2c-pasemi",
87+
.id_table = pasemi_smb_pci_ids,
88+
.probe = pasemi_smb_pci_probe,
89+
.remove = pasemi_smb_pci_remove,
90+
};
91+
92+
module_pci_driver(pasemi_smb_pci_driver);
93+
94+
MODULE_LICENSE("GPL");
95+
MODULE_AUTHOR("Olof Johansson <[email protected]>");
96+
MODULE_DESCRIPTION("PA Semi PWRficient SMBus driver");

0 commit comments

Comments
 (0)