[ARM] 3237/1: PXA I2C driver updates
Patch from Richard Purdie This patch adds a check to see if the pxa i2c interface is enabled before allowing it to be used and resets it if found to be disabled. This automatically restores the interface if the device has been suspended and resumed without causing any suspend/resume call ordering issues. The patch also fixes a build warning and adds an appropriate module licence (the module is gpl according to the header). Signed-off-by: Richard Purdie <rpurdie@rpsys.net> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
6b090a25fe
commit
ece5f7b3c4
|
@ -899,6 +899,12 @@ static int i2c_pxa_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num
|
||||||
struct pxa_i2c *i2c = adap->algo_data;
|
struct pxa_i2c *i2c = adap->algo_data;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
/* If the I2C controller is disabled we need to reset it (probably due
|
||||||
|
to a suspend/resume destroying state). We do this here as we can then
|
||||||
|
avoid worrying about resuming the controller before its users. */
|
||||||
|
if (!(ICR & ICR_IUE))
|
||||||
|
i2c_pxa_reset(i2c);
|
||||||
|
|
||||||
for (i = adap->retries; i >= 0; i--) {
|
for (i = adap->retries; i >= 0; i--) {
|
||||||
ret = i2c_pxa_do_xfer(i2c, msgs, num);
|
ret = i2c_pxa_do_xfer(i2c, msgs, num);
|
||||||
if (ret != I2C_RETRY)
|
if (ret != I2C_RETRY)
|
||||||
|
@ -939,7 +945,9 @@ static struct pxa_i2c i2c_pxa = {
|
||||||
static int i2c_pxa_probe(struct platform_device *dev)
|
static int i2c_pxa_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
struct pxa_i2c *i2c = &i2c_pxa;
|
struct pxa_i2c *i2c = &i2c_pxa;
|
||||||
|
#ifdef CONFIG_I2C_PXA_SLAVE
|
||||||
struct i2c_pxa_platform_data *plat = dev->dev.platform_data;
|
struct i2c_pxa_platform_data *plat = dev->dev.platform_data;
|
||||||
|
#endif
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#ifdef CONFIG_PXA27x
|
#ifdef CONFIG_PXA27x
|
||||||
|
@ -1024,5 +1032,7 @@ static void i2c_adap_pxa_exit(void)
|
||||||
return platform_driver_unregister(&i2c_pxa_driver);
|
return platform_driver_unregister(&i2c_pxa_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
module_init(i2c_adap_pxa_init);
|
module_init(i2c_adap_pxa_init);
|
||||||
module_exit(i2c_adap_pxa_exit);
|
module_exit(i2c_adap_pxa_exit);
|
||||||
|
|
Loading…
Reference in New Issue