1. 31 Aug, 2012 11 commits
  2. 23 Aug, 2012 13 commits
    • Shimoda, Yoshihiro's avatar
      usb: renesas_usbhs: modify the irq handler for sharing irq · 4e177260
      Shimoda, Yoshihiro authored
      When IORESOURCE_IRQ_SHAREABLE is set, the irq handler may be called
      even if the interupt of the USB module doesn't happen. So, it may
      clear the interrupt flags by mistake. This patch fixes it.
      Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4e177260
    • Andy Shevchenko's avatar
      usb: gadget: use %pm to print mac addresses · 8c7ca992
      Andy Shevchenko authored
      %pm already provides pretty print for mac addresses, let's
      use that and drop homebrew mac address printing.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      8c7ca992
    • Kevin Cernekee's avatar
      usb: gadget: udc-core: Race between disconnect/unbind and setup · 974e9323
      Kevin Cernekee authored
      usb_gadget_remove_driver() runs through a four-step sequence to shut down
      the gadget driver.  For the case of a composite gadget + at91 UDC, this
      would look like:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          usb_gadget_disconnect(udc->gadget);            // at91_pullup(gadget, 0)
          udc->driver->unbind(udc->gadget);              // composite_unbind()
          usb_gadget_udc_stop(udc->gadget, udc->driver); // at91_stop()
      
      The UDC driver can receive SETUP packets from the host up until the
      point when usb_gadget_disconnect() returns.  On rare occasions, the
      gadget driver may see this sequence:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          udc->driver->setup(udc->gadget, &ctrl);        // composite_setup()
          udc->driver->unbind(udc->gadget);              // composite_unbind()
      
      Some gadget drivers, such as composite, assume this will never happen
      and crash as a result.
      
      The fix is to quiesce the UDC hardware (via usb_gadget_disconnect)
      before running the gadget driver through the disconnect/unbind sequence.
      Reviewed-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarKevin Cernekee <cernekee@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      974e9323
    • Andy Shevchenko's avatar
    • Du, Changbin's avatar
      usb: gadget: s3c-hsotg: fix core reset timeout failure · 2868fea2
      Du, Changbin authored
      The timeout values were 1000 and timeout issue occured many times on my
      s3c6410 Soc based board (mostly when booting whith USB cable not
      connected). This patch increase the values to 10000 to guarantee the
      success of reset.
      
      Having set timeout to 10000, I printed the remained timeout values
      which could cause timeout issue before this change (tested several
      times).
      the first timeout value remained:
      	timeout = 8079
      	timeout = 8079
      	timeout = 8078
      	timeout = 8081
      the second timeout value remained:
      	timeout = 7940
      	timeout = 7945
      	timeout = 7940
      	timeout = 7938
      Seeing from above values, I think the value 10000 is big enough.
      Signed-off-by: default avatarDu, Changbin <changbin.du@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2868fea2
    • Michael Grzeschik's avatar
      usb composite: fix locking in usb_function_activate · 4fefe9f6
      Michael Grzeschik authored
      The lockdep hunter mentions a non consistent usage of spin_lock and
      spin_lock_irqsafe in the composite_disconnect and usb_function_activate
      function:
      
      [   15.700897] =================================
      [   15.705255] [ INFO: inconsistent lock state ]
      [   15.709617] 3.5.0-rc5+ #413 Not tainted
      [   15.713453] ---------------------------------
      [   15.717812] inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
      [   15.723822] uvc-gadget/116 [HC1[1]:SC0[0]:HE0:SE1] takes:
      [   15.729222]  (&(&cdev->lock)->rlock){?.+...}, at: [<7f0049e8>] composite_disconnect+0x2c/0x74 [g_webcam]
      [   15.738797] {HARDIRQ-ON-W} state was registered at:
      [   15.743677]   [<8006de3c>] mark_lock+0x148/0x688
      [   15.748325]   [<8006ecb0>] __lock_acquire+0x934/0x1b74
      [   15.753481]   [<8007047c>] lock_acquire+0x98/0x138
      [   15.758288]   [<804c776c>] _raw_spin_lock+0x4c/0x84
      [   15.763188]   [<7f006ae4>] usb_function_activate+0x28/0x94 [g_webcam]
      [   15.769652]   [<7f00820c>] usb_ep_autoconfig_reset+0x78/0x98 [g_webcam]
      [   15.776287]   [<7f0082a4>] uvc_v4l2_open+0x78/0x94 [g_webcam]
      [   15.782054]   [<80366a38>] v4l2_open+0x104/0x130
      [   15.786697]   [<800efd30>] chrdev_open+0xa0/0x170
      [   15.791423]   [<800e9718>] do_dentry_open.isra.13+0x1e8/0x264
      [   15.797186]   [<800ea5d4>] nameidata_to_filp+0x58/0x94
      [   15.802340]   [<800fa29c>] do_last.isra.31+0x2a0/0x808
      [   15.807497]   [<800faa40>] path_openat+0xc8/0x3e8
      [   15.812216]   [<800fae90>] do_filp_open+0x3c/0x90
      [   15.816936]   [<800ea6fc>] do_sys_open+0xec/0x184
      [   15.821655]   [<800ea7c4>] sys_open+0x30/0x34
      [   15.826027]   [<8000e5c0>] ret_fast_syscall+0x0/0x48
      [   15.831015] irq event stamp: 6048
      [   15.834330] hardirqs last  enabled at (6047): [<804c81b8>] _raw_spin_unlock_irqrestore+0x40/0x54
      [   15.843132] hardirqs last disabled at (6048): [<8000e174>] __irq_svc+0x34/0x60
      [   15.850370] softirqs last  enabled at (5940): [<80028380>] __do_softirq+0x188/0x270
      [   15.858043] softirqs last disabled at (5935): [<80028944>] irq_exit+0xa0/0xa8
      [   15.865195]
      [   15.865195] other info that might help us debug this:
      [   15.871724]  Possible unsafe locking scenario:
      [   15.871724]
      [   15.877645]        CPU0
      [   15.880091]        ----
      [   15.882537]   lock(&(&cdev->lock)->rlock);
      [   15.886659]   <Interrupt>
      [   15.889278]     lock(&(&cdev->lock)->rlock);
      [   15.893573]
      [   15.893573]  *** DEADLOCK ***
      [   15.893573]
      [   15.899496] no locks held by uvc-gadget/116.
      [   15.903765]
      [   15.903765] stack backtrace:
      [   15.908125] Backtrace:
      [   15.910604] [<80012038>] (dump_backtrace+0x0/0x114) from [<804bf8a4>] (dump_stack+0x20/0x24)
      [   15.919043]  r6:dfb8e6f0 r5:dfb8e400 r4:809717ec r3:60000193
      [   15.924766] [<804bf884>] (dump_stack+0x0/0x24) from [<804c0c0c>] (print_usage_bug+0x258/0x2c0)
      [   15.933388] [<804c09b4>] (print_usage_bug+0x0/0x2c0) from [<8006e240>] (mark_lock+0x54c/0x688)
      [   15.942006] [<8006dcf4>] (mark_lock+0x0/0x688) from [<8006edb8>] (__lock_acquire+0xa3c/0x1b74)
      [   15.950625] [<8006e37c>] (__lock_acquire+0x0/0x1b74) from [<8007047c>] (lock_acquire+0x98/0x138)
      [   15.959418] [<800703e4>] (lock_acquire+0x0/0x138) from [<804c78fc>] (_raw_spin_lock_irqsave+0x58/0x94)
      [   15.968736] [<804c78a4>] (_raw_spin_lock_irqsave+0x0/0x94) from [<7f0049e8>] (composite_disconnect+0x2c/0x74 [g_webcam])
      [   15.979605]  r7:00000012 r6:df82b0c4 r5:ded755bc r4:ded75580
      [   15.985331] [<7f0049bc>] (composite_disconnect+0x0/0x74 [g_webcam]) from [<8033c170>] (_gadget_stop_activity+0xc4/0x120)
      [   15.996200]  r6:df82b0c4 r5:df82b0c8 r4:df82b0d0 r3:7f0049bc
      [   16.001919] [<8033c0ac>] (_gadget_stop_activity+0x0/0x120) from [<8033e390>] (udc_irq+0x724/0xcb8)
      [   16.010877]  r6:df82b010 r5:00000000 r4:df82b010 r3:00000000
      [   16.016595] [<8033dc6c>] (udc_irq+0x0/0xcb8) from [<8033baec>] (ci_irq+0x64/0xdc)
      [   16.024086] [<8033ba88>] (ci_irq+0x0/0xdc) from [<80086538>] (handle_irq_event_percpu+0x74/0x298)
      [   16.032958]  r5:807fd414 r4:df38fdc0
      [   16.036566] [<800864c4>] (handle_irq_event_percpu+0x0/0x298) from [<800867a8>] (handle_irq_event+0x4c/0x6c)
      [   16.046315] [<8008675c>] (handle_irq_event+0x0/0x6c) from [<80089318>] (handle_level_irq+0xbc/0x11c)
      [   16.055447]  r6:def04000 r5:807fd414 r4:807fd3c0 r3:00020000
      [   16.061166] [<8008925c>] (handle_level_irq+0x0/0x11c) from [<80085cc8>] (generic_handle_irq+0x38/0x4c)
      [   16.070472]  r5:807f7f64 r4:8081e9f8
      [   16.074082] [<80085c90>] (generic_handle_irq+0x0/0x4c) from [<8000ef98>] (handle_IRQ+0x5c/0xbc)
      [   16.082788] [<8000ef3c>] (handle_IRQ+0x0/0xbc) from [<800085cc>] (tzic_handle_irq+0x6c/0x9c)
      [   16.091225]  r8:00000000 r7:def059b0 r6:00000001 r5:00000000 r4:00000000
      r3:00000012
      [   16.099141] [<80008560>] (tzic_handle_irq+0x0/0x9c) from [<8000e184>] (__irq_svc+0x44/0x60)
      [   16.107494] Exception stack(0xdef059b0 to 0xdef059f8)
      [   16.112550] 59a0:                                     00000001 00000001 00000000 dfb8e400
      [   16.120732] 59c0: 40000013 81a2e500 00000000 81a2e500 00000000 00000000 80862418 def05a0c
      [   16.128912] 59e0: def059c8 def059f8 80070e24 804c81bc 20000013 ffffffff
      [   16.135542] [<804c8178>] (_raw_spin_unlock_irqrestore+0x0/0x54) from [<8003d0ec>] (__queue_work+0x108/0x470)
      [   16.145369]  r5:dfb1a30c r4:81b93c00
      [   16.148978] [<8003cfe4>] (__queue_work+0x0/0x470) from [<8003d4e0>] (queue_work_on+0x4c/0x54)
      [   16.157511] [<8003d494>] (queue_work_on+0x0/0x54) from [<8003d544>] (queue_work+0x30/0x34)
      [   16.165774]  r6:df2e6900 r5:80e0c2f8 r4:dfb1a2c8 r3:def04000
      [   16.171495] [<8003d514>] (queue_work+0x0/0x34) from [<80493284>] (rpc_make_runnable+0x9c/0xac)
      [   16.180113] [<804931e8>] (rpc_make_runnable+0x0/0xac) from [<80493c88>] (rpc_execute+0x40/0xa8)
      [   16.188811]  r5:def05ad4 r4:dfb1a2c8
      [   16.192426] [<80493c48>] (rpc_execute+0x0/0xa8) from [<8048c734>] (rpc_run_task+0xa8/0xb4)
      [   16.200690]  r8:00000001 r7:df74f520 r6:ded75700 r5:def05ad4 r4:dfb1a2c8
      r3:00000002
      [   16.208618] [<8048c68c>] (rpc_run_task+0x0/0xb4) from [<801f1608>] (nfs_initiate_read+0xb4/0xd4)
      [   16.217403]  r5:df3e86c0 r4:00000000
      [   16.221015] [<801f1554>] (nfs_initiate_read+0x0/0xd4) from [<801f1c64>] (nfs_generic_pg_readpages+0x9c/0x114)
      [   16.230937] [<801f1bc8>] (nfs_generic_pg_readpages+0x0/0x114) from [<801f0744>] (__nfs_pageio_add_request+0xe8/0x214)
      [   16.241545]  r8:000bf000 r7:00000000 r6:00000000 r5:deef4640 r4:def05c1c
      r3:801f1bc8
      [   16.249463] [<801f065c>] (__nfs_pageio_add_request+0x0/0x214) from [<801f0e3c>] (nfs_pageio_add_request+0x28/0x54)
      [   16.259818] [<801f0e14>] (nfs_pageio_add_request+0x0/0x54) from [<801f1394>] (readpage_async_filler+0x114/0x170)
      [   16.269992]  r5:def05c58 r4:80fd7300
      [   16.273607] [<801f1280>] (readpage_async_filler+0x0/0x170) from [<800bb418>] (read_cache_pages+0xa0/0x108)
      [   16.283259]  r8:00200200 r7:00100100 r6:df74f654 r5:def05cd0 r4:80fd7300
      [   16.290034] [<800bb378>] (read_cache_pages+0x0/0x108) from [<801f218c>] (nfs_readpages+0xc4/0x168)
      [   16.298999] [<801f20c8>] (nfs_readpages+0x0/0x168) from [<800bb1d0>] (__do_page_cache_readahead+0x254/0x354)
      [   16.308833] [<800baf7c>] (__do_page_cache_readahead+0x0/0x354) from [<800bb5d0>] (ra_submit+0x38/0x40)
      [   16.318145] [<800bb598>] (ra_submit+0x0/0x40) from [<800bb6b0>] (ondemand_readahead+0xd8/0x3b0)
      [   16.326851] [<800bb5d8>] (ondemand_readahead+0x0/0x3b0) from [<800bba20>] (page_cache_async_readahead+0x98/0xa8)
      [   16.337043] [<800bb988>] (page_cache_async_readahead+0x0/0xa8) from [<800b2118>] (generic_file_aio_read+0x5b4/0x7c4)
      [   16.347565]  r6:00000000 r5:df74f654 r4:80fd70a0
      [   16.352231] [<800b1b64>] (generic_file_aio_read+0x0/0x7c4) from [<801e82c0>] (nfs_file_read+0x7c/0xcc)
      [   16.361544] [<801e8244>] (nfs_file_read+0x0/0xcc) from [<800eab80>] (do_sync_read+0xb4/0xf4)
      [   16.369981]  r9:00000000 r8:def05f70 r7:00000000 r6:00000000 r5:dec34900
      r4:fffffdee
      [   16.377896] [<800eaacc>] (do_sync_read+0x0/0xf4) from [<800eb548>] (vfs_read+0xb4/0x144)
      [   16.385987]  r8:00000000 r7:def05f70 r6:76a95008 r5:003e3dd6 r4:dec34900
      [   16.392761] [<800eb494>] (vfs_read+0x0/0x144) from [<800eb624>] (sys_read+0x4c/0x78)
      [   16.400504]  r8:00000000 r7:00000003 r6:003e3dd6 r5:76a95008 r4:dec34900
      [   16.407279] [<800eb5d8>] (sys_read+0x0/0x78) from [<8000e5c0>] (ret_fast_syscall+0x0/0x48)
      [   16.415543]  r9:def04000 r8:8000e864 r6:000086b4 r5:00000000 r4:00000000
      [   20.872729]  gadget: high-speed config #1: Video
      [   20.877368]  gadget: uvc_function_set_alt(0, 0)
      [   20.881908]  gadget: uvc_function_set_alt(1, 0)
      [   20.891464]  gadget: uvc_function_set_alt(1, 0)
      Signed-off-by: default avatarMichael Grzeschik <m.grzeschik@pengutronix.de>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4fefe9f6
    • Neil Zhang's avatar
      usb: gadget: mv_udc: fix boot up hang · 11c37c8b
      Neil Zhang authored
      Fix boot up hang when enable udc without otg enabled.
      The root cause is that the clock will be shut down when probe routine is
      finished because of clock gating. When a gadget driver is registered at
      this time, it will call mv_udc_start which in turn will call
      mv_udc_vbus_session. If there is no cable attached at the boot up time,
      the vbus is low, so it will call stop_activity path without clock
      enabled which will cause system hang then.
      Actually, we need't go this path when clock is disabled, what we need to
      do is just jump out.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      11c37c8b
    • Yunfan Zhang's avatar
      usb: gadget: mv_udc: fix hang when shutdown · 1dcaa252
      Yunfan Zhang authored
      Fix system hang in udc shutdown routine which caused by accessing usb
      register when clock is disabled. So enable usb clock before access
      register.
      Signed-off-by: default avatarYunfan Zhang <yfzhang@marvell.com>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      1dcaa252
    • Chao Xie's avatar
      usb: gadget: mv_udc: add iso support · 60326ce3
      Chao Xie authored
      In order to support iso, we need do the following things:
      1. fix length for one dtd
      2. allow req contains multiple packets for a ISO transfer
      Signed-off-by: default avatarChao Xie <chao.xie@marvell.com>
      Signed-off-by: default avatarYu Xu <yuxu@marvell.com>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      60326ce3
    • Neil Zhang's avatar
      usb: gadget: mv_udc: enable stream mode · 583a7263
      Neil Zhang authored
      According to ChipIdea's reference manual in section 8.5.2
      "Non-streaming operational mode in device mode", we'd better enable stream
      mode, especially that ISO endpoints are not supported when the SDIS bit
      is set.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      583a7263
    • Neil Zhang's avatar
      usb: gadget: mv_udc: avoid sleeping on spinlock · 0344606b
      Neil Zhang authored
      build_dtd() can be called when hold a spinlock, but GFP_KERNEL may cause
      dma_pool_alloc() sleep, So we need use GFP_ATOMIC instead of GFP_KERNEL.
      But using GFP_ATOMIC may cause failure when allocating memory, add error
      handler to handle it.
      Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      0344606b
    • Neil Zhang's avatar
      usb: gadget: mv_udc: remove unused code · a07bc24e
      Neil Zhang authored
      Clean unused code for mv_udc driver.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      a07bc24e
    • Neil Zhang's avatar
      usb: gadget: mv_udc: reduce the delay interval · 9b2035a0
      Neil Zhang authored
      There are several places use udelay(LOOPS_USEC) to wait the status to be
      changed, but the delay interval is a bit too long, so reduce it to
      enhance the performance.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      9b2035a0
  3. 16 Aug, 2012 11 commits
  4. 15 Aug, 2012 3 commits
    • Dave Airlie's avatar
      Merge branch 'drm-nouveau-fixes' of git://git.freedesktop.org/git/nouveau/linux-2.6 into drm-fixes · 2e26c73a
      Dave Airlie authored
      * 'drm-nouveau-fixes' of git://git.freedesktop.org/git/nouveau/linux-2.6:
        drm/nv86/fifo: suspend fix
        drm/nouveau: disable copy engine on NVAF
        nouveau: fixup scanout enable in nvc0_pm
        drm/nouveau/aux: mask off higher bits of auxch index in i2c table entry
        drm/nvd0/disp: mask off high 16 bit of negative cursor x-coordinate
        drm/nve0/fifo: add support for the flip completion swmthd
      2e26c73a
    • Dave Airlie's avatar
      Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-fixes · a389b6a1
      Dave Airlie authored
      Daniel Vetter writes:
      
      "A few important fixers:
      - fix various lvds backlight issues, regressed in 3.6 (Takashi Iwai)
      - make the retina mbp work (ignore bogus edp bpc value in vbt)
      - fix a gmbus regression introduced in (iirc) 3.4 (Jani Nikula)
      - fix an edp panel power sequence regression, fixes the new macbook air
      - apply the tlb invalidate w/a
      
      Otherwise we still have another gmbus regression (patches are awaiting
      tested-bys) and there's something odd going with some rare systems not
      entering rc6 often enough (and hence blowing through too much power).  It
      seems to be a timing-related issue and can be mitigated by frobbing the
      magic tuning parameters. We're still working on that one. Also, we still
      have some fallout from the hw context support, but you can only hit that
      with mesa master."
      
      * 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel:
        drm/i915: Apply post-sync write for pipe control invalidates
        drm/i915: reorder edp disabling to fix ivb MacBook Air
        drm/i915: ensure i2c adapter is all set before adding it
        drm/i915: ignore eDP bpc settings from vbt
        drm/i915: Fix blank panel at reopening lid
      a389b6a1
    • David S. Miller's avatar
      sparc64: Be less verbose during vmemmap population. · 2856cc2e
      David S. Miller authored
      On a 2-node machine with 256GB of ram we get 512 lines of
      console output, which is just too much.
      
      This mimicks Yinghai Lu's x86 commit c2b91e2e
      (x86_64/mm: check and print vmemmap allocation continuous) except that
      we aren't ever going to get contiguous block pointers in between calls
      so just print when the virtual address or node changes.
      
      This decreases the output by an order of 16.
      
      Also demote this to KERN_DEBUG.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2856cc2e
  5. 14 Aug, 2012 2 commits
    • Chris Wilson's avatar
      drm/i915: Apply post-sync write for pipe control invalidates · 7d54a904
      Chris Wilson authored
      When invalidating the TLBs it is documentated as requiring a post-sync
      write. Failure to do so seems to result in a GPU hang.
      
      Exposure to this hang on IVB seems to be a result of removing the extra
      stalls required for SNB pipecontrol workarounds:
      
      commit 6c6cf5aa
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Fri Jul 20 18:02:28 2012 +0100
      
          drm/i915: Only apply the SNB pipe control w/a to gen6
      
      Note: Manually switch the pipe_control cmd to 4 dwords to avoid a
      (silent) functional conflict with -next. This way will get a loud (but
      conflict with next (since the scratch_addr has been deleted there).
      
      Reported-and-tested-by: yex.tian@intel.com
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53322Acked-by: default avatarBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      [danvet: added note about merge conflict with -next.]
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      7d54a904
    • Daniel Vetter's avatar
      drm/i915: reorder edp disabling to fix ivb MacBook Air · 35a38556
      Daniel Vetter authored
      eDP is tons of fun. It turns out that at least the new MacBook Air 5,1
      model absolutely doesn't like the new force vdd dance we've introduced
      in
      
      commit 6cb49835
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Sun May 20 17:14:50 2012 +0200
      
          drm/i915: enable vdd when switching off the eDP panel
      
      But that patch also tried to fix some neat edp sequence issue with the
      force_vdd timings. Closer inspection reveals that we've raised
      force_vdd only to do the aux channel communication dp_sink_dpms. If we
      move the edp_panel_off below that, we don't need any force_vdd for the
      disable sequence, which makes the Air happy.
      
      Unfortunately the reporter of the original bug that the above commit
      fixed is travelling, so we can't test whether this regresses things.
      But my theory is that since we don't check for any power-off ->
      force_vdd-on delays in edp_panel_vdd_on, this was the actual
      root-cause of this failure. With that force_vdd dance completely
      eliminated, I'm hopeful the original bug stays fixed, too.
      
      For reference the old bug, which hopefully doesn't get broken by this:
      
      https://bugzilla.kernel.org/show_bug.cgi?id=43163
      
      In any case, regression fixers win over plain bugfixes, so this needs
      to go in asap.
      
      v2: The crucial pieces seems to be to clear the force_vdd flag
      uncoditionally, too, in edp_panel_off. Looks like this is left behind
      by the firmware somehow.
      
      v3: The Apple firmware seems to switch off the panel on it's own, hence
      we still need to keep force_vdd on, but properly clear it when switching
      the panel off.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=45671Tested-by: default avatarRoberto Romer <sildurin@gmail.com>
      Tested-by: default avatarDaniel Wagner <wagi@monom.org>
      Tested-by: default avatarKeith Packard <keithp@keithp.com>
      Cc: stable@vger.kernel.org
      Cc: Keith Packard <keithp@keithp.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      35a38556