Message ID | 1566925456-5928-3-git-send-email-wahrenst@gmx.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | i2c: bcm2835: Add bcm2711 support | expand |
On Tue, Aug 27, 2019 at 07:04:15PM +0200, Stefan Wahren wrote: > The I2C block on the BCM2711 isn't affected by the clk stretching bug. > So there is no need to apply the corresponding quirk. > > Signed-off-by: Stefan Wahren <wahrenst@gmx.net> > Reviewed-by: Eric Anholt <eric@anholt.net> Applied to for-next, thanks!
On 27/08/2019 19:04, Stefan Wahren wrote: > The I2C block on the BCM2711 isn't affected by the clk stretching bug. > So there is no need to apply the corresponding quirk. > > Signed-off-by: Stefan Wahren <wahrenst@gmx.net> > Reviewed-by: Eric Anholt <eric@anholt.net> > --- > drivers/i2c/busses/i2c-bcm2835.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c > index 67752f7..ab5502f 100644 > --- a/drivers/i2c/busses/i2c-bcm2835.c > +++ b/drivers/i2c/busses/i2c-bcm2835.c > @@ -12,6 +12,7 @@ > #include <linux/interrupt.h> > #include <linux/io.h> > #include <linux/module.h> > +#include <linux/of_device.h> > #include <linux/platform_device.h> > #include <linux/slab.h> > > @@ -389,7 +390,7 @@ static const struct i2c_algorithm bcm2835_i2c_algo = { > }; > > /* > - * This HW was reported to have problems with clock stretching: > + * The BCM2835 was reported to have problems with clock stretching: > * http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html > * https://www.raspberrypi.org/forums/viewtopic.php?p=146272 > */ > @@ -475,7 +476,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) > adap->algo = &bcm2835_i2c_algo; > adap->dev.parent = &pdev->dev; > adap->dev.of_node = pdev->dev.of_node; > - adap->quirks = &bcm2835_i2c_quirks; > + adap->quirks = of_device_get_match_data(&pdev->dev); > > bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0); > > @@ -501,7 +502,8 @@ static int bcm2835_i2c_remove(struct platform_device *pdev) > } > > static const struct of_device_id bcm2835_i2c_of_match[] = { > - { .compatible = "brcm,bcm2835-i2c" }, > + { .compatible = "brcm,bcm2711-i2c" }, > + { .compatible = "brcm,bcm2835-i2c", .data = &bcm2835_i2c_quirks }, RPi4 FW seems to still use bcm2835-i2c as compatible in it's DTB blob. Does this break the driver or is this something we can improve by changing the FW blob in the future without breaking the driver now? Regards, Matthias > {}, > }; > MODULE_DEVICE_TABLE(of, bcm2835_i2c_of_match); > -- > 2.7.4 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >
diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index 67752f7..ab5502f 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -12,6 +12,7 @@ #include <linux/interrupt.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/slab.h> @@ -389,7 +390,7 @@ static const struct i2c_algorithm bcm2835_i2c_algo = { }; /* - * This HW was reported to have problems with clock stretching: + * The BCM2835 was reported to have problems with clock stretching: * http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html * https://www.raspberrypi.org/forums/viewtopic.php?p=146272 */ @@ -475,7 +476,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) adap->algo = &bcm2835_i2c_algo; adap->dev.parent = &pdev->dev; adap->dev.of_node = pdev->dev.of_node; - adap->quirks = &bcm2835_i2c_quirks; + adap->quirks = of_device_get_match_data(&pdev->dev); bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0); @@ -501,7 +502,8 @@ static int bcm2835_i2c_remove(struct platform_device *pdev) } static const struct of_device_id bcm2835_i2c_of_match[] = { - { .compatible = "brcm,bcm2835-i2c" }, + { .compatible = "brcm,bcm2711-i2c" }, + { .compatible = "brcm,bcm2835-i2c", .data = &bcm2835_i2c_quirks }, {}, }; MODULE_DEVICE_TABLE(of, bcm2835_i2c_of_match);