~ubuntu-branches/ubuntu/wily/linux-ti-omap4/wily

« back to all changes in this revision

Viewing changes to ubuntu/i915/intel_panel.c

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati, Ubuntu: 3.5.0-20.31
  • Date: 2012-12-06 14:14:29 UTC
  • Revision ID: package-import@ubuntu.com-20121206141429-3f6mmypbjdmnmm2t
Tags: 3.5.0-216.23
* Release Tracking Bug
  - LP: #1087216

[ Paolo Pisati ]

* rebased on Ubuntu-3.5.0-20.31

[ Ubuntu: 3.5.0-20.31 ]

* Release Tracking Bug
  - LP: #1086759
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_WAIT_TIMEOUT
  - LP: #1085245
* SAUCE: i915_hsw: Include #define DRM_I915_GEM_CONTEXT_[CREATE,DESTROY]
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: add register read IOCTL
  - LP: #1085245
* SAUCE: i915_hsw: Include #define i915_execbuffer2_[set,get]_context_id
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_GEM_PARAM_HAS_SEMAPHORES
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_SECURE_BATCHES
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: call intel_enable_gtt
  - LP: #1085245
* SAUCE: i915_hsw: drm: add helper to sort panels to the head of the
  connector list
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract dp link bw helpers
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract drm_dp_max_lane_count helper
  - LP: #1085245
* SAUCE: i915_hsw: drm: dp helper: extract drm_dp_channel_eq_ok
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract helpers to compute new training values
  from sink request
  - LP: #1085245
* SAUCE: i915_hsw: drm: dp helper: extract drm_dp_clock_recovery_ok
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_PRIME_VMAP_FLUSH
  - LP: #1085245
* SAUCE: i915_hsw: Provide an ubuntu/i915 driver for Haswell graphics
  - LP: #1085245
* SAUCE: i915_hsw: Revert "drm: Make the .mode_fixup() operations mode
  argument a const pointer" for ubuntu/i915 driver
  - LP: #1085245
* SAUCE: i915_hsw: Rename ubuntu/i915 driver i915_hsw
  - LP: #1085245
* SAUCE: i915_hsw: Only support Haswell with ubuntu/i915 driver
  - LP: #1085245
* SAUCE: i915_hsw: Include #define DRM_I915_GEM_WAIT
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract dp link train delay functions from radeon
  - LP: #1085245
* SAUCE: i915_hsw: drm/dp: Update DPCD defines
  - LP: #1085245
* SAUCE: i915_hsw: Update intel_ips.h file location
  - LP: #1085245
* SAUCE: i915_hsw: Provide updated drm_mm.h and drm_mm.c for ubuntu/i915
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Replace the array of pages with a
  scatterlist
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Replace the array of pages with a
  scatterlist
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Stop using AGP layer for GEN6+
  - LP: #1085245
* SAUCE: i915_hsw: Add i915_hsw_gpu_*() calls for ubuntu/i915
  - LP: #1085245
* i915_hsw: [Config] Enable CONFIG_DRM_I915_HSW=m
  - LP: #1085245
* SAUCE: drm/i915: fix hsw_fdi_link_train "retry" code
  - LP: #1085245
* SAUCE: drm/i915: reject modes the LPT FDI receiver can't handle
  - LP: #1085245
* SAUCE: drm/i915: add support for mPHY destination on intel_sbi_{read,
  write}
  - LP: #1085245
* SAUCE: drm/i915: add lpt_init_pch_refclk
  - LP: #1085245
* SAUCE: drm/i915: set the LPT FDI RX polarity reversal bit when needed
  - LP: #1085245
* Revert "SAUCE: SECCOMP: audit: always report seccomp violations"
  - LP: #1079469
* Revert "cgroup: Drop task_lock(parent) on cgroup_fork()"
  - LP: #1084539
* Revert "cgroup: Remove task_lock() from cgroup_post_fork()"
  - LP: #1084539
* Revert "x86/mm: Fix the size calculation of mapping tables"
  - LP: #1084539
* Revert "SUNRPC: Ensure we close the socket on EPIPE errors too..."
  - LP: #1084539
* Revert "ath9k_hw: Updated AR9003 tx gain table for 5GHz"
  - LP: #1084539
* Revert "sched: Add missing call to calc_load_exit_idle()"
  - LP: #1084539
* net: fix secpath kmemleak
  - LP: #1065434
* seccomp: forcing auditing of kill condition
  - LP: #1079469
* e1000e: add device IDs for i218
  - LP: #1081796
* bonding: Bonding driver does not consider the gso_max_size/gso_max_segs
  setting of slave devices.
  - LP: #1078184
* mm/hotplug: correctly add new zone to all other nodes' zone lists
  - LP: #1079860
  - CVE-2012-5517
* xen: enable platform-pci only in a Xen guest
  - LP: #1081054
* udf: fix retun value on error path in udf_load_logicalvol
  - LP: #1084539
* usb: gadget: at91_udc: fix dt support
  - LP: #1084539
* netfilter: nf_nat_sip: fix incorrect handling of EBUSY for RTCP
  expectation
  - LP: #1084539
* netfilter: nf_nat_sip: fix via header translation with multiple
  parameters
  - LP: #1084539
* netfilter: nf_ct_expect: fix possible access to uninitialized timer
  - LP: #1084539
* netfilter: xt_limit: have r->cost != 0 case work
  - LP: #1084539
* netfilter: nf_conntrack: fix racy timer handling with reliable events
  - LP: #1084539
* netfilter: nfnetlink_log: fix NLA_PUT macro removal bug
  - LP: #1084539
* MIPS: ath79: Fix CPU/DDR frequency calculation for SRIF PLLs
  - LP: #1084539
* jbd: Fix assertion failure in commit code due to lacking transaction
  credits
  - LP: #1084539
* nfsd4: fix nfs4 stateid leak
  - LP: #1084539
* NFSD: pass null terminated buf to kstrtouint()
  - LP: #1084539
* mfd: 88pm860x: Move _IO resources out of ioport_ioresource
  - LP: #1084539
* target: support zero allocation length in INQUIRY
  - LP: #1084539
* target: fix truncation of mode data, support zero allocation length
  - LP: #1084539
* target: fix return code in target_core_init_configfs error path
  - LP: #1084539
* powerpc/eeh: Lock module while handling EEH event
  - LP: #1084539
* SUNRPC: Ensure that the TCP socket is closed when in CLOSE_WAIT
  - LP: #1084539
* ext4: remove erroneous ext4_superblock_csum_set() in update_backups()
  - LP: #1084539
* block: remove the duplicated setting for congestion_threshold
  - LP: #1084539
* block: lift the initial queue bypass mode on blk_register_queue()
  instead of blk_init_allocated_queue()
  - LP: #1084539
* block: fix request_queue->flags initialization
  - LP: #1084539
* viafb: don't touch clock state on OLPC XO-1.5
  - LP: #1084539
* qla2xxx: Fix endianness of task management response code
  - LP: #1084539
* iscsi-target: Correctly set 0xffffffff field within ISCSI_OP_REJECT PDU
  - LP: #1084539
* drm/i915: use adjusted_mode instead of mode for checking the 6bpc force
  flag
  - LP: #1084539
* kbuild: Do not package /boot and /lib in make tar-pkg
  - LP: #1084539
* module: taint kernel when lve module is loaded
  - LP: #1084539
* mtd: nand: allow NAND_NO_SUBPAGE_WRITE to be set from driver
  - LP: #1084539
* nfsd4: don't pin clientids to pseudoflavors
  - LP: #1084539
* lockd: use rpc client's cl_nodename for id encoding
  - LP: #1084539
* pnfsblock: fix partial page buffer wirte
  - LP: #1084539
* pnfsblock: fix non-aligned DIO read
  - LP: #1084539
* pnfsblock: fix non-aligned DIO write
  - LP: #1084539
* target/file: Re-enable optional fd_buffered_io=1 operation
  - LP: #1084539
* iscsi-target: Add explicit set of cache_dynamic_acls=1 for TPG
  demo-mode
  - LP: #1084539
* iscsit: remove incorrect unlock in iscsit_build_sendtargets_resp
  - LP: #1084539
* iscsi-target: Bump defaults for nopin_timeout + nopin_response_timeout
  values
  - LP: #1084539
* drivers/dma/dmaengine.c: lower the priority of 'failed to get' dma
  channel message
  - LP: #1084539
* ath9k: use ieee80211_free_txskb
  - LP: #1084539
* ALSA: hda - Fix hang caused by race during suspend.
  - LP: #1084539
* ACPI: EC: Make the GPE storm threshold a module parameter
  - LP: #1084539
* ACPI: EC: Add a quirk for CLEVO M720T/M730T laptop
  - LP: #1084539
* mmc: sdhci-s3c: fix the wrong number of max bus clocks
  - LP: #1084539
* mac80211: use ieee80211_free_txskb to fix possible skb leaks
  - LP: #1084539
* ARM: OMAP: counter: add locking to read_persistent_clock
  - LP: #1084539
* ARM: vfp: fix saving d16-d31 vfp registers on v6+ kernels
  - LP: #1084539
* scsi_debug: Fix off-by-one bug when unmapping region
  - LP: #1084539
* storvsc: Account for in-transit packets in the RESET path
  - LP: #1084539
* firewire: cdev: fix user memory corruption (i386 userland on amd64
  kernel)
  - LP: #1084539
* timers: Fix endless looping between cascade() and internal_add_timer()
  - LP: #1084539
* timekeeping: Cast raw_interval to u64 to avoid shift overflow
  - LP: #1084539
* video/udlfb: fix line counting in fb_write
  - LP: #1084539
* tmpfs,ceph,gfs2,isofs,reiserfs,xfs: fix fh_len checking
  - LP: #1084539
* ALSA: hda - Add missing hda_gen_spec to struct via_spec
  - LP: #1084539
* ALSA: hda - Fix memory leaks at error path in patch_cirrus.c
  - LP: #1084539
* autofs4 - fix reset pending flag on mount fail
  - LP: #1084539
* pktgen: fix crash when generating IPv6 packets
  - LP: #1084539
* md/raid10: use correct limit variable
  - LP: #1084539
* mips,kgdb: fix recursive page fault with CONFIG_KPROBES
  - LP: #1084539
* kdb,vt_console: Fix missed data due to pager overruns
  - LP: #1084539
* xen/bootup: allow read_tscp call for Xen PV guests.
  - LP: #1084539
* xen/bootup: allow {read|write}_cr8 pvops call.
  - LP: #1084539
* libceph: eliminate connection state "DEAD"
  - LP: #1084539
* libceph: kill bad_proto ceph connection op
  - LP: #1084539
* libceph: rename socket callbacks
  - LP: #1084539
* libceph: rename kvec_reset and kvec_add functions
  - LP: #1084539
* libceph: embed ceph messenger structure in ceph_client
  - LP: #1084539
* libceph: start separating connection flags from state
  - LP: #1084539
* libceph: start tracking connection socket state
  - LP: #1084539
* libceph: provide osd number when creating osd
  - LP: #1084539
* libceph: set CLOSED state bit in con_init
  - LP: #1084539
* libceph: embed ceph connection structure in mon_client
  - LP: #1084539
* libceph: drop connection refcounting for mon_client
  - LP: #1084539
* libceph: init monitor connection when opening
  - LP: #1084539
* libceph: fully initialize connection in con_init()
  - LP: #1084539
* libceph: tweak ceph_alloc_msg()
  - LP: #1084539
* libceph: have messages point to their connection
  - LP: #1084539
* libceph: have messages take a connection reference
  - LP: #1084539
* libceph: make ceph_con_revoke() a msg operation
  - LP: #1084539
* libceph: make ceph_con_revoke_message() a msg op
  - LP: #1084539
* libceph: fix overflow in __decode_pool_names()
  - LP: #1084539
* libceph: fix overflow in osdmap_decode()
  - LP: #1084539
* libceph: fix overflow in osdmap_apply_incremental()
  - LP: #1084539
* libceph: transition socket state prior to actual connect
  - LP: #1084539
* libceph: fix NULL dereference in reset_connection()
  - LP: #1084539
* libceph: use con get/put methods
  - LP: #1084539
* libceph: drop ceph_con_get/put helpers and nref member
  - LP: #1084539
* libceph: encapsulate out message data setup
  - LP: #1084539
* libceph: encapsulate advancing msg page
  - LP: #1084539
* libceph: don't mark footer complete before it is
  - LP: #1084539
* libceph: move init_bio_*() functions up
  - LP: #1084539
* libceph: move init of bio_iter
  - LP: #1084539
* libceph: don't use bio_iter as a flag
  - LP: #1084539
* libceph: SOCK_CLOSED is a flag, not a state
  - LP: #1084539
* libceph: don't change socket state on sock event
  - LP: #1084539
* libceph: just set SOCK_CLOSED when state changes
  - LP: #1084539
* libceph: don't touch con state in con_close_socket()
  - LP: #1084539
* libceph: clear CONNECTING in ceph_con_close()
  - LP: #1084539
* libceph: clear NEGOTIATING when done
  - LP: #1084539
* libceph: define and use an explicit CONNECTED state
  - LP: #1084539
* libceph: separate banner and connect writes
  - LP: #1084539
* libceph: distinguish two phases of connect sequence
  - LP: #1084539
* libceph: small changes to messenger.c
  - LP: #1084539
* libceph: add some fine ASCII art
  - LP: #1084539
* libceph: set peer name on con_open, not init
  - LP: #1084539
* libceph: initialize mon_client con only once
  - LP: #1084539
* libceph: allow sock transition from CONNECTING to CLOSED
  - LP: #1084539
* libceph: initialize msgpool message types
  - LP: #1084539
* libceph: prevent the race of incoming work during teardown
  - LP: #1084539
* libceph: report socket read/write error message
  - LP: #1084539
* libceph: fix mutex coverage for ceph_con_close
  - LP: #1084539
* libceph: resubmit linger ops when pg mapping changes
  - LP: #1084539
* libceph: (re)initialize bio_iter on start of message receive
  - LP: #1084539
* libceph: protect ceph_con_open() with mutex
  - LP: #1084539
* libceph: reset connection retry on successfully negotiation
  - LP: #1084539
* libceph: fix fault locking; close socket on lossy fault
  - LP: #1084539
* libceph: move msgr clear_standby under con mutex protection
  - LP: #1084539
* libceph: move ceph_con_send() closed check under the con mutex
  - LP: #1084539
* libceph: drop gratuitous socket close calls in con_work
  - LP: #1084539
* libceph: close socket directly from ceph_con_close()
  - LP: #1084539
* libceph: drop unnecessary CLOSED check in socket state change callback
  - LP: #1084539
* libceph: replace connection state bits with states
  - LP: #1084539
* libceph: clean up con flags
  - LP: #1084539
* libceph: clear all flags on con_close
  - LP: #1084539
* libceph: fix handling of immediate socket connect failure
  - LP: #1084539
* libceph: revoke mon_client messages on session restart
  - LP: #1084539
* libceph: verify state after retaking con lock after dispatch
  - LP: #1084539
* libceph: avoid dropping con mutex before fault
  - LP: #1084539
* libceph: change ceph_con_in_msg_alloc convention to be less weird
  - LP: #1084539
* libceph: recheck con state after allocating incoming message
  - LP: #1084539
* libceph: fix crypto key null deref, memory leak
  - LP: #1084539
* libceph: delay debugfs initialization until we learn global_id
  - LP: #1084539
* libceph: avoid truncation due to racing banners
  - LP: #1084539
* libceph: only kunmap kmapped pages
  - LP: #1084539
* rbd: reset BACKOFF if unable to re-queue
  - LP: #1084539
* libceph: avoid NULL kref_put when osd reset races with alloc_msg
  - LP: #1084539
* ceph: fix dentry reference leak in encode_fh()
  - LP: #1084539
* ceph: Fix oops when handling mdsmap that decreases max_mds
  - LP: #1084539
* libceph: check for invalid mapping
  - LP: #1084539
* ceph: avoid 32-bit page index overflow
  - LP: #1084539
* ASoC: wm2200: Use rev A register patches on rev B
  - LP: #1084539
* ASoC: wm2200: Fix non-inverted OUT2 mute control
  - LP: #1084539
* drm/i915: remove useless BUG_ON which caused a regression in 3.5.
  - LP: #1084539
* USB: Enable LPM after a failed probe.
  - LP: #1084539
* usb: Don't enable LPM if the exit latency is zero.
  - LP: #1084539
* usb: Send Set SEL before enabling parent U1/U2 timeout.
  - LP: #1084539
* ASoC: fsi: don't reschedule DMA from an atomic context
  - LP: #1084539
* drm/i915: Set guardband clipping workaround bit in the right register.
  - LP: #1084539
* pcmcia: sharpsl: don't discard sharpsl_pcmcia_ops
  - LP: #1084539
* hwmon: (coretemp) Add support for Atom CE4110/4150/4170
  - LP: #1084539
* ALSA: hda - Fix registration race of VGA switcheroo
  - LP: #1084539
* usb: dwc3: gadget: fix 'endpoint always busy' bug
  - LP: #1084539
* usb: musb: am35xx: drop spurious unplugging a device
  - LP: #1084539
* drm/radeon: Don't destroy I2C Bus Rec in radeon_ext_tmds_enc_destroy().
  - LP: #1084539
* ALSA: hda - Always check array bounds in alc_get_line_out_pfx
  - LP: #1084539
* NLM: nlm_lookup_file() may return NLMv4-specific error codes
  - LP: #1084539
* x86: Exclude E820_RESERVED regions and memory holes above 4 GB from
  direct mapping.
  - LP: #1084539
* SUNRPC: Prevent kernel stack corruption on long values of flush
  - LP: #1084539
* USB: cdc-acm: fix pipe type of write endpoint
  - LP: #1084539
* usb: acm: fix the computation of the number of data bits
  - LP: #1084539
* usb: host: xhci: New system added for Compliance Mode Patch on
  SN65LVPE502CP
  - LP: #1084539
* USB: option: blacklist net interface on ZTE devices
  - LP: #1084539
* USB: option: add more ZTE devices
  - LP: #1084539
* ext4: race-condition protection for
  ext4_convert_unwritten_extents_endio
  - LP: #1084539
* ext4: fix metadata checksum calculation for the superblock
  - LP: #1084539
* nohz: Fix idle ticks in cpu summary line of /proc/stat
  - LP: #1084539
* ring-buffer: Check for uninitialized cpu buffer before resizing
  - LP: #1084539
* Bluetooth: SMP: Fix setting unknown auth_req bits
  - LP: #1084539
* oprofile, x86: Fix wrapping bug in op_x86_get_ctrl()
  - LP: #1084539
* cfg80211/mac80211: avoid state mishmash on deauth
  - LP: #1084539
* mac80211: check if key has TKIP type before updating IV
  - LP: #1084539
* mac80211: use ieee80211_free_txskb in a few more places
  - LP: #1084539
* bcma: fix unregistration of cores
  - LP: #1084539
* net/wireless: ipw2200: Fix panic occurring in
  ipw_handle_promiscuous_tx()
  - LP: #1084539
* iwlwifi: fix 6000 series channel switch command
  - LP: #1084539
* cgroup: notify_on_release may not be triggered in some cases
  - LP: #1084539
* dt: Document: correct tegra20/30 pinctrl slew-rate name
  - LP: #1084539
* pinctrl: tegra: set low power mode bank width to 2
  - LP: #1084539
* pinctrl: tegra: correct bank for pingroup and drv pingroup
  - LP: #1084539
* s390: fix linker script for 31 bit builds
  - LP: #1084539
* pinctrl: remove mutex lock in groups show
  - LP: #1084539
* xen/x86: don't corrupt %eip when returning from a signal handler
  - LP: #1084539
* ALSA: hda - Fix silent headphone output from Toshiba P200
  - LP: #1084539
* ext4: Checksum the block bitmap properly with bigalloc enabled
  - LP: #1084539
* ARM: 7559/1: smp: switch away from the idmap before updating
  init_mm.mm_count
  - LP: #1084539
* usb hub: send clear_tt_buffer_complete events when canceling TT clear
  work
  - LP: #1084539
* staging: comedi: amplc_pc236: fix invalid register access during detach
  - LP: #1084539
* Staging: android: binder: Fix memory leak on thread/process exit
  - LP: #1084539
* Staging: android: binder: Allow using highmem for binder buffers
  - LP: #1084539
* ext4: Avoid underflow in ext4_trim_fs()
  - LP: #1084539
* cpufreq / powernow-k8: Remove usage of smp_processor_id() in
  preemptible code
  - LP: #1084539
* extcon: Unregister compat class at module unload to fix oops
  - LP: #1084539
* extcon: unregister compat link on cleanup
  - LP: #1084539
* pinctrl: fix missing unlock on error in pinctrl_groups_show()
  - LP: #1084539
* arch/tile: avoid generating .eh_frame information in modules
  - LP: #1084539
* drm/radeon: add some new SI PCI ids
  - LP: #1084539
* drm/radeon: add error output if VM CS fails on cayman
  - LP: #1084539
* xhci: endianness xhci_calculate_intel_u2_timeout
  - LP: #1084539
* xhci: fix integer overflow
  - LP: #1084539
* dmaengine: imx-dma: fix missing unlock on error in imxdma_xfer_desc()
  - LP: #1084539
* x86-64: Fix page table accounting
  - LP: #1084539
* dmaengine: sirf: fix a typo in dma_prep_interleaved
  - LP: #1084539
* dmaengine: sirf: fix a typo in moving running dma_desc to active queue
  - LP: #1084539
* amd64_edac:__amd64_set_scrub_rate(): avoid overindexing scrubrates[]
  - LP: #1084539
* SUNRPC: Clear the connect flag when socket state is TCP_CLOSE_WAIT
  - LP: #1084539
* SUNRPC: Prevent races in xs_abort_connection()
  - LP: #1084539
* SUNRPC: Get rid of the xs_error_report socket callback
  - LP: #1084539
* iommu/tegra: smmu: Fix deadly typo
  - LP: #1084539
* ARM: at91/tc: fix typo in the DT document
  - LP: #1084539
* ARM: at91: at91sam9g10: fix SOC type detection
  - LP: #1084539
* ARM: at91/i2c: change id to let i2c-gpio work
  - LP: #1084539
* b43: Fix oops on unload when firmware not found
  - LP: #1084539
* USB: serial: Fix memory leak in sierra_release()
  - LP: #1084539
* x86, mm: Trim memory in memblock to be page aligned
  - LP: #1084539
* x86, mm: Use memblock memory loop instead of e820_RAM
  - LP: #1084539
* usb-storage: add unusual_devs entry for Casio EX-N1 digital camera
  - LP: #1084539
* Drivers: hv: Cleanup error handling in vmbus_open()
  - LP: #1084539
* sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat()
  - LP: #1084539
* vhost: fix mergeable bufs on BE hosts
  - LP: #1084539
* USB: metro-usb: fix io after disconnect
  - LP: #1084539
* USB: whiteheat: fix memory leak in error path
  - LP: #1084539
* USB: quatech2: fix memory leak in error path
  - LP: #1084539
* USB: quatech2: fix io after disconnect
  - LP: #1084539
* USB: opticon: fix DMA from stack
  - LP: #1084539
* USB: opticon: fix memory leak in error path
  - LP: #1084539
* USB: mct_u232: fix broken close
  - LP: #1084539
* USB: sierra: fix memory leak in attach error path
  - LP: #1084539
* USB: sierra: fix memory leak in probe error path
  - LP: #1084539
* USB: mos7840: fix urb leak at release
  - LP: #1084539
* USB: mos7840: fix port-device leak in error path
  - LP: #1084539
* USB: mos7840: remove NULL-urb submission
  - LP: #1084539
* USB: mos7840: remove invalid disconnect handling
  - LP: #1084539
* ehci: fix Lucid nohandoff pci quirk to be more generic with BIOS
  versions
  - LP: #1084539
* ehci: Add yet-another Lucid nohandoff pci quirk
  - LP: #1084539
* xhci: Fix potential NULL ptr deref in command cancellation.
  - LP: #1084539
* freezer: exec should clear PF_NOFREEZE along with PF_KTHREAD
  - LP: #1084539
* mm: fix XFS oops due to dirty pages without buffers on s390
  - LP: #1084539
* genalloc: stop crashing the system when destroying a pool
  - LP: #1084539
* drivers/rtc/rtc-imxdi.c: add missing spin lock initialization
  - LP: #1084539
* gen_init_cpio: avoid stack overflow when expanding
  - LP: #1084539
* fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check
  - LP: #1084539
* qmi_wwan/cdc_ether: move Novatel 551 and E362 to qmi_wwan
  - LP: #1084539
* efi: Defer freeing boot services memory until after ACPI init
  - LP: #1084539
* x86: efi: Turn off efi_enabled after setup on mixed fw/kernel
  - LP: #1082059, #1084539
* target: Re-add explict zeroing of INQUIRY bounce buffer memory
  - LP: #1084539
* ARM: 7566/1: vfp: fix save and restore when running on pre-VFPv3 and
  CONFIG_VFPv3 set
  - LP: #1084539
* libceph: drop declaration of ceph_con_get()
  - LP: #1084539
* x86, mm: Find_early_table_space based on ranges that are actually being
  mapped
  - LP: #1084539
* x86, mm: Undo incorrect revert in arch/x86/mm/init.c
  - LP: #1084539
* Linux 3.5.7.1
  - LP: #1084539
* ALSA: hda - Cirrus: Correctly clear line_out_pins when moving to
  speaker
  - LP: #1076840
* Bluetooth: ath3k: Add support for VAIO VPCEH [0489:e027]
  - LP: #898826
* i915_hsw: drm/i915: Reserve ioctl numbers for set/get_caching
  - LP: #1085245
* i915_hsw: drm: Export drm_probe_ddc()
  - LP: #1085245
* i915_hsw: drm: remove the raw_edid field from struct drm_display_info
  - LP: #1085245
* i915_hsw: drm/i915: fix hsw uncached pte
  - LP: #1085245
* i915_hsw: drm/fb-helper: delay hotplug handling when partially bound
  - LP: #1085245
* i915_hsw: drm/fb helper: don't call drm_crtc_helper_set_config
  - LP: #1085245
* i915_hsw: drm/fb-helper: don't clobber output routing in setup_crtcs
  - LP: #1085245
* i915_hsw: drm/fb helper: don't call drm_helper_connector_dpms directly
  - LP: #1085245
* i915_hsw: drm/edid: Fix potential memory leak in edid_load()
  - LP: #1085245

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2006-2010 Intel Corporation
 
3
 * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
 
4
 *
 
5
 * Permission is hereby granted, free of charge, to any person obtaining a
 
6
 * copy of this software and associated documentation files (the "Software"),
 
7
 * to deal in the Software without restriction, including without limitation
 
8
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
9
 * and/or sell copies of the Software, and to permit persons to whom the
 
10
 * Software is furnished to do so, subject to the following conditions:
 
11
 *
 
12
 * The above copyright notice and this permission notice (including the next
 
13
 * paragraph) shall be included in all copies or substantial portions of the
 
14
 * Software.
 
15
 *
 
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
21
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 
22
 * DEALINGS IN THE SOFTWARE.
 
23
 *
 
24
 * Authors:
 
25
 *      Eric Anholt <eric@anholt.net>
 
26
 *      Dave Airlie <airlied@linux.ie>
 
27
 *      Jesse Barnes <jesse.barnes@intel.com>
 
28
 *      Chris Wilson <chris@chris-wilson.co.uk>
 
29
 */
 
30
 
 
31
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
32
 
 
33
#include <linux/moduleparam.h>
 
34
#include "intel_drv.h"
 
35
 
 
36
#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */
 
37
 
 
38
void
 
39
intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
 
40
                       struct drm_display_mode *adjusted_mode)
 
41
{
 
42
        adjusted_mode->hdisplay = fixed_mode->hdisplay;
 
43
        adjusted_mode->hsync_start = fixed_mode->hsync_start;
 
44
        adjusted_mode->hsync_end = fixed_mode->hsync_end;
 
45
        adjusted_mode->htotal = fixed_mode->htotal;
 
46
 
 
47
        adjusted_mode->vdisplay = fixed_mode->vdisplay;
 
48
        adjusted_mode->vsync_start = fixed_mode->vsync_start;
 
49
        adjusted_mode->vsync_end = fixed_mode->vsync_end;
 
50
        adjusted_mode->vtotal = fixed_mode->vtotal;
 
51
 
 
52
        adjusted_mode->clock = fixed_mode->clock;
 
53
}
 
54
 
 
55
/* adjusted_mode has been preset to be the panel's fixed mode */
 
56
void
 
57
intel_pch_panel_fitting(struct drm_device *dev,
 
58
                        int fitting_mode,
 
59
                        const struct drm_display_mode *mode,
 
60
                        struct drm_display_mode *adjusted_mode)
 
61
{
 
62
        struct drm_i915_private *dev_priv = dev->dev_private;
 
63
        int x, y, width, height;
 
64
 
 
65
        x = y = width = height = 0;
 
66
 
 
67
        /* Native modes don't need fitting */
 
68
        if (adjusted_mode->hdisplay == mode->hdisplay &&
 
69
            adjusted_mode->vdisplay == mode->vdisplay)
 
70
                goto done;
 
71
 
 
72
        switch (fitting_mode) {
 
73
        case DRM_MODE_SCALE_CENTER:
 
74
                width = mode->hdisplay;
 
75
                height = mode->vdisplay;
 
76
                x = (adjusted_mode->hdisplay - width + 1)/2;
 
77
                y = (adjusted_mode->vdisplay - height + 1)/2;
 
78
                break;
 
79
 
 
80
        case DRM_MODE_SCALE_ASPECT:
 
81
                /* Scale but preserve the aspect ratio */
 
82
                {
 
83
                        u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
 
84
                        u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
 
85
                        if (scaled_width > scaled_height) { /* pillar */
 
86
                                width = scaled_height / mode->vdisplay;
 
87
                                if (width & 1)
 
88
                                        width++;
 
89
                                x = (adjusted_mode->hdisplay - width + 1) / 2;
 
90
                                y = 0;
 
91
                                height = adjusted_mode->vdisplay;
 
92
                        } else if (scaled_width < scaled_height) { /* letter */
 
93
                                height = scaled_width / mode->hdisplay;
 
94
                                if (height & 1)
 
95
                                    height++;
 
96
                                y = (adjusted_mode->vdisplay - height + 1) / 2;
 
97
                                x = 0;
 
98
                                width = adjusted_mode->hdisplay;
 
99
                        } else {
 
100
                                x = y = 0;
 
101
                                width = adjusted_mode->hdisplay;
 
102
                                height = adjusted_mode->vdisplay;
 
103
                        }
 
104
                }
 
105
                break;
 
106
 
 
107
        default:
 
108
        case DRM_MODE_SCALE_FULLSCREEN:
 
109
                x = y = 0;
 
110
                width = adjusted_mode->hdisplay;
 
111
                height = adjusted_mode->vdisplay;
 
112
                break;
 
113
        }
 
114
 
 
115
done:
 
116
        dev_priv->pch_pf_pos = (x << 16) | y;
 
117
        dev_priv->pch_pf_size = (width << 16) | height;
 
118
}
 
119
 
 
120
static int is_backlight_combination_mode(struct drm_device *dev)
 
121
{
 
122
        struct drm_i915_private *dev_priv = dev->dev_private;
 
123
 
 
124
        if (INTEL_INFO(dev)->gen >= 4)
 
125
                return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE;
 
126
 
 
127
        if (IS_GEN2(dev))
 
128
                return I915_READ(BLC_PWM_CTL) & BLM_LEGACY_MODE;
 
129
 
 
130
        return 0;
 
131
}
 
132
 
 
133
static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
 
134
{
 
135
        u32 val;
 
136
 
 
137
        /* Restore the CTL value if it lost, e.g. GPU reset */
 
138
 
 
139
        if (HAS_PCH_SPLIT(dev_priv->dev)) {
 
140
                val = I915_READ(BLC_PWM_PCH_CTL2);
 
141
                if (dev_priv->regfile.saveBLC_PWM_CTL2 == 0) {
 
142
                        dev_priv->regfile.saveBLC_PWM_CTL2 = val;
 
143
                } else if (val == 0) {
 
144
                        I915_WRITE(BLC_PWM_PCH_CTL2,
 
145
                                   dev_priv->regfile.saveBLC_PWM_CTL2);
 
146
                        val = dev_priv->regfile.saveBLC_PWM_CTL2;
 
147
                }
 
148
        } else {
 
149
                val = I915_READ(BLC_PWM_CTL);
 
150
                if (dev_priv->regfile.saveBLC_PWM_CTL == 0) {
 
151
                        dev_priv->regfile.saveBLC_PWM_CTL = val;
 
152
                        dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
 
153
                } else if (val == 0) {
 
154
                        I915_WRITE(BLC_PWM_CTL,
 
155
                                   dev_priv->regfile.saveBLC_PWM_CTL);
 
156
                        I915_WRITE(BLC_PWM_CTL2,
 
157
                                   dev_priv->regfile.saveBLC_PWM_CTL2);
 
158
                        val = dev_priv->regfile.saveBLC_PWM_CTL;
 
159
                }
 
160
        }
 
161
 
 
162
        return val;
 
163
}
 
164
 
 
165
static u32 _intel_panel_get_max_backlight(struct drm_device *dev)
 
166
{
 
167
        struct drm_i915_private *dev_priv = dev->dev_private;
 
168
        u32 max;
 
169
 
 
170
        max = i915_read_blc_pwm_ctl(dev_priv);
 
171
 
 
172
        if (HAS_PCH_SPLIT(dev)) {
 
173
                max >>= 16;
 
174
        } else {
 
175
                if (INTEL_INFO(dev)->gen < 4)
 
176
                        max >>= 17;
 
177
                else
 
178
                        max >>= 16;
 
179
 
 
180
                if (is_backlight_combination_mode(dev))
 
181
                        max *= 0xff;
 
182
        }
 
183
 
 
184
        return max;
 
185
}
 
186
 
 
187
u32 intel_panel_get_max_backlight(struct drm_device *dev)
 
188
{
 
189
        u32 max;
 
190
 
 
191
        max = _intel_panel_get_max_backlight(dev);
 
192
        if (max == 0) {
 
193
                /* XXX add code here to query mode clock or hardware clock
 
194
                 * and program max PWM appropriately.
 
195
                 */
 
196
                pr_warn_once("fixme: max PWM is zero\n");
 
197
                return 1;
 
198
        }
 
199
 
 
200
        DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max);
 
201
        return max;
 
202
}
 
203
 
 
204
static int i915_panel_invert_brightness;
 
205
MODULE_PARM_DESC(invert_brightness, "Invert backlight brightness "
 
206
        "(-1 force normal, 0 machine defaults, 1 force inversion), please "
 
207
        "report PCI device ID, subsystem vendor and subsystem device ID "
 
208
        "to dri-devel@lists.freedesktop.org, if your machine needs it. "
 
209
        "It will then be included in an upcoming module version.");
 
210
module_param_named(invert_brightness, i915_panel_invert_brightness, int, 0600);
 
211
static u32 intel_panel_compute_brightness(struct drm_device *dev, u32 val)
 
212
{
 
213
        struct drm_i915_private *dev_priv = dev->dev_private;
 
214
 
 
215
        if (i915_panel_invert_brightness < 0)
 
216
                return val;
 
217
 
 
218
        if (i915_panel_invert_brightness > 0 ||
 
219
            dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS)
 
220
                return intel_panel_get_max_backlight(dev) - val;
 
221
 
 
222
        return val;
 
223
}
 
224
 
 
225
static u32 intel_panel_get_backlight(struct drm_device *dev)
 
226
{
 
227
        struct drm_i915_private *dev_priv = dev->dev_private;
 
228
        u32 val;
 
229
 
 
230
        if (HAS_PCH_SPLIT(dev)) {
 
231
                val = I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
 
232
        } else {
 
233
                val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
 
234
                if (INTEL_INFO(dev)->gen < 4)
 
235
                        val >>= 1;
 
236
 
 
237
                if (is_backlight_combination_mode(dev)) {
 
238
                        u8 lbpc;
 
239
 
 
240
                        pci_read_config_byte(dev->pdev, PCI_LBPC, &lbpc);
 
241
                        val *= lbpc;
 
242
                }
 
243
        }
 
244
 
 
245
        val = intel_panel_compute_brightness(dev, val);
 
246
        DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val);
 
247
        return val;
 
248
}
 
249
 
 
250
static void intel_pch_panel_set_backlight(struct drm_device *dev, u32 level)
 
251
{
 
252
        struct drm_i915_private *dev_priv = dev->dev_private;
 
253
        u32 val = I915_READ(BLC_PWM_CPU_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK;
 
254
        I915_WRITE(BLC_PWM_CPU_CTL, val | level);
 
255
}
 
256
 
 
257
static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level)
 
258
{
 
259
        struct drm_i915_private *dev_priv = dev->dev_private;
 
260
        u32 tmp;
 
261
 
 
262
        DRM_DEBUG_DRIVER("set backlight PWM = %d\n", level);
 
263
        level = intel_panel_compute_brightness(dev, level);
 
264
 
 
265
        if (HAS_PCH_SPLIT(dev))
 
266
                return intel_pch_panel_set_backlight(dev, level);
 
267
 
 
268
        if (is_backlight_combination_mode(dev)) {
 
269
                u32 max = intel_panel_get_max_backlight(dev);
 
270
                u8 lbpc;
 
271
 
 
272
                lbpc = level * 0xfe / max + 1;
 
273
                level /= lbpc;
 
274
                pci_write_config_byte(dev->pdev, PCI_LBPC, lbpc);
 
275
        }
 
276
 
 
277
        tmp = I915_READ(BLC_PWM_CTL);
 
278
        if (INTEL_INFO(dev)->gen < 4)
 
279
                level <<= 1;
 
280
        tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
 
281
        I915_WRITE(BLC_PWM_CTL, tmp | level);
 
282
}
 
283
 
 
284
void intel_panel_set_backlight(struct drm_device *dev, u32 level)
 
285
{
 
286
        struct drm_i915_private *dev_priv = dev->dev_private;
 
287
 
 
288
        dev_priv->backlight_level = level;
 
289
        if (dev_priv->backlight_enabled)
 
290
                intel_panel_actually_set_backlight(dev, level);
 
291
}
 
292
 
 
293
void intel_panel_disable_backlight(struct drm_device *dev)
 
294
{
 
295
        struct drm_i915_private *dev_priv = dev->dev_private;
 
296
 
 
297
        dev_priv->backlight_enabled = false;
 
298
        intel_panel_actually_set_backlight(dev, 0);
 
299
 
 
300
        if (INTEL_INFO(dev)->gen >= 4) {
 
301
                uint32_t reg, tmp;
 
302
 
 
303
                reg = HAS_PCH_SPLIT(dev) ? BLC_PWM_CPU_CTL2 : BLC_PWM_CTL2;
 
304
 
 
305
                I915_WRITE(reg, I915_READ(reg) & ~BLM_PWM_ENABLE);
 
306
 
 
307
                if (HAS_PCH_SPLIT(dev)) {
 
308
                        tmp = I915_READ(BLC_PWM_PCH_CTL1);
 
309
                        tmp &= ~BLM_PCH_PWM_ENABLE;
 
310
                        I915_WRITE(BLC_PWM_PCH_CTL1, tmp);
 
311
                }
 
312
        }
 
313
}
 
314
 
 
315
void intel_panel_enable_backlight(struct drm_device *dev,
 
316
                                  enum pipe pipe)
 
317
{
 
318
        struct drm_i915_private *dev_priv = dev->dev_private;
 
319
 
 
320
        if (dev_priv->backlight_level == 0)
 
321
                dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
 
322
 
 
323
        if (INTEL_INFO(dev)->gen >= 4) {
 
324
                uint32_t reg, tmp;
 
325
 
 
326
                reg = HAS_PCH_SPLIT(dev) ? BLC_PWM_CPU_CTL2 : BLC_PWM_CTL2;
 
327
 
 
328
 
 
329
                tmp = I915_READ(reg);
 
330
 
 
331
                /* Note that this can also get called through dpms changes. And
 
332
                 * we don't track the backlight dpms state, hence check whether
 
333
                 * we have to do anything first. */
 
334
                if (tmp & BLM_PWM_ENABLE)
 
335
                        goto set_level;
 
336
 
 
337
                if (dev_priv->num_pipe == 3)
 
338
                        tmp &= ~BLM_PIPE_SELECT_IVB;
 
339
                else
 
340
                        tmp &= ~BLM_PIPE_SELECT;
 
341
 
 
342
                tmp |= BLM_PIPE(pipe);
 
343
                tmp &= ~BLM_PWM_ENABLE;
 
344
 
 
345
                I915_WRITE(reg, tmp);
 
346
                POSTING_READ(reg);
 
347
                I915_WRITE(reg, tmp | BLM_PWM_ENABLE);
 
348
 
 
349
                if (HAS_PCH_SPLIT(dev)) {
 
350
                        tmp = I915_READ(BLC_PWM_PCH_CTL1);
 
351
                        tmp |= BLM_PCH_PWM_ENABLE;
 
352
                        tmp &= ~BLM_PCH_OVERRIDE_ENABLE;
 
353
                        I915_WRITE(BLC_PWM_PCH_CTL1, tmp);
 
354
                }
 
355
        }
 
356
 
 
357
set_level:
 
358
        /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1.
 
359
         * BLC_PWM_CPU_CTL may be cleared to zero automatically when these
 
360
         * registers are set.
 
361
         */
 
362
        dev_priv->backlight_enabled = true;
 
363
        intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
 
364
}
 
365
 
 
366
static void intel_panel_init_backlight(struct drm_device *dev)
 
367
{
 
368
        struct drm_i915_private *dev_priv = dev->dev_private;
 
369
 
 
370
        dev_priv->backlight_level = intel_panel_get_backlight(dev);
 
371
        dev_priv->backlight_enabled = dev_priv->backlight_level != 0;
 
372
}
 
373
 
 
374
enum drm_connector_status
 
375
intel_panel_detect(struct drm_device *dev)
 
376
{
 
377
        struct drm_i915_private *dev_priv = dev->dev_private;
 
378
 
 
379
        /* Assume that the BIOS does not lie through the OpRegion... */
 
380
        if (!i915_panel_ignore_lid && dev_priv->opregion.lid_state) {
 
381
                return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
 
382
                        connector_status_connected :
 
383
                        connector_status_disconnected;
 
384
        }
 
385
 
 
386
        switch (i915_panel_ignore_lid) {
 
387
        case -2:
 
388
                return connector_status_connected;
 
389
        case -1:
 
390
                return connector_status_disconnected;
 
391
        default:
 
392
                return connector_status_unknown;
 
393
        }
 
394
}
 
395
 
 
396
#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
 
397
static int intel_panel_update_status(struct backlight_device *bd)
 
398
{
 
399
        struct drm_device *dev = bl_get_data(bd);
 
400
        intel_panel_set_backlight(dev, bd->props.brightness);
 
401
        return 0;
 
402
}
 
403
 
 
404
static int intel_panel_get_brightness(struct backlight_device *bd)
 
405
{
 
406
        struct drm_device *dev = bl_get_data(bd);
 
407
        struct drm_i915_private *dev_priv = dev->dev_private;
 
408
        return dev_priv->backlight_level;
 
409
}
 
410
 
 
411
static const struct backlight_ops intel_panel_bl_ops = {
 
412
        .update_status = intel_panel_update_status,
 
413
        .get_brightness = intel_panel_get_brightness,
 
414
};
 
415
 
 
416
int intel_panel_setup_backlight(struct drm_connector *connector)
 
417
{
 
418
        struct drm_device *dev = connector->dev;
 
419
        struct drm_i915_private *dev_priv = dev->dev_private;
 
420
        struct backlight_properties props;
 
421
 
 
422
        intel_panel_init_backlight(dev);
 
423
 
 
424
        memset(&props, 0, sizeof(props));
 
425
        props.type = BACKLIGHT_RAW;
 
426
        props.max_brightness = _intel_panel_get_max_backlight(dev);
 
427
        if (props.max_brightness == 0) {
 
428
                DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n");
 
429
                return -ENODEV;
 
430
        }
 
431
        dev_priv->backlight =
 
432
                backlight_device_register("intel_backlight",
 
433
                                          &connector->kdev, dev,
 
434
                                          &intel_panel_bl_ops, &props);
 
435
 
 
436
        if (IS_ERR(dev_priv->backlight)) {
 
437
                DRM_ERROR("Failed to register backlight: %ld\n",
 
438
                          PTR_ERR(dev_priv->backlight));
 
439
                dev_priv->backlight = NULL;
 
440
                return -ENODEV;
 
441
        }
 
442
        dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev);
 
443
        return 0;
 
444
}
 
445
 
 
446
void intel_panel_destroy_backlight(struct drm_device *dev)
 
447
{
 
448
        struct drm_i915_private *dev_priv = dev->dev_private;
 
449
        if (dev_priv->backlight)
 
450
                backlight_device_unregister(dev_priv->backlight);
 
451
}
 
452
#else
 
453
int intel_panel_setup_backlight(struct drm_connector *connector)
 
454
{
 
455
        intel_panel_init_backlight(connector->dev);
 
456
        return 0;
 
457
}
 
458
 
 
459
void intel_panel_destroy_backlight(struct drm_device *dev)
 
460
{
 
461
        return;
 
462
}
 
463
#endif
 
464
 
 
465
int intel_panel_init(struct intel_panel *panel,
 
466
                     struct drm_display_mode *fixed_mode)
 
467
{
 
468
        panel->fixed_mode = fixed_mode;
 
469
 
 
470
        return 0;
 
471
}
 
472
 
 
473
void intel_panel_fini(struct intel_panel *panel)
 
474
{
 
475
        struct intel_connector *intel_connector =
 
476
                container_of(panel, struct intel_connector, panel);
 
477
 
 
478
        if (panel->fixed_mode)
 
479
                drm_mode_destroy(intel_connector->base.dev, panel->fixed_mode);
 
480
}