Rev 3037 | Rev 3480 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3037 | Rev 3243 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* |
1 | /* |
2 | * Copyright (c) 2006 Dave Airlie |
2 | * Copyright (c) 2006 Dave Airlie |
3 | * Copyright © 2006-2008,2010 Intel Corporation |
3 | * Copyright © 2006-2008,2010 Intel Corporation |
4 | * Jesse Barnes |
4 | * Jesse Barnes |
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 |
Line 430... | Line 430... | ||
430 | DRM_INFO("GMBUS [%s] timed out, falling back to bit banging on pin %d\n", |
430 | DRM_INFO("GMBUS [%s] timed out, falling back to bit banging on pin %d\n", |
431 | bus->adapter.name, bus->reg0 & 0xff); |
431 | bus->adapter.name, bus->reg0 & 0xff); |
432 | I915_WRITE(GMBUS0 + reg_offset, 0); |
432 | I915_WRITE(GMBUS0 + reg_offset, 0); |
Line 433... | Line 433... | ||
433 | 433 | ||
434 | /* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */ |
434 | /* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */ |
435 | bus->force_bit = true; |
435 | bus->force_bit = 1; |
Line 436... | Line 436... | ||
436 | ret = i2c_bit_algo.master_xfer(adapter, msgs, num); |
436 | ret = i2c_bit_algo.master_xfer(adapter, msgs, num); |
437 | 437 | ||
438 | out: |
438 | out: |
Line 489... | Line 489... | ||
489 | /* By default use a conservative clock rate */ |
489 | /* By default use a conservative clock rate */ |
490 | bus->reg0 = port | GMBUS_RATE_100KHZ; |
490 | bus->reg0 = port | GMBUS_RATE_100KHZ; |
Line 491... | Line 491... | ||
491 | 491 | ||
492 | /* gmbus seems to be broken on i830 */ |
492 | /* gmbus seems to be broken on i830 */ |
493 | if (IS_I830(dev)) |
493 | if (IS_I830(dev)) |
Line 494... | Line 494... | ||
494 | bus->force_bit = true; |
494 | bus->force_bit = 1; |
Line -... | Line 495... | ||
- | 495 | ||
- | 496 | intel_gpio_setup(bus, port); |
|
- | 497 | ||
495 | 498 | ret = i2c_add_adapter(&bus->adapter); |
|
Line 496... | Line 499... | ||
496 | intel_gpio_setup(bus, port); |
499 | if (ret) |
Line 497... | Line 500... | ||
497 | 500 | goto err; |
|
Line 498... | Line 501... | ||
498 | } |
501 | } |
499 | 502 | ||
500 | intel_i2c_reset(dev_priv->dev); |
503 | intel_i2c_reset(dev_priv->dev); |
501 | 504 | ||
502 | return 0; |
505 | return 0; |
503 | 506 | ||
504 | err: |
507 | err: |
Line 505... | Line 508... | ||
505 | // while (--i) { |
508 | while (--i) { |
506 | // struct intel_gmbus *bus = &dev_priv->gmbus[i]; |
509 | struct intel_gmbus *bus = &dev_priv->gmbus[i]; |
Line 527... | Line 530... | ||
527 | 530 | ||
528 | void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit) |
531 | void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit) |
529 | { |
532 | { |
Line 530... | Line 533... | ||
530 | struct intel_gmbus *bus = to_intel_gmbus(adapter); |
533 | struct intel_gmbus *bus = to_intel_gmbus(adapter); |
- | 534 | ||
- | 535 | bus->force_bit += force_bit ? 1 : -1; |
|
- | 536 | DRM_DEBUG_KMS("%sabling bit-banging on %s. force bit now %d\n", |
|
531 | 537 | force_bit ? "en" : "dis", adapter->name, |
|
Line 532... | Line 538... | ||
532 | bus->force_bit = force_bit; |
538 | bus->force_bit); |
533 | } |
539 | } |
534 | 540 | ||
535 | void intel_teardown_gmbus(struct drm_device *dev) |
541 | void intel_teardown_gmbus(struct drm_device *dev) |
Line 536... | Line 542... | ||
536 | { |
542 | { |
537 | struct drm_i915_private *dev_priv = dev->dev_private; |
543 | struct drm_i915_private *dev_priv = dev->dev_private; |
538 | int i; |
544 | int i; |
539 | 545 | ||
540 | for (i = 0; i < GMBUS_NUM_PORTS; i++) { |
546 | for (i = 0; i < GMBUS_NUM_PORTS; i++) { |