diff options
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/algos/i2c-algo-bit.c | 5 | ||||
| -rw-r--r-- | drivers/i2c/algos/i2c-algo-pca.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/algos/i2c-algo-pcf.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/algos/i2c-algo-pcf.h | 3 | ||||
| -rw-r--r-- | drivers/i2c/busses/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-acorn.c | 1 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-gpio.c | 98 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-i801.c | 27 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-imx.c | 4 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-isch.c | 10 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-pxa.c | 95 | ||||
| -rw-r--r-- | drivers/i2c/i2c-boardinfo.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/i2c-core.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/i2c-core.h | 3 | ||||
| -rw-r--r-- | drivers/i2c/i2c-dev.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/i2c-smbus.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/muxes/pca9541.c | 13 | ||||
| -rw-r--r-- | drivers/i2c/muxes/pca954x.c | 13 | 
18 files changed, 194 insertions, 97 deletions
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index acba1c686c65..7f0b83219744 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c @@ -15,7 +15,8 @@      You should have received a copy of the GNU General Public License      along with this program; if not, write to the Free Software -    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA.   * ------------------------------------------------------------------------- */  /* With some changes from Frodo Looijaard <[email protected]>, Kyösti Mälkki @@ -111,7 +112,7 @@ static int sclhi(struct i2c_algo_bit_data *adap)  				break;  			return -ETIMEDOUT;  		} -		cond_resched(); +		cpu_relax();  	}  #ifdef DEBUG  	if (jiffies != start && i2c_debug >= 3) diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c index beb9ffe2564b..73133b1063f0 100644 --- a/drivers/i2c/algos/i2c-algo-pca.c +++ b/drivers/i2c/algos/i2c-algo-pca.c @@ -15,7 +15,8 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + *  MA 02110-1301 USA.   */  #include <linux/kernel.h> diff --git a/drivers/i2c/algos/i2c-algo-pcf.c b/drivers/i2c/algos/i2c-algo-pcf.c index 5eebf562ff31..5c2379522aa9 100644 --- a/drivers/i2c/algos/i2c-algo-pcf.c +++ b/drivers/i2c/algos/i2c-algo-pcf.c @@ -16,7 +16,8 @@   *   *  You should have received a copy of the GNU General Public License   *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + *  MA 02110-1301 USA.   *   * With some changes from Kyösti Mälkki <[email protected]> and   * Frodo Looijaard <[email protected]>, and also from Martin Bailey diff --git a/drivers/i2c/algos/i2c-algo-pcf.h b/drivers/i2c/algos/i2c-algo-pcf.h index 5263a9eeb8d7..1ec703ee788d 100644 --- a/drivers/i2c/algos/i2c-algo-pcf.h +++ b/drivers/i2c/algos/i2c-algo-pcf.h @@ -16,7 +16,8 @@      You should have received a copy of the GNU General Public License      along with this program; if not, write to the Free Software -    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		*/ +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA.							*/  /* --------------------------------------------------------------------	*/  /* With some changes from Frodo Looijaard <[email protected]> */ diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig index 71c1b0a7535c..d2c5095deeac 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig @@ -103,6 +103,7 @@ config I2C_I801  	    Patsburg (PCH)  	    DH89xxCC (PCH)  	    Panther Point (PCH) +	    Lynx Point (PCH)  	  This driver can also be built as a module.  If so, the module  	  will be called i2c-i801. diff --git a/drivers/i2c/busses/i2c-acorn.c b/drivers/i2c/busses/i2c-acorn.c index 86796488ef4f..ed9f48d566db 100644 --- a/drivers/i2c/busses/i2c-acorn.c +++ b/drivers/i2c/busses/i2c-acorn.c @@ -19,7 +19,6 @@  #include <mach/hardware.h>  #include <asm/hardware/ioc.h> -#include <asm/system.h>  #define FORCE_ONES	0xdc  #define SCL		0x02 diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c index a651779d9ff7..c0330a41db03 100644 --- a/drivers/i2c/busses/i2c-gpio.c +++ b/drivers/i2c/busses/i2c-gpio.c @@ -14,8 +14,15 @@  #include <linux/module.h>  #include <linux/slab.h>  #include <linux/platform_device.h> - -#include <asm/gpio.h> +#include <linux/gpio.h> +#include <linux/of_gpio.h> +#include <linux/of_i2c.h> + +struct i2c_gpio_private_data { +	struct i2c_adapter adap; +	struct i2c_algo_bit_data bit_data; +	struct i2c_gpio_platform_data pdata; +};  /* Toggle SDA by changing the direction of the pin */  static void i2c_gpio_setsda_dir(void *data, int state) @@ -78,24 +85,62 @@ static int i2c_gpio_getscl(void *data)  	return gpio_get_value(pdata->scl_pin);  } +static int __devinit of_i2c_gpio_probe(struct device_node *np, +			     struct i2c_gpio_platform_data *pdata) +{ +	u32 reg; + +	if (of_gpio_count(np) < 2) +		return -ENODEV; + +	pdata->sda_pin = of_get_gpio(np, 0); +	pdata->scl_pin = of_get_gpio(np, 1); + +	if (!gpio_is_valid(pdata->sda_pin) || !gpio_is_valid(pdata->scl_pin)) { +		pr_err("%s: invalid GPIO pins, sda=%d/scl=%d\n", +		       np->full_name, pdata->sda_pin, pdata->scl_pin); +		return -ENODEV; +	} + +	of_property_read_u32(np, "i2c-gpio,delay-us", &pdata->udelay); + +	if (!of_property_read_u32(np, "i2c-gpio,timeout-ms", ®)) +		pdata->timeout = msecs_to_jiffies(reg); + +	pdata->sda_is_open_drain = +		of_property_read_bool(np, "i2c-gpio,sda-open-drain"); +	pdata->scl_is_open_drain = +		of_property_read_bool(np, "i2c-gpio,scl-open-drain"); +	pdata->scl_is_output_only = +		of_property_read_bool(np, "i2c-gpio,scl-output-only"); + +	return 0; +} +  static int __devinit i2c_gpio_probe(struct platform_device *pdev)  { +	struct i2c_gpio_private_data *priv;  	struct i2c_gpio_platform_data *pdata;  	struct i2c_algo_bit_data *bit_data;  	struct i2c_adapter *adap;  	int ret; -	pdata = pdev->dev.platform_data; -	if (!pdata) -		return -ENXIO; - -	ret = -ENOMEM; -	adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL); -	if (!adap) -		goto err_alloc_adap; -	bit_data = kzalloc(sizeof(struct i2c_algo_bit_data), GFP_KERNEL); -	if (!bit_data) -		goto err_alloc_bit_data; +	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); +	if (!priv) +		return -ENOMEM; +	adap = &priv->adap; +	bit_data = &priv->bit_data; +	pdata = &priv->pdata; + +	if (pdev->dev.of_node) { +		ret = of_i2c_gpio_probe(pdev->dev.of_node, pdata); +		if (ret) +			return ret; +	} else { +		if (!pdev->dev.platform_data) +			return -ENXIO; +		memcpy(pdata, pdev->dev.platform_data, sizeof(*pdata)); +	}  	ret = gpio_request(pdata->sda_pin, "sda");  	if (ret) @@ -143,6 +188,7 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)  	adap->algo_data = bit_data;  	adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;  	adap->dev.parent = &pdev->dev; +	adap->dev.of_node = pdev->dev.of_node;  	/*  	 * If "dev->id" is negative we consider it as zero. @@ -154,7 +200,9 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)  	if (ret)  		goto err_add_bus; -	platform_set_drvdata(pdev, adap); +	of_i2c_register_devices(adap); + +	platform_set_drvdata(pdev, priv);  	dev_info(&pdev->dev, "using pins %u (SDA) and %u (SCL%s)\n",  		 pdata->sda_pin, pdata->scl_pin, @@ -168,34 +216,40 @@ err_add_bus:  err_request_scl:  	gpio_free(pdata->sda_pin);  err_request_sda: -	kfree(bit_data); -err_alloc_bit_data: -	kfree(adap); -err_alloc_adap:  	return ret;  }  static int __devexit i2c_gpio_remove(struct platform_device *pdev)  { +	struct i2c_gpio_private_data *priv;  	struct i2c_gpio_platform_data *pdata;  	struct i2c_adapter *adap; -	adap = platform_get_drvdata(pdev); -	pdata = pdev->dev.platform_data; +	priv = platform_get_drvdata(pdev); +	adap = &priv->adap; +	pdata = &priv->pdata;  	i2c_del_adapter(adap);  	gpio_free(pdata->scl_pin);  	gpio_free(pdata->sda_pin); -	kfree(adap->algo_data); -	kfree(adap);  	return 0;  } +#if defined(CONFIG_OF) +static const struct of_device_id i2c_gpio_dt_ids[] = { +	{ .compatible = "i2c-gpio", }, +	{ /* sentinel */ } +}; + +MODULE_DEVICE_TABLE(of, i2c_gpio_dt_ids); +#endif +  static struct platform_driver i2c_gpio_driver = {  	.driver		= {  		.name	= "i2c-gpio",  		.owner	= THIS_MODULE, +		.of_match_table	= of_match_ptr(i2c_gpio_dt_ids),  	},  	.probe		= i2c_gpio_probe,  	.remove		= __devexit_p(i2c_gpio_remove), diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index 5d2e2816831f..ae2945a5e007 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -2,7 +2,7 @@      Copyright (c) 1998 - 2002  Frodo Looijaard <[email protected]>,      Philip Edelbrock <[email protected]>, and Mark D. Studebaker -    Copyright (C) 2007, 2008   Jean Delvare <[email protected]> +    Copyright (C) 2007 - 2012  Jean Delvare <[email protected]>      Copyright (C) 2010         Intel Corporation,                                 David Woodhouse <[email protected]> @@ -51,6 +51,7 @@    Patsburg (PCH) IDF    0x1d72     32     hard     yes     yes     yes    DH89xxCC (PCH)        0x2330     32     hard     yes     yes     yes    Panther Point (PCH)   0x1e22     32     hard     yes     yes     yes +  Lynx Point (PCH)      0x8c22     32     hard     yes     yes     yes    Features supported by this driver:    Software PEC                     no @@ -105,7 +106,7 @@  #define SMBHSTCNT_KILL		2  /* Other settings */ -#define MAX_TIMEOUT		100 +#define MAX_RETRIES		400  #define ENABLE_INT9		0	/* set to 0x01 to enable - untested */  /* I801 command constants */ @@ -145,6 +146,7 @@  #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS	0x1e22  #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS	0x2330  #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS	0x3b30 +#define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS	0x8c22  struct i801_priv {  	struct i2c_adapter adapter; @@ -215,7 +217,7 @@ static int i801_check_post(struct i801_priv *priv, int status, int timeout)  		dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");  		outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,  		       SMBHSTCNT(priv)); -		msleep(1); +		usleep_range(1000, 2000);  		outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),  		       SMBHSTCNT(priv)); @@ -272,11 +274,11 @@ static int i801_transaction(struct i801_priv *priv, int xact)  	/* We will always wait for a fraction of a second! */  	do { -		msleep(1); +		usleep_range(250, 500);  		status = inb_p(SMBHSTSTS(priv)); -	} while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT)); +	} while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_RETRIES)); -	result = i801_check_post(priv, status, timeout > MAX_TIMEOUT); +	result = i801_check_post(priv, status, timeout > MAX_RETRIES);  	if (result < 0)  		return result; @@ -291,12 +293,12 @@ static void i801_wait_hwpec(struct i801_priv *priv)  	int status;  	do { -		msleep(1); +		usleep_range(250, 500);  		status = inb_p(SMBHSTSTS(priv));  	} while ((!(status & SMBHSTSTS_INTR)) -		 && (timeout++ < MAX_TIMEOUT)); +		 && (timeout++ < MAX_RETRIES)); -	if (timeout > MAX_TIMEOUT) +	if (timeout > MAX_RETRIES)  		dev_dbg(&priv->pci_dev->dev, "PEC Timeout!\n");  	outb_p(status, SMBHSTSTS(priv)); @@ -380,12 +382,12 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,  		/* We will always wait for a fraction of a second! */  		timeout = 0;  		do { -			msleep(1); +			usleep_range(250, 500);  			status = inb_p(SMBHSTSTS(priv));  		} while ((!(status & SMBHSTSTS_BYTE_DONE)) -			 && (timeout++ < MAX_TIMEOUT)); +			 && (timeout++ < MAX_RETRIES)); -		result = i801_check_post(priv, status, timeout > MAX_TIMEOUT); +		result = i801_check_post(priv, status, timeout > MAX_RETRIES);  		if (result < 0)  			return result; @@ -633,6 +635,7 @@ static DEFINE_PCI_DEVICE_TABLE(i801_ids) = {  	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },  	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },  	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) }, +	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },  	{ 0, }  }; diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 124d9c594f40..dfb84b7ee550 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -191,7 +191,7 @@ static int i2c_imx_start(struct imx_i2c_struct *i2c_imx)  	dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); -	clk_enable(i2c_imx->clk); +	clk_prepare_enable(i2c_imx->clk);  	writeb(i2c_imx->ifdr, i2c_imx->base + IMX_I2C_IFDR);  	/* Enable I2C controller */  	writeb(0, i2c_imx->base + IMX_I2C_I2SR); @@ -240,7 +240,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)  	/* Disable I2C controller */  	writeb(0, i2c_imx->base + IMX_I2C_I2CR); -	clk_disable(i2c_imx->clk); +	clk_disable_unprepare(i2c_imx->clk);  }  static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, diff --git a/drivers/i2c/busses/i2c-isch.c b/drivers/i2c/busses/i2c-isch.c index 6561d275b8cf..f90a6057508d 100644 --- a/drivers/i2c/busses/i2c-isch.c +++ b/drivers/i2c/busses/i2c-isch.c @@ -47,7 +47,7 @@  #define SMBBLKDAT	(0x20 + sch_smba)  /* Other settings */ -#define MAX_TIMEOUT	500 +#define MAX_RETRIES	5000  /* I2C constants */  #define SCH_QUICK		0x00 @@ -68,7 +68,7 @@ static int sch_transaction(void)  {  	int temp;  	int result = 0; -	int timeout = 0; +	int retries = 0;  	dev_dbg(&sch_adapter.dev, "Transaction (pre): CNT=%02x, CMD=%02x, "  		"ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb(SMBHSTCNT), @@ -100,12 +100,12 @@ static int sch_transaction(void)  	outb(inb(SMBHSTCNT) | 0x10, SMBHSTCNT);  	do { -		msleep(1); +		usleep_range(100, 200);  		temp = inb(SMBHSTSTS) & 0x0f; -	} while ((temp & 0x08) && (timeout++ < MAX_TIMEOUT)); +	} while ((temp & 0x08) && (retries++ < MAX_RETRIES));  	/* If the SMBus is still busy, we give up */ -	if (timeout > MAX_TIMEOUT) { +	if (retries > MAX_RETRIES) {  		dev_err(&sch_adapter.dev, "SMBus Timeout!\n");  		result = -ETIMEDOUT;  	} diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index d60364650990..f6733267fa9c 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c @@ -29,6 +29,8 @@  #include <linux/errno.h>  #include <linux/interrupt.h>  #include <linux/i2c-pxa.h> +#include <linux/of.h> +#include <linux/of_device.h>  #include <linux/of_i2c.h>  #include <linux/platform_device.h>  #include <linux/err.h> @@ -1044,23 +1046,60 @@ static const struct i2c_algorithm i2c_pxa_pio_algorithm = {  	.functionality	= i2c_pxa_functionality,  }; -static int i2c_pxa_probe(struct platform_device *dev) +static struct of_device_id i2c_pxa_dt_ids[] = { +	{ .compatible = "mrvl,pxa-i2c", .data = (void *)REGS_PXA2XX }, +	{ .compatible = "mrvl,pwri2c", .data = (void *)REGS_PXA3XX }, +	{ .compatible = "mrvl,mmp-twsi", .data = (void *)REGS_PXA2XX }, +	{} +}; +MODULE_DEVICE_TABLE(of, i2c_pxa_dt_ids); + +static int i2c_pxa_probe_dt(struct platform_device *pdev, struct pxa_i2c *i2c, +			    enum pxa_i2c_types *i2c_types)  { -	struct pxa_i2c *i2c; -	struct resource *res; -	struct i2c_pxa_platform_data *plat = dev->dev.platform_data; -	const struct platform_device_id *id = platform_get_device_id(dev); -	enum pxa_i2c_types i2c_type = id->driver_data; +	struct device_node *np = pdev->dev.of_node; +	const struct of_device_id *of_id = +			of_match_device(i2c_pxa_dt_ids, &pdev->dev);  	int ret; -	int irq; -	res = platform_get_resource(dev, IORESOURCE_MEM, 0); -	irq = platform_get_irq(dev, 0); -	if (res == NULL || irq < 0) -		return -ENODEV; +	if (!of_id) +		return 1; +	ret = of_alias_get_id(np, "i2c"); +	if (ret < 0) { +		dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret); +		return ret; +	} +	pdev->id = ret; +	if (of_get_property(np, "mrvl,i2c-polling", NULL)) +		i2c->use_pio = 1; +	if (of_get_property(np, "mrvl,i2c-fast-mode", NULL)) +		i2c->fast_mode = 1; +	*i2c_types = (u32)(of_id->data); +	return 0; +} -	if (!request_mem_region(res->start, resource_size(res), res->name)) -		return -ENOMEM; +static int i2c_pxa_probe_pdata(struct platform_device *pdev, +			       struct pxa_i2c *i2c, +			       enum pxa_i2c_types *i2c_types) +{ +	struct i2c_pxa_platform_data *plat = pdev->dev.platform_data; +	const struct platform_device_id *id = platform_get_device_id(pdev); + +	*i2c_types = id->driver_data; +	if (plat) { +		i2c->use_pio = plat->use_pio; +		i2c->fast_mode = plat->fast_mode; +	} +	return 0; +} + +static int i2c_pxa_probe(struct platform_device *dev) +{ +	struct i2c_pxa_platform_data *plat = dev->dev.platform_data; +	enum pxa_i2c_types i2c_type; +	struct pxa_i2c *i2c; +	struct resource *res = NULL; +	int ret, irq;  	i2c = kzalloc(sizeof(struct pxa_i2c), GFP_KERNEL);  	if (!i2c) { @@ -1068,6 +1107,24 @@ static int i2c_pxa_probe(struct platform_device *dev)  		goto emalloc;  	} +	ret = i2c_pxa_probe_dt(dev, i2c, &i2c_type); +	if (ret > 0) +		ret = i2c_pxa_probe_pdata(dev, i2c, &i2c_type); +	if (ret < 0) +		goto eclk; + +	res = platform_get_resource(dev, IORESOURCE_MEM, 0); +	irq = platform_get_irq(dev, 0); +	if (res == NULL || irq < 0) { +		ret = -ENODEV; +		goto eclk; +	} + +	if (!request_mem_region(res->start, resource_size(res), res->name)) { +		ret = -ENOMEM; +		goto eclk; +	} +  	i2c->adap.owner   = THIS_MODULE;  	i2c->adap.retries = 5; @@ -1109,21 +1166,16 @@ static int i2c_pxa_probe(struct platform_device *dev)  	i2c->slave_addr = I2C_PXA_SLAVE_ADDR; -#ifdef CONFIG_I2C_PXA_SLAVE  	if (plat) { +#ifdef CONFIG_I2C_PXA_SLAVE  		i2c->slave_addr = plat->slave_addr;  		i2c->slave = plat->slave; -	}  #endif - -	clk_enable(i2c->clk); - -	if (plat) {  		i2c->adap.class = plat->class; -		i2c->use_pio = plat->use_pio; -		i2c->fast_mode = plat->fast_mode;  	} +	clk_enable(i2c->clk); +  	if (i2c->use_pio) {  		i2c->adap.algo = &i2c_pxa_pio_algorithm;  	} else { @@ -1234,6 +1286,7 @@ static struct platform_driver i2c_pxa_driver = {  		.name	= "pxa2xx-i2c",  		.owner	= THIS_MODULE,  		.pm	= I2C_PXA_DEV_PM_OPS, +		.of_match_table = i2c_pxa_dt_ids,  	},  	.id_table	= i2c_pxa_id_table,  }; diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c index 10274ffb66d7..f24cc64e2e8c 100644 --- a/drivers/i2c/i2c-boardinfo.c +++ b/drivers/i2c/i2c-boardinfo.c @@ -13,7 +13,8 @@   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA.   */  #include <linux/kernel.h> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index e9c18939eda7..feb7dc359186 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -14,7 +14,8 @@      You should have received a copy of the GNU General Public License      along with this program; if not, write to the Free Software -    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		     */ +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA.							     */  /* ------------------------------------------------------------------------- */  /* With some changes from Kyösti Mälkki <[email protected]>. diff --git a/drivers/i2c/i2c-core.h b/drivers/i2c/i2c-core.h index 9f9c57ff6708..18a8fd21d2c2 100644 --- a/drivers/i2c/i2c-core.h +++ b/drivers/i2c/i2c-core.h @@ -13,7 +13,8 @@   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA.   */  #include <linux/rwsem.h> diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index 10e7f1e76586..45048323b75e 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c @@ -17,7 +17,8 @@      You should have received a copy of the GNU General Public License      along with this program; if not, write to the Free Software -    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA.  */  /* Note that this is a complete rewrite of Simon Vogl's i2c-dev module. diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c index f61ccc1e5ea3..9836d08f7a77 100644 --- a/drivers/i2c/i2c-smbus.c +++ b/drivers/i2c/i2c-smbus.c @@ -16,7 +16,8 @@   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA.   */  #include <linux/kernel.h> diff --git a/drivers/i2c/muxes/pca9541.c b/drivers/i2c/muxes/pca9541.c index ed699c5aa79d..e0df9b6c66b3 100644 --- a/drivers/i2c/muxes/pca9541.c +++ b/drivers/i2c/muxes/pca9541.c @@ -393,18 +393,7 @@ static struct i2c_driver pca9541_driver = {  	.id_table = pca9541_id,  }; -static int __init pca9541_init(void) -{ -	return i2c_add_driver(&pca9541_driver); -} - -static void __exit pca9541_exit(void) -{ -	i2c_del_driver(&pca9541_driver); -} - -module_init(pca9541_init); -module_exit(pca9541_exit); +module_i2c_driver(pca9541_driver);  MODULE_AUTHOR("Guenter Roeck <[email protected]>");  MODULE_DESCRIPTION("PCA9541 I2C master selector driver"); diff --git a/drivers/i2c/muxes/pca954x.c b/drivers/i2c/muxes/pca954x.c index 6f8953664636..0e37ef27aa12 100644 --- a/drivers/i2c/muxes/pca954x.c +++ b/drivers/i2c/muxes/pca954x.c @@ -284,18 +284,7 @@ static struct i2c_driver pca954x_driver = {  	.id_table	= pca954x_id,  }; -static int __init pca954x_init(void) -{ -	return i2c_add_driver(&pca954x_driver); -} - -static void __exit pca954x_exit(void) -{ -	i2c_del_driver(&pca954x_driver); -} - -module_init(pca954x_init); -module_exit(pca954x_exit); +module_i2c_driver(pca954x_driver);  MODULE_AUTHOR("Rodolfo Giometti <[email protected]>");  MODULE_DESCRIPTION("PCA954x I2C mux/switch driver");  |