--- 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
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;
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);
}
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);
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;
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);
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;
--- a/drivers/i2c/busses/i2c-bcm2835.c
+++ b/drivers/i2c/busses/i2c-bcm2835.c
-@@ -188,6 +188,7 @@ static int clk_bcm2835_i2c_set_rate(stru
+@@ -193,6 +193,7 @@ static int clk_bcm2835_i2c_set_rate(stru
{
struct clk_bcm2835_i2c *div = to_clk_bcm2835_i2c(hw);
u32 redl, fedl;
u32 divider = clk_bcm2835_i2c_calc_divider(rate, parent_rate);
if (divider == -EINVAL)
-@@ -211,6 +212,17 @@ static int clk_bcm2835_i2c_set_rate(stru
+@@ -216,6 +217,17 @@ static int clk_bcm2835_i2c_set_rate(stru
bcm2835_i2c_writel(div->i2c_dev, BCM2835_I2C_DEL,
(fedl << BCM2835_I2C_FEDL_SHIFT) |
(redl << BCM2835_I2C_REDL_SHIFT));
--- a/drivers/mtd/parsers/parser_trx.c
+++ b/drivers/mtd/parsers/parser_trx.c
-@@ -85,6 +85,10 @@ static int parser_trx_parse(struct mtd_i
- uint8_t curr_part = 0, i = 0;
- int err;
+@@ -92,6 +92,10 @@ static int parser_trx_parse(struct mtd_i
+ if (err != 0 && err != -EINVAL)
+ pr_err("failed to parse \"brcm,trx-magic\" DT attribute, using default: %d\n", err);
+ /* Don't parse any failsafe / backup partitions */
+ if (strcmp(mtd->name, "firmware"))