Thu Mar 5 21:13:48 2015 UTC ()
Write the loops the same way, leaving i containing the number of tries
left. Also break early in the hot case.


(christos)
diff -r1.12 -r1.13 src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c

cvs diff -r1.12 -r1.13 src/sys/external/bsd/drm2/dist/drm/i915/Attic/intel_i2c.c (switch to unified diff)

--- src/sys/external/bsd/drm2/dist/drm/i915/Attic/intel_i2c.c 2015/03/02 23:05:03 1.12
+++ src/sys/external/bsd/drm2/dist/drm/i915/Attic/intel_i2c.c 2015/03/05 21:13:48 1.13
@@ -1,728 +1,731 @@ @@ -1,728 +1,731 @@
1/* 1/*
2 * Copyright (c) 2006 Dave Airlie <airlied@linux.ie> 2 * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
3 * Copyright © 2006-2008,2010 Intel Corporation 3 * Copyright © 2006-2008,2010 Intel Corporation
4 * Jesse Barnes <jesse.barnes@intel.com> 4 * Jesse Barnes <jesse.barnes@intel.com>
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation 8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the 10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions: 11 * Software is furnished to do so, subject to the following conditions:
12 * 12 *
13 * The above copyright notice and this permission notice (including the next 13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the 14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software. 15 * Software.
16 * 16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE. 23 * DEALINGS IN THE SOFTWARE.
24 * 24 *
25 * Authors: 25 * Authors:
26 * Eric Anholt <eric@anholt.net> 26 * Eric Anholt <eric@anholt.net>
27 * Chris Wilson <chris@chris-wilson.co.uk> 27 * Chris Wilson <chris@chris-wilson.co.uk>
28 */ 28 */
29#include <linux/i2c.h> 29#include <linux/i2c.h>
30#include <linux/i2c-algo-bit.h> 30#include <linux/i2c-algo-bit.h>
31#include <linux/export.h> 31#include <linux/export.h>
32#include <linux/module.h> 32#include <linux/module.h>
33#include <drm/drmP.h> 33#include <drm/drmP.h>
34#include "intel_drv.h" 34#include "intel_drv.h"
35#include <drm/i915_drm.h> 35#include <drm/i915_drm.h>
36#include "i915_drv.h" 36#include "i915_drv.h"
37 37
38enum disp_clk { 38enum disp_clk {
39 CDCLK, 39 CDCLK,
40 CZCLK 40 CZCLK
41}; 41};
42 42
43struct gmbus_port { 43struct gmbus_port {
44 const char *name; 44 const char *name;
45 int reg; 45 int reg;
46}; 46};
47 47
48static const struct gmbus_port gmbus_ports[] = { 48static const struct gmbus_port gmbus_ports[] = {
49 { "ssc", GPIOB }, 49 { "ssc", GPIOB },
50 { "vga", GPIOA }, 50 { "vga", GPIOA },
51 { "panel", GPIOC }, 51 { "panel", GPIOC },
52 { "dpc", GPIOD }, 52 { "dpc", GPIOD },
53 { "dpb", GPIOE }, 53 { "dpb", GPIOE },
54 { "dpd", GPIOF }, 54 { "dpd", GPIOF },
55}; 55};
56 56
57/* Intel GPIO access functions */ 57/* Intel GPIO access functions */
58 58
59#define I2C_RISEFALL_TIME 10 59#define I2C_RISEFALL_TIME 10
60 60
61static inline struct intel_gmbus * 61static inline struct intel_gmbus *
62to_intel_gmbus(struct i2c_adapter *i2c) 62to_intel_gmbus(struct i2c_adapter *i2c)
63{ 63{
64 return container_of(i2c, struct intel_gmbus, adapter); 64 return container_of(i2c, struct intel_gmbus, adapter);
65} 65}
66 66
67static int get_disp_clk_div(struct drm_i915_private *dev_priv, 67static int get_disp_clk_div(struct drm_i915_private *dev_priv,
68 enum disp_clk clk) 68 enum disp_clk clk)
69{ 69{
70 u32 reg_val; 70 u32 reg_val;
71 int clk_ratio; 71 int clk_ratio;
72 72
73 reg_val = I915_READ(CZCLK_CDCLK_FREQ_RATIO); 73 reg_val = I915_READ(CZCLK_CDCLK_FREQ_RATIO);
74 74
75 if (clk == CDCLK) 75 if (clk == CDCLK)
76 clk_ratio = 76 clk_ratio =
77 ((reg_val & CDCLK_FREQ_MASK) >> CDCLK_FREQ_SHIFT) + 1; 77 ((reg_val & CDCLK_FREQ_MASK) >> CDCLK_FREQ_SHIFT) + 1;
78 else 78 else
79 clk_ratio = (reg_val & CZCLK_FREQ_MASK) + 1; 79 clk_ratio = (reg_val & CZCLK_FREQ_MASK) + 1;
80 80
81 return clk_ratio; 81 return clk_ratio;
82} 82}
83 83
84static void gmbus_set_freq(struct drm_i915_private *dev_priv) 84static void gmbus_set_freq(struct drm_i915_private *dev_priv)
85{ 85{
86 int vco, gmbus_freq = 0, cdclk_div; 86 int vco, gmbus_freq = 0, cdclk_div;
87 87
88 BUG_ON(!IS_VALLEYVIEW(dev_priv->dev)); 88 BUG_ON(!IS_VALLEYVIEW(dev_priv->dev));
89 89
90 vco = valleyview_get_vco(dev_priv); 90 vco = valleyview_get_vco(dev_priv);
91 91
92 /* Get the CDCLK divide ratio */ 92 /* Get the CDCLK divide ratio */
93 cdclk_div = get_disp_clk_div(dev_priv, CDCLK); 93 cdclk_div = get_disp_clk_div(dev_priv, CDCLK);
94 94
95 /* 95 /*
96 * Program the gmbus_freq based on the cdclk frequency. 96 * Program the gmbus_freq based on the cdclk frequency.
97 * BSpec erroneously claims we should aim for 4MHz, but 97 * BSpec erroneously claims we should aim for 4MHz, but
98 * in fact 1MHz is the correct frequency. 98 * in fact 1MHz is the correct frequency.
99 */ 99 */
100 if (cdclk_div) 100 if (cdclk_div)
101 gmbus_freq = (vco << 1) / cdclk_div; 101 gmbus_freq = (vco << 1) / cdclk_div;
102 102
103 if (WARN_ON(gmbus_freq == 0)) 103 if (WARN_ON(gmbus_freq == 0))
104 return; 104 return;
105 105
106 I915_WRITE(GMBUSFREQ_VLV, gmbus_freq); 106 I915_WRITE(GMBUSFREQ_VLV, gmbus_freq);
107} 107}
108 108
109void 109void
110intel_i2c_reset(struct drm_device *dev) 110intel_i2c_reset(struct drm_device *dev)
111{ 111{
112 struct drm_i915_private *dev_priv = dev->dev_private; 112 struct drm_i915_private *dev_priv = dev->dev_private;
113 113
114 /* 114 /*
115 * In BIOS-less system, program the correct gmbus frequency 115 * In BIOS-less system, program the correct gmbus frequency
116 * before reading edid. 116 * before reading edid.
117 */ 117 */
118 if (IS_VALLEYVIEW(dev)) 118 if (IS_VALLEYVIEW(dev))
119 gmbus_set_freq(dev_priv); 119 gmbus_set_freq(dev_priv);
120 120
121 I915_WRITE(dev_priv->gpio_mmio_base + GMBUS0, 0); 121 I915_WRITE(dev_priv->gpio_mmio_base + GMBUS0, 0);
122 I915_WRITE(dev_priv->gpio_mmio_base + GMBUS4, 0); 122 I915_WRITE(dev_priv->gpio_mmio_base + GMBUS4, 0);
123} 123}
124 124
125static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable) 125static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable)
126{ 126{
127 u32 val; 127 u32 val;
128 128
129 /* When using bit bashing for I2C, this bit needs to be set to 1 */ 129 /* When using bit bashing for I2C, this bit needs to be set to 1 */
130 if (!IS_PINEVIEW(dev_priv->dev)) 130 if (!IS_PINEVIEW(dev_priv->dev))
131 return; 131 return;
132 132
133 val = I915_READ(DSPCLK_GATE_D); 133 val = I915_READ(DSPCLK_GATE_D);
134 if (enable) 134 if (enable)
135 val |= DPCUNIT_CLOCK_GATE_DISABLE; 135 val |= DPCUNIT_CLOCK_GATE_DISABLE;
136 else 136 else
137 val &= ~DPCUNIT_CLOCK_GATE_DISABLE; 137 val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
138 I915_WRITE(DSPCLK_GATE_D, val); 138 I915_WRITE(DSPCLK_GATE_D, val);
139} 139}
140 140
141static u32 get_reserved(struct intel_gmbus *bus) 141static u32 get_reserved(struct intel_gmbus *bus)
142{ 142{
143 struct drm_i915_private *dev_priv = bus->dev_priv; 143 struct drm_i915_private *dev_priv = bus->dev_priv;
144 struct drm_device *dev = dev_priv->dev; 144 struct drm_device *dev = dev_priv->dev;
145 u32 reserved = 0; 145 u32 reserved = 0;
146 146
147 /* On most chips, these bits must be preserved in software. */ 147 /* On most chips, these bits must be preserved in software. */
148 if (!IS_I830(dev) && !IS_845G(dev)) 148 if (!IS_I830(dev) && !IS_845G(dev))
149 reserved = I915_READ_NOTRACE(bus->gpio_reg) & 149 reserved = I915_READ_NOTRACE(bus->gpio_reg) &
150 (GPIO_DATA_PULLUP_DISABLE | 150 (GPIO_DATA_PULLUP_DISABLE |
151 GPIO_CLOCK_PULLUP_DISABLE); 151 GPIO_CLOCK_PULLUP_DISABLE);
152 152
153 return reserved; 153 return reserved;
154} 154}
155 155
156static int get_clock(void *data) 156static int get_clock(void *data)
157{ 157{
158 struct intel_gmbus *bus = data; 158 struct intel_gmbus *bus = data;
159 struct drm_i915_private *dev_priv = bus->dev_priv; 159 struct drm_i915_private *dev_priv = bus->dev_priv;
160 u32 reserved = get_reserved(bus); 160 u32 reserved = get_reserved(bus);
161 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK); 161 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
162 I915_WRITE_NOTRACE(bus->gpio_reg, reserved); 162 I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
163 return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0; 163 return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
164} 164}
165 165
166static int get_data(void *data) 166static int get_data(void *data)
167{ 167{
168 struct intel_gmbus *bus = data; 168 struct intel_gmbus *bus = data;
169 struct drm_i915_private *dev_priv = bus->dev_priv; 169 struct drm_i915_private *dev_priv = bus->dev_priv;
170 u32 reserved = get_reserved(bus); 170 u32 reserved = get_reserved(bus);
171 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK); 171 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
172 I915_WRITE_NOTRACE(bus->gpio_reg, reserved); 172 I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
173 return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0; 173 return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
174} 174}
175 175
176static void set_clock(void *data, int state_high) 176static void set_clock(void *data, int state_high)
177{ 177{
178 struct intel_gmbus *bus = data; 178 struct intel_gmbus *bus = data;
179 struct drm_i915_private *dev_priv = bus->dev_priv; 179 struct drm_i915_private *dev_priv = bus->dev_priv;
180 u32 reserved = get_reserved(bus); 180 u32 reserved = get_reserved(bus);
181 u32 clock_bits; 181 u32 clock_bits;
182 182
183 if (state_high) 183 if (state_high)
184 clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK; 184 clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK;
185 else 185 else
186 clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK | 186 clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
187 GPIO_CLOCK_VAL_MASK; 187 GPIO_CLOCK_VAL_MASK;
188 188
189 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits); 189 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
190 POSTING_READ(bus->gpio_reg); 190 POSTING_READ(bus->gpio_reg);
191} 191}
192 192
193static void set_data(void *data, int state_high) 193static void set_data(void *data, int state_high)
194{ 194{
195 struct intel_gmbus *bus = data; 195 struct intel_gmbus *bus = data;
196 struct drm_i915_private *dev_priv = bus->dev_priv; 196 struct drm_i915_private *dev_priv = bus->dev_priv;
197 u32 reserved = get_reserved(bus); 197 u32 reserved = get_reserved(bus);
198 u32 data_bits; 198 u32 data_bits;
199 199
200 if (state_high) 200 if (state_high)
201 data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK; 201 data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK;
202 else 202 else
203 data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK | 203 data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
204 GPIO_DATA_VAL_MASK; 204 GPIO_DATA_VAL_MASK;
205 205
206 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits); 206 I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
207 POSTING_READ(bus->gpio_reg); 207 POSTING_READ(bus->gpio_reg);
208} 208}
209 209
210static int 210static int
211intel_gpio_pre_xfer(struct i2c_adapter *adapter) 211intel_gpio_pre_xfer(struct i2c_adapter *adapter)
212{ 212{
213 struct intel_gmbus *bus = container_of(adapter, 213 struct intel_gmbus *bus = container_of(adapter,
214 struct intel_gmbus, 214 struct intel_gmbus,
215 adapter); 215 adapter);
216 struct drm_i915_private *dev_priv = bus->dev_priv; 216 struct drm_i915_private *dev_priv = bus->dev_priv;
217 217
218 intel_i2c_reset(dev_priv->dev); 218 intel_i2c_reset(dev_priv->dev);
219 intel_i2c_quirk_set(dev_priv, true); 219 intel_i2c_quirk_set(dev_priv, true);
220 set_data(bus, 1); 220 set_data(bus, 1);
221 set_clock(bus, 1); 221 set_clock(bus, 1);
222 udelay(I2C_RISEFALL_TIME); 222 udelay(I2C_RISEFALL_TIME);
223 return 0; 223 return 0;
224} 224}
225 225
226static void 226static void
227intel_gpio_post_xfer(struct i2c_adapter *adapter) 227intel_gpio_post_xfer(struct i2c_adapter *adapter)
228{ 228{
229 struct intel_gmbus *bus = container_of(adapter, 229 struct intel_gmbus *bus = container_of(adapter,
230 struct intel_gmbus, 230 struct intel_gmbus,
231 adapter); 231 adapter);
232 struct drm_i915_private *dev_priv = bus->dev_priv; 232 struct drm_i915_private *dev_priv = bus->dev_priv;
233 233
234 set_data(bus, 1); 234 set_data(bus, 1);
235 set_clock(bus, 1); 235 set_clock(bus, 1);
236 intel_i2c_quirk_set(dev_priv, false); 236 intel_i2c_quirk_set(dev_priv, false);
237} 237}
238 238
239static void 239static void
240intel_gpio_setup(struct intel_gmbus *bus, u32 pin) 240intel_gpio_setup(struct intel_gmbus *bus, u32 pin)
241{ 241{
242 struct drm_i915_private *dev_priv = bus->dev_priv; 242 struct drm_i915_private *dev_priv = bus->dev_priv;
243 struct i2c_algo_bit_data *algo; 243 struct i2c_algo_bit_data *algo;
244 244
245 algo = &bus->bit_algo; 245 algo = &bus->bit_algo;
246 246
247 /* -1 to map pin pair to gmbus index */ 247 /* -1 to map pin pair to gmbus index */
248 bus->gpio_reg = dev_priv->gpio_mmio_base + gmbus_ports[pin - 1].reg; 248 bus->gpio_reg = dev_priv->gpio_mmio_base + gmbus_ports[pin - 1].reg;
249 249
250 bus->adapter.algo_data = algo; 250 bus->adapter.algo_data = algo;
251 algo->setsda = set_data; 251 algo->setsda = set_data;
252 algo->setscl = set_clock; 252 algo->setscl = set_clock;
253 algo->getsda = get_data; 253 algo->getsda = get_data;
254 algo->getscl = get_clock; 254 algo->getscl = get_clock;
255 algo->pre_xfer = intel_gpio_pre_xfer; 255 algo->pre_xfer = intel_gpio_pre_xfer;
256 algo->post_xfer = intel_gpio_post_xfer; 256 algo->post_xfer = intel_gpio_post_xfer;
257 algo->udelay = I2C_RISEFALL_TIME; 257 algo->udelay = I2C_RISEFALL_TIME;
258 algo->timeout = usecs_to_jiffies(2200); 258 algo->timeout = usecs_to_jiffies(2200);
259 algo->data = bus; 259 algo->data = bus;
260} 260}
261 261
262static int 262static int
263gmbus_wait_hw_status(struct drm_i915_private *dev_priv, 263gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
264 u32 gmbus2_status, 264 u32 gmbus2_status,
265 u32 gmbus4_irq_en) 265 u32 gmbus4_irq_en)
266{ 266{
267 int i; 267 int i;
268 int reg_offset = dev_priv->gpio_mmio_base; 268 int reg_offset = dev_priv->gpio_mmio_base;
269 u32 gmbus2 = 0; 269 u32 gmbus2 = 0;
270#ifndef __NetBSD__ 270#ifndef __NetBSD__
271 DEFINE_WAIT(wait); 271 DEFINE_WAIT(wait);
272#endif 272#endif
273 273
274#ifdef __NetBSD__ 274#ifdef __NetBSD__
275 if (cold || !HAS_GMBUS_IRQ(dev_priv->dev)) 275 if (cold || !HAS_GMBUS_IRQ(dev_priv->dev))
276 gmbus4_irq_en = 0; 276 gmbus4_irq_en = 0;
277#else 277#else
278 if (!HAS_GMBUS_IRQ(dev_priv->dev)) 278 if (!HAS_GMBUS_IRQ(dev_priv->dev))
279 gmbus4_irq_en = 0; 279 gmbus4_irq_en = 0;
280#endif 280#endif
281 281
282 /* Important: The hw handles only the first bit, so set only one! Since 282 /* Important: The hw handles only the first bit, so set only one! Since
283 * we also need to check for NAKs besides the hw ready/idle signal, we 283 * we also need to check for NAKs besides the hw ready/idle signal, we
284 * need to wake up periodically and check that ourselves. */ 284 * need to wake up periodically and check that ourselves. */
285 I915_WRITE(GMBUS4 + reg_offset, gmbus4_irq_en); 285 I915_WRITE(GMBUS4 + reg_offset, gmbus4_irq_en);
286 286
287#ifdef __NetBSD__ 287#ifdef __NetBSD__
288 if (cold) { 288 if (cold) {
289 i = 50; 289 i = 50;
290 while (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset), 290 do {
291 !ISSET(gmbus2, (GMBUS_SATOER | gmbus2_status))) { 291 gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset);
292 if (i-- == 0) 292 if (ISSET(gmbus2, (GMBUS_SATOER | gmbus2_status)))
293 break; 293 break;
294 DELAY(1000); 294 DELAY(1000);
295 } 295 } while (i-- > 0);
296 } else { 296 } else {
297 for (i = 0; i < mstohz(50); i++) { 297 i = mstohz(50);
 298 do {
298 int ret; 299 int ret;
299 300
300 spin_lock(&dev_priv->gmbus_wait_lock); 301 spin_lock(&dev_priv->gmbus_wait_lock);
301 DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, 302 DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
302 &dev_priv->gmbus_wait_queue, 303 &dev_priv->gmbus_wait_queue,
303 &dev_priv->gmbus_wait_lock, 304 &dev_priv->gmbus_wait_lock,
304 1, 305 1,
305 (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset), 306 (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset),
306 ISSET(gmbus2, 307 ISSET(gmbus2,
307 (GMBUS_SATOER | gmbus2_status)))); 308 (GMBUS_SATOER | gmbus2_status))));
308 spin_unlock(&dev_priv->gmbus_wait_lock); 309 spin_unlock(&dev_priv->gmbus_wait_lock);
309 } 310 if (ret)
 311 break;
 312 } while (i-- > 0);
310 } 313 }
311#else 314#else
312 for (i = 0; i < msecs_to_jiffies_timeout(50); i++) { 315 for (i = 0; i < msecs_to_jiffies_timeout(50); i++) {
313 prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait, 316 prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait,
314 TASK_UNINTERRUPTIBLE); 317 TASK_UNINTERRUPTIBLE);
315 318
316 gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset); 319 gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset);
317 if (gmbus2 & (GMBUS_SATOER | gmbus2_status)) 320 if (gmbus2 & (GMBUS_SATOER | gmbus2_status))
318 break; 321 break;
319 322
320 schedule_timeout(1); 323 schedule_timeout(1);
321 } 324 }
322 finish_wait(&dev_priv->gmbus_wait_queue, &wait); 325 finish_wait(&dev_priv->gmbus_wait_queue, &wait);
323#endif 326#endif
324 327
325 I915_WRITE(GMBUS4 + reg_offset, 0); 328 I915_WRITE(GMBUS4 + reg_offset, 0);
326 329
327 if (gmbus2 & GMBUS_SATOER) 330 if (gmbus2 & GMBUS_SATOER)
328 return -ENXIO; 331 return -ENXIO;
329 if (gmbus2 & gmbus2_status) 332 if (gmbus2 & gmbus2_status)
330 return 0; 333 return 0;
331 return -ETIMEDOUT; 334 return -ETIMEDOUT;
332} 335}
333 336
334static int 337static int
335gmbus_wait_idle(struct drm_i915_private *dev_priv) 338gmbus_wait_idle(struct drm_i915_private *dev_priv)
336{ 339{
337 int ret; 340 int ret;
338 int reg_offset = dev_priv->gpio_mmio_base; 341 int reg_offset = dev_priv->gpio_mmio_base;
339 342
340#define C ((I915_READ_NOTRACE(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0) 343#define C ((I915_READ_NOTRACE(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0)
341 344
342#ifdef __NetBSD__ 345#ifdef __NetBSD__
343 if (cold || !HAS_GMBUS_IRQ(dev_priv->dev)) 346 if (cold || !HAS_GMBUS_IRQ(dev_priv->dev))
344 return wait_for(C, 10); 347 return wait_for(C, 10);
345#else 348#else
346 if (!HAS_GMBUS_IRQ(dev_priv->dev)) 349 if (!HAS_GMBUS_IRQ(dev_priv->dev))
347 return wait_for(C, 10); 350 return wait_for(C, 10);
348#endif 351#endif
349 352
350 /* Important: The hw handles only the first bit, so set only one! */ 353 /* Important: The hw handles only the first bit, so set only one! */
351 I915_WRITE(GMBUS4 + reg_offset, GMBUS_IDLE_EN); 354 I915_WRITE(GMBUS4 + reg_offset, GMBUS_IDLE_EN);
352 355
353#ifdef __NetBSD__ 356#ifdef __NetBSD__
354 spin_lock(&dev_priv->gmbus_wait_lock); 357 spin_lock(&dev_priv->gmbus_wait_lock);
355 DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, &dev_priv->gmbus_wait_queue, 358 DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, &dev_priv->gmbus_wait_queue,
356 &dev_priv->gmbus_wait_lock, msecs_to_jiffies_timeout(10), 359 &dev_priv->gmbus_wait_lock, msecs_to_jiffies_timeout(10),
357 C); 360 C);
358 spin_unlock(&dev_priv->gmbus_wait_lock); 361 spin_unlock(&dev_priv->gmbus_wait_lock);
359#else 362#else
360 ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C, 363 ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
361 msecs_to_jiffies_timeout(10)); 364 msecs_to_jiffies_timeout(10));
362#endif 365#endif
363 366
364 I915_WRITE(GMBUS4 + reg_offset, 0); 367 I915_WRITE(GMBUS4 + reg_offset, 0);
365 368
366 if (ret) 369 if (ret)
367 return 0; 370 return 0;
368 else 371 else
369 return -ETIMEDOUT; 372 return -ETIMEDOUT;
370#undef C 373#undef C
371} 374}
372 375
373static int 376static int
374gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg, 377gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
375 u32 gmbus1_index) 378 u32 gmbus1_index)
376{ 379{
377 int reg_offset = dev_priv->gpio_mmio_base; 380 int reg_offset = dev_priv->gpio_mmio_base;
378 u16 len = msg->len; 381 u16 len = msg->len;
379 u8 *buf = msg->buf; 382 u8 *buf = msg->buf;
380 383
381 I915_WRITE(GMBUS1 + reg_offset, 384 I915_WRITE(GMBUS1 + reg_offset,
382 gmbus1_index | 385 gmbus1_index |
383 GMBUS_CYCLE_WAIT | 386 GMBUS_CYCLE_WAIT |
384 (len << GMBUS_BYTE_COUNT_SHIFT) | 387 (len << GMBUS_BYTE_COUNT_SHIFT) |
385 (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) | 388 (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
386 GMBUS_SLAVE_READ | GMBUS_SW_RDY); 389 GMBUS_SLAVE_READ | GMBUS_SW_RDY);
387 while (len) { 390 while (len) {
388 int ret; 391 int ret;
389 u32 val, loop = 0; 392 u32 val, loop = 0;
390 393
391 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY, 394 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY,
392 GMBUS_HW_RDY_EN); 395 GMBUS_HW_RDY_EN);
393 if (ret) 396 if (ret)
394 return ret; 397 return ret;
395 398
396 val = I915_READ(GMBUS3 + reg_offset); 399 val = I915_READ(GMBUS3 + reg_offset);
397 do { 400 do {
398 *buf++ = val & 0xff; 401 *buf++ = val & 0xff;
399 val >>= 8; 402 val >>= 8;
400 } while (--len && ++loop < 4); 403 } while (--len && ++loop < 4);
401 } 404 }
402 405
403 return 0; 406 return 0;
404} 407}
405 408
406static int 409static int
407gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) 410gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
408{ 411{
409 int reg_offset = dev_priv->gpio_mmio_base; 412 int reg_offset = dev_priv->gpio_mmio_base;
410 u16 len = msg->len; 413 u16 len = msg->len;
411 u8 *buf = msg->buf; 414 u8 *buf = msg->buf;
412 u32 val, loop; 415 u32 val, loop;
413 416
414 val = loop = 0; 417 val = loop = 0;
415 while (len && loop < 4) { 418 while (len && loop < 4) {
416 val |= *buf++ << (8 * loop++); 419 val |= *buf++ << (8 * loop++);
417 len -= 1; 420 len -= 1;
418 } 421 }
419 422
420 I915_WRITE(GMBUS3 + reg_offset, val); 423 I915_WRITE(GMBUS3 + reg_offset, val);
421 I915_WRITE(GMBUS1 + reg_offset, 424 I915_WRITE(GMBUS1 + reg_offset,
422 GMBUS_CYCLE_WAIT | 425 GMBUS_CYCLE_WAIT |
423 (msg->len << GMBUS_BYTE_COUNT_SHIFT) | 426 (msg->len << GMBUS_BYTE_COUNT_SHIFT) |
424 (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) | 427 (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
425 GMBUS_SLAVE_WRITE | GMBUS_SW_RDY); 428 GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
426 while (len) { 429 while (len) {
427 int ret; 430 int ret;
428 431
429 val = loop = 0; 432 val = loop = 0;
430 do { 433 do {
431 val |= *buf++ << (8 * loop); 434 val |= *buf++ << (8 * loop);
432 } while (--len && ++loop < 4); 435 } while (--len && ++loop < 4);
433 436
434 I915_WRITE(GMBUS3 + reg_offset, val); 437 I915_WRITE(GMBUS3 + reg_offset, val);
435 438
436 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY, 439 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY,
437 GMBUS_HW_RDY_EN); 440 GMBUS_HW_RDY_EN);
438 if (ret) 441 if (ret)
439 return ret; 442 return ret;
440 } 443 }
441 return 0; 444 return 0;
442} 445}
443 446
444/* 447/*
445 * The gmbus controller can combine a 1 or 2 byte write with a read that 448 * The gmbus controller can combine a 1 or 2 byte write with a read that
446 * immediately follows it by using an "INDEX" cycle. 449 * immediately follows it by using an "INDEX" cycle.
447 */ 450 */
448static bool 451static bool
449gmbus_is_index_read(struct i2c_msg *msgs, int i, int num) 452gmbus_is_index_read(struct i2c_msg *msgs, int i, int num)
450{ 453{
451 return (i + 1 < num && 454 return (i + 1 < num &&
452 !(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 && 455 !(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 &&
453 (msgs[i + 1].flags & I2C_M_RD)); 456 (msgs[i + 1].flags & I2C_M_RD));
454} 457}
455 458
456static int 459static int
457gmbus_xfer_index_read(struct drm_i915_private *dev_priv, struct i2c_msg *msgs) 460gmbus_xfer_index_read(struct drm_i915_private *dev_priv, struct i2c_msg *msgs)
458{ 461{
459 int reg_offset = dev_priv->gpio_mmio_base; 462 int reg_offset = dev_priv->gpio_mmio_base;
460 u32 gmbus1_index = 0; 463 u32 gmbus1_index = 0;
461 u32 gmbus5 = 0; 464 u32 gmbus5 = 0;
462 int ret; 465 int ret;
463 466
464 if (msgs[0].len == 2) 467 if (msgs[0].len == 2)
465 gmbus5 = GMBUS_2BYTE_INDEX_EN | 468 gmbus5 = GMBUS_2BYTE_INDEX_EN |
466 msgs[0].buf[1] | (msgs[0].buf[0] << 8); 469 msgs[0].buf[1] | (msgs[0].buf[0] << 8);
467 if (msgs[0].len == 1) 470 if (msgs[0].len == 1)
468 gmbus1_index = GMBUS_CYCLE_INDEX | 471 gmbus1_index = GMBUS_CYCLE_INDEX |
469 (msgs[0].buf[0] << GMBUS_SLAVE_INDEX_SHIFT); 472 (msgs[0].buf[0] << GMBUS_SLAVE_INDEX_SHIFT);
470 473
471 /* GMBUS5 holds 16-bit index */ 474 /* GMBUS5 holds 16-bit index */
472 if (gmbus5) 475 if (gmbus5)
473 I915_WRITE(GMBUS5 + reg_offset, gmbus5); 476 I915_WRITE(GMBUS5 + reg_offset, gmbus5);
474 477
475 ret = gmbus_xfer_read(dev_priv, &msgs[1], gmbus1_index); 478 ret = gmbus_xfer_read(dev_priv, &msgs[1], gmbus1_index);
476 479
477 /* Clear GMBUS5 after each index transfer */ 480 /* Clear GMBUS5 after each index transfer */
478 if (gmbus5) 481 if (gmbus5)
479 I915_WRITE(GMBUS5 + reg_offset, 0); 482 I915_WRITE(GMBUS5 + reg_offset, 0);
480 483
481 return ret; 484 return ret;
482} 485}
483 486
484static int 487static int
485gmbus_xfer(struct i2c_adapter *adapter, 488gmbus_xfer(struct i2c_adapter *adapter,
486 struct i2c_msg *msgs, 489 struct i2c_msg *msgs,
487 int num) 490 int num)
488{ 491{
489 struct intel_gmbus *bus = container_of(adapter, 492 struct intel_gmbus *bus = container_of(adapter,
490 struct intel_gmbus, 493 struct intel_gmbus,
491 adapter); 494 adapter);
492 struct drm_i915_private *dev_priv = bus->dev_priv; 495 struct drm_i915_private *dev_priv = bus->dev_priv;
493 int i, reg_offset; 496 int i, reg_offset;
494 int ret = 0; 497 int ret = 0;
495 498
496 intel_aux_display_runtime_get(dev_priv); 499 intel_aux_display_runtime_get(dev_priv);
497 mutex_lock(&dev_priv->gmbus_mutex); 500 mutex_lock(&dev_priv->gmbus_mutex);
498 501
499 if (bus->force_bit) { 502 if (bus->force_bit) {
500 ret = i2c_bit_algo.master_xfer(adapter, msgs, num); 503 ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
501 goto out; 504 goto out;
502 } 505 }
503 506
504 reg_offset = dev_priv->gpio_mmio_base; 507 reg_offset = dev_priv->gpio_mmio_base;
505 508
506 I915_WRITE(GMBUS0 + reg_offset, bus->reg0); 509 I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
507 510
508 for (i = 0; i < num; i++) { 511 for (i = 0; i < num; i++) {
509 if (gmbus_is_index_read(msgs, i, num)) { 512 if (gmbus_is_index_read(msgs, i, num)) {
510 ret = gmbus_xfer_index_read(dev_priv, &msgs[i]); 513 ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
511 i += 1; /* set i to the index of the read xfer */ 514 i += 1; /* set i to the index of the read xfer */
512 } else if (msgs[i].flags & I2C_M_RD) { 515 } else if (msgs[i].flags & I2C_M_RD) {
513 ret = gmbus_xfer_read(dev_priv, &msgs[i], 0); 516 ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
514 } else { 517 } else {
515 ret = gmbus_xfer_write(dev_priv, &msgs[i]); 518 ret = gmbus_xfer_write(dev_priv, &msgs[i]);
516 } 519 }
517 520
518 if (ret == -ETIMEDOUT) 521 if (ret == -ETIMEDOUT)
519 goto timeout; 522 goto timeout;
520 if (ret == -ENXIO) 523 if (ret == -ENXIO)
521 goto clear_err; 524 goto clear_err;
522 525
523 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_WAIT_PHASE, 526 ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_WAIT_PHASE,
524 GMBUS_HW_WAIT_EN); 527 GMBUS_HW_WAIT_EN);
525 if (ret == -ENXIO) 528 if (ret == -ENXIO)
526 goto clear_err; 529 goto clear_err;
527 if (ret) 530 if (ret)
528 goto timeout; 531 goto timeout;
529 } 532 }
530 533
531 /* Generate a STOP condition on the bus. Note that gmbus can't generata 534 /* Generate a STOP condition on the bus. Note that gmbus can't generata
532 * a STOP on the very first cycle. To simplify the code we 535 * a STOP on the very first cycle. To simplify the code we
533 * unconditionally generate the STOP condition with an additional gmbus 536 * unconditionally generate the STOP condition with an additional gmbus
534 * cycle. */ 537 * cycle. */
535 I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_STOP | GMBUS_SW_RDY); 538 I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_STOP | GMBUS_SW_RDY);
536 539
537 /* Mark the GMBUS interface as disabled after waiting for idle. 540 /* Mark the GMBUS interface as disabled after waiting for idle.
538 * We will re-enable it at the start of the next xfer, 541 * We will re-enable it at the start of the next xfer,
539 * till then let it sleep. 542 * till then let it sleep.
540 */ 543 */
541 if (gmbus_wait_idle(dev_priv)) { 544 if (gmbus_wait_idle(dev_priv)) {
542 DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n", 545 DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
543 adapter->name); 546 adapter->name);
544 ret = -ETIMEDOUT; 547 ret = -ETIMEDOUT;
545 } 548 }
546 I915_WRITE(GMBUS0 + reg_offset, 0); 549 I915_WRITE(GMBUS0 + reg_offset, 0);
547 ret = ret ?: i; 550 ret = ret ?: i;
548 goto out; 551 goto out;
549 552
550clear_err: 553clear_err:
551 /* 554 /*
552 * Wait for bus to IDLE before clearing NAK. 555 * Wait for bus to IDLE before clearing NAK.
553 * If we clear the NAK while bus is still active, then it will stay 556 * If we clear the NAK while bus is still active, then it will stay
554 * active and the next transaction may fail. 557 * active and the next transaction may fail.
555 * 558 *
556 * If no ACK is received during the address phase of a transaction, the 559 * If no ACK is received during the address phase of a transaction, the
557 * adapter must report -ENXIO. It is not clear what to return if no ACK 560 * adapter must report -ENXIO. It is not clear what to return if no ACK
558 * is received at other times. But we have to be careful to not return 561 * is received at other times. But we have to be careful to not return
559 * spurious -ENXIO because that will prevent i2c and drm edid functions 562 * spurious -ENXIO because that will prevent i2c and drm edid functions
560 * from retrying. So return -ENXIO only when gmbus properly quiescents - 563 * from retrying. So return -ENXIO only when gmbus properly quiescents -
561 * timing out seems to happen when there _is_ a ddc chip present, but 564 * timing out seems to happen when there _is_ a ddc chip present, but
562 * it's slow responding and only answers on the 2nd retry. 565 * it's slow responding and only answers on the 2nd retry.
563 */ 566 */
564 ret = -ENXIO; 567 ret = -ENXIO;
565 if (gmbus_wait_idle(dev_priv)) { 568 if (gmbus_wait_idle(dev_priv)) {
566 DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n", 569 DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
567 adapter->name); 570 adapter->name);
568 ret = -ETIMEDOUT; 571 ret = -ETIMEDOUT;
569 } 572 }
570 573
571 /* Toggle the Software Clear Interrupt bit. This has the effect 574 /* Toggle the Software Clear Interrupt bit. This has the effect
572 * of resetting the GMBUS controller and so clearing the 575 * of resetting the GMBUS controller and so clearing the
573 * BUS_ERROR raised by the slave's NAK. 576 * BUS_ERROR raised by the slave's NAK.
574 */ 577 */
575 I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT); 578 I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT);
576 I915_WRITE(GMBUS1 + reg_offset, 0); 579 I915_WRITE(GMBUS1 + reg_offset, 0);
577 I915_WRITE(GMBUS0 + reg_offset, 0); 580 I915_WRITE(GMBUS0 + reg_offset, 0);
578 581
579 DRM_DEBUG_KMS("GMBUS [%s] NAK for addr: %04x %c(%d)\n", 582 DRM_DEBUG_KMS("GMBUS [%s] NAK for addr: %04x %c(%d)\n",
580 adapter->name, msgs[i].addr, 583 adapter->name, msgs[i].addr,
581 (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len); 584 (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
582 585
583 goto out; 586 goto out;
584 587
585timeout: 588timeout:
586 DRM_INFO("GMBUS [%s] timed out, falling back to bit banging on pin %d\n", 589 DRM_INFO("GMBUS [%s] timed out, falling back to bit banging on pin %d\n",
587 bus->adapter.name, bus->reg0 & 0xff); 590 bus->adapter.name, bus->reg0 & 0xff);
588 I915_WRITE(GMBUS0 + reg_offset, 0); 591 I915_WRITE(GMBUS0 + reg_offset, 0);
589 592
590 /* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */ 593 /* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */
591 bus->force_bit = 1; 594 bus->force_bit = 1;
592 ret = i2c_bit_algo.master_xfer(adapter, msgs, num); 595 ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
593 596
594out: 597out:
595 mutex_unlock(&dev_priv->gmbus_mutex); 598 mutex_unlock(&dev_priv->gmbus_mutex);
596 intel_aux_display_runtime_put(dev_priv); 599 intel_aux_display_runtime_put(dev_priv);
597 return ret; 600 return ret;
598} 601}
599 602
600static u32 gmbus_func(struct i2c_adapter *adapter) 603static u32 gmbus_func(struct i2c_adapter *adapter)
601{ 604{
602 return i2c_bit_algo.functionality(adapter) & 605 return i2c_bit_algo.functionality(adapter) &
603 (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | 606 (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
604 /* I2C_FUNC_10BIT_ADDR | */ 607 /* I2C_FUNC_10BIT_ADDR | */
605 I2C_FUNC_SMBUS_READ_BLOCK_DATA | 608 I2C_FUNC_SMBUS_READ_BLOCK_DATA |
606 I2C_FUNC_SMBUS_BLOCK_PROC_CALL); 609 I2C_FUNC_SMBUS_BLOCK_PROC_CALL);
607} 610}
608 611
609static const struct i2c_algorithm gmbus_algorithm = { 612static const struct i2c_algorithm gmbus_algorithm = {
610 .master_xfer = gmbus_xfer, 613 .master_xfer = gmbus_xfer,
611 .functionality = gmbus_func 614 .functionality = gmbus_func
612}; 615};
613 616
614/** 617/**
615 * intel_gmbus_setup - instantiate all Intel i2c GMBuses 618 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
616 * @dev: DRM device 619 * @dev: DRM device
617 */ 620 */
618int intel_setup_gmbus(struct drm_device *dev) 621int intel_setup_gmbus(struct drm_device *dev)
619{ 622{
620 struct drm_i915_private *dev_priv = dev->dev_private; 623 struct drm_i915_private *dev_priv = dev->dev_private;
621 int ret, i; 624 int ret, i;
622 625
623 if (HAS_PCH_NOP(dev)) 626 if (HAS_PCH_NOP(dev))
624 return 0; 627 return 0;
625 else if (HAS_PCH_SPLIT(dev)) 628 else if (HAS_PCH_SPLIT(dev))
626 dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA; 629 dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA;
627 else if (IS_VALLEYVIEW(dev)) 630 else if (IS_VALLEYVIEW(dev))
628 dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE; 631 dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
629 else 632 else
630 dev_priv->gpio_mmio_base = 0; 633 dev_priv->gpio_mmio_base = 0;
631 634
632#ifdef __NetBSD__ 635#ifdef __NetBSD__
633 linux_mutex_init(&dev_priv->gmbus_mutex); 636 linux_mutex_init(&dev_priv->gmbus_mutex);
634#else 637#else
635 mutex_init(&dev_priv->gmbus_mutex); 638 mutex_init(&dev_priv->gmbus_mutex);
636#endif 639#endif
637 640
638#ifdef __NetBSD__ 641#ifdef __NetBSD__
639 spin_lock_init(&dev_priv->gmbus_wait_lock); 642 spin_lock_init(&dev_priv->gmbus_wait_lock);
640 DRM_INIT_WAITQUEUE(&dev_priv->gmbus_wait_queue, "i915i2c"); 643 DRM_INIT_WAITQUEUE(&dev_priv->gmbus_wait_queue, "i915i2c");
641#else 644#else
642 init_waitqueue_head(&dev_priv->gmbus_wait_queue); 645 init_waitqueue_head(&dev_priv->gmbus_wait_queue);
643#endif 646#endif
644 647
645 for (i = 0; i < GMBUS_NUM_PORTS; i++) { 648 for (i = 0; i < GMBUS_NUM_PORTS; i++) {
646 struct intel_gmbus *bus = &dev_priv->gmbus[i]; 649 struct intel_gmbus *bus = &dev_priv->gmbus[i];
647 u32 port = i + 1; /* +1 to map gmbus index to pin pair */ 650 u32 port = i + 1; /* +1 to map gmbus index to pin pair */
648 651
649 bus->adapter.owner = THIS_MODULE; 652 bus->adapter.owner = THIS_MODULE;
650 bus->adapter.class = I2C_CLASS_DDC; 653 bus->adapter.class = I2C_CLASS_DDC;
651 snprintf(bus->adapter.name, 654 snprintf(bus->adapter.name,
652 sizeof(bus->adapter.name), 655 sizeof(bus->adapter.name),
653 "i915 gmbus %s", 656 "i915 gmbus %s",
654 gmbus_ports[i].name); 657 gmbus_ports[i].name);
655 658
656 bus->adapter.dev.parent = &dev->pdev->dev; 659 bus->adapter.dev.parent = &dev->pdev->dev;
657 bus->dev_priv = dev_priv; 660 bus->dev_priv = dev_priv;
658 661
659 bus->adapter.algo = &gmbus_algorithm; 662 bus->adapter.algo = &gmbus_algorithm;
660 663
661 /* By default use a conservative clock rate */ 664 /* By default use a conservative clock rate */
662 bus->reg0 = port | GMBUS_RATE_100KHZ; 665 bus->reg0 = port | GMBUS_RATE_100KHZ;
663 666
664 /* gmbus seems to be broken on i830 */ 667 /* gmbus seems to be broken on i830 */
665 if (IS_I830(dev)) 668 if (IS_I830(dev))
666 bus->force_bit = 1; 669 bus->force_bit = 1;
667 670
668 intel_gpio_setup(bus, port); 671 intel_gpio_setup(bus, port);
669 672
670 ret = i2c_add_adapter(&bus->adapter); 673 ret = i2c_add_adapter(&bus->adapter);
671 if (ret) 674 if (ret)
672 goto err; 675 goto err;
673 } 676 }
674 677
675 intel_i2c_reset(dev_priv->dev); 678 intel_i2c_reset(dev_priv->dev);
676 679
677 return 0; 680 return 0;
678 681
679err: 682err:
680 while (--i) { 683 while (--i) {
681 struct intel_gmbus *bus = &dev_priv->gmbus[i]; 684 struct intel_gmbus *bus = &dev_priv->gmbus[i];
682 i2c_del_adapter(&bus->adapter); 685 i2c_del_adapter(&bus->adapter);
683 } 686 }
684 return ret; 687 return ret;
685} 688}
686 689
687struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, 690struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
688 unsigned port) 691 unsigned port)
689{ 692{
690 WARN_ON(!intel_gmbus_is_port_valid(port)); 693 WARN_ON(!intel_gmbus_is_port_valid(port));
691 /* -1 to map pin pair to gmbus index */ 694 /* -1 to map pin pair to gmbus index */
692 return (intel_gmbus_is_port_valid(port)) ? 695 return (intel_gmbus_is_port_valid(port)) ?
693 &dev_priv->gmbus[port - 1].adapter : NULL; 696 &dev_priv->gmbus[port - 1].adapter : NULL;
694} 697}
695 698
696void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed) 699void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
697{ 700{
698 struct intel_gmbus *bus = to_intel_gmbus(adapter); 701 struct intel_gmbus *bus = to_intel_gmbus(adapter);
699 702
700 bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed; 703 bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed;
701} 704}
702 705
703void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit) 706void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
704{ 707{
705 struct intel_gmbus *bus = to_intel_gmbus(adapter); 708 struct intel_gmbus *bus = to_intel_gmbus(adapter);
706 709
707 bus->force_bit += force_bit ? 1 : -1; 710 bus->force_bit += force_bit ? 1 : -1;
708 DRM_DEBUG_KMS("%sabling bit-banging on %s. force bit now %d\n", 711 DRM_DEBUG_KMS("%sabling bit-banging on %s. force bit now %d\n",
709 force_bit ? "en" : "dis", adapter->name, 712 force_bit ? "en" : "dis", adapter->name,
710 bus->force_bit); 713 bus->force_bit);
711} 714}
712 715
713void intel_teardown_gmbus(struct drm_device *dev) 716void intel_teardown_gmbus(struct drm_device *dev)
714{ 717{
715 struct drm_i915_private *dev_priv = dev->dev_private; 718 struct drm_i915_private *dev_priv = dev->dev_private;
716 int i; 719 int i;
717 720
718 for (i = 0; i < GMBUS_NUM_PORTS; i++) { 721 for (i = 0; i < GMBUS_NUM_PORTS; i++) {
719 struct intel_gmbus *bus = &dev_priv->gmbus[i]; 722 struct intel_gmbus *bus = &dev_priv->gmbus[i];
720 i2c_del_adapter(&bus->adapter); 723 i2c_del_adapter(&bus->adapter);
721 } 724 }
722 725
723#ifdef __NetBSD__ 726#ifdef __NetBSD__
724 DRM_DESTROY_WAITQUEUE(&dev_priv->gmbus_wait_queue); 727 DRM_DESTROY_WAITQUEUE(&dev_priv->gmbus_wait_queue);
725 spin_lock_destroy(&dev_priv->gmbus_wait_lock); 728 spin_lock_destroy(&dev_priv->gmbus_wait_lock);
726 linux_mutex_destroy(&dev_priv->gmbus_mutex); 729 linux_mutex_destroy(&dev_priv->gmbus_mutex);
727#endif 730#endif
728} 731}