mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
ARM: soc: general cleanups
This is a large branch that contains a handful of different cleanups:
- Fixing up the I/O space remapping on PCI on ARM. This is a series
from Rob Herring that restructures how all pci devices allocate I/O
space, and it's part of the work to allow multiplatform kernels.
- A number of cleanup series for OMAP, moving and removing some
headers, sparse irq rework and in general preparation for
multiplatform.
- Final removal of all non-DT boards for Tegra, it is now
device-tree-only!
- Removal of a stale platform, nxp4008. It's an old mobile chipset
that is no longer in use, and was very likely never really used with
a mainline kernel. We have not been able to find anyone interested
in keeping it around in the kernel.
- Removal of the legacy dmaengine driver on tegra
+ A handful of other things that I haven't described above.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAABAgAGBQJQaO1fAAoJEIwa5zzehBx3IPgP/jxoO1flVGNVf0reqqyDro/w
prZmp8cNVH9uv8xG9n9vawObrMQ8M6jCJ449fEWuAZ58EXrpIPd0kkm/MOmxp8K1
LNs+q2aXxWpD488+b3RK55g3fksqZutTbn3y6HNuCoLG9l8yT/95KX4IIzfEP2Ch
1TCNHdkTbf37nTBOmKN0x1kahGpWDrOkf9ysHQq+DXAGF4uwNwtR194dqz3HbDND
hZqRq7qCLn9OwGRGNicPFoB6UcxwZ/+/+u5sX7nqPGoiPofg977mhWk1DFO15EM3
S+A6g0dZ+XLsL+fFtOl4snSmrG5Et6qTOP0/ItQJgTG+5YdCS09ohCWJwRCBHbgj
M5arOkyGFdVAlvX7cUux374sMe0AcqUsEmt79mYuBpIE+pBJaRUoCgDcs9FDZeUB
U6WcE4AkxMtW7DtmVW+mF4ls9/K6cRXgWMuHCUmt1o3m3Ly9ITT7j+ntXnD9nuYk
ndoVLR6Vxk2BzlkD0JEtg7FRAS9Wgo2DBix05qM1Qkut2iIZRhFQlqJQpNbeNdii
/3Lg/hqpAVTZKGCd+paegHez61meyFz2PB2IiE0JKANhKHRCWTWRGgKIXkGyCiXk
wJ2iRCOlMEpmpJgCBzfI32ER/hnW4s64iDjgksEwz6pEt7xCbhwgmwrpf0H0KsSF
rLroHOMqyISd/Ha52Vin
=ck1u
-----END PGP SIGNATURE-----
Merge tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM soc general cleanups from Olof Johansson:
"This is a large branch that contains a handful of different cleanups:
- Fixing up the I/O space remapping on PCI on ARM. This is a series
from Rob Herring that restructures how all pci devices allocate I/O
space, and it's part of the work to allow multiplatform kernels.
- A number of cleanup series for OMAP, moving and removing some
headers, sparse irq rework and in general preparation for
multiplatform.
- Final removal of all non-DT boards for Tegra, it is now
device-tree-only!
- Removal of a stale platform, nxp4008. It's an old mobile chipset
that is no longer in use, and was very likely never really used
with a mainline kernel. We have not been able to find anyone
interested in keeping it around in the kernel.
- Removal of the legacy dmaengine driver on tegra
+ A handful of other things that I haven't described above."
Fix up some conflicts with the staging tree (and because nxp4008 was
removed)
* tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (184 commits)
ARM: OMAP2+: serial: Change MAX_HSUART_PORTS to 6
ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
ARM: mmp: using for_each_set_bit to simplify the code
ARM: tegra: harmony: fix ldo7 regulator-name
ARM: OMAP2+: Make omap4-keypad.h local
ARM: OMAP2+: Make l4_3xxx.h local
ARM: OMAP2+: Make l4_2xxx.h local
ARM: OMAP2+: Make l3_3xxx.h local
ARM: OMAP2+: Make l3_2xxx.h local
ARM: OMAP1: Move irda.h from plat to mach
ARM: OMAP2+: Make hdq1w.h local
ARM: OMAP2+: Make gpmc-smsc911x.h local
ARM: OMAP2+: Make gpmc-smc91x.h local
ARM: OMAP1: Move flash.h from plat to mach
ARM: OMAP2+: Make debug-devices.h local
ARM: OMAP1: Move board-voiceblue.h from plat to mach
ARM: OMAP1: Move board-sx1.h from plat to mach
ARM: OMAP2+: Make omap-wakeupgen.h local
ARM: OMAP2+: Make omap-secure.h local
ARM: OMAP2+: Make ctrl_module_wkup_44xx.h local
...
This commit is contained in:
commit
61464c8357
623 changed files with 4618 additions and 15490 deletions
|
|
@ -551,7 +551,7 @@ config I2C_PMCMSP
|
|||
|
||||
config I2C_PNX
|
||||
tristate "I2C bus support for Philips PNX and NXP LPC targets"
|
||||
depends on ARCH_PNX4008 || ARCH_LPC32XX
|
||||
depends on ARCH_LPC32XX
|
||||
help
|
||||
This driver supports the Philips IP3204 I2C IP block master and/or
|
||||
slave controller
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@
|
|||
/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd
|
||||
* <Peter dot Milne at D hyphen TACQ dot com>
|
||||
*
|
||||
* With acknowledgements to i2c-algo-ibm_ocp.c by
|
||||
* With acknowledgements to i2c-algo-ibm_ocp.c by
|
||||
* Ian DaSilva, MontaVista Software, Inc. idasilva@mvista.com
|
||||
*
|
||||
* And i2c-algo-pcf.c, which was created by Simon G. Vogl and Hans Berglund:
|
||||
*
|
||||
* Copyright (C) 1995-1997 Simon G. Vogl, 1998-2000 Hans Berglund
|
||||
*
|
||||
*
|
||||
* And which acknowledged Kyösti Mälkki <kmalkki@cc.hut.fi>,
|
||||
* Frodo Looijaard <frodol@dds.nl>, Martin Bailey<mbailey@littlefeet-inc.com>
|
||||
*
|
||||
|
|
@ -39,14 +39,15 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include "i2c-iop3xx.h"
|
||||
|
||||
/* global unit counter */
|
||||
static int i2c_id;
|
||||
|
||||
static inline unsigned char
|
||||
iic_cook_addr(struct i2c_msg *msg)
|
||||
static inline unsigned char
|
||||
iic_cook_addr(struct i2c_msg *msg)
|
||||
{
|
||||
unsigned char addr;
|
||||
|
||||
|
|
@ -55,38 +56,38 @@ iic_cook_addr(struct i2c_msg *msg)
|
|||
if (msg->flags & I2C_M_RD)
|
||||
addr |= 1;
|
||||
|
||||
return addr;
|
||||
return addr;
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
iop3xx_i2c_reset(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
||||
{
|
||||
/* Follows devman 9.3 */
|
||||
__raw_writel(IOP3XX_ICR_UNIT_RESET, iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
__raw_writel(IOP3XX_ISR_CLEARBITS, iop3xx_adap->ioaddr + SR_OFFSET);
|
||||
__raw_writel(0, iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
iop3xx_i2c_enable(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
||||
{
|
||||
u32 cr = IOP3XX_ICR_GCD | IOP3XX_ICR_SCLEN | IOP3XX_ICR_UE;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Every time unit enable is asserted, GPOD needs to be cleared
|
||||
* on IOP3XX to avoid data corruption on the bus.
|
||||
*/
|
||||
#if defined(CONFIG_ARCH_IOP32X) || defined(CONFIG_ARCH_IOP33X)
|
||||
if (iop3xx_adap->id == 0) {
|
||||
gpio_line_set(IOP3XX_GPIO_LINE(7), GPIO_LOW);
|
||||
gpio_line_set(IOP3XX_GPIO_LINE(6), GPIO_LOW);
|
||||
gpio_set_value(7, 0);
|
||||
gpio_set_value(6, 0);
|
||||
} else {
|
||||
gpio_line_set(IOP3XX_GPIO_LINE(5), GPIO_LOW);
|
||||
gpio_line_set(IOP3XX_GPIO_LINE(4), GPIO_LOW);
|
||||
gpio_set_value(5, 0);
|
||||
gpio_set_value(4, 0);
|
||||
}
|
||||
#endif
|
||||
/* NB SR bits not same position as CR IE bits :-( */
|
||||
iop3xx_adap->SR_enabled =
|
||||
iop3xx_adap->SR_enabled =
|
||||
IOP3XX_ISR_ALD | IOP3XX_ISR_BERRD |
|
||||
IOP3XX_ISR_RXFULL | IOP3XX_ISR_TXEMPTY;
|
||||
|
||||
|
|
@ -96,23 +97,23 @@ iop3xx_i2c_enable(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
|||
__raw_writel(cr, iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
iop3xx_i2c_transaction_cleanup(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
||||
{
|
||||
unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
|
||||
cr &= ~(IOP3XX_ICR_MSTART | IOP3XX_ICR_TBYTE |
|
||||
|
||||
cr &= ~(IOP3XX_ICR_MSTART | IOP3XX_ICR_TBYTE |
|
||||
IOP3XX_ICR_MSTOP | IOP3XX_ICR_SCLEN);
|
||||
|
||||
__raw_writel(cr, iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
}
|
||||
|
||||
/*
|
||||
* NB: the handler has to clear the source of the interrupt!
|
||||
/*
|
||||
* NB: the handler has to clear the source of the interrupt!
|
||||
* Then it passes the SR flags of interest to BH via adap data
|
||||
*/
|
||||
static irqreturn_t
|
||||
iop3xx_i2c_irq_handler(int this_irq, void *dev_id)
|
||||
static irqreturn_t
|
||||
iop3xx_i2c_irq_handler(int this_irq, void *dev_id)
|
||||
{
|
||||
struct i2c_algo_iop3xx_data *iop3xx_adap = dev_id;
|
||||
u32 sr = __raw_readl(iop3xx_adap->ioaddr + SR_OFFSET);
|
||||
|
|
@ -126,7 +127,7 @@ iop3xx_i2c_irq_handler(int this_irq, void *dev_id)
|
|||
}
|
||||
|
||||
/* check all error conditions, clear them , report most important */
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_error(u32 sr)
|
||||
{
|
||||
int rc = 0;
|
||||
|
|
@ -135,12 +136,12 @@ iop3xx_i2c_error(u32 sr)
|
|||
if ( !rc ) rc = -I2C_ERR_BERR;
|
||||
}
|
||||
if ((sr & IOP3XX_ISR_ALD)) {
|
||||
if ( !rc ) rc = -I2C_ERR_ALD;
|
||||
if ( !rc ) rc = -I2C_ERR_ALD;
|
||||
}
|
||||
return rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static inline u32
|
||||
static inline u32
|
||||
iop3xx_i2c_get_srstat(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -161,8 +162,8 @@ iop3xx_i2c_get_srstat(struct i2c_algo_iop3xx_data *iop3xx_adap)
|
|||
typedef int (* compare_func)(unsigned test, unsigned mask);
|
||||
/* returns 1 on correct comparison */
|
||||
|
||||
static int
|
||||
iop3xx_i2c_wait_event(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
||||
static int
|
||||
iop3xx_i2c_wait_event(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
||||
unsigned flags, unsigned* status,
|
||||
compare_func compare)
|
||||
{
|
||||
|
|
@ -192,47 +193,47 @@ iop3xx_i2c_wait_event(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
|||
}
|
||||
|
||||
/*
|
||||
* Concrete compare_funcs
|
||||
* Concrete compare_funcs
|
||||
*/
|
||||
static int
|
||||
static int
|
||||
all_bits_clear(unsigned test, unsigned mask)
|
||||
{
|
||||
return (test & mask) == 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
any_bits_set(unsigned test, unsigned mask)
|
||||
{
|
||||
return (test & mask) != 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_wait_tx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status)
|
||||
{
|
||||
return iop3xx_i2c_wait_event(
|
||||
iop3xx_adap,
|
||||
return iop3xx_i2c_wait_event(
|
||||
iop3xx_adap,
|
||||
IOP3XX_ISR_TXEMPTY | IOP3XX_ISR_ALD | IOP3XX_ISR_BERRD,
|
||||
status, any_bits_set);
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_wait_rx_done(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status)
|
||||
{
|
||||
return iop3xx_i2c_wait_event(
|
||||
iop3xx_adap,
|
||||
return iop3xx_i2c_wait_event(
|
||||
iop3xx_adap,
|
||||
IOP3XX_ISR_RXFULL | IOP3XX_ISR_ALD | IOP3XX_ISR_BERRD,
|
||||
status, any_bits_set);
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_wait_idle(struct i2c_algo_iop3xx_data *iop3xx_adap, int *status)
|
||||
{
|
||||
return iop3xx_i2c_wait_event(
|
||||
return iop3xx_i2c_wait_event(
|
||||
iop3xx_adap, IOP3XX_ISR_UNITBUSY, status, all_bits_clear);
|
||||
}
|
||||
|
||||
static int
|
||||
iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
||||
static int
|
||||
iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
||||
struct i2c_msg* msg)
|
||||
{
|
||||
unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
|
|
@ -247,7 +248,7 @@ iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
|||
}
|
||||
|
||||
__raw_writel(iic_cook_addr(msg), iop3xx_adap->ioaddr + DBR_OFFSET);
|
||||
|
||||
|
||||
cr &= ~(IOP3XX_ICR_MSTOP | IOP3XX_ICR_NACK);
|
||||
cr |= IOP3XX_ICR_MSTART | IOP3XX_ICR_TBYTE;
|
||||
|
||||
|
|
@ -257,8 +258,8 @@ iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
iop3xx_i2c_write_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char byte,
|
||||
static int
|
||||
iop3xx_i2c_write_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char byte,
|
||||
int stop)
|
||||
{
|
||||
unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
|
|
@ -277,10 +278,10 @@ iop3xx_i2c_write_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char byte,
|
|||
rc = iop3xx_i2c_wait_tx_done(iop3xx_adap, &status);
|
||||
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
iop3xx_i2c_read_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char* byte,
|
||||
static int
|
||||
iop3xx_i2c_read_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char* byte,
|
||||
int stop)
|
||||
{
|
||||
unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
|
||||
|
|
@ -304,19 +305,19 @@ iop3xx_i2c_read_byte(struct i2c_algo_iop3xx_data *iop3xx_adap, char* byte,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_writebytes(struct i2c_adapter *i2c_adap, const char *buf, int count)
|
||||
{
|
||||
struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data;
|
||||
int ii;
|
||||
int rc = 0;
|
||||
|
||||
for (ii = 0; rc == 0 && ii != count; ++ii)
|
||||
for (ii = 0; rc == 0 && ii != count; ++ii)
|
||||
rc = iop3xx_i2c_write_byte(iop3xx_adap, buf[ii], ii==count-1);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count)
|
||||
{
|
||||
struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data;
|
||||
|
|
@ -325,7 +326,7 @@ iop3xx_i2c_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count)
|
|||
|
||||
for (ii = 0; rc == 0 && ii != count; ++ii)
|
||||
rc = iop3xx_i2c_read_byte(iop3xx_adap, &buf[ii], ii==count-1);
|
||||
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -336,8 +337,8 @@ iop3xx_i2c_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count)
|
|||
* Each transfer (i.e. a read or a write) is separated by a repeated start
|
||||
* condition.
|
||||
*/
|
||||
static int
|
||||
iop3xx_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg* pmsg)
|
||||
static int
|
||||
iop3xx_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg* pmsg)
|
||||
{
|
||||
struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data;
|
||||
int rc;
|
||||
|
|
@ -357,8 +358,8 @@ iop3xx_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg* pmsg)
|
|||
/*
|
||||
* master_xfer() - main read/write entry
|
||||
*/
|
||||
static int
|
||||
iop3xx_i2c_master_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
|
||||
static int
|
||||
iop3xx_i2c_master_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
|
||||
int num)
|
||||
{
|
||||
struct i2c_algo_iop3xx_data *iop3xx_adap = i2c_adap->algo_data;
|
||||
|
|
@ -375,14 +376,14 @@ iop3xx_i2c_master_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
|
|||
}
|
||||
|
||||
iop3xx_i2c_transaction_cleanup(iop3xx_adap);
|
||||
|
||||
|
||||
if(ret)
|
||||
return ret;
|
||||
|
||||
return im;
|
||||
return im;
|
||||
}
|
||||
|
||||
static u32
|
||||
static u32
|
||||
iop3xx_i2c_func(struct i2c_adapter *adap)
|
||||
{
|
||||
return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
|
||||
|
|
@ -393,11 +394,11 @@ static const struct i2c_algorithm iop3xx_i2c_algo = {
|
|||
.functionality = iop3xx_i2c_func,
|
||||
};
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct i2c_adapter *padapter = platform_get_drvdata(pdev);
|
||||
struct i2c_algo_iop3xx_data *adapter_data =
|
||||
struct i2c_algo_iop3xx_data *adapter_data =
|
||||
(struct i2c_algo_iop3xx_data *)padapter->algo_data;
|
||||
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
unsigned long cr = __raw_readl(adapter_data->ioaddr + CR_OFFSET);
|
||||
|
|
@ -419,7 +420,7 @@ iop3xx_i2c_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
iop3xx_i2c_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
|
|
|
|||
Loading…
Reference in a new issue