aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch')
-rw-r--r--target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch72
1 files changed, 0 insertions, 72 deletions
diff --git a/target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch b/target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch
deleted file mode 100644
index 4a468f0291..0000000000
--- a/target/linux/bcm27xx/patches-4.19/950-0606-i2c-bcm2835-Ensure-clock-exists-when-probing.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 1a5122f1756ef4fc5779324ad26b6a04142166b5 Mon Sep 17 00:00:00 2001
-From: Annaliese McDermond <nh6z@nh6z.net>
-Date: Fri, 21 Jun 2019 03:52:50 -0700
-Subject: [PATCH] i2c: bcm2835: Ensure clock exists when probing
-
-Commit 9de93b04df16b055824e3f1f13fedb90fbcf2e4f upstream.
-
-Probe function fails to recognize that upstream clock actually
-doesn't yet exist because clock driver has not been initialized.
-Actually try to go get the clock and test for its existence
-before trying to set up a downstream clock based upon it.
-
-This fixes a bug that causes the i2c driver not to work with
-monolithic kernels.
-
-Fixes: bebff81fb8b9 ("i2c: bcm2835: Model Divider in CCF")
-Signed-off-by: Annaliese McDermond <nh6z@nh6z.net>
-Acked-by: Stefan Wahren <wahrenst@gmx.net>
-Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
----
- drivers/i2c/busses/i2c-bcm2835.c | 16 ++++++++++++----
- 1 file changed, 12 insertions(+), 4 deletions(-)
-
---- a/drivers/i2c/busses/i2c-bcm2835.c
-+++ b/drivers/i2c/busses/i2c-bcm2835.c
-@@ -244,15 +244,18 @@ static const struct clk_ops clk_bcm2835_
- };
-
- static struct clk *bcm2835_i2c_register_div(struct device *dev,
-- const char *mclk_name,
-+ struct clk *mclk,
- struct bcm2835_i2c_dev *i2c_dev)
- {
- struct clk_init_data init;
- struct clk_bcm2835_i2c *priv;
- char name[32];
-+ const char *mclk_name;
-
- snprintf(name, sizeof(name), "%s_div", dev_name(dev));
-
-+ mclk_name = __clk_get_name(mclk);
-+
- init.ops = &clk_bcm2835_i2c_ops;
- init.name = name;
- init.parent_names = (const char* []) { mclk_name };
-@@ -505,8 +508,8 @@ static int bcm2835_i2c_probe(struct plat
- struct resource *mem, *irq;
- int ret;
- struct i2c_adapter *adap;
-- const char *mclk_name;
- struct clk *bus_clk;
-+ struct clk *mclk;
- u32 bus_clk_rate;
-
- i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
-@@ -521,9 +524,14 @@ static int bcm2835_i2c_probe(struct plat
- if (IS_ERR(i2c_dev->regs))
- return PTR_ERR(i2c_dev->regs);
-
-- mclk_name = of_clk_get_parent_name(pdev->dev.of_node, 0);
-+ mclk = devm_clk_get(&pdev->dev, NULL);
-+ if (IS_ERR(mclk)) {
-+ if (PTR_ERR(mclk) != -EPROBE_DEFER)
-+ dev_err(&pdev->dev, "Could not get clock\n");
-+ return PTR_ERR(mclk);
-+ }
-
-- bus_clk = bcm2835_i2c_register_div(&pdev->dev, mclk_name, i2c_dev);
-+ bus_clk = bcm2835_i2c_register_div(&pdev->dev, mclk, i2c_dev);
-
- if (IS_ERR(bus_clk)) {
- dev_err(&pdev->dev, "Could not register clock\n");