brcm2708: add linux 4.1 support
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.1 / 0090-i2c-bcm2708-BCM270X_DT-Add-support-for-I2C2.patch
1 From f40ed032e6f0892778bac7d33d45593c0483628b Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Mon, 22 Jun 2015 14:23:03 +0100
4 Subject: [PATCH 090/121] i2c-bcm2708/BCM270X_DT: Add support for I2C2
5
6 The third I2C bus (I2C2) is normally reserved for HDMI use. Careless
7 use of this bus can break an attached display - use with caution.
8
9 It is recommended to disable accesses by VideoCore by setting
10 hdmi_ignore_edid=1 or hdmi_edid_file=1 in config.txt.
11
12 The interface is disabled by default - enable using the
13 i2c2_iknowwhatimdoing DT parameter.
14 ---
15 arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 6 ++++++
16 arch/arm/boot/dts/bcm2708-rpi-b.dts | 6 ++++++
17 arch/arm/boot/dts/bcm2708-rpi-cm.dts | 6 ++++++
18 arch/arm/boot/dts/bcm2708_common.dtsi | 14 ++++++++++++++
19 arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 6 ++++++
20 drivers/i2c/busses/i2c-bcm2708.c | 5 ++++-
21 6 files changed, 42 insertions(+), 1 deletion(-)
22
23 --- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
24 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
25 @@ -75,6 +75,10 @@
26 clock-frequency = <100000>;
27 };
28
29 +&i2c2 {
30 + clock-frequency = <100000>;
31 +};
32 +
33 &i2s {
34 #sound-dai-cells = <0>;
35 pinctrl-names = "default";
36 @@ -103,8 +107,10 @@
37 spi = <&spi0>,"status";
38 i2c0 = <&i2c0>,"status";
39 i2c1 = <&i2c1>,"status";
40 + i2c2_iknowwhatimdoing = <&i2c2>,"status";
41 i2c0_baudrate = <&i2c0>,"clock-frequency:0";
42 i2c1_baudrate = <&i2c1>,"clock-frequency:0";
43 + i2c2_baudrate = <&i2c2>,"clock-frequency:0";
44 core_freq = <&clk_core>,"clock-frequency:0";
45
46 act_led_gpio = <&act_led>,"gpios:4";
47 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
48 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
49 @@ -75,6 +75,10 @@
50 clock-frequency = <100000>;
51 };
52
53 +&i2c2 {
54 + clock-frequency = <100000>;
55 +};
56 +
57 &i2s {
58 #sound-dai-cells = <0>;
59 pinctrl-names = "default";
60 @@ -97,8 +101,10 @@
61 spi = <&spi0>,"status";
62 i2c0 = <&i2c0>,"status";
63 i2c1 = <&i2c1>,"status";
64 + i2c2_iknowwhatimdoing = <&i2c2>,"status";
65 i2c0_baudrate = <&i2c0>,"clock-frequency:0";
66 i2c1_baudrate = <&i2c1>,"clock-frequency:0";
67 + i2c2_baudrate = <&i2c2>,"clock-frequency:0";
68 core_freq = <&clk_core>,"clock-frequency:0";
69
70 act_led_gpio = <&act_led>,"gpios:4";
71 --- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
72 +++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
73 @@ -65,6 +65,10 @@
74 clock-frequency = <100000>;
75 };
76
77 +&i2c2 {
78 + clock-frequency = <100000>;
79 +};
80 +
81 &i2s {
82 #sound-dai-cells = <0>;
83 pinctrl-names = "default";
84 @@ -79,8 +83,10 @@
85 spi = <&spi0>,"status";
86 i2c0 = <&i2c0>,"status";
87 i2c1 = <&i2c1>,"status";
88 + i2c2_iknowwhatimdoing = <&i2c2>,"status";
89 i2c0_baudrate = <&i2c0>,"clock-frequency:0";
90 i2c1_baudrate = <&i2c1>,"clock-frequency:0";
91 + i2c2_baudrate = <&i2c2>,"clock-frequency:0";
92 core_freq = <&clk_core>,"clock-frequency:0";
93 };
94 };
95 --- a/arch/arm/boot/dts/bcm2708_common.dtsi
96 +++ b/arch/arm/boot/dts/bcm2708_common.dtsi
97 @@ -20,6 +20,7 @@
98 uart1 = &uart1;
99 mmc = &mmc;
100 i2c1 = &i2c1;
101 + i2c2 = &i2c2;
102 usb = &usb;
103 leds = &leds;
104 fb = &fb;
105 @@ -179,6 +180,19 @@
106 interrupts = <2 21>;
107 clocks = <&clk_i2c>;
108 #address-cells = <1>;
109 + #size-cells = <0>;
110 + status = "disabled";
111 + };
112 +
113 + i2c2: i2c@7e805000 {
114 + // Beware - this is shared with the HDMI module.
115 + // Careless use may break (really) your display.
116 + // Caveat emptor.
117 + compatible = "brcm,bcm2708-i2c";
118 + reg = <0x7e805000 0x1000>;
119 + interrupts = <2 21>;
120 + clocks = <&clk_i2c>;
121 + #address-cells = <1>;
122 #size-cells = <0>;
123 status = "disabled";
124 };
125 --- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
126 +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
127 @@ -75,6 +75,10 @@
128 clock-frequency = <100000>;
129 };
130
131 +&i2c2 {
132 + clock-frequency = <100000>;
133 +};
134 +
135 &i2s {
136 #sound-dai-cells = <0>;
137 pinctrl-names = "default";
138 @@ -103,8 +107,10 @@
139 spi = <&spi0>,"status";
140 i2c0 = <&i2c0>,"status";
141 i2c1 = <&i2c1>,"status";
142 + i2c2_iknowwhatimdoing = <&i2c2>,"status";
143 i2c0_baudrate = <&i2c0>,"clock-frequency:0";
144 i2c1_baudrate = <&i2c1>,"clock-frequency:0";
145 + i2c2_baudrate = <&i2c2>,"clock-frequency:0";
146 core_freq = <&clk_core>,"clock-frequency:0";
147
148 act_led_gpio = <&act_led>,"gpios:4";
149 --- a/drivers/i2c/busses/i2c-bcm2708.c
150 +++ b/drivers/i2c/busses/i2c-bcm2708.c
151 @@ -407,8 +407,11 @@ static int bcm2708_i2c_probe(struct plat
152 case 1:
153 adap->class = I2C_CLASS_DDC;
154 break;
155 + case 2:
156 + adap->class = I2C_CLASS_DDC;
157 + break;
158 default:
159 - dev_err(&pdev->dev, "can only bind to BSC 0 or 1\n");
160 + dev_err(&pdev->dev, "can only bind to BSC 0, 1 or 2\n");
161 err = -ENXIO;
162 goto out_free_bi;
163 }