mirror of https://gitee.com/openkylin/linux.git
[PATCH] I2C-MPC: Remove OCP device model support
All consumers of the driver MPC10x, MPC52xx, MPC824x, MPC83xx, and MPC85xx are all using platform devices. We can get ride of the dead code to support using this driver with the old OCP based model Signed-off-by: Kumar Gala <kumar.gala@freescale.com> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
3d9077afea
commit
912eaa7198
|
@ -20,13 +20,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <asm/io.h>
|
||||
#ifdef CONFIG_FSL_OCP
|
||||
#include <asm/ocp.h>
|
||||
#define FSL_I2C_DEV_SEPARATE_DFSRR FS_I2C_SEPARATE_DFSRR
|
||||
#define FSL_I2C_DEV_CLOCK_5200 FS_I2C_CLOCK_5200
|
||||
#else
|
||||
#include <linux/fsl_devices.h>
|
||||
#endif
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
|
@ -294,204 +288,6 @@ static struct i2c_adapter mpc_ops = {
|
|||
.retries = 1
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FSL_OCP
|
||||
static int __devinit mpc_i2c_probe(struct ocp_device *ocp)
|
||||
{
|
||||
int result = 0;
|
||||
struct mpc_i2c *i2c;
|
||||
|
||||
if (!(i2c = kmalloc(sizeof(*i2c), GFP_KERNEL))) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(i2c, 0, sizeof(*i2c));
|
||||
|
||||
i2c->irq = ocp->def->irq;
|
||||
i2c->flags = ((struct ocp_fs_i2c_data *)ocp->def->additions)->flags;
|
||||
init_waitqueue_head(&i2c->queue);
|
||||
|
||||
if (!request_mem_region(ocp->def->paddr, MPC_I2C_REGION, "i2c-mpc")) {
|
||||
printk(KERN_ERR "i2c-mpc - resource unavailable\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
i2c->base = ioremap(ocp->def->paddr, MPC_I2C_REGION);
|
||||
|
||||
if (!i2c->base) {
|
||||
printk(KERN_ERR "i2c-mpc - failed to map controller\n");
|
||||
result = -ENOMEM;
|
||||
goto fail_map;
|
||||
}
|
||||
|
||||
if (i2c->irq != OCP_IRQ_NA)
|
||||
{
|
||||
if ((result = request_irq(ocp->def->irq, mpc_i2c_isr,
|
||||
SA_SHIRQ, "i2c-mpc", i2c)) < 0) {
|
||||
printk(KERN_ERR
|
||||
"i2c-mpc - failed to attach interrupt\n");
|
||||
goto fail_irq;
|
||||
}
|
||||
} else
|
||||
i2c->irq = 0;
|
||||
|
||||
mpc_i2c_setclock(i2c);
|
||||
ocp_set_drvdata(ocp, i2c);
|
||||
|
||||
i2c->adap = mpc_ops;
|
||||
i2c_set_adapdata(&i2c->adap, i2c);
|
||||
|
||||
if ((result = i2c_add_adapter(&i2c->adap)) < 0) {
|
||||
printk(KERN_ERR "i2c-mpc - failed to add adapter\n");
|
||||
goto fail_add;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
fail_add:
|
||||
if (ocp->def->irq != OCP_IRQ_NA)
|
||||
free_irq(ocp->def->irq, 0);
|
||||
fail_irq:
|
||||
iounmap(i2c->base);
|
||||
fail_map:
|
||||
release_mem_region(ocp->def->paddr, MPC_I2C_REGION);
|
||||
kfree(i2c);
|
||||
return result;
|
||||
}
|
||||
static void __devexit mpc_i2c_remove(struct ocp_device *ocp)
|
||||
{
|
||||
struct mpc_i2c *i2c = ocp_get_drvdata(ocp);
|
||||
i2c_del_adapter(&i2c->adap);
|
||||
ocp_set_drvdata(ocp, NULL);
|
||||
|
||||
if (ocp->def->irq != OCP_IRQ_NA)
|
||||
free_irq(i2c->irq, i2c);
|
||||
iounmap(i2c->base);
|
||||
release_mem_region(ocp->def->paddr, MPC_I2C_REGION);
|
||||
kfree(i2c);
|
||||
}
|
||||
|
||||
static struct ocp_device_id mpc_iic_ids[] __devinitdata = {
|
||||
{.vendor = OCP_VENDOR_FREESCALE,.function = OCP_FUNC_IIC},
|
||||
{.vendor = OCP_VENDOR_INVALID}
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(ocp, mpc_iic_ids);
|
||||
|
||||
static struct ocp_driver mpc_iic_driver = {
|
||||
.name = "iic",
|
||||
.id_table = mpc_iic_ids,
|
||||
.probe = mpc_i2c_probe,
|
||||
.remove = __devexit_p(mpc_i2c_remove)
|
||||
};
|
||||
|
||||
static int __init iic_init(void)
|
||||
{
|
||||
return ocp_register_driver(&mpc_iic_driver);
|
||||
}
|
||||
|
||||
static void __exit iic_exit(void)
|
||||
{
|
||||
ocp_unregister_driver(&mpc_iic_driver);
|
||||
}
|
||||
|
||||
module_init(iic_init);
|
||||
module_exit(iic_exit);
|
||||
#else
|
||||
static int fsl_i2c_probe(struct device *device)
|
||||
{
|
||||
int result = 0;
|
||||
struct mpc_i2c *i2c;
|
||||
struct platform_device *pdev = to_platform_device(device);
|
||||
struct fsl_i2c_platform_data *pdata;
|
||||
struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
pdata = (struct fsl_i2c_platform_data *) pdev->dev.platform_data;
|
||||
|
||||
if (!(i2c = kmalloc(sizeof(*i2c), GFP_KERNEL))) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(i2c, 0, sizeof(*i2c));
|
||||
|
||||
i2c->irq = platform_get_irq(pdev, 0);
|
||||
i2c->flags = pdata->device_flags;
|
||||
init_waitqueue_head(&i2c->queue);
|
||||
|
||||
i2c->base = ioremap((phys_addr_t)r->start, MPC_I2C_REGION);
|
||||
|
||||
if (!i2c->base) {
|
||||
printk(KERN_ERR "i2c-mpc - failed to map controller\n");
|
||||
result = -ENOMEM;
|
||||
goto fail_map;
|
||||
}
|
||||
|
||||
if (i2c->irq != 0)
|
||||
if ((result = request_irq(i2c->irq, mpc_i2c_isr,
|
||||
SA_SHIRQ, "i2c-mpc", i2c)) < 0) {
|
||||
printk(KERN_ERR
|
||||
"i2c-mpc - failed to attach interrupt\n");
|
||||
goto fail_irq;
|
||||
}
|
||||
|
||||
mpc_i2c_setclock(i2c);
|
||||
dev_set_drvdata(device, i2c);
|
||||
|
||||
i2c->adap = mpc_ops;
|
||||
i2c_set_adapdata(&i2c->adap, i2c);
|
||||
i2c->adap.dev.parent = &pdev->dev;
|
||||
if ((result = i2c_add_adapter(&i2c->adap)) < 0) {
|
||||
printk(KERN_ERR "i2c-mpc - failed to add adapter\n");
|
||||
goto fail_add;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
fail_add:
|
||||
if (i2c->irq != 0)
|
||||
free_irq(i2c->irq, NULL);
|
||||
fail_irq:
|
||||
iounmap(i2c->base);
|
||||
fail_map:
|
||||
kfree(i2c);
|
||||
return result;
|
||||
};
|
||||
|
||||
static int fsl_i2c_remove(struct device *device)
|
||||
{
|
||||
struct mpc_i2c *i2c = dev_get_drvdata(device);
|
||||
|
||||
i2c_del_adapter(&i2c->adap);
|
||||
dev_set_drvdata(device, NULL);
|
||||
|
||||
if (i2c->irq != 0)
|
||||
free_irq(i2c->irq, i2c);
|
||||
|
||||
iounmap(i2c->base);
|
||||
kfree(i2c);
|
||||
return 0;
|
||||
};
|
||||
|
||||
/* Structure for a device driver */
|
||||
static struct device_driver fsl_i2c_driver = {
|
||||
.name = "fsl-i2c",
|
||||
.bus = &platform_bus_type,
|
||||
.probe = fsl_i2c_probe,
|
||||
.remove = fsl_i2c_remove,
|
||||
};
|
||||
|
||||
static int __init fsl_i2c_init(void)
|
||||
{
|
||||
return driver_register(&fsl_i2c_driver);
|
||||
}
|
||||
|
||||
static void __exit fsl_i2c_exit(void)
|
||||
{
|
||||
driver_unregister(&fsl_i2c_driver);
|
||||
}
|
||||
|
||||
module_init(fsl_i2c_init);
|
||||
module_exit(fsl_i2c_exit);
|
||||
|
||||
#endif /* CONFIG_FSL_OCP */
|
||||
|
||||
MODULE_AUTHOR("Adrian Cox <adrian@humboldt.co.uk>");
|
||||
MODULE_DESCRIPTION
|
||||
("I2C-Bus adapter for MPC107 bridge and MPC824x/85xx/52xx processors");
|
||||
|
|
Loading…
Reference in New Issue