Subversion Repositories Kolibri OS

Rev

Rev 2342 | Rev 3037 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2342 Rev 3031
Line 26... Line 26...
26
 *	Eric Anholt 
26
 *	Eric Anholt 
27
 *	Chris Wilson 
27
 *	Chris Wilson 
28
 */
28
 */
29
#include 
29
#include 
30
#include 
30
#include 
31
#include "drmP.h"
31
#include 
32
#include "drm.h"
32
#include 
33
#include "intel_drv.h"
33
#include "intel_drv.h"
34
#include "i915_drm.h"
34
#include 
35
#include "i915_drv.h"
35
#include "i915_drv.h"
Line 36... Line -...
36
 
-
 
37
#define MSEC_PER_SEC    1000L
-
 
38
#define USEC_PER_MSEC   1000L
-
 
39
#define NSEC_PER_USEC   1000L
-
 
40
#define NSEC_PER_MSEC   1000000L
-
 
41
#define USEC_PER_SEC    1000000L
-
 
42
#define NSEC_PER_SEC    1000000000L
-
 
43
#define FSEC_PER_SEC    1000000000000000L
-
 
44
 
-
 
45
#define HZ_TO_MSEC_MUL32 0xA0000000
-
 
46
#define HZ_TO_MSEC_ADJ32 0x0
-
 
47
#define HZ_TO_MSEC_SHR32 28
-
 
48
#define HZ_TO_MSEC_MUL64 0xA000000000000000
-
 
49
#define HZ_TO_MSEC_ADJ64 0x0
-
 
50
#define HZ_TO_MSEC_SHR64 60
-
 
51
#define MSEC_TO_HZ_MUL32 0xCCCCCCCD
-
 
52
#define MSEC_TO_HZ_ADJ32 0x733333333
-
 
53
#define MSEC_TO_HZ_SHR32 35
-
 
54
#define MSEC_TO_HZ_MUL64 0xCCCCCCCCCCCCCCCD
-
 
55
#define MSEC_TO_HZ_ADJ64 0x73333333333333333
-
 
56
#define MSEC_TO_HZ_SHR64 67
-
 
57
#define HZ_TO_MSEC_NUM 10
-
 
58
#define HZ_TO_MSEC_DEN 1
-
 
59
#define MSEC_TO_HZ_NUM 1
-
 
60
#define MSEC_TO_HZ_DEN 10
-
 
61
 
-
 
62
#define HZ_TO_USEC_MUL32 0x9C400000
-
 
63
#define HZ_TO_USEC_ADJ32 0x0
-
 
64
#define HZ_TO_USEC_SHR32 18
-
 
65
#define HZ_TO_USEC_MUL64 0x9C40000000000000
-
 
66
#define HZ_TO_USEC_ADJ64 0x0
-
 
67
#define HZ_TO_USEC_SHR64 50
-
 
68
#define USEC_TO_HZ_MUL32 0xD1B71759
-
 
69
#define USEC_TO_HZ_ADJ32 0x1FFF2E48E8A7
-
 
70
#define USEC_TO_HZ_SHR32 45
-
 
71
#define USEC_TO_HZ_MUL64 0xD1B71758E219652C
-
 
72
#define USEC_TO_HZ_ADJ64 0x1FFF2E48E8A71DE69AD4
-
 
73
#define USEC_TO_HZ_SHR64 77
-
 
74
#define HZ_TO_USEC_NUM 10000
-
 
75
#define HZ_TO_USEC_DEN 1
-
 
76
#define USEC_TO_HZ_NUM 1
-
 
77
#define USEC_TO_HZ_DEN 10000
-
 
78
 
-
 
79
unsigned int inline jiffies_to_usecs(const unsigned long j)
-
 
80
{
-
 
81
#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
-
 
82
        return (USEC_PER_SEC / HZ) * j;
-
 
83
#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
-
 
84
        return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC);
-
 
85
#else
-
 
86
# if BITS_PER_LONG == 32
-
 
87
        return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32;
-
 
88
# else
-
 
89
        return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN;
-
 
90
# endif
-
 
91
#endif
-
 
92
}
-
 
93
 
-
 
94
/*
-
 
95
* When we convert to jiffies then we interpret incoming values
-
 
96
* the following way:
-
 
97
*
-
 
98
* - negative values mean 'infinite timeout' (MAX_JIFFY_OFFSET)
-
 
99
*
-
 
100
* - 'too large' values [that would result in larger than
-
 
101
*   MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
-
 
102
*
-
 
103
* - all other values are converted to jiffies by either multiplying
-
 
104
*   the input value by a factor or dividing it with a factor
-
 
105
*
-
 
106
* We must also be careful about 32-bit overflows.
-
 
107
*/
-
 
108
unsigned long msecs_to_jiffies(const unsigned int m)
-
 
109
{
-
 
110
        /*
-
 
111
         * Negative value, means infinite timeout:
-
 
112
         */
-
 
113
        if ((int)m < 0)
-
 
114
                return MAX_JIFFY_OFFSET;
-
 
115
 
-
 
116
#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
-
 
117
        /*
-
 
118
         * HZ is equal to or smaller than 1000, and 1000 is a nice
-
 
119
         * round multiple of HZ, divide with the factor between them,
-
 
120
         * but round upwards:
-
 
121
         */
-
 
122
        return (m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ);
-
 
123
#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC)
-
 
124
        /*
-
 
125
         * HZ is larger than 1000, and HZ is a nice round multiple of
-
 
126
         * 1000 - simply multiply with the factor between them.
-
 
127
         *
-
 
128
         * But first make sure the multiplication result cannot
-
 
129
         * overflow:
-
 
130
         */
-
 
131
        if (m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
-
 
132
                return MAX_JIFFY_OFFSET;
-
 
133
 
-
 
134
        return m * (HZ / MSEC_PER_SEC);
-
 
135
#else
-
 
136
        /*
-
 
137
         * Generic case - multiply, round and divide. But first
-
 
138
         * check that if we are doing a net multiplication, that
-
 
139
         * we wouldn't overflow:
-
 
140
         */
-
 
141
        if (HZ > MSEC_PER_SEC && m > jiffies_to_msecs(MAX_JIFFY_OFFSET))
-
 
142
                return MAX_JIFFY_OFFSET;
-
 
143
 
-
 
144
        return (MSEC_TO_HZ_MUL32 * m + MSEC_TO_HZ_ADJ32)
-
 
145
                >> MSEC_TO_HZ_SHR32;
-
 
146
#endif
-
 
147
}
-
 
148
 
-
 
149
unsigned long usecs_to_jiffies(const unsigned int u)
-
 
150
{
-
 
151
        if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
-
 
152
                return MAX_JIFFY_OFFSET;
-
 
153
#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
-
 
154
        return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
-
 
155
#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
-
 
156
        return u * (HZ / USEC_PER_SEC);
-
 
157
#else
-
 
158
        return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
-
 
159
                >> USEC_TO_HZ_SHR32;
-
 
160
#endif
-
 
Line -... Line 36...
-
 
36
 
-
 
37
 
-
 
38
struct gmbus_port {
-
 
39
	const char *name;
Line -... Line 40...
-
 
40
	int reg;
-
 
41
};
-
 
42
 
-
 
43
static const struct gmbus_port gmbus_ports[] = {
-
 
44
	{ "ssc", GPIOB },
-
 
45
	{ "vga", GPIOA },
-
 
46
	{ "panel", GPIOC },
-
 
47
	{ "dpc", GPIOD },
Line 161... Line 48...
161
}
48
	{ "dpb", GPIOE },
Line 162... Line 49...
162
 
49
	{ "dpd", GPIOF },
Line 163... Line 50...
163
 
50
};
164
 
51
 
165
/* Intel GPIO access functions */
52
/* Intel GPIO access functions */
166
 
53
 
167
#define I2C_RISEFALL_TIME 20
54
#define I2C_RISEFALL_TIME 10
Line 168... Line -...
168
 
-
 
169
static inline struct intel_gmbus *
-
 
170
to_intel_gmbus(struct i2c_adapter *i2c)
-
 
171
{
-
 
172
	return container_of(i2c, struct intel_gmbus, adapter);
-
 
173
}
-
 
174
 
-
 
175
struct intel_gpio {
55
 
176
	struct i2c_adapter adapter;
56
static inline struct intel_gmbus *
177
	struct i2c_algo_bit_data algo;
57
to_intel_gmbus(struct i2c_adapter *i2c)
178
	struct drm_i915_private *dev_priv;
58
{
179
	u32 reg;
-
 
180
};
59
	return container_of(i2c, struct intel_gmbus, adapter);
181
 
-
 
182
void
-
 
183
intel_i2c_reset(struct drm_device *dev)
60
}
Line 184... Line 61...
184
{
61
 
185
	struct drm_i915_private *dev_priv = dev->dev_private;
62
void
186
	if (HAS_PCH_SPLIT(dev))
63
intel_i2c_reset(struct drm_device *dev)
Line 203... Line 80...
203
	else
80
	else
204
		val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
81
		val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
205
	I915_WRITE(DSPCLK_GATE_D, val);
82
	I915_WRITE(DSPCLK_GATE_D, val);
206
}
83
}
Line 207... Line 84...
207
 
84
 
208
static u32 get_reserved(struct intel_gpio *gpio)
85
static u32 get_reserved(struct intel_gmbus *bus)
209
{
86
{
210
	struct drm_i915_private *dev_priv = gpio->dev_priv;
87
	struct drm_i915_private *dev_priv = bus->dev_priv;
211
	struct drm_device *dev = dev_priv->dev;
88
	struct drm_device *dev = dev_priv->dev;
Line 212... Line 89...
212
	u32 reserved = 0;
89
	u32 reserved = 0;
213
 
90
 
214
	/* On most chips, these bits must be preserved in software. */
91
	/* On most chips, these bits must be preserved in software. */
215
	if (!IS_I830(dev) && !IS_845G(dev))
92
	if (!IS_I830(dev) && !IS_845G(dev))
216
		reserved = I915_READ_NOTRACE(gpio->reg) &
93
		reserved = I915_READ_NOTRACE(bus->gpio_reg) &
Line 217... Line 94...
217
					     (GPIO_DATA_PULLUP_DISABLE |
94
					     (GPIO_DATA_PULLUP_DISABLE |
218
					      GPIO_CLOCK_PULLUP_DISABLE);
95
					      GPIO_CLOCK_PULLUP_DISABLE);
Line 219... Line 96...
219
 
96
 
220
	return reserved;
97
	return reserved;
221
}
98
}
222
 
99
 
223
static int get_clock(void *data)
100
static int get_clock(void *data)
224
{
101
{
225
	struct intel_gpio *gpio = data;
102
	struct intel_gmbus *bus = data;
226
	struct drm_i915_private *dev_priv = gpio->dev_priv;
103
	struct drm_i915_private *dev_priv = bus->dev_priv;
227
	u32 reserved = get_reserved(gpio);
104
	u32 reserved = get_reserved(bus);
Line 228... Line 105...
228
	I915_WRITE_NOTRACE(gpio->reg, reserved | GPIO_CLOCK_DIR_MASK);
105
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
229
	I915_WRITE_NOTRACE(gpio->reg, reserved);
106
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
230
	return (I915_READ_NOTRACE(gpio->reg) & GPIO_CLOCK_VAL_IN) != 0;
107
	return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
231
}
108
}
232
 
109
 
233
static int get_data(void *data)
110
static int get_data(void *data)
234
{
111
{
235
	struct intel_gpio *gpio = data;
112
	struct intel_gmbus *bus = data;
236
	struct drm_i915_private *dev_priv = gpio->dev_priv;
113
	struct drm_i915_private *dev_priv = bus->dev_priv;
Line 237... Line 114...
237
	u32 reserved = get_reserved(gpio);
114
	u32 reserved = get_reserved(bus);
238
	I915_WRITE_NOTRACE(gpio->reg, reserved | GPIO_DATA_DIR_MASK);
115
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
239
	I915_WRITE_NOTRACE(gpio->reg, reserved);
116
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
240
	return (I915_READ_NOTRACE(gpio->reg) & GPIO_DATA_VAL_IN) != 0;
117
	return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
241
}
118
}
242
 
119
 
Line 243... Line 120...
243
static void set_clock(void *data, int state_high)
120
static void set_clock(void *data, int state_high)
244
{
121
{
245
	struct intel_gpio *gpio = data;
122
	struct intel_gmbus *bus = data;
246
	struct drm_i915_private *dev_priv = gpio->dev_priv;
123
	struct drm_i915_private *dev_priv = bus->dev_priv;
247
	u32 reserved = get_reserved(gpio);
124
	u32 reserved = get_reserved(bus);
Line 248... Line 125...
248
	u32 clock_bits;
125
	u32 clock_bits;
249
 
126
 
250
	if (state_high)
127
	if (state_high)
Line 251... Line 128...
251
		clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK;
128
		clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK;
252
	else
129
	else
253
		clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
130
		clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
254
			GPIO_CLOCK_VAL_MASK;
131
			GPIO_CLOCK_VAL_MASK;
255
 
132
 
256
	I915_WRITE_NOTRACE(gpio->reg, reserved | clock_bits);
133
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
Line 257... Line 134...
257
	POSTING_READ(gpio->reg);
134
	POSTING_READ(bus->gpio_reg);
258
}
135
}
259
 
136
 
260
static void set_data(void *data, int state_high)
137
static void set_data(void *data, int state_high)
261
{
138
{
Line 262... Line 139...
262
	struct intel_gpio *gpio = data;
139
	struct intel_gmbus *bus = data;
263
	struct drm_i915_private *dev_priv = gpio->dev_priv;
140
	struct drm_i915_private *dev_priv = bus->dev_priv;
264
	u32 reserved = get_reserved(gpio);
-
 
265
	u32 data_bits;
-
 
266
 
-
 
267
	if (state_high)
-
 
268
		data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK;
-
 
269
	else
-
 
270
		data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
-
 
271
			GPIO_DATA_VAL_MASK;
-
 
272
 
-
 
273
	I915_WRITE_NOTRACE(gpio->reg, reserved | data_bits);
-
 
274
	POSTING_READ(gpio->reg);
-
 
275
}
-
 
276
 
-
 
277
static struct i2c_adapter *
-
 
278
intel_gpio_create(struct drm_i915_private *dev_priv, u32 pin)
-
 
279
{
-
 
280
	static const int map_pin_to_reg[] = {
-
 
281
		0,
-
 
282
		GPIOB,
-
 
283
		GPIOA,
-
 
284
		GPIOC,
-
 
285
		GPIOD,
-
 
286
		GPIOE,
-
 
287
		0,
-
 
288
		GPIOF,
-
 
289
	};
-
 
290
	struct intel_gpio *gpio;
-
 
291
 
-
 
292
	if (pin >= ARRAY_SIZE(map_pin_to_reg) || !map_pin_to_reg[pin])
-
 
293
		return NULL;
-
 
294
 
-
 
295
	gpio = kzalloc(sizeof(struct intel_gpio), GFP_KERNEL);
-
 
296
	if (gpio == NULL)
-
 
297
		return NULL;
-
 
298
 
-
 
299
	gpio->reg = map_pin_to_reg[pin];
-
 
300
	if (HAS_PCH_SPLIT(dev_priv->dev))
-
 
301
		gpio->reg += PCH_GPIOA - GPIOA;
-
 
302
	gpio->dev_priv = dev_priv;
-
 
303
 
-
 
304
	snprintf(gpio->adapter.name, sizeof(gpio->adapter.name),
-
 
305
		 "i915 GPIO%c", "?BACDE?F"[pin]);
-
 
306
//   gpio->adapter.owner = THIS_MODULE;
-
 
307
	gpio->adapter.algo_data	= &gpio->algo;
-
 
308
	gpio->adapter.dev.parent = &dev_priv->dev->pdev->dev;
-
 
309
	gpio->algo.setsda = set_data;
-
 
310
	gpio->algo.setscl = set_clock;
-
 
311
	gpio->algo.getsda = get_data;
-
 
312
	gpio->algo.getscl = get_clock;
-
 
313
	gpio->algo.udelay = I2C_RISEFALL_TIME;
-
 
314
	gpio->algo.timeout = usecs_to_jiffies(2200);
141
	u32 reserved = get_reserved(bus);
Line 315... Line 142...
315
	gpio->algo.data = gpio;
142
	u32 data_bits;
316
 
-
 
317
    if (i2c_bit_add_bus(&gpio->adapter))
143
 
318
       goto out_free;
-
 
319
 
-
 
320
	return &gpio->adapter;
144
	if (state_high)
321
 
145
		data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK;
322
out_free:
146
	else
323
	kfree(gpio);
147
		data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
324
	return NULL;
148
			GPIO_DATA_VAL_MASK;
Line 325... Line 149...
325
}
149
 
326
 
-
 
327
static int
150
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
328
intel_i2c_quirk_xfer(struct drm_i915_private *dev_priv,
151
	POSTING_READ(bus->gpio_reg);
329
		     struct i2c_adapter *adapter,
152
}
330
		     struct i2c_msg *msgs,
153
 
331
		     int num)
-
 
332
{
-
 
333
	struct intel_gpio *gpio = container_of(adapter,
-
 
334
					       struct intel_gpio,
-
 
335
					       adapter);
-
 
336
	int ret;
-
 
337
 
-
 
338
	intel_i2c_reset(dev_priv->dev);
154
static int
339
 
155
intel_gpio_pre_xfer(struct i2c_adapter *adapter)
Line 340... Line 156...
340
	intel_i2c_quirk_set(dev_priv, true);
156
{
341
	set_data(gpio, 1);
157
	struct intel_gmbus *bus = container_of(adapter,
342
	set_clock(gpio, 1);
-
 
343
	udelay(I2C_RISEFALL_TIME);
-
 
344
 
158
					       struct intel_gmbus,
345
	ret = adapter->algo->master_xfer(adapter, msgs, num);
159
					       adapter);
346
 
160
	struct drm_i915_private *dev_priv = bus->dev_priv;
347
	set_data(gpio, 1);
161
 
348
	set_clock(gpio, 1);
162
	intel_i2c_reset(dev_priv->dev);
349
	intel_i2c_quirk_set(dev_priv, false);
-
 
Line 350... Line 163...
350
 
163
	intel_i2c_quirk_set(dev_priv, true);
351
	return ret;
164
	set_data(bus, 1);
352
}
165
	set_clock(bus, 1);
-
 
166
	udelay(I2C_RISEFALL_TIME);
Line -... Line 167...
-
 
167
	return 0;
-
 
168
}
-
 
169
 
353
 
170
static void
-
 
171
intel_gpio_post_xfer(struct i2c_adapter *adapter)
Line 354... Line 172...
354
static int
172
{
Line 355... Line 173...
355
gmbus_xfer(struct i2c_adapter *adapter,
173
	struct intel_gmbus *bus = container_of(adapter,
-
 
174
					       struct intel_gmbus,
-
 
175
					       adapter);
-
 
176
	struct drm_i915_private *dev_priv = bus->dev_priv;
-
 
177
 
-
 
178
	set_data(bus, 1);
-
 
179
	set_clock(bus, 1);
-
 
180
	intel_i2c_quirk_set(dev_priv, false);
-
 
181
}
-
 
182
 
-
 
183
static void
-
 
184
intel_gpio_setup(struct intel_gmbus *bus, u32 pin)
-
 
185
{
-
 
186
	struct drm_i915_private *dev_priv = bus->dev_priv;
-
 
187
	struct i2c_algo_bit_data *algo;
-
 
188
 
-
 
189
	algo = &bus->bit_algo;
-
 
190
 
-
 
191
	/* -1 to map pin pair to gmbus index */
-
 
192
	bus->gpio_reg = dev_priv->gpio_mmio_base + gmbus_ports[pin - 1].reg;
356
	   struct i2c_msg *msgs,
193
 
357
	   int num)
194
	bus->adapter.algo_data = algo;
Line 358... Line -...
358
{
-
 
359
	struct intel_gmbus *bus = container_of(adapter,
195
	algo->setsda = set_data;
-
 
196
	algo->setscl = set_clock;
360
					       struct intel_gmbus,
197
	algo->getsda = get_data;
361
					       adapter);
198
	algo->getscl = get_clock;
362
	struct drm_i915_private *dev_priv = adapter->algo_data;
199
	algo->pre_xfer = intel_gpio_pre_xfer;
363
	int i, reg_offset;
200
	algo->post_xfer = intel_gpio_post_xfer;
364
 
201
	algo->udelay = I2C_RISEFALL_TIME;
365
	if (bus->force_bit)
202
	algo->timeout = usecs_to_jiffies(2200);
366
		return intel_i2c_quirk_xfer(dev_priv,
203
	algo->data = bus;
-
 
204
}
Line 367... Line 205...
367
					    bus->force_bit, msgs, num);
205
 
-
 
206
static int
368
 
207
gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
-
 
208
		u32 gmbus1_index)
-
 
209
{
369
	reg_offset = HAS_PCH_SPLIT(dev_priv->dev) ? PCH_GMBUS0 - GMBUS0 : 0;
210
	int reg_offset = dev_priv->gpio_mmio_base;
370
 
211
	u16 len = msg->len;
Line 371... Line 212...
371
	I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
212
	u8 *buf = msg->buf;
372
 
213
 
373
	for (i = 0; i < num; i++) {
214
			I915_WRITE(GMBUS1 + reg_offset,
374
		u16 len = msgs[i].len;
215
		   gmbus1_index |
375
		u8 *buf = msgs[i].buf;
216
		   GMBUS_CYCLE_WAIT |
-
 
217
				   (len << GMBUS_BYTE_COUNT_SHIFT) |
-
 
218
		   (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
-
 
219
				   GMBUS_SLAVE_READ | GMBUS_SW_RDY);
-
 
220
	while (len) {
-
 
221
		int ret;
-
 
222
				u32 val, loop = 0;
-
 
223
		u32 gmbus2;
-
 
224
 
-
 
225
		ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
376
 
226
			       (GMBUS_SATOER | GMBUS_HW_RDY),
377
		if (msgs[i].flags & I2C_M_RD) {
227
			       50);
378
			I915_WRITE(GMBUS1 + reg_offset,
228
		if (ret)
Line 379... Line 229...
379
				   GMBUS_CYCLE_WAIT | (i + 1 == num ? GMBUS_CYCLE_STOP : 0) |
229
			return -ETIMEDOUT;
380
				   (len << GMBUS_BYTE_COUNT_SHIFT) |
230
		if (gmbus2 & GMBUS_SATOER)
381
				   (msgs[i].addr << GMBUS_SLAVE_ADDR_SHIFT) |
231
			return -ENXIO;
382
				   GMBUS_SLAVE_READ | GMBUS_SW_RDY);
232
 
-
 
233
				val = I915_READ(GMBUS3 + reg_offset);
Line 383... Line 234...
383
			POSTING_READ(GMBUS2+reg_offset);
234
				do {
384
			do {
235
					*buf++ = val & 0xff;
385
				u32 val, loop = 0;
236
					val >>= 8;
386
 
237
				} while (--len && ++loop < 4);
387
				if (wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_RDY), 50))
238
	}
388
					goto timeout;
239
 
389
				if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER)
-
 
390
					goto clear_err;
-
 
391
 
240
	return 0;
392
				val = I915_READ(GMBUS3 + reg_offset);
-
 
393
				do {
241
}
394
					*buf++ = val & 0xff;
-
 
395
					val >>= 8;
242
 
Line 396... Line 243...
396
				} while (--len && ++loop < 4);
243
static int
397
			} while (len);
244
gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
398
		} else {
245
{
399
			u32 val, loop;
246
	int reg_offset = dev_priv->gpio_mmio_base;
Line 400... Line 247...
400
 
247
	u16 len = msg->len;
-
 
248
	u8 *buf = msg->buf;
-
 
249
			u32 val, loop;
-
 
250
 
-
 
251
			val = loop = 0;
-
 
252
	while (len && loop < 4) {
-
 
253
		val |= *buf++ << (8 * loop++);
-
 
254
		len -= 1;
-
 
255
	}
-
 
256
 
-
 
257
			I915_WRITE(GMBUS3 + reg_offset, val);
-
 
258
			I915_WRITE(GMBUS1 + reg_offset,
-
 
259
		   GMBUS_CYCLE_WAIT |
-
 
260
		   (msg->len << GMBUS_BYTE_COUNT_SHIFT) |
-
 
261
		   (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
-
 
262
				   GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
-
 
263
			while (len) {
-
 
264
		int ret;
-
 
265
		u32 gmbus2;
-
 
266
 
-
 
267
				val = loop = 0;
-
 
268
				do {
-
 
269
					val |= *buf++ << (8 * loop);
-
 
270
				} while (--len && ++loop < 4);
-
 
271
 
-
 
272
				I915_WRITE(GMBUS3 + reg_offset, val);
-
 
273
 
-
 
274
		ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
-
 
275
			       (GMBUS_SATOER | GMBUS_HW_RDY),
-
 
276
			       50);
-
 
277
		if (ret)
-
 
278
			return -ETIMEDOUT;
-
 
279
		if (gmbus2 & GMBUS_SATOER)
-
 
280
			return -ENXIO;
-
 
281
	}
-
 
282
	return 0;
-
 
283
}
-
 
284
 
-
 
285
/*
-
 
286
 * The gmbus controller can combine a 1 or 2 byte write with a read that
-
 
287
 * immediately follows it by using an "INDEX" cycle.
-
 
288
 */
-
 
289
static bool
-
 
290
gmbus_is_index_read(struct i2c_msg *msgs, int i, int num)
-
 
291
{
-
 
292
	return (i + 1 < num &&
-
 
293
		!(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 &&
-
 
294
		(msgs[i + 1].flags & I2C_M_RD));
401
			val = loop = 0;
295
}
-
 
296
 
-
 
297
static int
-
 
298
gmbus_xfer_index_read(struct drm_i915_private *dev_priv, struct i2c_msg *msgs)
-
 
299
{
-
 
300
	int reg_offset = dev_priv->gpio_mmio_base;
-
 
301
	u32 gmbus1_index = 0;
-
 
302
	u32 gmbus5 = 0;
-
 
303
	int ret;
-
 
304
 
-
 
305
	if (msgs[0].len == 2)
-
 
306
		gmbus5 = GMBUS_2BYTE_INDEX_EN |
-
 
307
			 msgs[0].buf[1] | (msgs[0].buf[0] << 8);
-
 
308
	if (msgs[0].len == 1)
-
 
309
		gmbus1_index = GMBUS_CYCLE_INDEX |
-
 
310
			       (msgs[0].buf[0] << GMBUS_SLAVE_INDEX_SHIFT);
-
 
311
 
-
 
312
	/* GMBUS5 holds 16-bit index */
-
 
313
	if (gmbus5)
-
 
314
		I915_WRITE(GMBUS5 + reg_offset, gmbus5);
-
 
315
 
-
 
316
	ret = gmbus_xfer_read(dev_priv, &msgs[1], gmbus1_index);
402
			do {
317
 
-
 
318
	/* Clear GMBUS5 after each index transfer */
-
 
319
	if (gmbus5)
-
 
320
		I915_WRITE(GMBUS5 + reg_offset, 0);
-
 
321
 
-
 
322
	return ret;
-
 
323
}
-
 
324
 
-
 
325
static int
-
 
326
gmbus_xfer(struct i2c_adapter *adapter,
-
 
327
	   struct i2c_msg *msgs,
-
 
328
	   int num)
-
 
329
{
-
 
330
	struct intel_gmbus *bus = container_of(adapter,
-
 
331
					       struct intel_gmbus,
-
 
332
					       adapter);
403
				val |= *buf++ << (8 * loop);
333
	struct drm_i915_private *dev_priv = bus->dev_priv;
Line 404... Line 334...
404
			} while (--len && ++loop < 4);
334
	int i, reg_offset;
405
 
335
	int ret = 0;
-
 
336
 
-
 
337
	mutex_lock(&dev_priv->gmbus_mutex);
-
 
338
 
406
			I915_WRITE(GMBUS3 + reg_offset, val);
339
	if (bus->force_bit) {
-
 
340
		ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
-
 
341
		goto out;
-
 
342
			}
-
 
343
 
-
 
344
	reg_offset = dev_priv->gpio_mmio_base;
407
			I915_WRITE(GMBUS1 + reg_offset,
345
 
408
				   (i + 1 == num ? GMBUS_CYCLE_STOP : GMBUS_CYCLE_WAIT) |
346
	I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
Line -... Line 347...
-
 
347
 
-
 
348
	for (i = 0; i < num; i++) {
-
 
349
		u32 gmbus2;
-
 
350
 
-
 
351
		if (gmbus_is_index_read(msgs, i, num)) {
-
 
352
			ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
-
 
353
			i += 1;  /* set i to the index of the read xfer */
-
 
354
		} else if (msgs[i].flags & I2C_M_RD) {
-
 
355
			ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
-
 
356
		} else {
-
 
357
			ret = gmbus_xfer_write(dev_priv, &msgs[i]);
-
 
358
		}
-
 
359
 
-
 
360
		if (ret == -ETIMEDOUT)
-
 
361
			goto timeout;
-
 
362
		if (ret == -ENXIO)
-
 
363
			goto clear_err;
-
 
364
 
409
				   (msgs[i].len << GMBUS_BYTE_COUNT_SHIFT) |
365
		ret = wait_for((gmbus2 = I915_READ(GMBUS2 + reg_offset)) &
Line 410... Line 366...
410
				   (msgs[i].addr << GMBUS_SLAVE_ADDR_SHIFT) |
366
			       (GMBUS_SATOER | GMBUS_HW_WAIT_PHASE),
-
 
367
			       50);
-
 
368
		if (ret)
-
 
369
			goto timeout;
-
 
370
		if (gmbus2 & GMBUS_SATOER)
-
 
371
			goto clear_err;
-
 
372
	}
-
 
373
 
-
 
374
	/* Generate a STOP condition on the bus. Note that gmbus can't generata
-
 
375
	 * a STOP on the very first cycle. To simplify the code we
-
 
376
	 * unconditionally generate the STOP condition with an additional gmbus
-
 
377
	 * cycle. */
-
 
378
	I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_STOP | GMBUS_SW_RDY);
-
 
379
 
-
 
380
	/* Mark the GMBUS interface as disabled after waiting for idle.
-
 
381
	 * We will re-enable it at the start of the next xfer,
-
 
382
	 * till then let it sleep.
-
 
383
	 */
-
 
384
	if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
-
 
385
		     10)) {
-
 
386
		DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
-
 
387
			 adapter->name);
411
				   GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
388
		ret = -ETIMEDOUT;
412
			POSTING_READ(GMBUS2+reg_offset);
389
	}
413
 
390
	I915_WRITE(GMBUS0 + reg_offset, 0);
414
			while (len) {
391
	ret = ret ?: i;
415
				if (wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_RDY), 50))
392
	goto out;
416
					goto timeout;
393
 
417
				if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER)
-
 
418
					goto clear_err;
-
 
419
 
-
 
420
				val = loop = 0;
-
 
421
				do {
-
 
422
					val |= *buf++ << (8 * loop);
394
clear_err:
-
 
395
	/*
-
 
396
	 * Wait for bus to IDLE before clearing NAK.
-
 
397
	 * If we clear the NAK while bus is still active, then it will stay
-
 
398
	 * active and the next transaction may fail.
-
 
399
	 *
423
				} while (--len && ++loop < 4);
400
	 * If no ACK is received during the address phase of a transaction, the
Line 424... Line 401...
424
 
401
	 * adapter must report -ENXIO. It is not clear what to return if no ACK
425
				I915_WRITE(GMBUS3 + reg_offset, val);
402
	 * is received at other times. But we have to be careful to not return
426
				POSTING_READ(GMBUS2+reg_offset);
403
	 * spurious -ENXIO because that will prevent i2c and drm edid functions
427
			}
404
	 * from retrying. So return -ENXIO only when gmbus properly quiescents -
Line 428... Line 405...
428
		}
405
	 * timing out seems to happen when there _is_ a ddc chip present, but
429
 
-
 
430
		if (i + 1 < num && wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_WAIT_PHASE), 50))
406
	 * it's slow responding and only answers on the 2nd retry.
431
			goto timeout;
407
	 */
Line -... Line 408...
-
 
408
	ret = -ENXIO;
432
		if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER)
409
	if (wait_for((I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
-
 
410
		     10)) {
433
			goto clear_err;
411
		DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
Line 434... Line 412...
434
	}
412
			      adapter->name);
435
 
413
		ret = -ETIMEDOUT;
436
	goto done;
-
 
437
 
-
 
438
clear_err:
-
 
439
	/* Toggle the Software Clear Interrupt bit. This has the effect
-
 
440
	 * of resetting the GMBUS controller and so clearing the
-
 
441
	 * BUS_ERROR raised by the slave's NAK.
414
	}
442
	 */
-
 
443
	I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT);
415
 
444
	I915_WRITE(GMBUS1 + reg_offset, 0);
416
	/* Toggle the Software Clear Interrupt bit. This has the effect
445
 
417
	 * of resetting the GMBUS controller and so clearing the
446
done:
418
	 * BUS_ERROR raised by the slave's NAK.
447
	/* Mark the GMBUS interface as disabled. We will re-enable it at the
419
	 */
Line 487... Line 459...
487
 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
459
 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
488
 * @dev: DRM device
460
 * @dev: DRM device
489
 */
461
 */
490
int intel_setup_gmbus(struct drm_device *dev)
462
int intel_setup_gmbus(struct drm_device *dev)
491
{
463
{
492
	static const char *names[GMBUS_NUM_PORTS] = {
-
 
493
		"disabled",
-
 
494
		"ssc",
-
 
495
		"vga",
-
 
496
		"panel",
-
 
497
		"dpc",
-
 
498
		"dpb",
-
 
499
		"reserved",
-
 
500
		"dpd",
-
 
501
	};
-
 
502
	struct drm_i915_private *dev_priv = dev->dev_private;
464
	struct drm_i915_private *dev_priv = dev->dev_private;
503
	int ret, i;
465
	int ret, i;
Line -... Line 466...
-
 
466
 
504
 
467
	if (HAS_PCH_SPLIT(dev))
505
	dev_priv->gmbus = kcalloc(sizeof(struct intel_gmbus), GMBUS_NUM_PORTS,
468
		dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA;
506
				  GFP_KERNEL);
469
	else
-
 
470
		dev_priv->gpio_mmio_base = 0;
507
	if (dev_priv->gmbus == NULL)
471
 
Line 508... Line 472...
508
		return -ENOMEM;
472
	mutex_init(&dev_priv->gmbus_mutex);
509
 
473
 
-
 
474
	for (i = 0; i < GMBUS_NUM_PORTS; i++) {
Line 510... Line 475...
510
	for (i = 0; i < GMBUS_NUM_PORTS; i++) {
475
		struct intel_gmbus *bus = &dev_priv->gmbus[i];
511
		struct intel_gmbus *bus = &dev_priv->gmbus[i];
476
		u32 port = i + 1; /* +1 to map gmbus index to pin pair */
512
 
477
 
513
//       bus->adapter.owner = THIS_MODULE;
478
		bus->adapter.owner = THIS_MODULE;
514
		bus->adapter.class = I2C_CLASS_DDC;
479
		bus->adapter.class = I2C_CLASS_DDC;
515
		snprintf(bus->adapter.name,
480
		snprintf(bus->adapter.name,
Line 516... Line 481...
516
			 sizeof(bus->adapter.name),
481
			 sizeof(bus->adapter.name),
517
			 "i915 gmbus %s",
482
			 "i915 gmbus %s",
Line 518... Line 483...
518
			 names[i]);
483
			 gmbus_ports[i].name);
519
 
-
 
520
		bus->adapter.dev.parent = &dev->pdev->dev;
-
 
521
		bus->adapter.algo_data	= dev_priv;
-
 
Line 522... Line 484...
522
 
484
 
523
		bus->adapter.algo = &gmbus_algorithm;
485
		bus->adapter.dev.parent = &dev->pdev->dev;
-
 
486
		bus->dev_priv = dev_priv;
-
 
487
 
-
 
488
		bus->adapter.algo = &gmbus_algorithm;
-
 
489
 
-
 
490
		/* By default use a conservative clock rate */
-
 
491
		bus->reg0 = port | GMBUS_RATE_100KHZ;
Line 524... Line -...
524
//       ret = i2c_add_adapter(&bus->adapter);
-
 
525
//       if (ret)
-
 
526
//           goto err;
492
 
Line 527... Line 493...
527
 
493
		/* gmbus seems to be broken on i830 */
Line 528... Line 494...
528
		/* By default use a conservative clock rate */
494
		if (IS_I830(dev))
Line 539... Line 505...
539
err:
505
err:
540
//   while (--i) {
506
//   while (--i) {
541
//       struct intel_gmbus *bus = &dev_priv->gmbus[i];
507
//       struct intel_gmbus *bus = &dev_priv->gmbus[i];
542
//       i2c_del_adapter(&bus->adapter);
508
//       i2c_del_adapter(&bus->adapter);
543
//   }
509
//   }
544
	kfree(dev_priv->gmbus);
-
 
545
	dev_priv->gmbus = NULL;
-
 
546
	return ret;
510
	return ret;
547
}
511
}
Line -... Line 512...
-
 
512
 
-
 
513
struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
-
 
514
					    unsigned port)
-
 
515
{
-
 
516
	WARN_ON(!intel_gmbus_is_port_valid(port));
-
 
517
	/* -1 to map pin pair to gmbus index */
-
 
518
	return (intel_gmbus_is_port_valid(port)) ?
-
 
519
		&dev_priv->gmbus[port - 1].adapter : NULL;
-
 
520
}
548
 
521
 
549
void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
522
void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
550
{
523
{
Line 551... Line 524...
551
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
524
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
Line 555... Line 528...
555
 
528
 
556
void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
529
void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
557
{
530
{
Line 558... Line -...
558
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
-
 
559
 
-
 
560
	if (force_bit) {
-
 
561
		if (bus->force_bit == NULL) {
-
 
562
			struct drm_i915_private *dev_priv = adapter->algo_data;
-
 
563
			bus->force_bit = intel_gpio_create(dev_priv,
-
 
564
							   bus->reg0 & 0xff);
-
 
565
		}
-
 
566
	} else {
-
 
567
		if (bus->force_bit) {
-
 
568
//           i2c_del_adapter(bus->force_bit);
531
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
569
			kfree(bus->force_bit);
-
 
570
			bus->force_bit = NULL;
-
 
571
		}
532
 
Line 572... Line 533...
572
	}
533
	bus->force_bit = force_bit;
573
}
534
}
574
 
535
 
575
void intel_teardown_gmbus(struct drm_device *dev)
536
void intel_teardown_gmbus(struct drm_device *dev)
Line 576... Line -...
576
{
-
 
577
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
578
	int i;
-
 
579
 
537
{
580
	if (dev_priv->gmbus == NULL)
538
	struct drm_i915_private *dev_priv = dev->dev_private;
581
		return;
-
 
582
 
-
 
583
	for (i = 0; i < GMBUS_NUM_PORTS; i++) {
-
 
584
		struct intel_gmbus *bus = &dev_priv->gmbus[i];
-
 
585
		if (bus->force_bit) {
539
	int i;
586
//           i2c_del_adapter(bus->force_bit);
540
 
587
			kfree(bus->force_bit);
-
 
588
		}
-
 
589
//       i2c_del_adapter(&bus->adapter);
-
 
590
	}
541
	for (i = 0; i < GMBUS_NUM_PORTS; i++) {