2015-09-11 16:32:00 +00:00
|
|
|
From 779a2505afac554e6ebb5d0cd3979df9a10fbba9 Mon Sep 17 00:00:00 2001
|
2015-07-17 12:48:39 +00:00
|
|
|
From: Phil Elwell <phil@raspberrypi.org>
|
|
|
|
Date: Mon, 22 Jun 2015 14:23:03 +0100
|
2015-09-11 16:32:00 +00:00
|
|
|
Subject: [PATCH 090/171] i2c-bcm2708/BCM270X_DT: Add support for I2C2
|
2015-07-17 12:48:39 +00:00
|
|
|
|
|
|
|
The third I2C bus (I2C2) is normally reserved for HDMI use. Careless
|
|
|
|
use of this bus can break an attached display - use with caution.
|
|
|
|
|
|
|
|
It is recommended to disable accesses by VideoCore by setting
|
|
|
|
hdmi_ignore_edid=1 or hdmi_edid_file=1 in config.txt.
|
|
|
|
|
|
|
|
The interface is disabled by default - enable using the
|
|
|
|
i2c2_iknowwhatimdoing DT parameter.
|
|
|
|
---
|
|
|
|
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 6 ++++++
|
|
|
|
arch/arm/boot/dts/bcm2708-rpi-b.dts | 6 ++++++
|
|
|
|
arch/arm/boot/dts/bcm2708-rpi-cm.dts | 6 ++++++
|
|
|
|
arch/arm/boot/dts/bcm2708_common.dtsi | 14 ++++++++++++++
|
|
|
|
arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 6 ++++++
|
|
|
|
drivers/i2c/busses/i2c-bcm2708.c | 5 ++++-
|
|
|
|
6 files changed, 42 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
|
|
|
|
+++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
|
|
|
|
@@ -75,6 +75,10 @@
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
};
|
|
|
|
|
|
|
|
+&i2c2 {
|
|
|
|
+ clock-frequency = <100000>;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
&i2s {
|
|
|
|
#sound-dai-cells = <0>;
|
|
|
|
pinctrl-names = "default";
|
|
|
|
@@ -103,8 +107,10 @@
|
|
|
|
spi = <&spi0>,"status";
|
|
|
|
i2c0 = <&i2c0>,"status";
|
|
|
|
i2c1 = <&i2c1>,"status";
|
|
|
|
+ i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
|
|
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
|
|
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
|
|
|
+ i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
|
|
|
core_freq = <&clk_core>,"clock-frequency:0";
|
|
|
|
|
|
|
|
act_led_gpio = <&act_led>,"gpios:4";
|
|
|
|
--- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
|
|
|
|
+++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
|
|
|
|
@@ -75,6 +75,10 @@
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
};
|
|
|
|
|
|
|
|
+&i2c2 {
|
|
|
|
+ clock-frequency = <100000>;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
&i2s {
|
|
|
|
#sound-dai-cells = <0>;
|
|
|
|
pinctrl-names = "default";
|
|
|
|
@@ -97,8 +101,10 @@
|
|
|
|
spi = <&spi0>,"status";
|
|
|
|
i2c0 = <&i2c0>,"status";
|
|
|
|
i2c1 = <&i2c1>,"status";
|
|
|
|
+ i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
|
|
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
|
|
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
|
|
|
+ i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
|
|
|
core_freq = <&clk_core>,"clock-frequency:0";
|
|
|
|
|
|
|
|
act_led_gpio = <&act_led>,"gpios:4";
|
|
|
|
--- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
|
|
|
|
+++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
|
|
|
|
@@ -65,6 +65,10 @@
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
};
|
|
|
|
|
|
|
|
+&i2c2 {
|
|
|
|
+ clock-frequency = <100000>;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
&i2s {
|
|
|
|
#sound-dai-cells = <0>;
|
|
|
|
pinctrl-names = "default";
|
|
|
|
@@ -79,8 +83,10 @@
|
|
|
|
spi = <&spi0>,"status";
|
|
|
|
i2c0 = <&i2c0>,"status";
|
|
|
|
i2c1 = <&i2c1>,"status";
|
|
|
|
+ i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
|
|
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
|
|
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
|
|
|
+ i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
|
|
|
core_freq = <&clk_core>,"clock-frequency:0";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
--- a/arch/arm/boot/dts/bcm2708_common.dtsi
|
|
|
|
+++ b/arch/arm/boot/dts/bcm2708_common.dtsi
|
|
|
|
@@ -20,6 +20,7 @@
|
|
|
|
uart1 = &uart1;
|
|
|
|
mmc = &mmc;
|
|
|
|
i2c1 = &i2c1;
|
|
|
|
+ i2c2 = &i2c2;
|
|
|
|
usb = &usb;
|
|
|
|
leds = &leds;
|
|
|
|
fb = &fb;
|
|
|
|
@@ -179,6 +180,19 @@
|
|
|
|
interrupts = <2 21>;
|
|
|
|
clocks = <&clk_i2c>;
|
|
|
|
#address-cells = <1>;
|
|
|
|
+ #size-cells = <0>;
|
|
|
|
+ status = "disabled";
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ i2c2: i2c@7e805000 {
|
|
|
|
+ // Beware - this is shared with the HDMI module.
|
|
|
|
+ // Careless use may break (really) your display.
|
|
|
|
+ // Caveat emptor.
|
|
|
|
+ compatible = "brcm,bcm2708-i2c";
|
|
|
|
+ reg = <0x7e805000 0x1000>;
|
|
|
|
+ interrupts = <2 21>;
|
|
|
|
+ clocks = <&clk_i2c>;
|
|
|
|
+ #address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
status = "disabled";
|
|
|
|
};
|
|
|
|
--- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
|
|
|
|
+++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
|
|
|
|
@@ -75,6 +75,10 @@
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
};
|
|
|
|
|
|
|
|
+&i2c2 {
|
|
|
|
+ clock-frequency = <100000>;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
&i2s {
|
|
|
|
#sound-dai-cells = <0>;
|
|
|
|
pinctrl-names = "default";
|
|
|
|
@@ -103,8 +107,10 @@
|
|
|
|
spi = <&spi0>,"status";
|
|
|
|
i2c0 = <&i2c0>,"status";
|
|
|
|
i2c1 = <&i2c1>,"status";
|
|
|
|
+ i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
|
|
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
|
|
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
|
|
|
+ i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
|
|
|
core_freq = <&clk_core>,"clock-frequency:0";
|
|
|
|
|
|
|
|
act_led_gpio = <&act_led>,"gpios:4";
|
|
|
|
--- a/drivers/i2c/busses/i2c-bcm2708.c
|
|
|
|
+++ b/drivers/i2c/busses/i2c-bcm2708.c
|
|
|
|
@@ -407,8 +407,11 @@ static int bcm2708_i2c_probe(struct plat
|
|
|
|
case 1:
|
|
|
|
adap->class = I2C_CLASS_DDC;
|
|
|
|
break;
|
|
|
|
+ case 2:
|
|
|
|
+ adap->class = I2C_CLASS_DDC;
|
|
|
|
+ break;
|
|
|
|
default:
|
|
|
|
- dev_err(&pdev->dev, "can only bind to BSC 0 or 1\n");
|
|
|
|
+ dev_err(&pdev->dev, "can only bind to BSC 0, 1 or 2\n");
|
|
|
|
err = -ENXIO;
|
|
|
|
goto out_free_bi;
|
|
|
|
}
|