|
|
@@ -37,7 +37,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
|
|
|
--- a/drivers/i2c/busses/i2c-bcm2835.c
|
|
|
+++ b/drivers/i2c/busses/i2c-bcm2835.c
|
|
|
-@@ -51,6 +51,18 @@
|
|
|
+@@ -56,6 +56,18 @@
|
|
|
#define BCM2835_I2C_CDIV_MIN 0x0002
|
|
|
#define BCM2835_I2C_CDIV_MAX 0xFFFE
|
|
|
|
|
|
@@ -56,7 +56,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
struct bcm2835_i2c_dev {
|
|
|
struct device *dev;
|
|
|
void __iomem *regs;
|
|
|
-@@ -63,8 +75,78 @@ struct bcm2835_i2c_dev {
|
|
|
+@@ -68,8 +80,78 @@ struct bcm2835_i2c_dev {
|
|
|
u32 msg_err;
|
|
|
u8 *msg_buf;
|
|
|
size_t msg_buf_remaining;
|
|
|
@@ -135,7 +135,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
static inline void bcm2835_i2c_writel(struct bcm2835_i2c_dev *i2c_dev,
|
|
|
u32 reg, u32 val)
|
|
|
{
|
|
|
-@@ -252,6 +334,7 @@ static void bcm2835_i2c_start_transfer(s
|
|
|
+@@ -257,6 +339,7 @@ static void bcm2835_i2c_start_transfer(s
|
|
|
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr);
|
|
|
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len);
|
|
|
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c);
|
|
|
@@ -143,7 +143,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
}
|
|
|
|
|
|
static void bcm2835_i2c_finish_transfer(struct bcm2835_i2c_dev *i2c_dev)
|
|
|
-@@ -278,6 +361,7 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
|
|
+@@ -283,6 +366,7 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
|
|
u32 val, err;
|
|
|
|
|
|
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
|
|
|
@@ -151,7 +151,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
|
|
|
err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR);
|
|
|
if (err) {
|
|
|
-@@ -344,6 +428,13 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
+@@ -349,6 +433,13 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
unsigned long time_left;
|
|
|
int i;
|
|
|
|
|
|
@@ -165,7 +165,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
for (i = 0; i < (num - 1); i++)
|
|
|
if (msgs[i].flags & I2C_M_RD) {
|
|
|
dev_warn_once(i2c_dev->dev,
|
|
|
-@@ -362,6 +453,10 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
+@@ -367,6 +458,10 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
|
|
|
bcm2835_i2c_finish_transfer(i2c_dev);
|
|
|
|
|
|
@@ -176,7 +176,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
|
|
|
if (!time_left) {
|
|
|
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C,
|
|
|
BCM2835_I2C_C_CLEAR);
|
|
|
-@@ -372,7 +467,9 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
+@@ -377,7 +472,9 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
|
|
if (!i2c_dev->msg_err)
|
|
|
return num;
|
|
|
|