diff options
| author | Takashi Iwai <tiwai@suse.de> | 2013-12-04 12:40:59 +0100 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2013-12-04 12:40:59 +0100 | 
| commit | b0e6989c965dda2f2b65a2abb04f5337b497f4a2 (patch) | |
| tree | eb70ca5f8fc50688f879d1c851fa3f09a6c68850 /drivers/i2c | |
| parent | 20ce902978a70ab51ad9ed645f636805f3ff2b0d (diff) | |
| parent | 29e248829dc7d44248c69bbd5d40eca152a50cab (diff) | |
Merge tag 'asoc-v3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.13
A smattering of fixes here, some core ones for the rate combination
issues for things other than simple bitmasks, for readback of byte
controls and for updating the power of value muxes plus a bunch of
driver fixes of varying severity.
The warning fix in the i.MX FIQ driver is fixing a warning introduced
by a previous fix.
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) { | 
