diff options
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/busses/i2c-bcm-kona.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-bcm2835.c | 1 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-davinci.c | 4 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-diolan-u2c.c | 16 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 30 | 
5 files changed, 41 insertions, 13 deletions
| diff --git a/drivers/i2c/busses/i2c-bcm-kona.c b/drivers/i2c/busses/i2c-bcm-kona.c index 036cf03aeb6..18a74a6751a 100644 --- a/drivers/i2c/busses/i2c-bcm-kona.c +++ b/drivers/i2c/busses/i2c-bcm-kona.c @@ -20,7 +20,6 @@  #include <linux/platform_device.h>  #include <linux/clk.h>  #include <linux/io.h> -#include <linux/clk.h>  #include <linux/slab.h>  /* Hardware register offsets and field defintions */ @@ -891,7 +890,7 @@ static const struct of_device_id bcm_kona_i2c_of_match[] = {  	{.compatible = "brcm,kona-i2c",},  	{},  }; -MODULE_DEVICE_TABLE(of, kona_i2c_of_match); +MODULE_DEVICE_TABLE(of, bcm_kona_i2c_of_match);  static struct platform_driver bcm_kona_i2c_driver = {  	.driver = { diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index d7e8600f31f..77df97b932a 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -299,6 +299,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)  	strlcpy(adap->name, "bcm2835 I2C adapter", sizeof(adap->name));  	adap->algo = &bcm2835_i2c_algo;  	adap->dev.parent = &pdev->dev; +	adap->dev.of_node = pdev->dev.of_node;  	bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0); diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index ff05d9fef4a..af0b5830303 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c @@ -125,12 +125,12 @@ static struct davinci_i2c_platform_data davinci_i2c_platform_data_default = {  static inline void davinci_i2c_write_reg(struct davinci_i2c_dev *i2c_dev,  					 int reg, u16 val)  { -	__raw_writew(val, i2c_dev->base + reg); +	writew_relaxed(val, i2c_dev->base + reg);  }  static inline u16 davinci_i2c_read_reg(struct davinci_i2c_dev *i2c_dev, int reg)  { -	return __raw_readw(i2c_dev->base + reg); +	return readw_relaxed(i2c_dev->base + reg);  }  /* Generate a pulse on the i2c clock pin. */ diff --git a/drivers/i2c/busses/i2c-diolan-u2c.c b/drivers/i2c/busses/i2c-diolan-u2c.c index dae3ddfe761..721f7ebf9a3 100644 --- a/drivers/i2c/busses/i2c-diolan-u2c.c +++ b/drivers/i2c/busses/i2c-diolan-u2c.c @@ -25,8 +25,6 @@  #define USB_VENDOR_ID_DIOLAN		0x0abf  #define USB_DEVICE_ID_DIOLAN_U2C	0x3370 -#define DIOLAN_OUT_EP		0x02 -#define DIOLAN_IN_EP		0x84  /* commands via USB, must match command ids in the firmware */  #define CMD_I2C_READ		0x01 @@ -84,6 +82,7 @@  struct i2c_diolan_u2c {  	u8 obuffer[DIOLAN_OUTBUF_LEN];	/* output buffer */  	u8 ibuffer[DIOLAN_INBUF_LEN];	/* input buffer */ +	int ep_in, ep_out;              /* Endpoints    */  	struct usb_device *usb_dev;	/* the usb device for this device */  	struct usb_interface *interface;/* the interface for this device */  	struct i2c_adapter adapter;	/* i2c related things */ @@ -109,7 +108,7 @@ static int diolan_usb_transfer(struct i2c_diolan_u2c *dev)  		return -EINVAL;  	ret = usb_bulk_msg(dev->usb_dev, -			   usb_sndbulkpipe(dev->usb_dev, DIOLAN_OUT_EP), +			   usb_sndbulkpipe(dev->usb_dev, dev->ep_out),  			   dev->obuffer, dev->olen, &actual,  			   DIOLAN_USB_TIMEOUT);  	if (!ret) { @@ -118,7 +117,7 @@ static int diolan_usb_transfer(struct i2c_diolan_u2c *dev)  			tmpret = usb_bulk_msg(dev->usb_dev,  					      usb_rcvbulkpipe(dev->usb_dev, -							      DIOLAN_IN_EP), +							      dev->ep_in),  					      dev->ibuffer,  					      sizeof(dev->ibuffer), &actual,  					      DIOLAN_USB_TIMEOUT); @@ -210,7 +209,7 @@ static void diolan_flush_input(struct i2c_diolan_u2c *dev)  		int ret;  		ret = usb_bulk_msg(dev->usb_dev, -				   usb_rcvbulkpipe(dev->usb_dev, DIOLAN_IN_EP), +				   usb_rcvbulkpipe(dev->usb_dev, dev->ep_in),  				   dev->ibuffer, sizeof(dev->ibuffer), &actual,  				   DIOLAN_USB_TIMEOUT);  		if (ret < 0 || actual == 0) @@ -445,9 +444,14 @@ static void diolan_u2c_free(struct i2c_diolan_u2c *dev)  static int diolan_u2c_probe(struct usb_interface *interface,  			    const struct usb_device_id *id)  { +	struct usb_host_interface *hostif = interface->cur_altsetting;  	struct i2c_diolan_u2c *dev;  	int ret; +	if (hostif->desc.bInterfaceNumber != 0 +	    || hostif->desc.bNumEndpoints < 2) +		return -ENODEV; +  	/* allocate memory for our device state and initialize it */  	dev = kzalloc(sizeof(*dev), GFP_KERNEL);  	if (dev == NULL) { @@ -455,6 +459,8 @@ static int diolan_u2c_probe(struct usb_interface *interface,  		ret = -ENOMEM;  		goto error;  	} +	dev->ep_out = hostif->endpoint[0].desc.bEndpointAddress; +	dev->ep_in = hostif->endpoint[1].desc.bEndpointAddress;  	dev->usb_dev = usb_get_dev(interface_to_usbdev(interface));  	dev->interface = interface; diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index a6a891d7970..90dcc2eaac5 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c @@ -266,13 +266,13 @@ static const u8 reg_map_ip_v2[] = {  static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,  				      int reg, u16 val)  { -	__raw_writew(val, i2c_dev->base + +	writew_relaxed(val, i2c_dev->base +  			(i2c_dev->regs[reg] << i2c_dev->reg_shift));  }  static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)  { -	return __raw_readw(i2c_dev->base + +	return readw_relaxed(i2c_dev->base +  				(i2c_dev->regs[reg] << i2c_dev->reg_shift));  } @@ -1037,6 +1037,20 @@ static const struct i2c_algorithm omap_i2c_algo = {  };  #ifdef CONFIG_OF +static struct omap_i2c_bus_platform_data omap2420_pdata = { +	.rev = OMAP_I2C_IP_VERSION_1, +	.flags = OMAP_I2C_FLAG_NO_FIFO | +			OMAP_I2C_FLAG_SIMPLE_CLOCK | +			OMAP_I2C_FLAG_16BIT_DATA_REG | +			OMAP_I2C_FLAG_BUS_SHIFT_2, +}; + +static struct omap_i2c_bus_platform_data omap2430_pdata = { +	.rev = OMAP_I2C_IP_VERSION_1, +	.flags = OMAP_I2C_FLAG_BUS_SHIFT_2 | +			OMAP_I2C_FLAG_FORCE_19200_INT_CLK, +}; +  static struct omap_i2c_bus_platform_data omap3_pdata = {  	.rev = OMAP_I2C_IP_VERSION_1,  	.flags = OMAP_I2C_FLAG_BUS_SHIFT_2, @@ -1055,6 +1069,14 @@ static const struct of_device_id omap_i2c_of_match[] = {  		.compatible = "ti,omap3-i2c",  		.data = &omap3_pdata,  	}, +	{ +		.compatible = "ti,omap2430-i2c", +		.data = &omap2430_pdata, +	}, +	{ +		.compatible = "ti,omap2420-i2c", +		.data = &omap2420_pdata, +	},  	{ },  };  MODULE_DEVICE_TABLE(of, omap_i2c_of_match); @@ -1140,9 +1162,9 @@ omap_i2c_probe(struct platform_device *pdev)  	 * Read the Rev hi bit-[15:14] ie scheme this is 1 indicates ver2.  	 * On omap1/3/2 Offset 4 is IE Reg the bit [15:14] is 0 at reset.  	 * Also since the omap_i2c_read_reg uses reg_map_ip_* a -	 * raw_readw is done. +	 * readw_relaxed is done.  	 */ -	rev = __raw_readw(dev->base + 0x04); +	rev = readw_relaxed(dev->base + 0x04);  	dev->scheme = OMAP_I2C_SCHEME(rev);  	switch (dev->scheme) { | 
