BackMerge tag 'v6.5-rc7' into drm-next
authorDave Airlie <airlied@redhat.com>
Wed, 23 Aug 2023 21:26:06 +0000 (07:26 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 23 Aug 2023 21:26:06 +0000 (07:26 +1000)
Linux 6.5-rc7

This is needed for the CI stuff and the msm pull has fixes in it.

Signed-off-by: Dave Airlie <airlied@redhat.com>
35 files changed:
1  2 
MAINTAINERS
drivers/accel/ivpu/ivpu_gem.c
drivers/accel/qaic/qaic_data.c
drivers/gpu/drm/bridge/ite-it6505.c
drivers/gpu/drm/drm_edid.c
drivers/gpu/drm/drm_gem_shmem_helper.c
drivers/gpu/drm/msm/msm_mdss.c
drivers/gpu/drm/nouveau/dispnv50/disp.c
drivers/gpu/drm/nouveau/nouveau_connector.c
drivers/gpu/drm/panel/panel-samsung-s6d7aa0.c
drivers/gpu/drm/panel/panel-simple.c
drivers/gpu/drm/rockchip/rockchip_drm_vop.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/video/fbdev/amifb.c
drivers/video/fbdev/atmel_lcdfb.c
drivers/video/fbdev/bw2.c
drivers/video/fbdev/cg14.c
drivers/video/fbdev/cg3.c
drivers/video/fbdev/cg6.c
drivers/video/fbdev/core/fbcon.c
drivers/video/fbdev/ep93xx-fb.c
drivers/video/fbdev/ffb.c
drivers/video/fbdev/goldfishfb.c
drivers/video/fbdev/grvga.c
drivers/video/fbdev/imxfb.c
drivers/video/fbdev/leo.c
drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
drivers/video/fbdev/p9100.c
drivers/video/fbdev/platinumfb.c
drivers/video/fbdev/ssd1307fb.c
drivers/video/fbdev/sunxvr1000.c
drivers/video/fbdev/sunxvr2500.c
drivers/video/fbdev/sunxvr500.c
drivers/video/fbdev/tcx.c
drivers/video/fbdev/xilinxfb.c

diff --combined MAINTAINERS
index cd882b87a3c607b522c54742f9e1b6bcccdc21e6,d590ce31aa7266755a754a82230b99e14867e49e..231a5e6fd52eab0c16e9525a433295240e8e3a51
@@@ -1865,9 -1865,11 +1865,11 @@@ M:    Martin PoviĊĦer <povik+lin@cutebit.o
  L:    asahi@lists.linux.dev
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
+ F:    Documentation/devicetree/bindings/sound/adi,ssm3515.yaml
  F:    Documentation/devicetree/bindings/sound/apple,*
  F:    sound/soc/apple/*
  F:    sound/soc/codecs/cs42l83-i2c.c
+ F:    sound/soc/codecs/ssm3515.c
  
  ARM/APPLE MACHINE SUPPORT
  M:    Hector Martin <marcan@marcan.st>
@@@ -2337,7 -2339,7 +2339,7 @@@ F:      drivers/phy/mediatek
  ARM/MICROCHIP (ARM64) SoC support
  M:    Conor Dooley <conor@kernel.org>
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  T:    git https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git
@@@ -2346,7 -2348,7 +2348,7 @@@ F:      arch/arm64/boot/dts/microchip
  ARM/Microchip (AT91) SoC support
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
  M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  W:    http://www.linux4sam.org
@@@ -3248,7 -3250,7 +3250,7 @@@ F:      include/uapi/linux/atm
  
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
  F:    drivers/net/ethernet/cadence/
  
@@@ -3260,9 -3262,8 +3262,8 @@@ F:      Documentation/devicetree/bindings/in
  F:    drivers/input/touchscreen/atmel_mxt_ts.c
  
  ATMEL WIRELESS DRIVER
- M:    Simon Kelley <simon@thekelleys.org.uk>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Orphan
  W:    http://www.thekelleys.org.uk/atmel
  W:    http://atmelwlandriver.sourceforge.net/
  F:    drivers/net/wireless/atmel/atmel*
@@@ -3392,7 -3393,7 +3393,7 @@@ F:      drivers/media/radio/radio-aztech
  B43 WIRELESS DRIVER
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
- S:    Odd Fixes
+ S:    Orphan
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/b43
  F:    drivers/net/wireless/broadcom/b43/
  
@@@ -4461,7 -4462,6 +4462,6 @@@ CADENCE USB3 DRD IP DRIVE
  M:    Peter Chen <peter.chen@kernel.org>
  M:    Pawel Laszczak <pawell@cadence.com>
  R:    Roger Quadros <rogerq@kernel.org>
- R:    Aswath Govindraju <a-govindraju@ti.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
@@@ -5147,10 -5147,12 +5147,12 @@@ S:   Maintaine
  F:    include/linux/compiler_attributes.h
  
  COMPUTE EXPRESS LINK (CXL)
+ M:    Davidlohr Bueso <dave@stgolabs.net>
+ M:    Jonathan Cameron <jonathan.cameron@huawei.com>
+ M:    Dave Jiang <dave.jiang@intel.com>
  M:    Alison Schofield <alison.schofield@intel.com>
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Ira Weiny <ira.weiny@intel.com>
- M:    Ben Widawsky <bwidawsk@kernel.org>
  M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-cxl@vger.kernel.org
  S:    Maintained
@@@ -5459,8 -5461,7 +5461,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/can/ctucanfd/
  
  CW1200 WLAN driver
- M:    Solomon Peachy <pizza@shaftnet.org>
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/st/cw1200/
  
  CX18 VIDEO4LINUX DRIVER
@@@ -6150,9 -6151,10 +6151,9 @@@ F:     kernel/dma
  DMA-BUF HEAPS FRAMEWORK
  M:    Sumit Semwal <sumit.semwal@linaro.org>
  R:    Benjamin Gaignard <benjamin.gaignard@collabora.com>
 -R:    Liam Mark <lmark@codeaurora.org>
 -R:    Laura Abbott <labbott@redhat.com>
  R:    Brian Starkey <Brian.Starkey@arm.com>
  R:    John Stultz <jstultz@google.com>
 +R:    T.J. Mercier <tjmercier@google.com>
  L:    linux-media@vger.kernel.org
  L:    dri-devel@lists.freedesktop.org
  L:    linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
@@@ -6394,7 -6396,6 +6395,7 @@@ F:      drivers/gpu/drm/aspeed
  DRM DRIVER FOR AST SERVER GRAPHICS CHIPS
  M:    Dave Airlie <airlied@redhat.com>
  R:    Thomas Zimmermann <tzimmermann@suse.de>
 +R:    Jocelyn Falempe <jfalempe@redhat.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6546,7 -6547,6 +6547,7 @@@ F:      drivers/gpu/drm/panel/panel-mantix-m
  DRM DRIVER FOR MGA G200 GRAPHICS CHIPS
  M:    Dave Airlie <airlied@redhat.com>
  R:    Thomas Zimmermann <tzimmermann@suse.de>
 +R:    Jocelyn Falempe <jfalempe@redhat.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6946,13 -6946,6 +6947,13 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    drivers/gpu/drm/lima/
  F:    include/uapi/drm/lima_drm.h
  
 +DRM DRIVERS FOR LOONGSON
 +M:    Sui Jingfeng <suijingfeng@loongson.cn>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Supported
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    drivers/gpu/drm/loongson/
 +
  DRM DRIVERS FOR MEDIATEK
  M:    Chun-Kuang Hu <chunkuang.hu@kernel.org>
  M:    Philipp Zabel <p.zabel@pengutronix.de>
@@@ -7022,7 -7015,7 +7023,7 @@@ F:      drivers/gpu/drm/st
  
  DRM DRIVERS FOR TI KEYSTONE
  M:    Jyri Sarha <jyri.sarha@iki.fi>
 -M:    Tomi Valkeinen <tomba@kernel.org>
 +M:    Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -7033,18 -7026,16 +7034,18 @@@ F:   drivers/gpu/drm/tidss
  
  DRM DRIVERS FOR TI LCDC
  M:    Jyri Sarha <jyri.sarha@iki.fi>
 -R:    Tomi Valkeinen <tomba@kernel.org>
 +M:    Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    Documentation/devicetree/bindings/display/tilcdc/
  F:    drivers/gpu/drm/tilcdc/
  
  DRM DRIVERS FOR TI OMAP
 -M:    Tomi Valkeinen <tomba@kernel.org>
 +M:    Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    Documentation/devicetree/bindings/display/ti/
  F:    drivers/gpu/drm/omapdrm/
  
@@@ -8821,6 -8812,7 +8822,7 @@@ R:      Michael Walle <michael@walle.cc
  S:    Maintained
  F:    drivers/gpio/gpio-regmap.c
  F:    include/linux/gpio/regmap.h
+ K:    (devm_)?gpio_regmap_(un)?register
  
  GPIO SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
@@@ -9384,7 -9376,6 +9386,6 @@@ F:      drivers/crypto/hisilicon/sgl.
  F:    include/linux/hisi_acc_qm.h
  
  HISILICON ROCE DRIVER
- M:    Haoyue Xu <xuhaoyue1@hisilicon.com>
  M:    Junxian Huang <huangjunxian6@hisilicon.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
@@@ -9669,6 -9660,7 +9670,7 @@@ F:      tools/hv
  
  HYPERBUS SUPPORT
  M:    Vignesh Raghavendra <vigneshr@ti.com>
+ R:    Tudor Ambarus <tudor.ambarus@linaro.org>
  L:    linux-mtd@lists.infradead.org
  S:    Supported
  Q:    http://patchwork.ozlabs.org/project/linux-mtd/list/
@@@ -12488,6 -12480,7 +12490,7 @@@ F:   net/mctp
  
  MAPLE TREE
  M:    Liam R. Howlett <Liam.Howlett@oracle.com>
+ L:    maple-tree@lists.infradead.org
  L:    linux-mm@kvack.org
  S:    Supported
  F:    Documentation/core-api/maple_tree.rst
@@@ -12599,18 -12592,14 +12602,14 @@@ F:        Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/marvell/mvpp2/
  
  MARVELL MWIFIEX WIRELESS DRIVER
- M:    Amitkumar Karwar <amitkarwar@gmail.com>
- M:    Ganapathi Bhat <ganapathi017@gmail.com>
- M:    Sharvari Harisangam <sharvari.harisangam@nxp.com>
- M:    Xinming Hu <huxinming820@gmail.com>
+ M:    Brian Norris <briannorris@chromium.org>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Odd Fixes
  F:    drivers/net/wireless/marvell/mwifiex/
  
  MARVELL MWL8K WIRELESS DRIVER
- M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    linux-wireless@vger.kernel.org
- S:    Odd Fixes
+ S:    Orphan
  F:    drivers/net/wireless/marvell/mwl8k.c
  
  MARVELL NAND CONTROLLER DRIVER
@@@ -13798,7 -13787,7 +13797,7 @@@ F:   Documentation/devicetree/bindings/se
  F:    drivers/spi/spi-at91-usart.c
  
  MICROCHIP AUDIO ASOC DRIVERS
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/sound/atmel*
@@@ -13821,7 -13810,7 +13820,7 @@@ S:   Maintaine
  F:    drivers/crypto/atmel-ecc.*
  
  MICROCHIP EIC DRIVER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/interrupt-controller/microchip,sama7g5-eic.yaml
@@@ -13894,7 -13883,7 +13893,7 @@@ F:   drivers/video/fbdev/atmel_lcdfb.
  F:    include/video/atmel_lcdc.h
  
  MICROCHIP MCP16502 PMIC DRIVER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/regulator/mcp16502-regulator.txt
@@@ -13921,7 -13910,7 +13920,7 @@@ F:   Documentation/devicetree/bindings/mt
  F:    drivers/mtd/nand/raw/atmel/*
  
  MICROCHIP OTPC DRIVER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml
@@@ -13960,7 -13949,7 +13959,7 @@@ F:   Documentation/devicetree/bindings/fp
  F:    drivers/fpga/microchip-spi.c
  
  MICROCHIP PWM DRIVER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-pwm@vger.kernel.org
  S:    Supported
@@@ -13976,7 -13965,7 +13975,7 @@@ F:   drivers/iio/adc/at91-sama5d2_adc.
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
  MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
  F:    Documentation/devicetree/bindings/power/reset/atmel,sama5d2-shdwc.yaml
  F:    drivers/power/reset/at91-sama5d2_shdwc.c
@@@ -13993,7 -13982,7 +13992,7 @@@ S:   Supporte
  F:    drivers/spi/spi-atmel.*
  
  MICROCHIP SSC DRIVER
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/misc/atmel-ssc.txt
@@@ -14022,7 -14011,7 +14021,7 @@@ F:   drivers/usb/gadget/udc/atmel_usba_ud
  
  MICROCHIP WILC1000 WIFI DRIVER
  M:    Ajay Singh <ajay.kathat@microchip.com>
- M:    Claudiu Beznea <claudiu.beznea@microchip.com>
+ M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/net/wireless/microchip/wilc1000/
@@@ -16305,6 -16294,7 +16304,7 @@@ F:   drivers/pci/controller/dwc/pci-exyno
  PCI DRIVER FOR SYNOPSYS DESIGNWARE
  M:    Jingoo Han <jingoohan1@gmail.com>
  M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
+ M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-pci@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/pci/snps,dw-pcie-ep.yaml
@@@ -17456,6 -17446,7 +17456,7 @@@ F:   drivers/media/tuners/qt1010
  
  QUALCOMM ATH12K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
+ M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath12k@lists.infradead.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -17463,6 -17454,7 +17464,7 @@@ F:   drivers/net/wireless/ath/ath12k
  
  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
+ M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath10k@lists.infradead.org
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
@@@ -17472,6 -17464,7 +17474,7 @@@ F:   drivers/net/wireless/ath/ath10k
  
  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
+ M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath11k@lists.infradead.org
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath11k
@@@ -17992,7 -17985,7 +17995,7 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/realtek/rtlwifi/
  
  REALTEK WIRELESS DRIVER (rtw88)
- M:    Yan-Hsuan Chuang <tony0620emma@gmail.com>
+ M:    Ping-Ke Shih <pkshih@realtek.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  F:    drivers/net/wireless/realtek/rtw88/
@@@ -18517,17 -18510,14 +18520,14 @@@ RTL8180 WIRELESS DRIVE
  L:    linux-wireless@vger.kernel.org
  S:    Orphan
  W:    https://wireless.wiki.kernel.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
- M:    Herton Ronaldo Krzesinski <herton@canonical.com>
- M:    Hin-Tak Leung <htl10@users.sourceforge.net>
+ M:    Hin-Tak Leung <hintak.leung@gmail.com>
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  W:    https://wireless.wiki.kernel.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8187/
  
  RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
@@@ -19234,13 -19224,6 +19234,6 @@@ F:  Documentation/devicetree/bindings/se
  F:    drivers/tty/serdev/
  F:    include/linux/serdev.h
  
- SERIAL DRIVERS
- M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- L:    linux-serial@vger.kernel.org
- S:    Maintained
- F:    Documentation/devicetree/bindings/serial/
- F:    drivers/tty/serial/
  SERIAL IR RECEIVER
  M:    Sean Young <sean@mess.org>
  L:    linux-media@vger.kernel.org
@@@ -20411,7 -20394,6 +20404,6 @@@ F:   drivers/pwm/pwm-stm32
  F:    include/linux/*/stm32-*tim*
  
  STMMAC ETHERNET DRIVER
- M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  M:    Jose Abreu <joabreu@synopsys.com>
  L:    netdev@vger.kernel.org
@@@ -21646,14 -21628,16 +21638,16 @@@ W:        https://github.com/srcres258/linux-d
  T:    git git://github.com/srcres258/linux-doc.git doc-zh-tw
  F:    Documentation/translations/zh_TW/
  
- TTY LAYER
+ TTY LAYER AND SERIAL DRIVERS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  M:    Jiri Slaby <jirislaby@kernel.org>
+ L:    linux-kernel@vger.kernel.org
+ L:    linux-serial@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
+ F:    Documentation/devicetree/bindings/serial/
  F:    Documentation/driver-api/serial/
  F:    drivers/tty/
- F:    drivers/tty/serial/serial_core.c
  F:    include/linux/selection.h
  F:    include/linux/serial.h
  F:    include/linux/serial_core.h
@@@ -21682,11 -21666,14 +21676,14 @@@ S:        Orpha
  F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
- M:    Maxim Krasnyansky <maxk@qti.qualcomm.com>
+ M:    Willem de Bruijn <willemdebruijn.kernel@gmail.com>
+ M:    Jason Wang <jasowang@redhat.com>
  S:    Maintained
  W:    http://vtun.sourceforge.net/tun
  F:    Documentation/networking/tuntap.rst
  F:    arch/um/os-Linux/drivers/
+ F:    drivers/net/tap.c
+ F:    drivers/net/tun.c
  
  TURBOCHANNEL SUBSYSTEM
  M:    "Maciej W. Rozycki" <macro@orcam.me.uk>
@@@ -21909,9 -21896,8 +21906,8 @@@ S:   Maintaine
  F:    drivers/usb/misc/apple-mfi-fastcharge.c
  
  USB AR5523 WIRELESS DRIVER
- M:    Pontus Fuchs <pontus.fuchs@gmail.com>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/ath/ar5523/
  
  USB ATTACHED SCSI
@@@ -22188,9 -22174,8 +22184,8 @@@ F:   drivers/usb/gadget/legacy/webcam.
  F:    include/uapi/linux/usb/g_uvc.h
  
  USB WIRELESS RNDIS DRIVER (rndis_wlan)
- M:    Jussi Kivilinna <jussi.kivilinna@iki.fi>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/legacy/rndis_wlan.c
  
  USB XHCI DRIVER
@@@ -22479,7 -22464,6 +22474,6 @@@ L:   virtualization@lists.linux-foundatio
  S:    Maintained
  F:    drivers/block/virtio_blk.c
  F:    drivers/scsi/virtio_scsi.c
- F:    drivers/vhost/scsi.c
  F:    include/uapi/linux/virtio_blk.h
  F:    include/uapi/linux/virtio_scsi.h
  
@@@ -22578,6 -22562,16 +22572,16 @@@ F: include/linux/vhost_iotlb.
  F:    include/uapi/linux/vhost.h
  F:    kernel/vhost_task.c
  
+ VIRTIO HOST (VHOST-SCSI)
+ M:    "Michael S. Tsirkin" <mst@redhat.com>
+ M:    Jason Wang <jasowang@redhat.com>
+ M:    Mike Christie <michael.christie@oracle.com>
+ R:    Paolo Bonzini <pbonzini@redhat.com>
+ R:    Stefan Hajnoczi <stefanha@redhat.com>
+ L:    virtualization@lists.linux-foundation.org
+ S:    Maintained
+ F:    drivers/vhost/scsi.c
  VIRTIO I2C DRIVER
  M:    Conghui Chen <conghui.chen@intel.com>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
@@@ -22965,7 -22959,7 +22969,7 @@@ F:   drivers/input/misc/wistron_btns.
  
  WL3501 WIRELESS PCMCIA CARD DRIVER
  L:    linux-wireless@vger.kernel.org
- S:    Odd fixes
+ S:    Orphan
  F:    drivers/net/wireless/legacy/wl3501*
  
  WMI BINARY MOF DRIVER
@@@ -23536,11 -23530,8 +23540,8 @@@ S:  Maintaine
  F:    mm/zbud.c
  
  ZD1211RW WIRELESS DRIVER
- M:    Ulrich Kunitz <kune@deine-taler.de>
  L:    linux-wireless@vger.kernel.org
- L:    zd1211-devs@lists.sourceforge.net (subscribers-only)
- S:    Maintained
- W:    http://zd1211.ath.cx/wiki/DriverRewrite
+ S:    Orphan
  F:    drivers/net/wireless/zydas/zd1211rw/
  
  ZD1301 MEDIA DRIVER
index 2981bb32c75506d00065748a65a01f5757f85fe9,9967fcfa27eca1b5815532690e2b802ecdc478ab..d09f13b35902c7c8ec6fb4af2d444f925b6d9083
@@@ -173,6 -173,9 +173,9 @@@ static void internal_free_pages_locked(
  {
        unsigned int i, npages = bo->base.size >> PAGE_SHIFT;
  
+       if (ivpu_bo_cache_mode(bo) != DRM_IVPU_BO_CACHED)
+               set_pages_array_wb(bo->pages, bo->base.size >> PAGE_SHIFT);
        for (i = 0; i < npages; i++)
                put_page(bo->pages[i]);
  
@@@ -279,12 -282,10 +282,12 @@@ ivpu_bo_alloc_vpu_addr(struct ivpu_bo *
        int ret;
  
        if (!range) {
 -              if (bo->flags & DRM_IVPU_BO_HIGH_MEM)
 -                      range = &vdev->hw->ranges.user_high;
 +              if (bo->flags & DRM_IVPU_BO_SHAVE_MEM)
 +                      range = &vdev->hw->ranges.shave;
 +              else if (bo->flags & DRM_IVPU_BO_DMA_MEM)
 +                      range = &vdev->hw->ranges.dma;
                else
 -                      range = &vdev->hw->ranges.user_low;
 +                      range = &vdev->hw->ranges.user;
        }
  
        mutex_lock(&ctx->lock);
@@@ -572,7 -573,7 +575,7 @@@ ivpu_bo_alloc_internal(struct ivpu_devi
                fixed_range.end = vpu_addr + size;
                range = &fixed_range;
        } else {
 -              range = &vdev->hw->ranges.global_low;
 +              range = &vdev->hw->ranges.global;
        }
  
        bo = ivpu_bo_alloc(vdev, &vdev->gctx, size, flags, &internal_ops, range, 0);
        if (ivpu_bo_cache_mode(bo) != DRM_IVPU_BO_CACHED)
                drm_clflush_pages(bo->pages, bo->base.size >> PAGE_SHIFT);
  
+       if (bo->flags & DRM_IVPU_BO_WC)
+               set_pages_array_wc(bo->pages, bo->base.size >> PAGE_SHIFT);
+       else if (bo->flags & DRM_IVPU_BO_UNCACHED)
+               set_pages_array_uc(bo->pages, bo->base.size >> PAGE_SHIFT);
        prot = ivpu_bo_pgprot(bo, PAGE_KERNEL);
        bo->kvaddr = vmap(bo->pages, bo->base.size >> PAGE_SHIFT, VM_MAP, prot);
        if (!bo->kvaddr) {
index a90b64b325b4559f444bab8d5065f641a1f5f032,6b6d981a71be7a1e6ed5c08b97de1357ba5cbe01..f4b06792c6f1c0d88ca37ef392c8bef9d4b4ceb4
@@@ -1021,6 -1021,7 +1021,7 @@@ int qaic_attach_slice_bo_ioctl(struct d
        bo->dbc = dbc;
        srcu_read_unlock(&dbc->ch_lock, rcu_id);
        drm_gem_object_put(obj);
+       kfree(slice_ent);
        srcu_read_unlock(&qdev->dev_lock, qdev_rcu_id);
        srcu_read_unlock(&usr->qddev_lock, usr_rcu_id);
  
@@@ -1292,6 -1293,7 +1293,6 @@@ static void update_profiling_data(struc
  static int __qaic_execute_bo_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv,
                                   bool is_partial)
  {
 -      struct qaic_partial_execute_entry *pexec;
        struct qaic_execute *args = data;
        struct qaic_execute_entry *exec;
        struct dma_bridge_chan *dbc;
  
        received_ts = ktime_get_ns();
  
 -      size = is_partial ? sizeof(*pexec) : sizeof(*exec);
 +      size = is_partial ? sizeof(struct qaic_partial_execute_entry) : sizeof(*exec);
        n = (unsigned long)size * args->hdr.count;
        if (args->hdr.count == 0 || n / args->hdr.count != size)
                return -EINVAL;
        user_data = u64_to_user_ptr(args->data);
  
        exec = kcalloc(args->hdr.count, size, GFP_KERNEL);
 -      pexec = (struct qaic_partial_execute_entry *)exec;
        if (!exec)
                return -ENOMEM;
  
index 6c2fcd8b87809f236100fe7b76ee9d944759fdd5,aadb396508c5478e0675c0c69f62780296e00722..2f300f5ca051cc17426aa7d6ad63420d787007ca
@@@ -404,7 -404,7 +404,7 @@@ struct debugfs_entries 
  struct it6505 {
        struct drm_dp_aux aux;
        struct drm_bridge bridge;
 -      struct i2c_client *client;
 +      struct device *dev;
        struct it6505_drm_dp_link link;
        struct it6505_platform_data pdata;
        /*
@@@ -524,7 -524,7 +524,7 @@@ static int it6505_read(struct it6505 *i
  {
        unsigned int value;
        int err;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (!it6505->powered)
                return -ENODEV;
@@@ -542,7 -542,7 +542,7 @@@ static int it6505_write(struct it6505 *
                        unsigned int reg_val)
  {
        int err;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (!it6505->powered)
                return -ENODEV;
@@@ -562,7 -562,7 +562,7 @@@ static int it6505_set_bits(struct it650
                           unsigned int mask, unsigned int value)
  {
        int err;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (!it6505->powered)
                return -ENODEV;
  static void it6505_debug_print(struct it6505 *it6505, unsigned int reg,
                               const char *prefix)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int val;
  
        if (!drm_debug_enabled(DRM_UT_DRIVER))
@@@ -599,7 -599,7 +599,7 @@@ static int it6505_dpcd_read(struct it65
  {
        u8 value;
        int ret;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        ret = drm_dp_dpcd_readb(&it6505->aux, offset, &value);
        if (ret < 0) {
@@@ -613,7 -613,7 +613,7 @@@ static int it6505_dpcd_write(struct it6
                             u8 datain)
  {
        int ret;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        ret = drm_dp_dpcd_writeb(&it6505->aux, offset, datain);
        if (ret < 0) {
  static int it6505_get_dpcd(struct it6505 *it6505, int offset, u8 *dpcd, int num)
  {
        int ret;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        ret = drm_dp_dpcd_read(&it6505->aux, offset, dpcd, num);
  
@@@ -643,7 -643,7 +643,7 @@@ static void it6505_dump(struct it6505 *
  {
        unsigned int i, j;
        u8 regs[16];
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        for (i = 0; i <= 0xff; i += 16) {
                for (j = 0; j < 16; j++)
@@@ -682,7 -682,7 +682,7 @@@ static int it6505_read_word(struct it65
  
  static void it6505_calc_video_info(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int hsync_pol, vsync_pol, interlaced;
        int htotal, hdes, hdew, hfph, hsyncw;
        int vtotal, vdes, vdew, vfph, vsyncw;
@@@ -926,7 -926,7 +926,7 @@@ static int it6505_aux_wait(struct it650
  {
        int status;
        unsigned long timeout;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        timeout = jiffies + msecs_to_jiffies(AUX_WAIT_TIMEOUT_MS) + 1;
  
@@@ -1141,7 -1141,7 +1141,7 @@@ static int it6505_get_edid_block(void *
                                 size_t len)
  {
        struct it6505 *it6505 = data;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        enum aux_cmd_reply reply;
        int offset, ret, aux_retry = 100;
  
@@@ -1201,7 -1201,7 +1201,7 @@@ static int it6505_send_video_infoframe(
  {
        u8 buffer[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE];
        int err;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        err = hdmi_avi_infoframe_pack(frame, buffer, sizeof(buffer));
        if (err < 0) {
@@@ -1231,7 -1231,7 +1231,7 @@@ static void it6505_get_extcon_property(
  {
        int err;
        union extcon_property_value property;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (it6505->extcon && !it6505->lane_swap_disabled) {
                err = extcon_get_property(it6505->extcon, EXTCON_DISP_DP,
@@@ -1382,7 -1382,7 +1382,7 @@@ static void it6505_enable_audio_source(
  
  static void it6505_enable_audio_infoframe(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        u8 audio_info_ca[] = { 0x00, 0x00, 0x01, 0x03, 0x07, 0x0B, 0x0F, 0x1F };
  
        DRM_DEV_DEBUG_DRIVER(dev, "infoframe channel_allocation:0x%02x",
@@@ -1411,7 -1411,7 +1411,7 @@@ static void it6505_disable_audio(struc
  
  static void it6505_enable_audio(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int regbe;
  
        DRM_DEV_DEBUG_DRIVER(dev, "start");
@@@ -1446,7 -1446,7 +1446,7 @@@ static bool it6505_use_step_train_check
  
  static void it6505_parse_link_capabilities(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        struct it6505_drm_dp_link *link = &it6505->link;
        int bcaps;
  
@@@ -1557,7 -1557,7 +1557,7 @@@ static void it6505_lane_count_setup(str
  
  static void it6505_link_training_setup(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (it6505->enable_enhanced_frame)
                it6505_set_bits(it6505, REG_DATA_MUTE_CTRL,
@@@ -1708,7 -1708,7 +1708,7 @@@ it6505_step_cr_train(struct it6505 *it6
                                        FORCE_CR_DONE);
                        return true;
                }
 -              DRM_DEV_DEBUG_DRIVER(&it6505->client->dev, "cr not done");
 +              DRM_DEV_DEBUG_DRIVER(it6505->dev, "cr not done");
  
                if (it6505_check_max_voltage_swing_reached(lane_level_config,
                                                           it6505->lane_count))
@@@ -1785,7 -1785,7 +1785,7 @@@ it6505_step_eq_train(struct it6505 *it6
                                        FORCE_EQ_DONE);
                        return true;
                }
 -              DRM_DEV_DEBUG_DRIVER(&it6505->client->dev, "eq not done");
 +              DRM_DEV_DEBUG_DRIVER(it6505->dev, "eq not done");
  
                for (i = 0; i < it6505->lane_count; i++) {
                        lane_voltage_pre_emphasis->voltage_swing[i] =
@@@ -1820,7 -1820,7 +1820,7 @@@ static bool it6505_link_start_step_trai
                .pre_emphasis = { 0 },
        };
  
 -      DRM_DEV_DEBUG_DRIVER(&it6505->client->dev, "start");
 +      DRM_DEV_DEBUG_DRIVER(it6505->dev, "start");
        err = it6505_drm_dp_link_configure(it6505);
  
        if (err < 0)
@@@ -1854,7 -1854,7 +1854,7 @@@ static void it6505_reset_hdcp(struct it
  
  static void it6505_start_hdcp(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "start");
        it6505_reset_hdcp(it6505);
@@@ -1882,7 -1882,7 +1882,7 @@@ static bool it6505_hdcp_is_ksv_valid(u
  
  static void it6505_hdcp_part1_auth(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        u8 hdcp_bcaps;
  
        it6505_set_bits(it6505, REG_RESET_CTRL, HDCP_RESET, 0x00);
@@@ -1923,7 -1923,7 +1923,7 @@@ static int it6505_sha1_digest(struct it
        struct shash_desc *desc;
        struct crypto_shash *tfm;
        int err;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        tfm = crypto_alloc_shash("sha1", 0, 0);
        if (IS_ERR(tfm)) {
  
  static int it6505_setup_sha1_input(struct it6505 *it6505, u8 *sha1_input)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        u8 binfo[2];
        int down_stream_count, i, err, msg_count = 0;
  
  
  static bool it6505_hdcp_part2_ksvlist_check(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        u8 av[5][4], bv[5][4];
        int i, err;
  
@@@ -2045,7 -2045,7 +2045,7 @@@ static void it6505_hdcp_wait_ksv_list(s
  {
        struct it6505 *it6505 = container_of(work, struct it6505,
                                             hdcp_wait_ksv_list);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        unsigned int timeout = 5000;
        u8 bstatus = 0;
        bool ksv_list_check;
@@@ -2087,7 -2087,7 +2087,7 @@@ static void it6505_hdcp_work(struct wor
  {
        struct it6505 *it6505 = container_of(work, struct it6505,
                                             hdcp_work.work);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int ret;
        u8 link_status[DP_LINK_STATUS_SIZE] = { 0 };
  
  
  static void it6505_show_hdcp_info(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int i;
        u8 *sha1 = it6505->sha1_input;
  
@@@ -2162,7 -2162,7 +2162,7 @@@ static void it6505_stop_link_train(stru
  
  static void it6505_link_train_ok(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        it6505->link_state = LINK_OK;
        /* disalbe mute enable avi info frame */
  
  static void it6505_link_step_train_process(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int ret, i, step_retry = 3;
  
        DRM_DEV_DEBUG_DRIVER(dev, "Start step train");
  static void it6505_link_training_work(struct work_struct *work)
  {
        struct it6505 *it6505 = container_of(work, struct it6505, link_works);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int ret;
  
        DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count: %d",
@@@ -2267,7 -2267,7 +2267,7 @@@ static void it6505_remove_edid(struct i
  
  static int it6505_process_hpd_irq(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int ret, dpcd_sink_count, dp_irq_vector, bstatus;
        u8 link_status[DP_LINK_STATUS_SIZE];
  
  
  static void it6505_irq_hpd(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int dp_sink_count;
  
        it6505->hpd_state = it6505_get_sink_hpd_status(it6505);
  
  static void it6505_irq_hpd_irq(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "hpd_irq interrupt");
  
  
  static void it6505_irq_scdt(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        bool data;
  
        data = it6505_get_video_status(it6505);
  
  static void it6505_irq_hdcp_done(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "hdcp done interrupt");
        it6505->hdcp_status = HDCP_AUTH_DONE;
  
  static void it6505_irq_hdcp_fail(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "hdcp fail interrupt");
        it6505->hdcp_status = HDCP_AUTH_IDLE;
  
  static void it6505_irq_aux_cmd_fail(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "AUX PC Request Fail Interrupt");
  }
  
  static void it6505_irq_hdcp_ksv_check(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "HDCP event Interrupt");
        schedule_work(&it6505->hdcp_wait_ksv_list);
  
  static void it6505_irq_audio_fifo_error(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "audio fifo error Interrupt");
  
  
  static void it6505_irq_link_train_fail(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "link training fail interrupt");
        schedule_work(&it6505->link_works);
  
  static void it6505_irq_video_fifo_error(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "video fifo overflow interrupt");
        it6505->auto_train_retry = AUTO_TRAIN_RETRY;
  
  static void it6505_irq_io_latch_fifo_overflow(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "IO latch fifo overflow interrupt");
        it6505->auto_train_retry = AUTO_TRAIN_RETRY;
@@@ -2498,7 -2498,7 +2498,7 @@@ static bool it6505_test_bit(unsigned in
  static irqreturn_t it6505_int_threaded_handler(int unused, void *data)
  {
        struct it6505 *it6505 = data;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        static const struct {
                int bit;
                void (*handler)(struct it6505 *it6505);
        };
        int int_status[3], i;
  
-       if (it6505->enable_drv_hold || pm_runtime_get_if_in_use(dev) <= 0)
+       if (it6505->enable_drv_hold || !it6505->powered)
                return IRQ_HANDLED;
  
+       pm_runtime_get_sync(dev);
        int_status[0] = it6505_read(it6505, INT_STATUS_01);
        int_status[1] = it6505_read(it6505, INT_STATUS_02);
        int_status[2] = it6505_read(it6505, INT_STATUS_03);
  
  static int it6505_poweron(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        struct it6505_platform_data *pdata = &it6505->pdata;
        int err;
  
  
  static int it6505_poweroff(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        struct it6505_platform_data *pdata = &it6505->pdata;
        int err;
  
  
  static enum drm_connector_status it6505_detect(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        enum drm_connector_status status = connector_status_disconnected;
        int dp_sink_count;
  
@@@ -2694,7 -2696,7 +2696,7 @@@ static int it6505_extcon_notifier(struc
  static void it6505_extcon_work(struct work_struct *work)
  {
        struct it6505 *it6505 = container_of(work, struct it6505, extcon_wq);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int state, ret;
  
        if (it6505->enable_drv_hold)
@@@ -2739,11 -2741,11 +2741,11 @@@ unlock
  static int it6505_use_notifier_module(struct it6505 *it6505)
  {
        int ret;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        it6505->event_nb.notifier_call = it6505_extcon_notifier;
        INIT_WORK(&it6505->extcon_wq, it6505_extcon_work);
 -      ret = devm_extcon_register_notifier(&it6505->client->dev,
 +      ret = devm_extcon_register_notifier(it6505->dev,
                                            it6505->extcon, EXTCON_DISP_DP,
                                            &it6505->event_nb);
        if (ret) {
  static void it6505_remove_notifier_module(struct it6505 *it6505)
  {
        if (it6505->extcon) {
 -              devm_extcon_unregister_notifier(&it6505->client->dev,
 +              devm_extcon_unregister_notifier(it6505->dev,
                                                it6505->extcon, EXTCON_DISP_DP,
                                                &it6505->event_nb);
  
@@@ -2772,7 -2774,7 +2774,7 @@@ static void __maybe_unused it6505_delay
        struct it6505 *it6505 = container_of(work, struct it6505,
                                             delayed_audio.work);
  
 -      DRM_DEV_DEBUG_DRIVER(&it6505->client->dev, "start");
 +      DRM_DEV_DEBUG_DRIVER(it6505->dev, "start");
  
        if (!it6505->powered)
                return;
@@@ -2785,7 -2787,7 +2787,7 @@@ static int __maybe_unused it6505_audio_
                                                       struct hdmi_codec_params
                                                       *params)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int i = 0;
  
        DRM_DEV_DEBUG_DRIVER(dev, "%s %d Hz, %d bit, %d channels\n", __func__,
@@@ -2869,7 -2871,7 +2871,7 @@@ static int it6505_bridge_attach(struct 
                                enum drm_bridge_attach_flags flags)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        int ret;
  
        if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) {
@@@ -2933,7 -2935,7 +2935,7 @@@ static void it6505_bridge_atomic_enable
                                        struct drm_bridge_state *old_state)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        struct drm_atomic_state *state = old_state->base.state;
        struct hdmi_avi_infoframe frame;
        struct drm_crtc_state *crtc_state;
@@@ -2989,7 -2991,7 +2991,7 @@@ static void it6505_bridge_atomic_disabl
                                         struct drm_bridge_state *old_state)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "start");
  
@@@ -3004,7 -3006,7 +3006,7 @@@ static void it6505_bridge_atomic_pre_en
                                            struct drm_bridge_state *old_state)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "start");
  
@@@ -3015,7 -3017,7 +3017,7 @@@ static void it6505_bridge_atomic_post_d
                                              struct drm_bridge_state *old_state)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        DRM_DEV_DEBUG_DRIVER(dev, "start");
  
@@@ -3034,7 -3036,7 +3036,7 @@@ static struct edid *it6505_bridge_get_e
                                           struct drm_connector *connector)
  {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        if (!it6505->cached_edid) {
                it6505->cached_edid = drm_do_get_edid(connector, it6505_get_edid_block,
@@@ -3086,7 -3088,7 +3088,7 @@@ static const struct dev_pm_ops it6505_b
  static int it6505_init_pdata(struct it6505 *it6505)
  {
        struct it6505_platform_data *pdata = &it6505->pdata;
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        /* 1.0V digital core power regulator  */
        pdata->pwr18 = devm_regulator_get(dev, "pwr18");
@@@ -3128,7 -3130,7 +3130,7 @@@ static int it6505_get_data_lanes_count(
  
  static void it6505_parse_dt(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
        struct device_node *np = dev->of_node, *ep = NULL;
        int len;
        u64 link_frequencies;
@@@ -3333,7 -3335,7 +3335,7 @@@ static void debugfs_create_files(struc
  
  static void debugfs_init(struct it6505 *it6505)
  {
 -      struct device *dev = &it6505->client->dev;
 +      struct device *dev = it6505->dev;
  
        it6505->debugfs = debugfs_create_dir(DEBUGFS_DIR_NAME, NULL);
  
@@@ -3375,7 -3377,7 +3377,7 @@@ static int it6505_i2c_probe(struct i2c_
  
        it6505->bridge.of_node = client->dev.of_node;
        it6505->connector_status = connector_status_disconnected;
 -      it6505->client = client;
 +      it6505->dev = &client->dev;
        i2c_set_clientdata(client, it6505);
  
        /* get extcon device from DTS */
index f95152fac4270fa65bde655d3de32df70521cff7,1f470968ed14b4cec87f59cab03109e6c4beb4ba..340da8257b51b4f5e639e084ff10e38b5c2a3a3a
@@@ -230,7 -230,6 +230,7 @@@ static const struct edid_quirk 
  
        /* OSVR HDK and HDK2 VR Headsets */
        EDID_QUIRK('S', 'V', 'R', 0x1019, EDID_QUIRK_NON_DESKTOP),
 +      EDID_QUIRK('A', 'U', 'O', 0x1111, EDID_QUIRK_NON_DESKTOP),
  };
  
  /*
@@@ -3457,6 -3456,10 +3457,10 @@@ static struct drm_display_mode *drm_mod
                            connector->base.id, connector->name);
                return NULL;
        }
+       if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) {
+               drm_dbg_kms(dev, "[CONNECTOR:%d:%s] Composite sync not supported\n",
+                           connector->base.id, connector->name);
+       }
  
        /* it is incorrect if hsync/vsync width is zero */
        if (!hsync_pulse_width || !vsync_pulse_width) {
        if (info->quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
                mode->flags |= DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC;
        } else {
-               switch (pt->misc & DRM_EDID_PT_SYNC_MASK) {
-               case DRM_EDID_PT_ANALOG_CSYNC:
-               case DRM_EDID_PT_BIPOLAR_ANALOG_CSYNC:
-                       drm_dbg_kms(dev, "[CONNECTOR:%d:%s] Analog composite sync!\n",
-                                   connector->base.id, connector->name);
-                       mode->flags |= DRM_MODE_FLAG_CSYNC | DRM_MODE_FLAG_NCSYNC;
-                       break;
-               case DRM_EDID_PT_DIGITAL_CSYNC:
-                       drm_dbg_kms(dev, "[CONNECTOR:%d:%s] Digital composite sync!\n",
-                                   connector->base.id, connector->name);
-                       mode->flags |= DRM_MODE_FLAG_CSYNC;
-                       mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
-                               DRM_MODE_FLAG_PCSYNC : DRM_MODE_FLAG_NCSYNC;
-                       break;
-               case DRM_EDID_PT_DIGITAL_SEPARATE_SYNC:
-                       mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
-                               DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC;
-                       mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
-                               DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
-                       break;
-               }
+               mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
+                       DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC;
+               mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
+                       DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
        }
  
  set_size:
@@@ -3963,7 -3949,7 +3950,7 @@@ static int drm_cvt_modes(struct drm_con
        struct drm_display_mode *newmode;
        struct drm_device *dev = connector->dev;
        const struct cvt_timing *cvt;
 -      const int rates[] = { 60, 85, 75, 60, 50 };
 +      static const int rates[] = { 60, 85, 75, 60, 50 };
        const u8 empty[3] = { 0, 0, 0 };
  
        for (i = 0; i < 4; i++) {
index a783d2245599eeadbb80d91785c4bcdfc1f75e9b,baaf0e0feb0632e617875395c9c492456f649088..e435f986cd135bffb87bc93cf643e563c927eba2
@@@ -88,6 -88,8 +88,6 @@@ __drm_gem_shmem_create(struct drm_devic
        if (ret)
                goto err_release;
  
 -      mutex_init(&shmem->pages_lock);
 -      mutex_init(&shmem->vmap_lock);
        INIT_LIST_HEAD(&shmem->madv_list);
  
        if (!private) {
@@@ -139,13 -141,11 +139,13 @@@ void drm_gem_shmem_free(struct drm_gem_
  {
        struct drm_gem_object *obj = &shmem->base;
  
 -      drm_WARN_ON(obj->dev, shmem->vmap_use_count);
 -
        if (obj->import_attach) {
                drm_prime_gem_destroy(obj, shmem->sgt);
        } else {
 +              dma_resv_lock(shmem->base.resv, NULL);
 +
 +              drm_WARN_ON(obj->dev, shmem->vmap_use_count);
 +
                if (shmem->sgt) {
                        dma_unmap_sgtable(obj->dev->dev, shmem->sgt,
                                          DMA_BIDIRECTIONAL, 0);
                }
                if (shmem->pages)
                        drm_gem_shmem_put_pages(shmem);
 -      }
  
 -      drm_WARN_ON(obj->dev, shmem->pages_use_count);
 +              drm_WARN_ON(obj->dev, shmem->pages_use_count);
 +
 +              dma_resv_unlock(shmem->base.resv);
 +      }
  
        drm_gem_object_release(obj);
 -      mutex_destroy(&shmem->pages_lock);
 -      mutex_destroy(&shmem->vmap_lock);
        kfree(shmem);
  }
  EXPORT_SYMBOL_GPL(drm_gem_shmem_free);
  
 -static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem)
 +static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem)
  {
        struct drm_gem_object *obj = &shmem->base;
        struct page **pages;
  
 +      dma_resv_assert_held(shmem->base.resv);
 +
        if (shmem->pages_use_count++ > 0)
                return 0;
  
  }
  
  /*
 - * drm_gem_shmem_get_pages - Allocate backing pages for a shmem GEM object
 + * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object
   * @shmem: shmem GEM object
   *
 - * This function makes sure that backing pages exists for the shmem GEM object
 - * and increases the use count.
 - *
 - * Returns:
 - * 0 on success or a negative error code on failure.
 + * This function decreases the use count and puts the backing pages when use drops to zero.
   */
 -int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem)
 +void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem)
  {
        struct drm_gem_object *obj = &shmem->base;
 -      int ret;
  
 -      drm_WARN_ON(obj->dev, obj->import_attach);
 -
 -      ret = mutex_lock_interruptible(&shmem->pages_lock);
 -      if (ret)
 -              return ret;
 -      ret = drm_gem_shmem_get_pages_locked(shmem);
 -      mutex_unlock(&shmem->pages_lock);
 -
 -      return ret;
 -}
 -EXPORT_SYMBOL(drm_gem_shmem_get_pages);
 -
 -static void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem)
 -{
 -      struct drm_gem_object *obj = &shmem->base;
 +      dma_resv_assert_held(shmem->base.resv);
  
        if (drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count))
                return;
                          shmem->pages_mark_accessed_on_put);
        shmem->pages = NULL;
  }
 +EXPORT_SYMBOL(drm_gem_shmem_put_pages);
  
 -/*
 - * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object
 - * @shmem: shmem GEM object
 - *
 - * This function decreases the use count and puts the backing pages when use drops to zero.
 - */
 -void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem)
 +static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem)
  {
 -      mutex_lock(&shmem->pages_lock);
 -      drm_gem_shmem_put_pages_locked(shmem);
 -      mutex_unlock(&shmem->pages_lock);
 +      int ret;
 +
 +      dma_resv_assert_held(shmem->base.resv);
 +
 +      ret = drm_gem_shmem_get_pages(shmem);
 +
 +      return ret;
 +}
 +
 +static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem)
 +{
 +      dma_resv_assert_held(shmem->base.resv);
 +
 +      drm_gem_shmem_put_pages(shmem);
  }
 -EXPORT_SYMBOL(drm_gem_shmem_put_pages);
  
  /**
   * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object
  int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem)
  {
        struct drm_gem_object *obj = &shmem->base;
 +      int ret;
  
        drm_WARN_ON(obj->dev, obj->import_attach);
  
 -      return drm_gem_shmem_get_pages(shmem);
 +      ret = dma_resv_lock_interruptible(shmem->base.resv, NULL);
 +      if (ret)
 +              return ret;
 +      ret = drm_gem_shmem_pin_locked(shmem);
 +      dma_resv_unlock(shmem->base.resv);
 +
 +      return ret;
  }
  EXPORT_SYMBOL(drm_gem_shmem_pin);
  
@@@ -286,29 -291,12 +286,29 @@@ void drm_gem_shmem_unpin(struct drm_gem
  
        drm_WARN_ON(obj->dev, obj->import_attach);
  
 -      drm_gem_shmem_put_pages(shmem);
 +      dma_resv_lock(shmem->base.resv, NULL);
 +      drm_gem_shmem_unpin_locked(shmem);
 +      dma_resv_unlock(shmem->base.resv);
  }
  EXPORT_SYMBOL(drm_gem_shmem_unpin);
  
 -static int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem,
 -                                   struct iosys_map *map)
 +/*
 + * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object
 + * @shmem: shmem GEM object
 + * @map: Returns the kernel virtual address of the SHMEM GEM object's backing
 + *       store.
 + *
 + * This function makes sure that a contiguous kernel virtual address mapping
 + * exists for the buffer backing the shmem GEM object. It hides the differences
 + * between dma-buf imported and natively allocated objects.
 + *
 + * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap().
 + *
 + * Returns:
 + * 0 on success or a negative error code on failure.
 + */
 +int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem,
 +                     struct iosys_map *map)
  {
        struct drm_gem_object *obj = &shmem->base;
        int ret = 0;
        } else {
                pgprot_t prot = PAGE_KERNEL;
  
 +              dma_resv_assert_held(shmem->base.resv);
 +
                if (shmem->vmap_use_count++ > 0) {
                        iosys_map_set_vaddr(map, shmem->vaddr);
                        return 0;
@@@ -360,30 -346,45 +360,30 @@@ err_zero_use
  
        return ret;
  }
 +EXPORT_SYMBOL(drm_gem_shmem_vmap);
  
  /*
 - * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object
 + * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object
   * @shmem: shmem GEM object
 - * @map: Returns the kernel virtual address of the SHMEM GEM object's backing
 - *       store.
 - *
 - * This function makes sure that a contiguous kernel virtual address mapping
 - * exists for the buffer backing the shmem GEM object. It hides the differences
 - * between dma-buf imported and natively allocated objects.
 + * @map: Kernel virtual address where the SHMEM GEM object was mapped
   *
 - * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap().
 + * This function cleans up a kernel virtual address mapping acquired by
 + * drm_gem_shmem_vmap(). The mapping is only removed when the use count drops to
 + * zero.
   *
 - * Returns:
 - * 0 on success or a negative error code on failure.
 + * This function hides the differences between dma-buf imported and natively
 + * allocated objects.
   */
 -int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem,
 -                     struct iosys_map *map)
 -{
 -      int ret;
 -
 -      ret = mutex_lock_interruptible(&shmem->vmap_lock);
 -      if (ret)
 -              return ret;
 -      ret = drm_gem_shmem_vmap_locked(shmem, map);
 -      mutex_unlock(&shmem->vmap_lock);
 -
 -      return ret;
 -}
 -EXPORT_SYMBOL(drm_gem_shmem_vmap);
 -
 -static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem,
 -                                      struct iosys_map *map)
 +void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem,
 +                        struct iosys_map *map)
  {
        struct drm_gem_object *obj = &shmem->base;
  
        if (obj->import_attach) {
                dma_buf_vunmap(obj->import_attach->dmabuf, map);
        } else {
 +              dma_resv_assert_held(shmem->base.resv);
 +
                if (drm_WARN_ON_ONCE(obj->dev, !shmem->vmap_use_count))
                        return;
  
  
        shmem->vaddr = NULL;
  }
 -
 -/*
 - * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object
 - * @shmem: shmem GEM object
 - * @map: Kernel virtual address where the SHMEM GEM object was mapped
 - *
 - * This function cleans up a kernel virtual address mapping acquired by
 - * drm_gem_shmem_vmap(). The mapping is only removed when the use count drops to
 - * zero.
 - *
 - * This function hides the differences between dma-buf imported and natively
 - * allocated objects.
 - */
 -void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem,
 -                        struct iosys_map *map)
 -{
 -      mutex_lock(&shmem->vmap_lock);
 -      drm_gem_shmem_vunmap_locked(shmem, map);
 -      mutex_unlock(&shmem->vmap_lock);
 -}
  EXPORT_SYMBOL(drm_gem_shmem_vunmap);
  
  static int
@@@ -426,24 -447,24 +426,24 @@@ drm_gem_shmem_create_with_handle(struc
   */
  int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv)
  {
 -      mutex_lock(&shmem->pages_lock);
 +      dma_resv_assert_held(shmem->base.resv);
  
        if (shmem->madv >= 0)
                shmem->madv = madv;
  
        madv = shmem->madv;
  
 -      mutex_unlock(&shmem->pages_lock);
 -
        return (madv >= 0);
  }
  EXPORT_SYMBOL(drm_gem_shmem_madvise);
  
 -void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem)
 +void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem)
  {
        struct drm_gem_object *obj = &shmem->base;
        struct drm_device *dev = obj->dev;
  
 +      dma_resv_assert_held(shmem->base.resv);
 +
        drm_WARN_ON(obj->dev, !drm_gem_shmem_is_purgeable(shmem));
  
        dma_unmap_sgtable(dev->dev, shmem->sgt, DMA_BIDIRECTIONAL, 0);
        kfree(shmem->sgt);
        shmem->sgt = NULL;
  
 -      drm_gem_shmem_put_pages_locked(shmem);
 +      drm_gem_shmem_put_pages(shmem);
  
        shmem->madv = -1;
  
  
        invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1);
  }
 -EXPORT_SYMBOL(drm_gem_shmem_purge_locked);
 -
 -bool drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem)
 -{
 -      if (!mutex_trylock(&shmem->pages_lock))
 -              return false;
 -      drm_gem_shmem_purge_locked(shmem);
 -      mutex_unlock(&shmem->pages_lock);
 -
 -      return true;
 -}
  EXPORT_SYMBOL(drm_gem_shmem_purge);
  
  /**
@@@ -519,7 -551,7 +519,7 @@@ static vm_fault_t drm_gem_shmem_fault(s
        /* We don't use vmf->pgoff since that has the fake offset */
        page_offset = (vmf->address - vma->vm_start) >> PAGE_SHIFT;
  
 -      mutex_lock(&shmem->pages_lock);
 +      dma_resv_lock(shmem->base.resv, NULL);
  
        if (page_offset >= num_pages ||
            drm_WARN_ON_ONCE(obj->dev, !shmem->pages) ||
                ret = vmf_insert_pfn(vma, vmf->address, page_to_pfn(page));
        }
  
 -      mutex_unlock(&shmem->pages_lock);
 +      dma_resv_unlock(shmem->base.resv);
  
        return ret;
  }
@@@ -543,7 -575,7 +543,7 @@@ static void drm_gem_shmem_vm_open(struc
  
        drm_WARN_ON(obj->dev, obj->import_attach);
  
 -      mutex_lock(&shmem->pages_lock);
 +      dma_resv_lock(shmem->base.resv, NULL);
  
        /*
         * We should have already pinned the pages when the buffer was first
        if (!drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count))
                shmem->pages_use_count++;
  
 -      mutex_unlock(&shmem->pages_lock);
 +      dma_resv_unlock(shmem->base.resv);
  
        drm_gem_vm_open(vma);
  }
@@@ -563,10 -595,7 +563,10 @@@ static void drm_gem_shmem_vm_close(stru
        struct drm_gem_object *obj = vma->vm_private_data;
        struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj);
  
 +      dma_resv_lock(shmem->base.resv, NULL);
        drm_gem_shmem_put_pages(shmem);
 +      dma_resv_unlock(shmem->base.resv);
 +
        drm_gem_vm_close(vma);
  }
  
@@@ -594,7 -623,13 +594,13 @@@ int drm_gem_shmem_mmap(struct drm_gem_s
        int ret;
  
        if (obj->import_attach) {
+               /* Reset both vm_ops and vm_private_data, so we don't end up with
+                * vm_ops pointing to our implementation if the dma-buf backend
+                * doesn't set those fields.
+                */
                vma->vm_private_data = NULL;
+               vma->vm_ops = NULL;
                ret = dma_buf_mmap(obj->dma_buf, vma, 0);
  
                /* Drop the reference drm_gem_mmap_obj() acquired.*/
                return ret;
        }
  
 +      dma_resv_lock(shmem->base.resv, NULL);
        ret = drm_gem_shmem_get_pages(shmem);
 +      dma_resv_unlock(shmem->base.resv);
 +
        if (ret)
                return ret;
  
@@@ -673,7 -705,7 +679,7 @@@ static struct sg_table *drm_gem_shmem_g
  
        drm_WARN_ON(obj->dev, obj->import_attach);
  
 -      ret = drm_gem_shmem_get_pages_locked(shmem);
 +      ret = drm_gem_shmem_get_pages(shmem);
        if (ret)
                return ERR_PTR(ret);
  
@@@ -695,7 -727,7 +701,7 @@@ err_free_sgt
        sg_free_table(sgt);
        kfree(sgt);
  err_put_pages:
 -      drm_gem_shmem_put_pages_locked(shmem);
 +      drm_gem_shmem_put_pages(shmem);
        return ERR_PTR(ret);
  }
  
@@@ -720,11 -752,11 +726,11 @@@ struct sg_table *drm_gem_shmem_get_page
        int ret;
        struct sg_table *sgt;
  
 -      ret = mutex_lock_interruptible(&shmem->pages_lock);
 +      ret = dma_resv_lock_interruptible(shmem->base.resv, NULL);
        if (ret)
                return ERR_PTR(ret);
        sgt = drm_gem_shmem_get_pages_sgt_locked(shmem);
 -      mutex_unlock(&shmem->pages_lock);
 +      dma_resv_unlock(shmem->base.resv);
  
        return sgt;
  }
index 6bf6c4a0f55036e3c848582039550ddef4c61a59,798bd4f3b66215faf3f5febe04c1a6901cafc992..8e41c42c5c1052242ef4fa3ae67c07a024b08ce6
@@@ -10,8 -10,6 +10,8 @@@
  #include <linux/irqchip.h>
  #include <linux/irqdesc.h>
  #include <linux/irqchip/chained_irq.h>
 +#include <linux/of_platform.h>
 +#include <linux/platform_device.h>
  #include <linux/pm_runtime.h>
  #include <linux/reset.h>
  
@@@ -191,6 -189,7 +191,7 @@@ static int _msm_mdss_irq_domain_add(str
  #define UBWC_2_0 0x20000000
  #define UBWC_3_0 0x30000000
  #define UBWC_4_0 0x40000000
+ #define UBWC_4_3 0x40030000
  
  static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss *msm_mdss)
  {
@@@ -229,7 -228,10 +230,10 @@@ static void msm_mdss_setup_ubwc_dec_40(
                writel_relaxed(1, msm_mdss->mmio + UBWC_CTRL_2);
                writel_relaxed(0, msm_mdss->mmio + UBWC_PREDICTION_MODE);
        } else {
-               writel_relaxed(2, msm_mdss->mmio + UBWC_CTRL_2);
+               if (data->ubwc_dec_version == UBWC_4_3)
+                       writel_relaxed(3, msm_mdss->mmio + UBWC_CTRL_2);
+               else
+                       writel_relaxed(2, msm_mdss->mmio + UBWC_CTRL_2);
                writel_relaxed(1, msm_mdss->mmio + UBWC_PREDICTION_MODE);
        }
  }
@@@ -273,6 -275,7 +277,7 @@@ static int msm_mdss_enable(struct msm_m
                msm_mdss_setup_ubwc_dec_30(msm_mdss);
                break;
        case UBWC_4_0:
+       case UBWC_4_3:
                msm_mdss_setup_ubwc_dec_40(msm_mdss);
                break;
        default:
@@@ -571,6 -574,16 +576,16 @@@ static const struct msm_mdss_data sm825
        .macrotile_mode = 1,
  };
  
+ static const struct msm_mdss_data sm8550_data = {
+       .ubwc_version = UBWC_4_0,
+       .ubwc_dec_version = UBWC_4_3,
+       .ubwc_swizzle = 6,
+       .ubwc_static = 1,
+       /* TODO: highest_bank_bit = 2 for LP_DDR4 */
+       .highest_bank_bit = 3,
+       .macrotile_mode = 1,
+ };
  static const struct of_device_id mdss_dt_match[] = {
        { .compatible = "qcom,mdss" },
        { .compatible = "qcom,msm8998-mdss" },
        { .compatible = "qcom,sm8250-mdss", .data = &sm8250_data },
        { .compatible = "qcom,sm8350-mdss", .data = &sm8250_data },
        { .compatible = "qcom,sm8450-mdss", .data = &sm8250_data },
-       { .compatible = "qcom,sm8550-mdss", .data = &sm8250_data },
+       { .compatible = "qcom,sm8550-mdss", .data = &sm8550_data },
        {}
  };
  MODULE_DEVICE_TABLE(of, mdss_dt_match);
index d18e24b6f1eba9ab9bcc614e2ecc49698adac555,1bec819da8766c24812c31d63a42a26f235fecca..4e7c9c353c5112c898a565ea5d388062d9682baf
@@@ -1128,7 -1128,7 +1128,7 @@@ nv50_mstc_mode_valid(struct drm_connect
         * MSTB's max possible PBN
         */
  
 -      return nv50_dp_mode_valid(connector, outp, mode, NULL);
 +      return nv50_dp_mode_valid(outp, mode, NULL);
  }
  
  static int
@@@ -1877,6 -1877,8 +1877,8 @@@ nv50_pior_destroy(struct drm_encoder *e
        nvif_outp_dtor(&nv_encoder->outp);
  
        drm_encoder_cleanup(encoder);
+       mutex_destroy(&nv_encoder->dp.hpd_irq_lock);
        kfree(encoder);
  }
  
@@@ -1921,6 -1923,8 +1923,8 @@@ nv50_pior_create(struct drm_connector *
        nv_encoder->i2c = ddc;
        nv_encoder->aux = aux;
  
+       mutex_init(&nv_encoder->dp.hpd_irq_lock);
        encoder = to_drm_encoder(nv_encoder);
        encoder->possible_crtcs = dcbe->heads;
        encoder->possible_clones = 0;
index 68b4fb4bec63f86f200fa7cf989eafe5c6464868,622f6eb9a8bfd0e70909b684c4b0b4ee0efb0969..79ea30aac31fb8da0dc3b0696baeb83701ca3bf7
@@@ -619,10 -619,7 +619,10 @@@ nouveau_connector_detect(struct drm_con
  
                nouveau_connector_set_encoder(connector, nv_encoder);
                conn_status = connector_status_connected;
 -              drm_dp_cec_set_edid(&nv_connector->aux, nv_connector->edid);
 +
 +              if (nv_encoder->dcb->type == DCB_OUTPUT_DP)
 +                      drm_dp_cec_set_edid(&nv_connector->aux, nv_connector->edid);
 +
                goto out;
        } else {
                nouveau_connector_set_edid(nv_connector, NULL);
@@@ -970,7 -967,7 +970,7 @@@ nouveau_connector_get_modes(struct drm_
        /* Determine display colour depth for everything except LVDS now,
         * DP requires this before mode_valid() is called.
         */
-       if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)
+       if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS)
                nouveau_connector_detect_depth(connector);
  
        /* Find the native mode if this is a digital panel, if we didn't
@@@ -1082,7 -1079,7 +1082,7 @@@ nouveau_connector_mode_valid(struct drm
        case DCB_OUTPUT_TV:
                return get_slave_funcs(encoder)->mode_valid(encoder, mode);
        case DCB_OUTPUT_DP:
 -              return nv50_dp_mode_valid(connector, nv_encoder, mode, NULL);
 +              return nv50_dp_mode_valid(nv_encoder, mode, NULL);
        default:
                BUG();
                return MODE_BAD;
@@@ -1411,8 -1408,7 +1411,7 @@@ nouveau_connector_create(struct drm_dev
                ret = nvif_conn_ctor(&disp->disp, nv_connector->base.name, nv_connector->index,
                                     &nv_connector->conn);
                if (ret) {
-                       kfree(nv_connector);
-                       return ERR_PTR(ret);
+                       goto drm_conn_err;
                }
  
                ret = nvif_conn_event_ctor(&nv_connector->conn, "kmsHotplug",
                        if (ret) {
                                nvif_event_dtor(&nv_connector->hpd);
                                nvif_conn_dtor(&nv_connector->conn);
-                               kfree(nv_connector);
-                               return ERR_PTR(ret);
+                               goto drm_conn_err;
                        }
                }
        }
  
        drm_connector_register(connector);
        return connector;
+ drm_conn_err:
+       drm_connector_cleanup(connector);
+       kfree(nv_connector);
+       return ERR_PTR(ret);
  }
index 0583360b128068055b10f0bf888f6bf74cb7a962,be4ec5bb5223b855255904b19c1cb898426bbd53..ea5a857793827af1a0bfe90d88bf2a3a71065f11
@@@ -11,6 -11,7 +11,6 @@@
  #include <linux/module.h>
  #include <linux/regulator/consumer.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  
  #include <video/mipi_display.h>
  #include <drm/drm_mipi_dsi.h>
@@@ -65,6 -66,7 +65,6 @@@ static void s6d7aa0_reset(struct s6d7aa
  static int s6d7aa0_lock(struct s6d7aa0 *ctx, bool lock)
  {
        struct mipi_dsi_device *dsi = ctx->dsi;
 -      int ret = 0;
  
        if (lock) {
                mipi_dsi_dcs_write_seq(dsi, MCS_PASSWD1, 0xa5, 0xa5);
@@@ -78,7 -80,7 +78,7 @@@
                        mipi_dsi_dcs_write_seq(dsi, MCS_PASSWD3, 0xa5, 0xa5);
        }
  
 -      return ret;
 +      return 0;
  }
  
  static int s6d7aa0_on(struct s6d7aa0 *ctx)
@@@ -567,6 -569,7 +567,7 @@@ static const struct of_device_id s6d7aa
        },
        { /* sentinel */ }
  };
+ MODULE_DEVICE_TABLE(of, s6d7aa0_of_match);
  
  static struct mipi_dsi_driver s6d7aa0_driver = {
        .probe = s6d7aa0_probe,
index 1b50d17bebe055de20914414f61f402c7cf99f5b,b38d0e95cd542f7972c4a030a6e83ed1358198ec..95959dcc6e0e2ca454df765f7a6c13b96f5324e1
@@@ -141,6 -141,7 +141,6 @@@ struct panel_simple 
  
        bool prepared;
  
 -      ktime_t prepared_time;
        ktime_t unprepared_time;
  
        const struct panel_desc *desc;
@@@ -350,6 -351,8 +350,6 @@@ static int panel_simple_resume(struct d
        if (p->desc->delay.prepare)
                msleep(p->desc->delay.prepare);
  
 -      p->prepared_time = ktime_get_boottime();
 -
        return 0;
  }
  
@@@ -563,6 -566,7 +563,6 @@@ static int panel_simple_probe(struct de
                return -ENOMEM;
  
        panel->enabled = false;
 -      panel->prepared_time = 0;
        panel->desc = desc;
  
        panel->supply = devm_regulator_get(dev, "power");
@@@ -995,21 -999,21 +995,21 @@@ static const struct panel_desc auo_g104
        .connector_type = DRM_MODE_CONNECTOR_LVDS,
  };
  
- static const struct drm_display_mode auo_g121ean01_mode = {
-       .clock = 66700,
-       .hdisplay = 1280,
-       .hsync_start = 1280 + 58,
-       .hsync_end = 1280 + 58 + 8,
-       .htotal = 1280 + 58 + 8 + 70,
-       .vdisplay = 800,
-       .vsync_start = 800 + 6,
-       .vsync_end = 800 + 6 + 4,
-       .vtotal = 800 + 6 + 4 + 10,
+ static const struct display_timing auo_g121ean01_timing = {
+       .pixelclock = { 60000000, 74400000, 90000000 },
+       .hactive = { 1280, 1280, 1280 },
+       .hfront_porch = { 20, 50, 100 },
+       .hback_porch = { 20, 50, 100 },
+       .hsync_len = { 30, 100, 200 },
+       .vactive = { 800, 800, 800 },
+       .vfront_porch = { 2, 10, 25 },
+       .vback_porch = { 2, 10, 25 },
+       .vsync_len = { 4, 18, 50 },
  };
  
  static const struct panel_desc auo_g121ean01 = {
-       .modes = &auo_g121ean01_mode,
-       .num_modes = 1,
+       .timings = &auo_g121ean01_timing,
+       .num_timings = 1,
        .bpc = 8,
        .size = {
                .width = 261,
@@@ -1185,9 -1189,7 +1185,9 @@@ static const struct panel_desc auo_t215
        .delay = {
                .disable = 5,
                .unprepare = 1000,
 -      }
 +      },
 +      .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
 +      .connector_type = DRM_MODE_CONNECTOR_LVDS,
  };
  
  static const struct drm_display_mode avic_tm070ddh03_mode = {
@@@ -2376,37 -2378,6 +2376,37 @@@ static const struct panel_desc innolux_
        },
  };
  
 +static const struct display_timing innolux_g156hce_l01_timings = {
 +      .pixelclock = { 120000000, 141860000, 150000000 },
 +      .hactive = { 1920, 1920, 1920 },
 +      .hfront_porch = { 80, 90, 100 },
 +      .hback_porch = { 80, 90, 100 },
 +      .hsync_len = { 20, 30, 30 },
 +      .vactive = { 1080, 1080, 1080 },
 +      .vfront_porch = { 3, 10, 20 },
 +      .vback_porch = { 3, 10, 20 },
 +      .vsync_len = { 4, 10, 10 },
 +};
 +
 +static const struct panel_desc innolux_g156hce_l01 = {
 +      .timings = &innolux_g156hce_l01_timings,
 +      .num_timings = 1,
 +      .bpc = 8,
 +      .size = {
 +              .width = 344,
 +              .height = 194,
 +      },
 +      .delay = {
 +              .prepare = 1,           /* T1+T2 */
 +              .enable = 450,          /* T5 */
 +              .disable = 200,         /* T6 */
 +              .unprepare = 10,        /* T3+T7 */
 +      },
 +      .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
 +      .bus_flags = DRM_BUS_FLAG_DE_HIGH,
 +      .connector_type = DRM_MODE_CONNECTOR_LVDS,
 +};
 +
  static const struct drm_display_mode innolux_n156bge_l21_mode = {
        .clock = 69300,
        .hdisplay = 1366,
@@@ -3238,7 -3209,6 +3238,7 @@@ static const struct drm_display_mode po
  static const struct panel_desc powertip_ph800480t013_idf02  = {
        .modes = &powertip_ph800480t013_idf02_mode,
        .num_modes = 1,
 +      .bpc = 8,
        .size = {
                .width = 152,
                .height = 91,
@@@ -4273,9 -4243,6 +4273,9 @@@ static const struct of_device_id platfo
        }, {
                .compatible = "innolux,g121x1-l03",
                .data = &innolux_g121x1_l03,
 +      }, {
 +              .compatible = "innolux,g156hce-l01",
 +              .data = &innolux_g156hce_l01,
        }, {
                .compatible = "innolux,n156bge-l21",
                .data = &innolux_n156bge_l21,
@@@ -4492,18 -4459,20 +4492,18 @@@ MODULE_DEVICE_TABLE(of, platform_of_mat
  
  static int panel_simple_platform_probe(struct platform_device *pdev)
  {
 -      const struct of_device_id *id;
 +      const struct panel_desc *desc;
  
 -      id = of_match_node(platform_of_match, pdev->dev.of_node);
 -      if (!id)
 +      desc = of_device_get_match_data(&pdev->dev);
 +      if (!desc)
                return -ENODEV;
  
 -      return panel_simple_probe(&pdev->dev, id->data);
 +      return panel_simple_probe(&pdev->dev, desc);
  }
  
 -static int panel_simple_platform_remove(struct platform_device *pdev)
 +static void panel_simple_platform_remove(struct platform_device *pdev)
  {
        panel_simple_remove(&pdev->dev);
 -
 -      return 0;
  }
  
  static void panel_simple_platform_shutdown(struct platform_device *pdev)
@@@ -4524,7 -4493,7 +4524,7 @@@ static struct platform_driver panel_sim
                .pm = &panel_simple_pm_ops,
        },
        .probe = panel_simple_platform_probe,
 -      .remove = panel_simple_platform_remove,
 +      .remove_new = panel_simple_platform_remove,
        .shutdown = panel_simple_platform_shutdown,
  };
  
@@@ -4769,12 -4738,15 +4769,12 @@@ MODULE_DEVICE_TABLE(of, dsi_of_match)
  static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
  {
        const struct panel_desc_dsi *desc;
 -      const struct of_device_id *id;
        int err;
  
 -      id = of_match_node(dsi_of_match, dsi->dev.of_node);
 -      if (!id)
 +      desc = of_device_get_match_data(&dsi->dev);
 +      if (!desc)
                return -ENODEV;
  
 -      desc = id->data;
 -
        err = panel_simple_probe(&dsi->dev, &desc->desc);
        if (err < 0)
                return err;
index 86fd9f51c6928d89f67c848e8d6f3a13d3fbead8,bf34498c1b6d769fcae656adcbc68c16a52e9c09..14320bc73e5bfcab07a8d1fce6d1c34b22029cc7
@@@ -12,6 -12,7 +12,6 @@@
  #include <linux/log2.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/overflow.h>
  #include <linux/platform_device.h>
  #include <linux/pm_runtime.h>
@@@ -832,12 -833,12 +832,12 @@@ static int vop_plane_atomic_check(struc
         * need align with 2 pixel.
         */
        if (fb->format->is_yuv && ((new_plane_state->src.x1 >> 16) % 2)) {
-               DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
+               DRM_DEBUG_KMS("Invalid Source: Yuv format not support odd xpos\n");
                return -EINVAL;
        }
  
        if (fb->format->is_yuv && new_plane_state->rotation & DRM_MODE_REFLECT_Y) {
-               DRM_ERROR("Invalid Source: Yuv format does not support this rotation\n");
+               DRM_DEBUG_KMS("Invalid Source: Yuv format does not support this rotation\n");
                return -EINVAL;
        }
  
                struct vop *vop = to_vop(crtc);
  
                if (!vop->data->afbc) {
-                       DRM_ERROR("vop does not support AFBC\n");
+                       DRM_DEBUG_KMS("vop does not support AFBC\n");
                        return -EINVAL;
                }
  
                        return ret;
  
                if (new_plane_state->src.x1 || new_plane_state->src.y1) {
-                       DRM_ERROR("AFBC does not support offset display, xpos=%d, ypos=%d, offset=%d\n",
-                                 new_plane_state->src.x1,
-                                 new_plane_state->src.y1, fb->offsets[0]);
+                       DRM_DEBUG_KMS("AFBC does not support offset display, " \
+                                     "xpos=%d, ypos=%d, offset=%d\n",
+                                     new_plane_state->src.x1, new_plane_state->src.y1,
+                                     fb->offsets[0]);
                        return -EINVAL;
                }
  
                if (new_plane_state->rotation && new_plane_state->rotation != DRM_MODE_ROTATE_0) {
-                       DRM_ERROR("No rotation support in AFBC, rotation=%d\n",
-                                 new_plane_state->rotation);
+                       DRM_DEBUG_KMS("No rotation support in AFBC, rotation=%d\n",
+                                     new_plane_state->rotation);
                        return -EINVAL;
                }
        }
index aa8ab1a418afd02992d91a4a9aeff0e4734c356e,54e3083076b786583064b5f6628ac7fa74e965b0..e58b7e2498166af73a105f234ba4f9ec0fcc2195
@@@ -345,7 -345,6 +345,7 @@@ static void ttm_bo_release(struct kref 
  
                if (!dma_resv_test_signaled(bo->base.resv,
                                            DMA_RESV_USAGE_BOOKKEEP) ||
 +                  (want_init_on_free() && (bo->ttm != NULL)) ||
                    !dma_resv_trylock(bo->base.resv)) {
                        /* The BO is not idle, resurrect it for delayed destroy */
                        ttm_bo_flush_all_fences(bo);
@@@ -520,7 -519,8 +520,8 @@@ static bool ttm_bo_evict_swapout_allowa
  
        if (bo->pin_count) {
                *locked = false;
-               *busy = false;
+               if (busy)
+                       *busy = false;
                return false;
        }
  
@@@ -1161,6 -1161,7 +1162,6 @@@ int ttm_bo_swapout(struct ttm_buffer_ob
         * Move to system cached
         */
        if (bo->resource->mem_type != TTM_PL_SYSTEM) {
 -              struct ttm_operation_ctx ctx = { false, false };
                struct ttm_resource *evict_mem;
                struct ttm_place hop;
  
                if (unlikely(ret))
                        goto out;
  
 -              ret = ttm_bo_handle_move_mem(bo, evict_mem, true, &ctx, &hop);
 +              ret = ttm_bo_handle_move_mem(bo, evict_mem, true, ctx, &hop);
                if (unlikely(ret != 0)) {
                        WARN(ret == -EMULTIHOP, "Unexpected multihop in swaput - likely driver bug.\n");
                        ttm_resource_free(bo, &evict_mem);
index cea782283b9c1fedd8a79feb3eedd6c03323ff6f,f216b2c702a1170878dae375c581cfd3e05bb3f9..441e7a8dbe584fcd7cf7aa689287be813f6428dc
@@@ -687,7 -687,7 +687,7 @@@ struct fb_var_cursorinfo 
        __u16 height;
        __u16 xspot;
        __u16 yspot;
-       __u8 data[1];                   /* field with [height][width]        */
+       DECLARE_FLEX_ARRAY(__u8, data); /* field with [height][width]        */
  };
  
  struct fb_cursorstate {
@@@ -2427,7 -2427,7 +2427,7 @@@ static int amifb_set_par(struct fb_inf
                info->fix.ywrapstep = 1;
                info->fix.xpanstep = 0;
                info->fix.ypanstep = 0;
 -              info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YWRAP |
 +              info->flags = FBINFO_HWACCEL_YWRAP |
                        FBINFO_READS_FAST; /* override SCROLL_REDRAW */
        } else {
                info->fix.ywrapstep = 0;
                else
                        info->fix.xpanstep = 16 << maxfmode;
                info->fix.ypanstep = 1;
 -              info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
 +              info->flags = FBINFO_HWACCEL_YPAN;
        }
        return 0;
  }
@@@ -3660,6 -3660,7 +3660,6 @@@ default_chipset
        }
  
        info->fbops = &amifb_ops;
 -      info->flags = FBINFO_DEFAULT;
        info->device = &pdev->dev;
  
        if (!fb_find_mode(&info->var, info, mode_option, ami_modedb,
index c75a62287ec43cab5ab2b426a2ec9f77477b28b3,f245da138e689818added8ca6e8410766972549b..a908db2334098610501eb0e2adf359369e17cf78
@@@ -806,12 -806,14 +806,12 @@@ static int atmel_lcdfb_blank(int blank_
  
  static const struct fb_ops atmel_lcdfb_ops = {
        .owner          = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = atmel_lcdfb_check_var,
        .fb_set_par     = atmel_lcdfb_set_par,
        .fb_setcolreg   = atmel_lcdfb_setcolreg,
        .fb_blank       = atmel_lcdfb_blank,
        .fb_pan_display = atmel_lcdfb_pan_display,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit,
  };
  
  static irqreturn_t atmel_lcdfb_interrupt(int irq, void *dev_id)
@@@ -1057,7 -1059,7 +1057,7 @@@ static int __init atmel_lcdfb_probe(str
        if (IS_ERR(sinfo->reg_lcd))
                sinfo->reg_lcd = NULL;
  
 -      info->flags = FBINFO_DEFAULT | FBINFO_PARTIAL_PAN_OK |
 +      info->flags = FBINFO_PARTIAL_PAN_OK |
                      FBINFO_HWACCEL_YPAN;
        info->pseudo_palette = sinfo->pseudo_palette;
        info->fbops = &atmel_lcdfb_ops;
@@@ -1306,7 -1308,7 +1306,7 @@@ static struct platform_driver atmel_lcd
        .resume         = atmel_lcdfb_resume,
        .driver         = {
                .name   = "atmel_lcdfb",
-               .of_match_table = of_match_ptr(atmel_lcdfb_dt_ids),
+               .of_match_table = atmel_lcdfb_dt_ids,
        },
  };
  
index 6da22044cbc547bd02fa37bfc211bbb3c5bfaee1,39f438de0d6b34f43c6cb4c6cbc451bdd0c988fc..de34f1f333e2bb3063d87e3ad3155c2338aafff6
@@@ -17,7 -17,8 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -314,6 -315,7 +315,6 @@@ static int bw2_probe(struct platform_de
  
        info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres);
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &bw2_ops;
  
        info->screen_base = of_ioremap(&op->resource[0], 0,
index b2ecd9ff2a61507695a6628994a85ed1edb40b1a,90fdc9d9bf5a2b1348fb9cce2f14c574f1881a8c..c0336c051c2490099bc4fc993715b8e0a28e21a8
@@@ -17,7 -17,8 +17,8 @@@
  #include <linux/fb.h>
  #include <linux/mm.h>
  #include <linux/uaccess.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -533,7 -534,7 +534,7 @@@ static int cg14_probe(struct platform_d
        par->mode = MDI_8_PIX;
        par->ramsize = (is_8mb ? 0x800000 : 0x400000);
  
 -      info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
 +      info->flags = FBINFO_HWACCEL_YPAN;
        info->fbops = &cg14_ops;
  
        __cg14_reset(par);
index c0e6179c66a14276610f2ba28ab83da5023113cc,98c60f72046af278e50d523681284986aba49fe2..0a897d5be3349675ff9257c55bac7a24e2d05b50
@@@ -17,7 -17,8 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -384,6 -385,7 +385,6 @@@ static int cg3_probe(struct platform_de
        if (!par->regs)
                goto out_release_fb;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &cg3_ops;
        info->screen_base = of_ioremap(&op->resource[0], CG3_RAM_OFFSET,
                                       info->fix.smem_len, "cg3 ram");
index e6cb55be7d8b2de5aa4ce67c3ff6714474f0e00b,6427b85f1a9474d9559cac775820a962732cb155..8ef6ac9132f3d134591c49fd0a3f6b801a8da360
@@@ -17,7 -17,8 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -782,7 -783,7 +783,7 @@@ static int cg6_probe(struct platform_de
        par->fhc = of_ioremap(&op->resource[0], CG6_FHC_OFFSET,
                                sizeof(u32), "cgsix fhc");
  
 -      info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_IMAGEBLIT |
 +      info->flags = FBINFO_HWACCEL_IMAGEBLIT |
                        FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT |
                        FBINFO_READS_FAST;
        info->fbops = &cg6_ops;
index 9f265271b5b9c1f141d99510472ec05829443dc5,887fad44e7ec3681a1d76b001a8d0452a64131d6..f157a5a1dffcf3a898eb9f447167e8fa245c98ce
@@@ -78,7 -78,6 +78,7 @@@
  #include <asm/irq.h>
  
  #include "fbcon.h"
 +#include "fb_internal.h"
  
  /*
   * FIXME: Locking
@@@ -103,8 -102,8 +103,8 @@@ enum 
  
  static struct fbcon_display fb_display[MAX_NR_CONSOLES];
  
 -struct fb_info *fbcon_registered_fb[FB_MAX];
 -int fbcon_num_registered_fb;
 +static struct fb_info *fbcon_registered_fb[FB_MAX];
 +static int fbcon_num_registered_fb;
  
  #define fbcon_for_each_registered_fb(i)               \
        for (i = 0; WARN_CONSOLE_UNLOCKED(), i < FB_MAX; i++)           \
@@@ -577,7 -576,7 +577,7 @@@ static void fbcon_prepare_logo(struct v
                if (scr_readw(r) != vc->vc_video_erase_char)
                        break;
        if (r != q && new_rows >= rows + logo_lines) {
 -              save = kzalloc(array3_size(logo_lines, new_cols, 2),
 +              save = kmalloc(array3_size(logo_lines, new_cols, 2),
                               GFP_KERNEL);
                if (save) {
                        int i = min(cols, new_cols);
@@@ -1613,8 -1612,7 +1613,7 @@@ static void fbcon_redraw_blit(struct vc
        }
  }
  
- static void fbcon_redraw(struct vc_data *vc, struct fbcon_display *p,
-                        int line, int count, int offset)
+ static void fbcon_redraw(struct vc_data *vc, int line, int count, int offset)
  {
        unsigned short *d = (unsigned short *)
            (vc->vc_origin + vc->vc_size_row * line);
@@@ -1828,7 -1826,7 +1827,7 @@@ static bool fbcon_scroll(struct vc_dat
  
                case SCROLL_REDRAW:
                      redraw_up:
-                       fbcon_redraw(vc, p, t, b - t - count,
+                       fbcon_redraw(vc, t, b - t - count,
                                     count * vc->vc_cols);
                        fbcon_clear(vc, b - count, 0, count, vc->vc_cols);
                        scr_memsetw((unsigned short *) (vc->vc_origin +
  
                case SCROLL_REDRAW:
                      redraw_down:
-                       fbcon_redraw(vc, p, b - 1, b - t - count,
+                       fbcon_redraw(vc, b - 1, b - t - count,
                                     -count * vc->vc_cols);
                        fbcon_clear(vc, t, 0, count, vc->vc_cols);
                        scr_memsetw((unsigned short *) (vc->vc_origin +
index 037df9cb9675f770da7fb8395a9d3dff080e1c51,22158d9ca8ddf9a5a4ff883cae75716c561c038d..d94e3e8d14a12400f302dee96163ae90dd8fb834
@@@ -312,7 -312,7 +312,7 @@@ static int ep93xxfb_mmap(struct fb_inf
        unsigned int offset = vma->vm_pgoff << PAGE_SHIFT;
  
        if (offset < info->fix.smem_len) {
 -              return dma_mmap_wc(info->dev, vma, info->screen_base,
 +              return dma_mmap_wc(info->device, vma, info->screen_base,
                                   info->fix.smem_start, info->fix.smem_len);
        }
  
@@@ -423,7 -423,7 +423,7 @@@ static int ep93xxfb_alloc_videomem(stru
        /* Maximum 16bpp -> used memory is maximum x*y*2 bytes */
        fb_size = EP93XXFB_MAX_XRES * EP93XXFB_MAX_YRES * 2;
  
 -      virt_addr = dma_alloc_wc(info->dev, fb_size, &phys_addr, GFP_KERNEL);
 +      virt_addr = dma_alloc_wc(info->device, fb_size, &phys_addr, GFP_KERNEL);
        if (!virt_addr)
                return -ENOMEM;
  
         * least.
         */
        if (check_screenpage_bug && phys_addr & (1 << 27)) {
 -              dev_err(info->dev, "ep93xx framebuffer bug. phys addr (0x%x) "
 -                      "has bit 27 set: cannot init framebuffer\n",
 -                      phys_addr);
 +              fb_err(info, "ep93xx framebuffer bug. phys addr (0x%x) "
 +                     "has bit 27 set: cannot init framebuffer\n",
 +                     phys_addr);
  
 -              dma_free_coherent(info->dev, fb_size, virt_addr, phys_addr);
 +              dma_free_coherent(info->device, fb_size, virt_addr, phys_addr);
                return -ENOMEM;
        }
  
  static void ep93xxfb_dealloc_videomem(struct fb_info *info)
  {
        if (info->screen_base)
 -              dma_free_coherent(info->dev, info->fix.smem_len,
 +              dma_free_coherent(info->device, info->fix.smem_len,
                                  info->screen_base, info->fix.smem_start);
  }
  
@@@ -474,6 -474,7 +474,6 @@@ static int ep93xxfb_probe(struct platfo
        if (!info)
                return -ENOMEM;
  
 -      info->dev = &pdev->dev;
        platform_set_drvdata(pdev, info);
        fbi = info->par;
        fbi->mach_info = mach_info;
        info->fix.accel         = FB_ACCEL_NONE;
        info->var.activate      = FB_ACTIVATE_NOW;
        info->var.vmode         = FB_VMODE_NONINTERLACED;
 -      info->flags             = FBINFO_DEFAULT;
        info->node              = -1;
        info->state             = FBINFO_STATE_RUNNING;
        info->pseudo_palette    = &fbi->pseudo_palette;
        err = fb_find_mode(&info->var, info, video_mode,
                           NULL, 0, NULL, 16);
        if (err == 0) {
 -              dev_err(info->dev, "No suitable video mode found\n");
 +              fb_err(info, "No suitable video mode found\n");
                err = -EINVAL;
                goto failed_resource;
        }
        }
  
        ep93xxfb_set_par(info);
-       clk_prepare_enable(fbi->clk);
+       err = clk_prepare_enable(fbi->clk);
+       if (err)
+               goto failed_check;
  
        err = register_framebuffer(info);
        if (err)
                goto failed_framebuffer;
  
 -      dev_info(info->dev, "registered. Mode = %dx%d-%d\n",
 -               info->var.xres, info->var.yres, info->var.bits_per_pixel);
 +      fb_info(info, "registered. Mode = %dx%d-%d\n",
 +              info->var.xres, info->var.yres, info->var.bits_per_pixel);
        return 0;
  
  failed_framebuffer:
index e4fe13059ad59e54e8f53b373c6cadcb48b629b3,c473841eb6ffedb4cd194e9df03e129824004107..e3a9bb7e9dea4458c887922aa0cdc1b0405266b1
@@@ -16,7 -16,8 +16,8 @@@
  #include <linux/fb.h>
  #include <linux/mm.h>
  #include <linux/timer.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/upa.h>
@@@ -929,7 -930,8 +930,7 @@@ static int ffb_probe(struct platform_de
        /* Don't mention copyarea, so SCROLL_REDRAW is always
         * used.  It is the fastest on this chip.
         */
 -      info->flags = (FBINFO_DEFAULT |
 -                     /* FBINFO_HWACCEL_COPYAREA | */
 +      info->flags = (/* FBINFO_HWACCEL_COPYAREA | */
                       FBINFO_HWACCEL_FILLRECT |
                       FBINFO_HWACCEL_IMAGEBLIT);
  
index 60c8a20d6fcda007ee993fa6203e69f5c86702f9,e41c9fef4a3b6196ab8e923845f4adeca3ee2948..ca9e8255947cf956938f76c0ca6c9f964e3ffa3d
@@@ -162,12 -162,14 +162,12 @@@ static int goldfish_fb_blank(int blank
  
  static const struct fb_ops goldfish_fb_ops = {
        .owner          = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = goldfish_fb_check_var,
        .fb_set_par     = goldfish_fb_set_par,
        .fb_setcolreg   = goldfish_fb_setcolreg,
        .fb_pan_display = goldfish_fb_pan_display,
        .fb_blank       = goldfish_fb_blank,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit,
  };
  
  
@@@ -201,8 -203,8 +201,8 @@@ static int goldfish_fb_probe(struct pla
        }
  
        fb->irq = platform_get_irq(pdev, 0);
-       if (fb->irq <= 0) {
-               ret = -ENODEV;
+       if (fb->irq < 0) {
+               ret = fb->irq;
                goto err_no_irq;
        }
  
        height = readl(fb->reg_base + FB_GET_HEIGHT);
  
        fb->fb.fbops            = &goldfish_fb_ops;
 -      fb->fb.flags            = FBINFO_FLAG_DEFAULT;
        fb->fb.pseudo_palette   = fb->cmap;
        fb->fb.fix.type         = FB_TYPE_PACKED_PIXELS;
        fb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
index 2fa9a274659c965e72396559ddd1cf8c6a7eb3a7,d4a9a58b3691303ae0001e58ac7d0ffe57042575..6d917e06e5f3b36b25fe60d7203fce6f256f268d
@@@ -12,8 -12,7 +12,7 @@@
  
  #include <linux/platform_device.h>
  #include <linux/dma-mapping.h>
- #include <linux/of_platform.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/string.h>
@@@ -253,11 -252,13 +252,11 @@@ static int grvga_pan_display(struct fb_
  
  static const struct fb_ops grvga_ops = {
        .owner          = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = grvga_check_var,
        .fb_set_par     = grvga_set_par,
        .fb_setcolreg   = grvga_setcolreg,
        .fb_pan_display = grvga_pan_display,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit
  };
  
  static int grvga_parse_custom(char *options,
@@@ -375,7 -376,7 +374,7 @@@ static int grvga_probe(struct platform_
        info->fbops = &grvga_ops;
        info->fix = grvga_fix;
        info->pseudo_palette = par->color_palette;
 -      info->flags = FBINFO_DEFAULT | FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN;
 +      info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN;
        info->fix.smem_len = grvga_mem_size;
  
        if (!devm_request_mem_region(&dev->dev, dev->resource[0].start,
index ee2b93bd231f969d2e37d3c57ff8941f80bf8e0e,77dedd2c05fd6b496e1be7145eab14fedf737066..84201c9608d36cdf81655e97c46a854226186631
@@@ -580,10 -580,12 +580,10 @@@ static int imxfb_blank(int blank, struc
  
  static const struct fb_ops imxfb_ops = {
        .owner          = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = imxfb_check_var,
        .fb_set_par     = imxfb_set_par,
        .fb_setcolreg   = imxfb_setcolreg,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit,
        .fb_blank       = imxfb_blank,
  };
  
@@@ -611,10 -613,10 +611,10 @@@ static int imxfb_activate_var(struct fb
        if (var->hsync_len < 1    || var->hsync_len > 64)
                printk(KERN_ERR "%s: invalid hsync_len %d\n",
                        info->fix.id, var->hsync_len);
-       if (var->left_margin > 255)
+       if (var->left_margin < 3  || var->left_margin > 255)
                printk(KERN_ERR "%s: invalid left_margin %d\n",
                        info->fix.id, var->left_margin);
-       if (var->right_margin > 255)
+       if (var->right_margin < 1 || var->right_margin > 255)
                printk(KERN_ERR "%s: invalid right_margin %d\n",
                        info->fix.id, var->right_margin);
        if (var->yres < 1 || var->yres > ymax_mask)
@@@ -671,7 -673,8 +671,8 @@@ static int imxfb_init_fbinfo(struct pla
  
        pr_debug("%s\n",__func__);
  
-       info->pseudo_palette = kmalloc_array(16, sizeof(u32), GFP_KERNEL);
+       info->pseudo_palette = devm_kmalloc_array(&pdev->dev, 16,
+                                                 sizeof(u32), GFP_KERNEL);
        if (!info->pseudo_palette)
                return -ENOMEM;
  
        info->var.vmode                 = FB_VMODE_NONINTERLACED;
  
        info->fbops                     = &imxfb_ops;
 -      info->flags                     = FBINFO_FLAG_DEFAULT |
 -                                        FBINFO_READS_FAST;
 +      info->flags                     = FBINFO_READS_FAST;
  
        np = pdev->dev.of_node;
        info->var.grayscale = of_property_read_bool(np,
@@@ -865,7 -869,6 +866,6 @@@ static int imxfb_probe(struct platform_
        struct imxfb_info *fbi;
        struct lcd_device *lcd;
        struct fb_info *info;
-       struct resource *res;
        struct imx_fb_videomode *m;
        const struct of_device_id *of_id;
        struct device_node *display_np;
        if (of_id)
                pdev->id_entry = of_id->data;
  
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -ENODEV;
        info = framebuffer_alloc(sizeof(struct imxfb_info), &pdev->dev);
        if (!info)
                return -ENOMEM;
        if (!display_np) {
                dev_err(&pdev->dev, "No display defined in devicetree\n");
                ret = -EINVAL;
-               goto failed_of_parse;
+               goto failed_init;
        }
  
        /*
        if (!fbi->mode) {
                ret = -ENOMEM;
                of_node_put(display_np);
-               goto failed_of_parse;
+               goto failed_init;
        }
  
        ret = imxfb_of_read_mode(&pdev->dev, display_np, fbi->mode);
        of_node_put(display_np);
        if (ret)
-               goto failed_of_parse;
+               goto failed_init;
  
        /* Calculate maximum bytes used per pixel. In most cases this should
         * be the same as m->bpp/8 */
        fbi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
        if (IS_ERR(fbi->clk_ipg)) {
                ret = PTR_ERR(fbi->clk_ipg);
-               goto failed_getclock;
+               goto failed_init;
        }
  
        /*
         */
        ret = clk_prepare_enable(fbi->clk_ipg);
        if (ret)
-               goto failed_getclock;
+               goto failed_init;
        clk_disable_unprepare(fbi->clk_ipg);
  
        fbi->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
        if (IS_ERR(fbi->clk_ahb)) {
                ret = PTR_ERR(fbi->clk_ahb);
-               goto failed_getclock;
+               goto failed_init;
        }
  
        fbi->clk_per = devm_clk_get(&pdev->dev, "per");
        if (IS_ERR(fbi->clk_per)) {
                ret = PTR_ERR(fbi->clk_per);
-               goto failed_getclock;
+               goto failed_init;
        }
  
-       fbi->regs = devm_ioremap_resource(&pdev->dev, res);
+       fbi->regs = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(fbi->regs)) {
                ret = PTR_ERR(fbi->regs);
-               goto failed_ioremap;
+               goto failed_init;
        }
  
        fbi->map_size = PAGE_ALIGN(info->fix.smem_len);
        if (!info->screen_buffer) {
                dev_err(&pdev->dev, "Failed to allocate video RAM\n");
                ret = -ENOMEM;
-               goto failed_map;
+               goto failed_init;
        }
  
        info->fix.smem_start = fbi->map_dma;
  
  failed_lcd:
        unregister_framebuffer(info);
  failed_register:
        fb_dealloc_cmap(&info->cmap);
  failed_cmap:
        dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
                    fbi->map_dma);
- failed_map:
- failed_ioremap:
- failed_getclock:
-       release_mem_region(res->start, resource_size(res));
- failed_of_parse:
-       kfree(info->pseudo_palette);
  failed_init:
        framebuffer_release(info);
        return ret;
@@@ -1059,11 -1051,10 +1048,10 @@@ static void imxfb_remove(struct platfor
        fb_dealloc_cmap(&info->cmap);
        dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
                    fbi->map_dma);
-       kfree(info->pseudo_palette);
        framebuffer_release(info);
  }
  
- static int __maybe_unused imxfb_suspend(struct device *dev)
+ static int imxfb_suspend(struct device *dev)
  {
        struct fb_info *info = dev_get_drvdata(dev);
        struct imxfb_info *fbi = info->par;
        return 0;
  }
  
- static int __maybe_unused imxfb_resume(struct device *dev)
+ static int imxfb_resume(struct device *dev)
  {
        struct fb_info *info = dev_get_drvdata(dev);
        struct imxfb_info *fbi = info->par;
        return 0;
  }
  
- static SIMPLE_DEV_PM_OPS(imxfb_pm_ops, imxfb_suspend, imxfb_resume);
+ static DEFINE_SIMPLE_DEV_PM_OPS(imxfb_pm_ops, imxfb_suspend, imxfb_resume);
  
  static struct platform_driver imxfb_driver = {
        .driver         = {
                .name   = DRIVER_NAME,
                .of_match_table = imxfb_of_dev_id,
-               .pm     = &imxfb_pm_ops,
+               .pm     = pm_sleep_ptr(&imxfb_pm_ops),
        },
        .probe          = imxfb_probe,
        .remove_new     = imxfb_remove,
index a1a40ea3b22a5ded42fa00e80d7610bd3fcd2c89,89ca48235dbed4e122b557f7827d3cc5f7ecd85d..2f725cd7633ad3b7b1dc16b2e45aefdefbe399c7
@@@ -16,8 -16,9 +16,9 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
  #include <linux/io.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/fbio.h>
  
@@@ -600,6 -601,7 +601,6 @@@ static int leo_probe(struct platform_de
            !info->screen_base)
                goto out_unmap_regs;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &leo_ops;
        info->pseudo_palette = par->clut_data;
  
index 05bc51305d94c4f758af6c948b742b6a0bbf3b4f,9dc347d163cf6f3592d61d0982866b3173ab84dc..7c402e9fd7a98d9e3e1c1c90f41066418937df7b
  #include <linux/init.h>
  #include <linux/interrupt.h>
  #include <linux/pci.h>
- #if defined(CONFIG_OF)
+ #include <linux/of.h>
  #include <linux/of_address.h>
  #include <linux/of_irq.h>
- #include <linux/of_platform.h>
- #endif
+ #include <linux/platform_device.h>
  #include "mb862xxfb.h"
  #include "mb862xx_reg.h"
  
@@@ -112,7 -112,8 +112,7 @@@ static int mb862xxfb_check_var(struct f
  {
        unsigned long tmp;
  
 -      if (fbi->dev)
 -              dev_dbg(fbi->dev, "%s\n", __func__);
 +      fb_dbg(fbi, "%s\n", __func__);
  
        /* check if these values fit into the registers */
        if (var->hsync_len > 255 || var->vsync_len > 255)
@@@ -289,7 -290,7 +289,7 @@@ static int mb862xxfb_blank(int mode, st
        struct mb862xxfb_par  *par = fbi->par;
        unsigned long reg;
  
 -      dev_dbg(fbi->dev, "blank mode=%d\n", mode);
 +      fb_dbg(fbi, "blank mode=%d\n", mode);
  
        switch (mode) {
        case FB_BLANK_POWERDOWN:
@@@ -407,12 -408,14 +407,12 @@@ static int mb862xxfb_ioctl(struct fb_in
  /* framebuffer ops */
  static struct fb_ops mb862xxfb_ops = {
        .owner          = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = mb862xxfb_check_var,
        .fb_set_par     = mb862xxfb_set_par,
        .fb_setcolreg   = mb862xxfb_setcolreg,
        .fb_blank       = mb862xxfb_blank,
        .fb_pan_display = mb862xxfb_pan,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit,
        .fb_ioctl       = mb862xxfb_ioctl,
  };
  
@@@ -499,7 -502,7 +499,7 @@@ static int mb862xxfb_init_fbinfo(struc
        fbi->var.accel_flags = 0;
        fbi->var.vmode = FB_VMODE_NONINTERLACED;
        fbi->var.activate = FB_ACTIVATE_NOW;
 -      fbi->flags = FBINFO_DEFAULT |
 +      fbi->flags =
  #ifdef __BIG_ENDIAN
                     FBINFO_FOREIGN_ENDIAN |
  #endif
@@@ -788,7 -791,7 +788,7 @@@ static void of_platform_mb862xx_remove(
        resource_size_t res_size = resource_size(par->res);
        unsigned long reg;
  
 -      dev_dbg(fbi->dev, "%s release\n", fbi->fix.id);
 +      fb_dbg(fbi, "%s release\n", fbi->fix.id);
  
        /* display off */
        reg = inreg(disp, GC_DCM1);
@@@ -1135,7 -1138,7 +1135,7 @@@ static void mb862xx_pci_remove(struct p
        struct mb862xxfb_par *par = fbi->par;
        unsigned long reg;
  
 -      dev_dbg(fbi->dev, "%s release\n", fbi->fix.id);
 +      fb_dbg(fbi, "%s release\n", fbi->fix.id);
  
        /* display off */
        reg = inreg(disp, GC_DCM1);
index 41d124862a007b967b3886fdde0c192d8493aced,e2e747cae9b1231e573f37661978f1bb6cc0e5a2..ca06886d957815bff82c3f743064f63fa6ec446e
@@@ -15,7 -15,8 +15,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -283,6 -284,7 +284,6 @@@ static int p9100_probe(struct platform_
        if (!par->regs)
                goto out_release_fb;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &p9100_ops;
        info->screen_base = of_ioremap(&op->resource[2], 0,
                                       info->fix.smem_len, "p9100 ram");
index 4f9d8742ea0cc4d7e94d54c3241a43419da56a6f,b27f43b3616e93b172251dca084f9e6468263c65..cb6fcc64c8e20c37132f2d4babed4095ffef626d
@@@ -30,9 -30,9 +30,9 @@@
  #include <linux/fb.h>
  #include <linux/init.h>
  #include <linux/nvram.h>
+ #include <linux/of.h>
  #include <linux/of_address.h>
- #include <linux/of_device.h>
- #include <linux/of_platform.h>
+ #include <linux/platform_device.h>
  
  #include "macmodes.h"
  #include "platinumfb.h"
@@@ -98,11 -98,13 +98,11 @@@ static int platinum_var_to_par(struct f
  
  static const struct fb_ops platinumfb_ops = {
        .owner =        THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_check_var   = platinumfb_check_var,
        .fb_set_par     = platinumfb_set_par,
        .fb_setcolreg   = platinumfb_setcolreg,
        .fb_blank       = platinumfb_blank,
 -      .fb_fillrect    = cfb_fillrect,
 -      .fb_copyarea    = cfb_copyarea,
 -      .fb_imageblit   = cfb_imageblit,
  };
  
  /*
@@@ -315,6 -317,7 +315,6 @@@ static void platinum_init_info(struct f
        /* Fill fb_info */
        info->fbops = &platinumfb_ops;
        info->pseudo_palette = pinfo->pseudo_palette;
 -        info->flags = FBINFO_DEFAULT;
        info->screen_base = pinfo->frame_buffer + 0x20;
  
        fb_alloc_cmap(&info->cmap, 256, 0);
index 5aee62434443674335b56c912071cfcee9195b67,46881a6915498a4d2d1282c645f1e6e575009e8d..86dd24022871a843f38df5b91f5cd418c5f80ec2
@@@ -292,6 -292,43 +292,6 @@@ static int ssd1307fb_update_display(str
        return ssd1307fb_update_rect(par, 0, 0, par->width, par->height);
  }
  
 -static ssize_t ssd1307fb_write(struct fb_info *info, const char __user *buf,
 -              size_t count, loff_t *ppos)
 -{
 -      struct ssd1307fb_par *par = info->par;
 -      unsigned long total_size;
 -      unsigned long p = *ppos;
 -      void *dst;
 -      int ret;
 -
 -      if (!info->screen_buffer)
 -              return -ENODEV;
 -
 -      total_size = info->fix.smem_len;
 -
 -      if (p > total_size)
 -              return -EINVAL;
 -
 -      if (count + p > total_size)
 -              count = total_size - p;
 -
 -      if (!count)
 -              return -EINVAL;
 -
 -      dst = info->screen_buffer + p;
 -
 -      if (copy_from_user(dst, buf, count))
 -              return -EFAULT;
 -
 -      ret = ssd1307fb_update_display(par);
 -      if (ret < 0)
 -              return ret;
 -
 -      *ppos += count;
 -
 -      return count;
 -}
 -
  static int ssd1307fb_blank(int blank_mode, struct fb_info *info)
  {
        struct ssd1307fb_par *par = info->par;
                return ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_ON);
  }
  
 -static void ssd1307fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 +static void ssd1307fb_defio_damage_range(struct fb_info *info, off_t off, size_t len)
  {
        struct ssd1307fb_par *par = info->par;
 -      sys_fillrect(info, rect);
 -      ssd1307fb_update_rect(par, rect->dx, rect->dy, rect->width,
 -                            rect->height);
 -}
  
 -static void ssd1307fb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
 -{
 -      struct ssd1307fb_par *par = info->par;
 -      sys_copyarea(info, area);
 -      ssd1307fb_update_rect(par, area->dx, area->dy, area->width,
 -                            area->height);
 +      ssd1307fb_update_display(par);
  }
  
 -static void ssd1307fb_imageblit(struct fb_info *info, const struct fb_image *image)
 +static void ssd1307fb_defio_damage_area(struct fb_info *info, u32 x, u32 y,
 +                                      u32 width, u32 height)
  {
        struct ssd1307fb_par *par = info->par;
 -      sys_imageblit(info, image);
 -      ssd1307fb_update_rect(par, image->dx, image->dy, image->width,
 -                            image->height);
 +
 +      ssd1307fb_update_rect(par, x, y, width, height);
  }
  
 +FB_GEN_DEFAULT_DEFERRED_SYSMEM_OPS(ssd1307fb,
 +                                 ssd1307fb_defio_damage_range,
 +                                 ssd1307fb_defio_damage_area)
 +
  static const struct fb_ops ssd1307fb_ops = {
        .owner          = THIS_MODULE,
 -      .fb_read        = fb_sys_read,
 -      .fb_write       = ssd1307fb_write,
 +      FB_DEFAULT_DEFERRED_OPS(ssd1307fb),
        .fb_blank       = ssd1307fb_blank,
 -      .fb_fillrect    = ssd1307fb_fillrect,
 -      .fb_copyarea    = ssd1307fb_copyarea,
 -      .fb_imageblit   = ssd1307fb_imageblit,
 -      .fb_mmap        = fb_deferred_io_mmap,
  };
  
  static void ssd1307fb_deferred_io(struct fb_info *info, struct list_head *pagereflist)
@@@ -352,8 -399,8 +352,8 @@@ static int ssd1307fb_init(struct ssd130
                /* Enable the PWM */
                pwm_enable(par->pwm);
  
-               dev_dbg(&par->client->dev, "Using PWM%d with a %lluns period.\n",
-                       par->pwm->pwm, pwm_get_period(par->pwm));
+               dev_dbg(&par->client->dev, "Using PWM %s with a %lluns period.\n",
+                       par->pwm->label, pwm_get_period(par->pwm));
        }
  
        /* Set initial contrast */
index 3350f56058c476f704e0bcfa2370cddcd7b97de7,17d61e1d11a67f768c6d7cdab2aec035788271fb..a93b06614187d843bc742f5eb66e62744a45cecf
@@@ -8,7 -8,8 +8,8 @@@
  #include <linux/kernel.h>
  #include <linux/fb.h>
  #include <linux/init.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  struct gfb_info {
        struct fb_info          *info;
@@@ -61,8 -62,10 +62,8 @@@ static int gfb_setcolreg(unsigned regno
  
  static const struct fb_ops gfb_ops = {
        .owner                  = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_setcolreg           = gfb_setcolreg,
 -      .fb_fillrect            = cfb_fillrect,
 -      .fb_copyarea            = cfb_copyarea,
 -      .fb_imageblit           = cfb_imageblit,
  };
  
  static int gfb_set_fbinfo(struct gfb_info *gp)
@@@ -70,6 -73,7 +71,6 @@@
        struct fb_info *info = gp->info;
        struct fb_var_screeninfo *var = &info->var;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &gfb_ops;
        info->screen_base = gp->fb_base;
        info->screen_size = gp->fb_size;
index 47b85e4959dd671147df83f0a42208a58a65030d,e64ec7d0caf9b26a6f89a4802f5d4fff9fdc0af6..42426d09b935f5a6ea8bd4054e5ab6eb59208a8e
@@@ -10,7 -10,7 +10,7 @@@
  #include <linux/fb.h>
  #include <linux/pci.h>
  #include <linux/init.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
  
  #include <asm/io.h>
  
@@@ -66,8 -66,10 +66,8 @@@ static int s3d_setcolreg(unsigned regno
  
  static const struct fb_ops s3d_ops = {
        .owner                  = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_setcolreg           = s3d_setcolreg,
 -      .fb_fillrect            = cfb_fillrect,
 -      .fb_copyarea            = cfb_copyarea,
 -      .fb_imageblit           = cfb_imageblit,
  };
  
  static int s3d_set_fbinfo(struct s3d_info *sp)
@@@ -75,6 -77,7 +75,6 @@@
        struct fb_info *info = sp->info;
        struct fb_var_screeninfo *var = &info->var;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &s3d_ops;
        info->screen_base = sp->fb_base;
        info->screen_size = sp->fb_size;
index 28a5e2251119afc2dd7150364045226a5b49c83f,c4e01e87148350a5ba21bb8c8b5f3e8d7b9039f9..3b7dcdae9f83f9acad1bd1d770b3e1df134ba02e
@@@ -10,7 -10,7 +10,7 @@@
  #include <linux/fb.h>
  #include <linux/pci.h>
  #include <linux/init.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
  
  #include <asm/io.h>
  
@@@ -200,6 -200,7 +200,6 @@@ static int e3d_set_fbinfo(struct e3d_in
        struct fb_info *info = ep->info;
        struct fb_var_screeninfo *var = &info->var;
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &e3d_ops;
        info->screen_base = ep->fb_base;
        info->screen_size = ep->fb_size;
index 3572766de89c37ee1adec8d269e77effe07fe4d2,255eb57aefa27670042da2ec27b1f314a993d184..7fb8179a8f41578d6b27094762162221f2c0f506
@@@ -17,7 -17,8 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
- #include <linux/of_device.h>
+ #include <linux/of.h>
+ #include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -438,6 -439,7 +439,6 @@@ static int tcx_probe(struct platform_de
                par->mmap_map[i].poff = op->resource[j].start;
        }
  
 -      info->flags = FBINFO_DEFAULT;
        info->fbops = &tcx_ops;
  
        /* Initialize brooktree DAC. */
index bf049a1a6ab2d288301a04ff8a7e1d5f542f81f6,542baddd54ad8e41dd4c5889a25230352d3cde16..33d20910cb41c4f82adf7c8ce3332ba60aba44db
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/errno.h>
+ #include <linux/platform_device.h>
  #include <linux/string.h>
  #include <linux/mm.h>
  #include <linux/fb.h>
  #include <linux/init.h>
  #include <linux/dma-mapping.h>
- #include <linux/of_device.h>
- #include <linux/of_platform.h>
- #include <linux/of_address.h>
+ #include <linux/of.h>
  #include <linux/io.h>
  #include <linux/slab.h>
  
@@@ -251,9 -250,11 +250,9 @@@ xilinx_fb_blank(int blank_mode, struct 
  
  static const struct fb_ops xilinxfb_ops = {
        .owner                  = THIS_MODULE,
 +      FB_DEFAULT_IOMEM_OPS,
        .fb_setcolreg           = xilinx_fb_setcolreg,
        .fb_blank               = xilinx_fb_blank,
 -      .fb_fillrect            = cfb_fillrect,
 -      .fb_copyarea            = cfb_copyarea,
 -      .fb_imageblit           = cfb_imageblit,
  };
  
  /* ---------------------------------------------------------------------
@@@ -322,6 -323,7 +321,6 @@@ static int xilinxfb_assign(struct platf
        drvdata->info.fix.line_length = pdata->xvirt * BYTES_PER_PIXEL;
  
        drvdata->info.pseudo_palette = drvdata->pseudo_palette;
 -      drvdata->info.flags = FBINFO_DEFAULT;
        drvdata->info.var = xilinx_fb_var;
        drvdata->info.var.height = pdata->screen_height_mm;
        drvdata->info.var.width = pdata->screen_width_mm;