]> Git Repo - linux.git/commitdiff
Merge tag 'media/v5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
authorLinus Torvalds <[email protected]>
Thu, 4 Jun 2020 03:59:38 +0000 (20:59 -0700)
committerLinus Torvalds <[email protected]>
Thu, 4 Jun 2020 03:59:38 +0000 (20:59 -0700)
Pull media updates from Mauro Carvalho Chehab:

 - Media documentation is now split into admin-guide, driver-api and
   userspace-api books (a longstanding request from Jon);

 - The media Kconfig was reorganized, in order to make easier to select
   drivers and their dependencies;

 - The testing drivers now has a separate directory;

 - added a new driver for Rockchip Video Decoder IP;

 - The atomisp staging driver was resurrected. It is meant to work with
   4 generations of cameras on Atom-based laptops, tablets and cell
   phones. So, it seems worth investing time to cleanup this driver and
   making it in good shape.

 - Added some V4L2 core ancillary routines to help with h264 codecs;

 - Added an ov2740 image sensor driver;

 - The si2157 gained support for Analog TV, which, in turn, added
   support for some cx231xx and cx23885 boards to also support analog
   standards;

 - Added some V4L2 controls (V4L2_CID_CAMERA_ORIENTATION and
   V4L2_CID_CAMERA_SENSOR_ROTATION) to help identifying where the camera
   is located at the device;

 - VIDIOC_ENUM_FMT was extended to support MC-centric devices;

 - Lots of drivers improvements and cleanups.

* tag 'media/v5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (503 commits)
  media: Documentation: media: Refer to mbus format documentation from CSI-2 docs
  media: s5k5baf: Replace zero-length array with flexible-array
  media: i2c: imx219: Drop <linux/clk-provider.h> and <linux/clkdev.h>
  media: i2c: Add ov2740 image sensor driver
  media: ov8856: Implement sensor module revision identification
  media: ov8856: Add devicetree support
  media: dt-bindings: ov8856: Document YAML bindings
  media: dvb-usb: Add Cinergy S2 PCIe Dual Port support
  media: dvbdev: Fix tuner->demod media controller link
  media: dt-bindings: phy: phy-rockchip-dphy-rx0: move rockchip dphy rx0 bindings out of staging
  media: staging: dt-bindings: phy-rockchip-dphy-rx0: remove non-used reg property
  media: atomisp: unify the version for isp2401 a0 and b0 versions
  media: atomisp: update TODO with the current data
  media: atomisp: adjust some code at sh_css that could be broken
  media: atomisp: don't produce errs for ignored IRQs
  media: atomisp: print IRQ when debugging
  media: atomisp: isp_mmu: don't use kmem_cache
  media: atomisp: add a notice about possible leak resources
  media: atomisp: disable the dynamic and reserved pools
  media: atomisp: turn on camera before setting it
  ...

1  2 
Documentation/Makefile
Documentation/admin-guide/kernel-parameters.txt
Documentation/driver-api/index.rst
Documentation/translations/zh_CN/video4linux/v4l2-framework.txt
MAINTAINERS
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
drivers/media/cec/core/cec-notifier.c
drivers/media/cec/usb/pulse8/pulse8-cec.c
drivers/media/v4l2-core/v4l2-fwnode.c
drivers/platform/x86/Kconfig

diff --combined Documentation/Makefile
index db1fc35ded50b9d98a97072559e84f08682ba42b,7e12d10ca8e09bc1b185b526025e7082abdc6b55..6b12dd82f71249318637aa8b2de73139d95de4b7
@@@ -55,15 -55,15 +55,15 @@@ I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) 
  loop_cmd = $(echo-cmd) $(cmd_$(1)) || exit;
  
  # $2 sphinx builder e.g. "html"
- # $3 name of the build subfolder / e.g. "media", used as:
+ # $3 name of the build subfolder / e.g. "userspace-api/media", used as:
  #    * dest folder relative to $(BUILDDIR) and
  #    * cache folder relative to $(BUILDDIR)/.doctrees
- # $4 dest subfolder e.g. "man" for man pages at media/man
+ # $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
  # $5 reST source folder relative to $(srctree)/$(src),
- #    e.g. "media" for the linux-tv book-set at ./Documentation/media
+ #    e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
  
  quiet_cmd_sphinx = SPHINX  $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
-       cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media $2 && \
+       cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media $2 && \
        PYTHONDONTWRITEBYTECODE=1 \
        BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(srctree)/$(src)/$5/$(SPHINX_CONF)) \
        $(PYTHON) $(srctree)/scripts/jobserver-exec \
@@@ -98,11 -98,7 +98,11 @@@ else # HAVE_PDFLATE
  
  pdfdocs: latexdocs
        @$(srctree)/scripts/sphinx-pre-install --version-check
 -      $(foreach var,$(SPHINXDIRS), $(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" -C $(BUILDDIR)/$(var)/latex || exit;)
 +      $(foreach var,$(SPHINXDIRS), \
 +         $(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" -C $(BUILDDIR)/$(var)/latex || exit; \
 +         mkdir -p $(BUILDDIR)/$(var)/pdf; \
 +         mv $(subst .tex,.pdf,$(wildcard $(BUILDDIR)/$(var)/latex/*.tex)) $(BUILDDIR)/$(var)/pdf/; \
 +      )
  
  endif # HAVE_PDFLATEX
  
@@@ -124,7 -120,7 +124,7 @@@ refcheckdocs
  
  cleandocs:
        $(Q)rm -rf $(BUILDDIR)
-       $(Q)$(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media clean
+       $(Q)$(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media clean
  
  dochelp:
        @echo  ' Linux kernel internal documentation in different formats from ReST:'
index 0b4b9e1e35b66cdeb1008d33834911e44b3d8125,3ed0b42ca6f054620425d4989a21bb5040854532..89386f6f3ab61a759b84150e0eff0788613ab206
                              shot down by NMI
  
        autoconf=       [IPV6]
 -                      See Documentation/networking/ipv6.txt.
 +                      See Documentation/networking/ipv6.rst.
  
        show_lapic=     [APIC,X86] Advanced Programmable Interrupt Controller
                        Limit apic dumping. The parameter defines the maximal
        bttv.card=      [HW,V4L] bttv (bt848 + bt878 based grabber cards)
        bttv.radio=     Most important insmod options are available as
                        kernel args too.
-       bttv.pll=       See Documentation/media/v4l-drivers/bttv.rst
+       bttv.pll=       See Documentation/admin-guide/media/bttv.rst
        bttv.tuner=
  
        bulk_remove=off [PPC]  This parameter disables the use of the pSeries
  
                        See Documentation/admin-guide/serial-console.rst for more
                        information.  See
 -                      Documentation/networking/netconsole.txt for an
 +                      Documentation/networking/netconsole.rst for an
                        alternative.
  
                uart[8250],io,<addr>[,options]
  
        decnet.addr=    [HW,NET]
                        Format: <area>[,<node>]
 -                      See also Documentation/networking/decnet.txt.
 +                      See also Documentation/networking/decnet.rst.
  
        default_hugepagesz=
 -                      [same as hugepagesz=] The size of the default
 -                      HugeTLB page size. This is the size represented by
 -                      the legacy /proc/ hugepages APIs, used for SHM, and
 -                      default size when mounting hugetlbfs filesystems.
 -                      Defaults to the default architecture's huge page size
 -                      if not specified.
 +                      [HW] The size of the default HugeTLB page. This is
 +                      the size represented by the legacy /proc/ hugepages
 +                      APIs.  In addition, this is the default hugetlb size
 +                      used for shmget(), mmap() and mounting hugetlbfs
 +                      filesystems.  If not specified, defaults to the
 +                      architecture's default huge page size.  Huge page
 +                      sizes are architecture dependent.  See also
 +                      Documentation/admin-guide/mm/hugetlbpage.rst.
 +                      Format: size[KMG]
  
        deferred_probe_timeout=
                        [KNL] Debugging option to set a timeout in seconds for
                        miss to occur.
  
        disable=        [IPV6]
 -                      See Documentation/networking/ipv6.txt.
 +                      See Documentation/networking/ipv6.rst.
  
        hardened_usercopy=
                          [KNL] Under CONFIG_HARDENED_USERCOPY, whether
                        to workaround buggy firmware.
  
        disable_ipv6=   [IPV6]
 -                      See Documentation/networking/ipv6.txt.
 +                      See Documentation/networking/ipv6.rst.
  
        disable_mtrr_cleanup [X86]
                        The kernel tries to adjust MTRR layout from continuous
                        This is designed to be used in conjunction with
                        the boot argument: earlyprintk=vga
  
 +                      This parameter works in place of the kgdboc parameter
 +                      but can only be used if the backing tty is available
 +                      very early in the boot process. For early debugging
 +                      via a serial port see kgdboc_earlycon instead.
 +
        edd=            [EDD]
                        Format: {"off" | "on" | "skip[mbr]"}
  
                        hugepages using the cma allocator. If enabled, the
                        boot-time allocation of gigantic hugepages is skipped.
  
 -      hugepages=      [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
 -      hugepagesz=     [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
 -                      On x86-64 and powerpc, this option can be specified
 -                      multiple times interleaved with hugepages= to reserve
 -                      huge pages of different sizes. Valid pages sizes on
 -                      x86-64 are 2M (when the CPU supports "pse") and 1G
 -                      (when the CPU supports the "pdpe1gb" cpuinfo flag).
 +      hugepages=      [HW] Number of HugeTLB pages to allocate at boot.
 +                      If this follows hugepagesz (below), it specifies
 +                      the number of pages of hugepagesz to be allocated.
 +                      If this is the first HugeTLB parameter on the command
 +                      line, it specifies the number of pages to allocate for
 +                      the default huge page size.  See also
 +                      Documentation/admin-guide/mm/hugetlbpage.rst.
 +                      Format: <integer>
 +
 +      hugepagesz=
 +                      [HW] The size of the HugeTLB pages.  This is used in
 +                      conjunction with hugepages (above) to allocate huge
 +                      pages of a specific size at boot.  The pair
 +                      hugepagesz=X hugepages=Y can be specified once for
 +                      each supported huge page size. Huge page sizes are
 +                      architecture dependent.  See also
 +                      Documentation/admin-guide/mm/hugetlbpage.rst.
 +                      Format: size[KMG]
  
        hung_task_panic=
                        [KNL] Should the hung task detector generate panics.
  
        initrd=         [BOOT] Specify the location of the initial ramdisk
  
 +      initrdmem=      [KNL] Specify a physical address and size from which to
 +                      load the initrd. If an initrd is compiled in or
 +                      specified in the bootparams, it takes priority over this
 +                      setting.
 +                      Format: ss[KMG],nn[KMG]
 +                      Default is 0, 0
 +
        init_on_alloc=  [MM] Fill newly allocated pages and heap objects with
                        zeroes.
                        Format: 0 | 1
                         kms, kbd format: kms,kbd
                         kms, kbd and serial format: kms,kbd,<ser_dev>[,baud]
  
 +      kgdboc_earlycon=        [KGDB,HW]
 +                      If the boot console provides the ability to read
 +                      characters and can work in polling mode, you can use
 +                      this parameter to tell kgdb to use it as a backend
 +                      until the normal console is registered. Intended to
 +                      be used together with the kgdboc parameter which
 +                      specifies the normal console to transition to.
 +
 +                      The name of the early console should be specified
 +                      as the value of this parameter. Note that the name of
 +                      the early console might be different than the tty
 +                      name passed to kgdboc. It's OK to leave the value
 +                      blank and the first boot console that implements
 +                      read() will be picked.
 +
        kgdbwait        [KGDB] Stop kernel execution and enter the
                        kernel debugger at the earliest opportunity.
  
                        See Documentation/admin-guide/pm/sleep-states.rst.
  
        meye.*=         [HW] Set MotionEye Camera parameters
-                       See Documentation/media/v4l-drivers/meye.rst.
+                       See Documentation/admin-guide/media/meye.rst.
  
        mfgpt_irq=      [IA-32] Specify the IRQ to use for the
                        Multi-Function General Purpose Timers on AMD Geode
                        See Documentation/admin-guide/sysctl/vm.rst for details.
  
        ohci1394_dma=early      [HW] enable debugging via the ohci1394 driver.
 -                      See Documentation/debugging-via-ohci1394.txt for more
 +                      See Documentation/core-api/debugging-via-ohci1394.rst for more
                        info.
  
        olpc_ec_timeout= [OLPC] ms delay when issuing EC commands
                        Duration of CPU stall (s) to test RCU CPU stall
                        warnings, zero to disable.
  
 +      rcutorture.stall_cpu_block= [KNL]
 +                      Sleep while stalling if set.  This will result
 +                      in warnings from preemptible RCU in addition
 +                      to any other stall-related activity.
 +
        rcutorture.stall_cpu_holdoff= [KNL]
                        Time to wait (s) after boot before inducing stall.
  
        rcutorture.stall_cpu_irqsoff= [KNL]
                        Disable interrupts while stalling if set.
  
 +      rcutorture.stall_gp_kthread= [KNL]
 +                      Duration (s) of forced sleep within RCU
 +                      grace-period kthread to test RCU CPU stall
 +                      warnings, zero to disable.  If both stall_cpu
 +                      and stall_gp_kthread are specified, the
 +                      kthread is starved first, then the CPU.
 +
        rcutorture.stat_interval= [KNL]
                        Time (s) between statistics printk()s.
  
                        only normal grace-period primitives.  No effect
                        on CONFIG_TINY_RCU kernels.
  
 +      rcupdate.rcu_task_ipi_delay= [KNL]
 +                      Set time in jiffies during which RCU tasks will
 +                      avoid sending IPIs, starting with the beginning
 +                      of a given grace period.  Setting a large
 +                      number avoids disturbing real-time workloads,
 +                      but lengthens grace periods.
 +
        rcupdate.rcu_task_stall_timeout= [KNL]
                        Set timeout in jiffies for RCU task stall warning
                        messages.  Disable with a value less than or equal
                        Set the number of tcp_metrics_hash slots.
                        Default value is 8192 or 16384 depending on total
                        ram pages. This is used to specify the TCP metrics
 -                      cache size. See Documentation/networking/ip-sysctl.txt
 +                      cache size. See Documentation/networking/ip-sysctl.rst
                        "tcp_no_metrics_save" section for more details.
  
        tdfx=           [HW,DRM]
                        interruptions from clocksource watchdog are not
                        acceptable).
  
 +      tsc_early_khz=  [X86] Skip early TSC calibration and use the given
 +                      value instead. Useful when the early TSC frequency discovery
 +                      procedure is not reliable, such as on overclocked systems
 +                      with CPUID.16h support and partial CPUID.15h support.
 +                      Format: <unsigned int>
 +
        tsx=            [X86] Control Transactional Synchronization
                        Extensions (TSX) feature in Intel processors that
                        support TSX control.
  
        usbcore.old_scheme_first=
                        [USB] Start with the old device initialization
 -                      scheme,  applies only to low and full-speed devices
 -                       (default 0 = off).
 +                      scheme (default 0 = off).
  
        usbcore.usbfs_memory_mb=
                        [USB] Memory limit (in MB) for buffers allocated by
index 20c431c8e7be9b8dd5e3a1371dcb4fdd60f105b7,dcc47c029f8e3a537f26afbe23cfbbb313b3c1fb..6567187e76873a3d74931d397ee7ec560e6b0cfe
@@@ -39,7 -39,6 +39,7 @@@ available subsections can be seen below
     spi
     i2c
     ipmb
 +   ipmi
     i3c/index
     interconnect
     devfreq
@@@ -64,6 -63,7 +64,7 @@@
     pinctl
     gpio/index
     md/index
+    media/index
     misc_devices
     nfc/index
     dmaengine/index
index a96abcdec777e40c9d9c9af122adf8a02cbcf8f6,4d2af480a112b4a01e27ccd602961ed218b1412f..a88fcbc11eca6ec1d93d774e92bf139ae6cf2411
@@@ -1,4 -1,4 +1,4 @@@
- Chinese translated version of Documentation/media/media_kapi.rst
+ Chinese translated version of Documentation/driver-api/media/index.rst
  
  If you have any comment or update to the content, please contact the
  original document maintainer directly.  However, if you have a problem
@@@ -9,7 -9,7 +9,7 @@@ or if there is a problem with the trans
  Maintainer: Mauro Carvalho Chehab <[email protected]>
  Chinese maintainer: Fu Wei <[email protected]>
  ---------------------------------------------------------------------
- Documentation/media/media_kapi.rst 的中文翻译
+ Documentation/driver-api/media/index.rst 的中文翻译
  
  如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
  交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
@@@ -488,7 -488,7 +488,7 @@@ struct v4l2_subdev *sd = v4l2_i2c_new_s
  
  这个函数会加载给定的模块(如果没有模块需要加载,可以为 NULL),
  并用给定的 i2c 适配器结构体指针(i2c_adapter)和 器件地址(chip/address)
 -作为参数调用 i2c_new_device()。如果一切顺利,则就在 v4l2_device
 +作为参数调用 i2c_new_client_device()。如果一切顺利,则就在 v4l2_device
  中注册了子设备。
  
  你也可以利用 v4l2_i2c_new_subdev()的最后一个参数,传递一个可能的
@@@ -777,7 -777,7 +777,7 @@@ v4l2 æ ¸å¿\83 API æ\8f\90ä¾\9bäº\86ä¸\80个å¤\84ç\90\86è§
  线性 DMA(videobuf-dma-contig)以及大多用于 USB 设备的用 vmalloc
  分配的缓冲(videobuf-vmalloc)。
  
- 请参阅 Documentation/media/kapi/v4l2-videobuf.rst,以获得更多关于 videobuf
+ 请参阅 Documentation/driver-api/media/v4l2-videobuf.rst,以获得更多关于 videobuf
  层的使用信息。
  
  v4l2_fh 结构体
diff --combined MAINTAINERS
index e1897ed32930b43d7da77ef7fdb291e044cdad3b,791d2a862e41ec98b185c7df37d81bb6683e8d02..ddc1dc7e535e14f546b82d79e3c758026cbf7a74
@@@ -147,7 -147,7 +147,7 @@@ Maintainers Lis
  M:    Steffen Klassert <[email protected]>
  L:    [email protected]
  S:    Odd Fixes
 -F:    Documentation/networking/device_drivers/3com/vortex.txt
 +F:    Documentation/networking/device_drivers/3com/vortex.rst
  F:    drivers/net/ethernet/3com/3c59x.c
  
  3CR990 NETWORK DRIVER
@@@ -189,11 -189,11 +189,11 @@@ F:      drivers/net/hamradio/6pack.
  M:    Johannes Berg <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/
 +W:    https://wireless.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  F:    Documentation/driver-api/80211/cfg80211.rst
 -F:    Documentation/networking/regulatory.txt
 +F:    Documentation/networking/regulatory.rst
  F:    include/linux/ieee80211.h
  F:    include/net/cfg80211.h
  F:    include/net/ieee80211_radiotap.h
@@@ -505,7 -505,7 +505,7 @@@ F: drivers/hwmon/adm1029.
  ADM8211 WIRELESS DRIVER
  L:    [email protected]
  S:    Orphan
 -W:    http://wireless.kernel.org/
 +W:    https://wireless.wiki.kernel.org/
  F:    drivers/net/wireless/admtek/adm8211.*
  
  ADP1653 FLASH CONTROLLER DRIVER
@@@ -570,7 -570,7 +570,7 @@@ F: Documentation/devicetree/bindings/ii
  F:    drivers/input/misc/adxl34x.c
  
  ADXL372 THREE-AXIS DIGITAL ACCELEROMETER DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
  F:    Documentation/devicetree/bindings/iio/accel/adi,adxl372.yaml
@@@ -815,7 -815,7 +815,7 @@@ R: Saeed Bishara <[email protected]
  R:    Zorik Machulsky <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/networking/device_drivers/amazon/ena.txt
 +F:    Documentation/networking/device_drivers/amazon/ena.rst
  F:    drivers/net/ethernet/amazon/
  
  AMAZON RDMA EFA DRIVER
@@@ -842,13 -842,6 +842,13 @@@ S:       Supporte
  T:    git git://people.freedesktop.org/~agd5f/linux
  F:    drivers/gpu/drm/amd/display/
  
 +AMD ENERGY DRIVER
 +M:    Naveen Krishna Chatradhi <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/hwmon/amd_energy.rst
 +F:    drivers/hwmon/amd_energy.c
 +
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
  M:    Huang Rui <[email protected]>
  L:    [email protected]
@@@ -899,11 -892,6 +899,11 @@@ F:       drivers/gpu/drm/amd/include/v9_struc
  F:    drivers/gpu/drm/amd/include/vi_structs.h
  F:    include/uapi/linux/kfd_ioctl.h
  
 +AMD SPI DRIVER
 +M:    Sanjay R Mehta <[email protected]>
 +S:    Maintained
 +F:    drivers/spi/spi-amd.c
 +
  AMD MP2 I2C DRIVER
  M:    Elie Morisse <[email protected]>
  M:    Nehal Shah <[email protected]>
@@@ -934,7 -922,7 +934,7 @@@ F: arch/arm64/boot/dts/amd/amd-seattle-
  F:    drivers/net/ethernet/amd/xgbe/
  
  ANALOG DEVICES INC AD5686 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    [email protected]
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -942,7 -930,7 +942,7 @@@ F: drivers/iio/dac/ad5686
  F:    drivers/iio/dac/ad5696*
  
  ANALOG DEVICES INC AD5758 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    [email protected]
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -958,7 -946,7 +958,7 @@@ F: Documentation/devicetree/bindings/ii
  F:    drivers/iio/adc/ad7091r5.c
  
  ANALOG DEVICES INC AD7124 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    [email protected]
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -982,7 -970,7 +982,7 @@@ F: Documentation/devicetree/bindings/ii
  F:    drivers/iio/adc/ad7292.c
  
  ANALOG DEVICES INC AD7606 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  M:    Beniamin Bia <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -991,7 -979,7 +991,7 @@@ F: Documentation/devicetree/bindings/ii
  F:    drivers/iio/adc/ad7606.c
  
  ANALOG DEVICES INC AD7768-1 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    [email protected]
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -1052,7 -1040,7 +1052,7 @@@ F:      Documentation/devicetree/bindings/hw
  F:    drivers/hwmon/adm1177.c
  
  ANALOG DEVICES INC ADP5061 DRIVER
 -M:    Stefan Popa <stefan.popa@analog.com>
 +M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    [email protected]
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -1121,6 -1109,7 +1121,6 @@@ F:      drivers/iio/amplifiers/hmc425a.
  ANALOG DEVICES INC IIO DRIVERS
  M:    Lars-Peter Clausen <[email protected]>
  M:    Michael Hennerich <[email protected]>
 -M:    Stefan Popa <[email protected]>
  S:    Supported
  W:    http://wiki.analog.com/
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -1286,7 -1275,7 +1286,7 @@@ L:      [email protected]
  S:    Supported
  W:    https://www.marvell.com/
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
 -F:    Documentation/networking/device_drivers/aquantia/atlantic.txt
 +F:    Documentation/networking/device_drivers/aquantia/atlantic.rst
  F:    drivers/net/ethernet/aquantia/atlantic/
  
  AQUANTIA ETHERNET DRIVER PTP SUBSYSTEM
@@@ -2237,7 -2226,6 +2237,7 @@@ F:      drivers/*/qcom
  F:    drivers/*/qcom/
  F:    drivers/bluetooth/btqcomsmd.c
  F:    drivers/clocksource/timer-qcom.c
 +F:    drivers/cpuidle/cpuidle-qcom-spm.c
  F:    drivers/extcon/extcon-qcom*
  F:    drivers/i2c/busses/i2c-qcom-geni.c
  F:    drivers/i2c/busses/i2c-qup.c
@@@ -2862,14 -2850,14 +2862,14 @@@ M:   Nick Kossifidis <[email protected]
  M:    Luis Chamberlain <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/en/users/Drivers/ath5k
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath5k
  F:    drivers/net/wireless/ath/ath5k/
  
  ATHEROS ATH6KL WIRELESS DRIVER
  M:    Kalle Valo <[email protected]>
  L:    [email protected]
  S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/ath6kl
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
  F:    drivers/net/wireless/ath/ath6kl/
  
@@@ -3032,7 -3020,7 +3032,7 @@@ B43 WIRELESS DRIVE
  L:    [email protected]
  L:    [email protected]
  S:    Odd Fixes
 -W:    http://wireless.kernel.org/en/users/Drivers/b43
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/b43
  F:    drivers/net/wireless/broadcom/b43/
  
  B43LEGACY WIRELESS DRIVER
@@@ -3040,7 -3028,7 +3040,7 @@@ M:      Larry Finger <Larry.Finger@lwfinger.
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/en/users/Drivers/b43
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/b43
  F:    drivers/net/wireless/broadcom/b43legacy/
  
  BACKLIGHT CLASS/SUBSYSTEM
@@@ -3204,7 -3192,7 +3204,7 @@@ Q:      https://patchwork.ozlabs.org/project
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
  F:    Documentation/bpf/
 -F:    Documentation/networking/filter.txt
 +F:    Documentation/networking/filter.rst
  F:    arch/*/net/*
  F:    include/linux/bpf*
  F:    include/linux/filter.h
@@@ -3670,7 -3658,7 +3670,7 @@@ L:      [email protected]
  S:    Maintained
  W:    http://btrfs.wiki.kernel.org/
  Q:    http://patchwork.kernel.org/project/linux-btrfs/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git
  F:    Documentation/filesystems/btrfs.rst
  F:    fs/btrfs/
  F:    include/linux/btrfs*
@@@ -3682,7 -3670,7 +3682,7 @@@ L:      [email protected]
  S:    Odd fixes
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/bttv*
+ F:    Documentation/driver-api/media/drivers/bttv*
  F:    drivers/media/pci/bt8xx/bttv*
  
  BUS FREQUENCY DRIVER FOR SAMSUNG EXYNOS
@@@ -3743,7 -3731,7 +3743,7 @@@ CACHEFILES: FS-CACHE BACKEND FOR CACHIN
  M:    David Howells <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
 -F:    Documentation/filesystems/caching/cachefiles.txt
 +F:    Documentation/filesystems/caching/cachefiles.rst
  F:    fs/cachefiles/
  
  CADENCE MIPI-CSI2 BRIDGES
@@@ -3773,7 -3761,7 +3773,7 @@@ M:      Jonathan Corbet <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/cafe_ccic*
+ F:    Documentation/admin-guide/media/cafe_ccic*
  F:    drivers/media/platform/marvell-ccic/
  
  CAIF NETWORK LAYER
@@@ -3855,7 -3843,7 +3855,7 @@@ CARL9170 LINUX COMMUNITY WIRELESS DRIVE
  M:    Christian Lamparter <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/en/users/Drivers/carl9170
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/carl9170
  F:    drivers/net/wireless/ath/carl9170/
  
  CAVIUM I2C DRIVER
@@@ -3909,15 -3897,6 +3909,15 @@@ S:    Supporte
  W:    https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family
  F:    drivers/crypto/ccree/
  
 +CCTRNG ARM TRUSTZONE CRYPTOCELL TRUE RANDOM NUMBER GENERATOR (TRNG) DRIVER
 +M:    Hadar Gat <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/char/hw_random/cctrng.c
 +F:    drivers/char/hw_random/cctrng.h
 +F:    Documentation/devicetree/bindings/rng/arm-cctrng.txt
 +W:    https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family
 +
  CEC FRAMEWORK
  M:    Hans Verkuil <[email protected]>
  L:    [email protected]
@@@ -3926,8 -3905,8 +3926,8 @@@ W:      http://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/ABI/testing/debugfs-cec-error-inj
  F:    Documentation/devicetree/bindings/media/cec.txt
- F:    Documentation/media/kapi/cec-core.rst
- F:    Documentation/media/uapi/cec
+ F:    Documentation/driver-api/media/cec-core.rst
+ F:    Documentation/userspace-api/media/cec
  F:    drivers/media/cec/
  F:    drivers/media/rc/keymaps/rc-cec.c
  F:    include/media/cec-notifier.h
@@@ -3958,9 -3937,11 +3958,9 @@@ F:     arch/powerpc/platforms/cell
  CEPH COMMON CODE (LIBCEPH)
  M:    Ilya Dryomov <[email protected]>
  M:    Jeff Layton <[email protected]>
 -M:    Sage Weil <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://ceph.com/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
  T:    git git://github.com/ceph/ceph-client.git
  F:    include/linux/ceph/
  F:    include/linux/crush/
@@@ -3968,10 -3949,12 +3968,10 @@@ F:   net/ceph
  
  CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH)
  M:    Jeff Layton <[email protected]>
 -M:    Sage Weil <[email protected]>
  M:    Ilya Dryomov <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://ceph.com/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
  T:    git git://github.com/ceph/ceph-client.git
  F:    Documentation/filesystems/ceph.rst
  F:    fs/ceph/
@@@ -4220,7 -4203,7 +4220,7 @@@ M:      [email protected]
  L:    [email protected]
  S:    Maintained
  W:    http://www.coda.cs.cmu.edu/
 -F:    Documentation/filesystems/coda.txt
 +F:    Documentation/filesystems/coda.rst
  F:    fs/coda/
  F:    include/linux/coda*.h
  F:    include/uapi/linux/coda*.h
@@@ -4559,7 -4542,7 +4559,7 @@@ L:      [email protected]
  S:    Odd fixes
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/cx88*
+ F:    Documentation/driver-api/media/drivers/cx88*
  F:    drivers/media/pci/cx88/
  
  CXD2820R MEDIA DRIVER
@@@ -4711,7 -4694,7 +4711,7 @@@ F:      net/ax25/sysctl_net_ax25.
  DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
  L:    [email protected]
  S:    Orphan
 -F:    Documentation/networking/device_drivers/dec/dmfe.txt
 +F:    Documentation/networking/device_drivers/dec/dmfe.rst
  F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
@@@ -4745,7 -4728,7 +4745,7 @@@ DECnet NETWORK LAYE
  L:    [email protected]
  S:    Orphan
  W:    http://linux-decnet.sourceforge.net
 -F:    Documentation/networking/decnet.txt
 +F:    Documentation/networking/decnet.rst
  F:    net/decnet/
  
  DECSTATION PLATFORM SUPPORT
@@@ -5013,7 -4996,7 +5013,7 @@@ M:      Jan Kara <[email protected]
  R:    Amir Goldstein <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/filesystems/dnotify.txt
 +F:    Documentation/filesystems/dnotify.rst
  F:    fs/notify/dnotify/
  F:    include/linux/dnotify.h
  
@@@ -5027,7 -5010,7 +5027,7 @@@ W:      http://www.win.tue.nl/~aeb/partition
  DISKQUOTA
  M:    Jan Kara <[email protected]>
  S:    Maintained
 -F:    Documentation/filesystems/quota.txt
 +F:    Documentation/filesystems/quota.rst
  F:    fs/quota/
  F:    include/linux/quota*.h
  F:    include/uapi/linux/quota*.h
@@@ -5062,7 -5045,7 +5062,7 @@@ F:      drivers/dma-buf
  F:    include/linux/*fence.h
  F:    include/linux/dma-buf*
  F:    include/linux/dma-resv.h
 -K:    dma_(buf|fence|resv)
 +K:    \bdma_(?:buf|fence|resv)\b
  
  DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
  M:    Vinod Koul <[email protected]>
@@@ -5142,12 -5125,14 +5142,14 @@@ F:   scripts/documentation-file-ref-chec
  F:    scripts/kernel-doc
  F:    scripts/sphinx-pre-install
  X:    Documentation/ABI/
+ X:    Documentation/admin-guide/media/
  X:    Documentation/devicetree/
+ X:    Documentation/driver-api/media/
  X:    Documentation/firmware-guide/acpi/
  X:    Documentation/i2c/
- X:    Documentation/media/
  X:    Documentation/power/
  X:    Documentation/spi/
+ X:    Documentation/userspace-api/media/
  
  DOCUMENTATION SCRIPTS
  M:    Mauro Carvalho Chehab <[email protected]>
@@@ -5193,7 -5178,6 +5195,7 @@@ S:      Maintaine
  F:    drivers/soc/fsl/dpio
  
  DPAA2 ETHERNET DRIVER
 +M:    Ioana Ciornei <[email protected]>
  M:    Ioana Radulescu <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -5274,7 -5258,7 +5276,7 @@@ DRM DRIVER FOR ARM VERSATILE TFT PANEL
  M:    Linus Walleij <[email protected]>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.txt
 +F:    Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.yaml
  F:    drivers/gpu/drm/panel/panel-arm-versatile.c
  
  DRM DRIVER FOR ASPEED BMC GFX
@@@ -5300,7 -5284,7 +5302,7 @@@ F:      drivers/gpu/drm/bochs
  DRM DRIVER FOR BOE HIMAX8279D PANELS
  M:    Jerry Han <[email protected]>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/panel/boe,himax8279d.txt
 +F:    Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
  F:    drivers/gpu/drm/panel/panel-boe-himax8279d.c
  
  DRM DRIVER FOR FARADAY TVE200 TV ENCODER
@@@ -5318,7 -5302,7 +5320,7 @@@ F:      drivers/gpu/drm/panel/panel-feixin-k
  DRM DRIVER FOR FEIYANG FY07024DI26A30-D MIPI-DSI LCD PANELS
  M:    Jagan Teki <[email protected]>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/panel/feiyang,fy07024di26a30d.txt
 +F:    Documentation/devicetree/bindings/display/panel/feiyang,fy07024di26a30d.yaml
  F:    drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
  
  DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS
@@@ -5353,14 -5337,6 +5355,14 @@@ S:    Orphan / Obsolet
  F:    drivers/gpu/drm/i810/
  F:    include/uapi/drm/i810_drm.h
  
 +DRM DRIVER FOR LVDS PANELS
 +M:    Laurent Pinchart <[email protected]>
 +L:    [email protected]
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +S:    Maintained
 +F:    drivers/gpu/drm/panel/panel-lvds.c
 +F:    Documentation/devicetree/bindings/display/panel/lvds.yaml
 +
  DRM DRIVER FOR MATROX G200/G400 GRAPHICS CARDS
  S:    Orphan / Obsolete
  F:    drivers/gpu/drm/mga/
@@@ -5409,7 -5385,7 +5411,7 @@@ F:      include/uapi/drm/nouveau_drm.
  DRM DRIVER FOR OLIMEX LCD-OLINUXINO PANELS
  M:    Stefan Mavrodiev <[email protected]>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.txt
 +F:    Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml
  F:    drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
  
  DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
@@@ -5426,7 -5402,7 +5428,7 @@@ L:      [email protected]
  S:    Obsolete
  W:    https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    drivers/gpu/drm/cirrus/
 +F:    drivers/gpu/drm/tiny/cirrus.c
  
  DRM DRIVER FOR QXL VIRTUAL GPU
  M:    Dave Airlie <[email protected]>
@@@ -5476,7 -5452,7 +5478,7 @@@ F:      drivers/gpu/drm/tiny/st7586.
  DRM DRIVER FOR SITRONIX ST7701 PANELS
  M:    Jagan Teki <[email protected]>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/panel/sitronix,st7701.txt
 +F:    Documentation/devicetree/bindings/display/panel/sitronix,st7701.yaml
  F:    drivers/gpu/drm/panel/panel-sitronix-st7701.c
  
  DRM DRIVER FOR SITRONIX ST7735R PANELS
@@@ -5537,10 -5513,10 +5539,10 @@@ F:   drivers/gpu/drm/vboxvideo
  
  DRM DRIVER FOR VMWARE VIRTUAL GPU
  M:    "VMware Graphics" <[email protected]>
 -M:    Thomas Hellstrom <thellstrom@vmware.com>
 +M:    Roland Scheidegger <sroland@vmware.com>
  L:    [email protected]
  S:    Supported
 -T:    git git://people.freedesktop.org/~thomash/linux
 +T:    git git://people.freedesktop.org/~sroland/linux
  F:    drivers/gpu/drm/vmwgfx/
  F:    include/uapi/drm/vmwgfx_drm.h
  
@@@ -5961,9 -5937,9 +5963,9 @@@ F:      lib/dynamic_debug.
  DYNAMIC INTERRUPT MODERATION
  M:    Tal Gilboa <[email protected]>
  S:    Maintained
 +F:    Documentation/networking/net_dim.rst
  F:    include/linux/dim.h
  F:    lib/dim/
 -F:    Documentation/networking/net_dim.rst
  
  DZ DECSTATION DZ11 SERIAL DRIVER
  M:    "Maciej W. Rozycki" <[email protected]>
@@@ -6202,6 -6178,7 +6204,6 @@@ M:      Yash Shah <[email protected]
  L:    [email protected]
  S:    Supported
  F:    drivers/edac/sifive_edac.c
 -F:    drivers/soc/sifive_l2_cache.c
  
  EDAC-SKYLAKE
  M:    Tony Luck <[email protected]>
@@@ -6261,7 -6238,7 +6263,7 @@@ L:      [email protected]
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/em28xx*
+ F:    Documentation/admin-guide/media/em28xx*
  F:    drivers/media/usb/em28xx/
  
  EMBEDDED LINUX
@@@ -6742,13 -6719,6 +6744,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/crypto/fsl-sec4.txt
  F:    drivers/crypto/caam/
  
 +FREESCALE COLDFIRE M5441X MMC DRIVER
 +M:    Angelo Dureghello <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/mmc/host/sdhci-esdhc-mcf.c
 +F:    include/linux/platform_data/mmc-esdhc-mcf.h
 +
  FREESCALE DIU FRAMEBUFFER DRIVER
  M:    Timur Tabi <[email protected]>
  L:    [email protected]
@@@ -7056,24 -7026,13 +7058,24 @@@ R:   Darren Hart <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
 -F:    Documentation/*futex*
 +F:    Documentation/locking/*futex*
  F:    include/asm-generic/futex.h
  F:    include/linux/futex.h
  F:    include/uapi/linux/futex.h
  F:    kernel/futex.c
  F:    tools/perf/bench/futex*
 -F:    tools/testing/selftests/futex/
 +F:    Documentation/locking/*futex*
 +
 +GATEWORKS SYSTEM CONTROLLER (GSC) DRIVER
 +M:    Tim Harvey <[email protected]>
 +M:    Robert Jones <[email protected]>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/gateworks-gsc.yaml
 +F:    drivers/mfd/gateworks-gsc.c
 +F:    include/linux/mfd/gsc.h
 +F:    Documentation/hwmon/gsc-hwmon.rst
 +F:    drivers/hwmon/gsc-hwmon.c
 +F:    include/linux/platform_data/gsc_hwmon.h
  
  GASKET DRIVER FRAMEWORK
  M:    Rob Springer <[email protected]>
@@@ -7162,10 -7121,9 +7164,10 @@@ F:    include/uapi/asm-generic
  
  GENERIC PHY FRAMEWORK
  M:    Kishon Vijay Abraham I <[email protected]>
 +M:    Vinod Koul <[email protected]>
  L:    [email protected]
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
  F:    Documentation/devicetree/bindings/phy/
  F:    drivers/phy/
  F:    include/linux/phy/
@@@ -7502,7 -7460,7 +7504,7 @@@ L:      [email protected]
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/nxp,imx8mq-vpu.yaml
- F:    Documentation/devicetree/bindings/media/rockchip-vpu.txt
+ F:    Documentation/devicetree/bindings/media/rockchip-vpu.yaml
  F:    drivers/staging/media/hantro/
  
  HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
@@@ -7543,7 -7501,7 +7545,7 @@@ L:      [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git hwspinlock-next
  F:    Documentation/devicetree/bindings/hwlock/
 -F:    Documentation/hwspinlock.txt
 +F:    Documentation/locking/hwspinlock.rst
  F:    drivers/hwspinlock/
  F:    include/linux/hwspinlock.h
  
@@@ -7776,9 -7734,7 +7778,9 @@@ L:      [email protected]
  S:    Maintained
  F:    Documentation/vm/hmm.rst
  F:    include/linux/hmm*
 +F:    lib/test_hmm*
  F:    mm/hmm*
 +F:    tools/testing/selftests/vm/*hmm*
  
  HOST AP DRIVER
  M:    Jouni Malinen <[email protected]>
  S:    Orphan
  F:    drivers/platform/x86/tc1100-wmi.c
  
 -HP100:        Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
 -M:    Jaroslav Kysela <[email protected]>
 -S:    Obsolete
 -F:    drivers/staging/hp/hp100.*
 -
  HPET: High Precision Event Timers driver
  M:    Clemens Ladisch <[email protected]>
  S:    Maintained
@@@ -7852,10 -7813,10 +7854,10 @@@ F:   Documentation/devicetree/bindings/ii
  F:    drivers/iio/humidity/hts221*
  
  HUAWEI ETHERNET DRIVER
 -M:    Aviad Krawczyk <aviad.krawczyk@huawei.com>
 +M:    Bin Luo <luobin9@huawei.com>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/networking/hinic.txt
 +F:    Documentation/networking/hinic.rst
  F:    drivers/net/ethernet/huawei/hinic/
  
  HUGETLB FILESYSTEM
@@@ -7878,7 -7839,7 +7880,7 @@@ T:      git git://linuxtv.org/media_tree.gi
  F:    drivers/media/platform/sti/hva
  
  HWPOISON MEMORY FAILURE HANDLING
 -M:    Naoya Horiguchi <n[email protected].nec.com>
 +M:    Naoya Horiguchi <naoya.horiguchi@nec.com>
  L:    [email protected]
  S:    Maintained
  F:    mm/hwpoison-inject.c
@@@ -7907,7 -7868,7 +7909,7 @@@ S:      Supporte
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
  F:    Documentation/ABI/stable/sysfs-bus-vmbus
  F:    Documentation/ABI/testing/debugfs-hyperv
 -F:    Documentation/networking/device_drivers/microsoft/netvsc.txt
 +F:    Documentation/networking/device_drivers/microsoft/netvsc.rst
  F:    arch/x86/hyperv
  F:    arch/x86/include/asm/hyperv-tlfs.h
  F:    arch/x86/include/asm/mshyperv.h
@@@ -7924,7 -7885,6 +7926,7 @@@ F:      drivers/pci/controller/pci-hyperv.
  F:    drivers/scsi/storvsc_drv.c
  F:    drivers/uio/uio_hv_generic.c
  F:    drivers/video/fbdev/hyperv_fb.c
 +F:    include/asm-generic/hyperv-tlfs.h
  F:    include/asm-generic/mshyperv.h
  F:    include/clocksource/hyperv_timer.h
  F:    include/linux/hyperv.h
@@@ -7991,7 -7951,7 +7993,7 @@@ F:      Documentation/i2c/busses/i2c-parport
  F:    drivers/i2c/busses/i2c-parport.c
  
  I2C SUBSYSTEM
 -M:    Wolfram Sang <wsa@the-dreams.de>
 +M:    Wolfram Sang <wsa@kernel.org>
  L:    [email protected]
  S:    Maintained
  W:    https://i2c.wiki.kernel.org/
  S:    Maintained
  F:    drivers/platform/x86/intel_atomisp2_pm.c
  
 +INTEL BROXTON PMC DRIVER
 +M:    Mika Westerberg <[email protected]>
 +M:    Zha Qipeng <[email protected]>
 +S:    Maintained
 +F:    drivers/mfd/intel_pmc_bxt.c
 +F:    include/linux/mfd/intel_pmc_bxt.h
 +
  INTEL C600 SERIES SAS CONTROLLER DRIVER
  M:    Intel SCU Linux support <[email protected]>
  M:    Artur Paszkiewicz <[email protected]>
@@@ -8694,16 -8647,18 +8696,18 @@@ M:   Bingbu Cao <[email protected]
  R:    Tian Shu Qiu <[email protected]>
  L:    [email protected]
  S:    Maintained
- F:    Documentation/media/uapi/v4l/pixfmt-srggb10-ipu3.rst
+ F:    Documentation/userspace-api/media/v4l/pixfmt-srggb10-ipu3.rst
  F:    drivers/media/pci/intel/ipu3/
  
  INTEL IPU3 CSI-2 IMGU DRIVER
  M:    Sakari Ailus <[email protected]>
+ R:    Bingbu Cao <[email protected]>
+ R:    Tian Shu Qiu <[email protected]>
  L:    [email protected]
  S:    Maintained
- F:    Documentation/media/uapi/v4l/pixfmt-meta-intel-ipu3.rst
- F:    Documentation/media/v4l-drivers/ipu3.rst
- F:    Documentation/media/v4l-drivers/ipu3_rcb.svg
+ F:    Documentation/admin-guide/media/ipu3.rst
+ F:    Documentation/admin-guide/media/ipu3_rcb.svg
+ F:    Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst
  F:    drivers/staging/media/ipu3/
  
  INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT
@@@ -8755,13 -8710,6 +8759,13 @@@ F:    include/uapi/linux/mic_common.
  F:    include/uapi/linux/mic_ioctl.h
  F:    include/uapi/linux/scif_ioctl.h
  
 +INTEL P-Unit IPC DRIVER
 +M:    Zha Qipeng <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    arch/x86/include/asm/intel_punit_ipc.h
 +F:    drivers/platform/x86/intel_punit_ipc.c
 +
  INTEL PMC CORE DRIVER
  M:    Rajneesh Bhardwaj <[email protected]>
  M:    Vishwanath Somayaji <[email protected]>
  S:    Maintained
  F:    drivers/platform/x86/intel_pmc_core*
  
 -INTEL PMC/P-Unit IPC DRIVER
 -M:    Zha Qipeng<[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    arch/x86/include/asm/intel_pmc_ipc.h
 -F:    arch/x86/include/asm/intel_punit_ipc.h
 -F:    drivers/platform/x86/intel_pmc_ipc.c
 -F:    drivers/platform/x86/intel_punit_ipc.c
 -
  INTEL PMIC GPIO DRIVERS
  M:    Andy Shevchenko <[email protected]>
  S:    Maintained
@@@ -8788,8 -8745,8 +8792,8 @@@ INTEL PRO/WIRELESS 2100, 2200BG, 2915AB
  M:    Stanislav Yakovlev <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/networking/device_drivers/intel/ipw2100.txt
 -F:    Documentation/networking/device_drivers/intel/ipw2200.txt
 +F:    Documentation/networking/device_drivers/intel/ipw2100.rst
 +F:    Documentation/networking/device_drivers/intel/ipw2200.rst
  F:    drivers/net/wireless/intel/ipw2x00/
  
  INTEL PSTATE DRIVER
@@@ -8807,12 -8764,6 +8811,12 @@@ S:    Supporte
  F:    drivers/infiniband/hw/i40iw/
  F:    include/uapi/rdma/i40iw-abi.h
  
 +INTEL SCU DRIVERS
 +M:    Mika Westerberg <[email protected]>
 +S:    Maintained
 +F:    arch/x86/include/asm/intel_scu_ipc.h
 +F:    drivers/platform/x86/intel_scu_*
 +
  INTEL SPEED SELECT TECHNOLOGY
  M:    Srinivas Pandruvada <[email protected]>
  L:    [email protected]
@@@ -8879,13 -8830,6 +8883,13 @@@ F:    Documentation/admin-guide/wimax/i240
  F:    drivers/net/wimax/i2400m/
  F:    include/uapi/linux/wimax/i2400m.h
  
 +INTEL WMI SLIM BOOTLOADER (SBL) FIRMWARE UPDATE DRIVER
 +M:    Jithu Joseph <[email protected]>
 +R:    Maurice Ma <[email protected]>
 +S:    Maintained
 +W:    https://slimbootloader.github.io/security/firmware-update.html
 +F:    drivers/platform/x86/intel-wmi-sbl-fw-update.c
 +
  INTEL WMI THUNDERBOLT FORCE POWER DRIVER
  M:    Mario Limonciello <[email protected]>
  S:    Maintained
@@@ -8971,7 -8915,7 +8975,7 @@@ M:      Corey Minyard <[email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  W:    http://openipmi.sourceforge.net/
 -F:    Documentation/IPMI.txt
 +F:    Documentation/driver-api/ipmi.rst
  F:    Documentation/devicetree/bindings/ipmi/
  F:    drivers/char/ipmi/
  F:    include/linux/ipmi*
@@@ -8993,7 -8937,7 +8997,7 @@@ L:      [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs-next.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs.git
 -F:    Documentation/networking/ipvs-sysctl.txt
 +F:    Documentation/networking/ipvs-sysctl.rst
  F:    include/net/ip_vs.h
  F:    include/uapi/linux/ip_vs.h
  F:    net/netfilter/ipvs/
@@@ -9013,7 -8957,7 +9017,7 @@@ IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY
  M:    Marc Zyngier <[email protected]>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
 -F:    Documentation/IRQ-domain.txt
 +F:    Documentation/core-api/irq/irq-domain.rst
  F:    include/linux/irqdomain.h
  F:    kernel/irq/irqdomain.c
  F:    kernel/irq/msi.c
@@@ -9138,7 -9082,7 +9142,7 @@@ L:      [email protected]
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/ivtv*
+ F:    Documentation/admin-guide/media/ivtv*
  F:    drivers/media/pci/ivtv/
  F:    include/uapi/linux/ivtv*
  
  S:    Maintained
  W:    http://lse.sourceforge.net/kdump/
  F:    Documentation/admin-guide/kdump/
 +F:    fs/proc/vmcore.c
 +F:    include/linux/crash_core.h
 +F:    include/linux/crash_dump.h
 +F:    include/uapi/linux/vmcore.h
 +F:    kernel/crash_*.c
  
  KEENE FM RADIO TRANSMITTER DRIVER
  M:    Hans Verkuil <[email protected]>
@@@ -9368,6 -9307,7 +9372,6 @@@ F:      arch/arm64/include/asm/kvm
  F:    arch/arm64/include/uapi/asm/kvm*
  F:    arch/arm64/kvm/
  F:    include/kvm/arm_*
 -F:    virt/kvm/arm/
  
  KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
  L:    [email protected]
@@@ -9393,7 -9333,6 +9397,7 @@@ M:      Christian Borntraeger <borntraeger@d
  M:    Janosch Frank <[email protected]>
  R:    David Hildenbrand <[email protected]>
  R:    Cornelia Huck <[email protected]>
 +R:    Claudio Imbrenda <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -9481,13 -9420,6 +9485,13 @@@ F:    include/linux/keyctl.
  F:    include/uapi/linux/keyctl.h
  F:    security/keys/
  
 +KFIFO
 +M:    Stefani Seibold <[email protected]>
 +S:    Maintained
 +F:    include/linux/kfifo.h
 +F:    lib/kfifo.c
 +F:    samples/kfifo/
 +
  KGDB / KDB /debug_core
  M:    Jason Wessel <[email protected]>
  M:    Daniel Thompson <[email protected]>
@@@ -9578,7 -9510,7 +9582,7 @@@ F:      drivers/soc/lanti
  LAPB module
  L:    [email protected]
  S:    Orphan
 -F:    Documentation/networking/lapb-module.txt
 +F:    Documentation/networking/lapb-module.rst
  F:    include/*/lapb.h
  F:    net/lapb/
  
@@@ -9792,13 -9724,6 +9796,13 @@@ F:    drivers/lightnvm
  F:    include/linux/lightnvm.h
  F:    include/uapi/linux/lightnvm.h
  
 +LINEAR RANGES HELPERS
 +M:    Mark Brown <[email protected]>
 +R:    Matti Vaittinen <[email protected]>
 +F:    lib/linear_ranges.c
 +F:    lib/test_linear_ranges.c
 +F:    include/linux/linear_range.h
 +
  LINUX FOR POWER MACINTOSH
  M:    Benjamin Herrenschmidt <[email protected]>
  L:    [email protected]
@@@ -10146,10 -10071,10 +10150,10 @@@ MAC8021
  M:    Johannes Berg <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/
 +W:    https://wireless.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
 -F:    Documentation/networking/mac80211-injection.txt
 +F:    Documentation/networking/mac80211-injection.rst
  F:    Documentation/networking/mac80211_hwsim/mac80211_hwsim.rst
  F:    drivers/net/wireless/mac80211_hwsim.[ch]
  F:    include/net/mac80211.h
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/i2c/max2175.txt
- F:    Documentation/media/v4l-drivers/max2175.rst
+ F:    Documentation/userspace-api/media/drivers/max2175.rst
  F:    drivers/media/i2c/max2175*
  F:    include/uapi/linux/max2175.h
  
@@@ -10530,8 -10455,8 +10534,8 @@@ M:   Philipp Zabel <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
+ F:    Documentation/admin-guide/media/imx.rst
  F:    Documentation/devicetree/bindings/media/imx.txt
- F:    Documentation/media/v4l-drivers/imx.rst
  F:    drivers/staging/media/imx/
  F:    include/linux/imx-media.h
  F:    include/media/imx.h
@@@ -10541,9 -10466,9 +10545,9 @@@ M:   Rui Miguel Silva <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
+ F:    Documentation/admin-guide/media/imx7.rst
  F:    Documentation/devicetree/bindings/media/imx7-csi.txt
  F:    Documentation/devicetree/bindings/media/imx7-mipi-csi2.txt
- F:    Documentation/media/v4l-drivers/imx7.rst
  F:    drivers/staging/media/imx/imx7-media-csi.c
  F:    drivers/staging/media/imx/imx7-mipi-csis.c
  
@@@ -10689,8 -10614,10 +10693,10 @@@ S: Maintaine
  W:    https://linuxtv.org
  Q:    http://patchwork.kernel.org/project/linux-media/list/
  T:    git git://linuxtv.org/media_tree.git
+ F:    Documentation/admin-guide/media/
  F:    Documentation/devicetree/bindings/media/
- F:    Documentation/media/
+ F:    Documentation/driver-api/media/
+ F:    Documentation/userspace-api/media/
  F:    drivers/media/
  F:    drivers/staging/media/
  F:    include/linux/platform_data/media/
  S:    Maintained
  F:    drivers/net/ethernet/mediatek/
  
 +MEDIATEK I2C CONTROLLER DRIVER
 +M:    Qii Wang <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt
 +F:    drivers/i2c/busses/i2c-mt65xx.c
 +
  MEDIATEK JPEG DRIVER
  M:    Rick Chang <[email protected]>
  M:    Bin Liu <[email protected]>
@@@ -10783,6 -10703,7 +10789,6 @@@ MEDIATEK MT76 WIRELESS LAN DRIVE
  M:    Felix Fietkau <[email protected]>
  M:    Lorenzo Bianconi <[email protected]>
  R:    Ryder Lee <[email protected]>
 -R:    Roy Luo <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt76/
@@@ -11090,10 -11011,12 +11096,12 @@@ F:        drivers/mtd/nand/raw/meson_
  
  MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS
  M:    Maxime Jourdan <[email protected]>
+ M:    Neil Armstrong <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
+ F:    Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml
  F:    drivers/staging/media/meson/vdec/
  
  METHODE UDPU SUPPORT
@@@ -11474,7 -11397,7 +11482,7 @@@ F:   drivers/regulator/mpq7920.
  MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
  S:    Orphan
  W:    http://popies.net/meye/
- F:    Documentation/media/v4l-drivers/meye*
+ F:    Documentation/userspace-api/media/drivers/meye*
  F:    drivers/media/pci/meye/
  F:    include/uapi/linux/meye.h
  
@@@ -11733,8 -11656,8 +11741,8 @@@ NETERION 10GbE DRIVERS (s2io/vxge
  M:    Jon Mason <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/networking/device_drivers/neterion/s2io.txt
 -F:    Documentation/networking/device_drivers/neterion/vxge.txt
 +F:    Documentation/networking/device_drivers/neterion/s2io.rst
 +F:    Documentation/networking/device_drivers/neterion/vxge.rst
  F:    drivers/net/ethernet/neterion/
  
  NETFILTER
@@@ -11796,9 -11719,8 +11804,9 @@@ F:   net/core/drop_monitor.
  
  NETWORKING DRIVERS
  M:    "David S. Miller" <[email protected]>
 +M:    Jakub Kicinski <[email protected]>
  L:    [email protected]
 -S:    Odd Fixes
 +S:    Maintained
  W:    http://www.linuxfoundation.org/en/Net
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
@@@ -12501,6 -12423,15 +12509,15 @@@ S: Maintaine
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/i2c/ov2685.c
  
+ OMNIVISION OV2740 SENSOR DRIVER
+ M:    Tianshu Qiu <[email protected]>
+ R:    Shawn Tu <[email protected]>
+ R:    Bingbu Cao <[email protected]>
+ L:    [email protected]
+ S:    Maintained
+ T:    git git://linuxtv.org/media_tree.git
+ F:    drivers/media/i2c/ov2740.c
  OMNIVISION OV5640 SENSOR DRIVER
  M:    Steve Longerbeam <[email protected]>
  L:    [email protected]
@@@ -12563,10 -12494,11 +12580,11 @@@ F:        Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/ov7740.c
  
  OMNIVISION OV8856 SENSOR DRIVER
- M:    Ben Kao <ben.kao@intel.com>
+ M:    Dongchun Zhu <dongchun.zhu@mediatek.com>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
+ F:    Documentation/devicetree/bindings/media/i2c/ov8856.yaml
  F:    drivers/media/i2c/ov8856.c
  
  OMNIVISION OV9640 SENSOR DRIVER
@@@ -12734,7 -12666,7 +12752,7 @@@ F:   fs/orangefs
  ORINOCO DRIVER
  L:    [email protected]
  S:    Orphan
 -W:    http://wireless.kernel.org/en/users/Drivers/orinoco
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/orinoco
  W:    http://www.nongnu.org/orinoco/
  F:    drivers/net/wireless/intersil/orinoco/
  
@@@ -12760,7 -12692,7 +12778,7 @@@ P54 WIRELESS DRIVE
  M:    Christian Lamparter <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/en/users/Drivers/p54
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/p54
  F:    drivers/net/wireless/intersil/p54/
  
  PACKING
@@@ -12841,7 -12773,7 +12859,7 @@@ M:   "James E.J. Bottomley" <James.Bottom
  M:    Helge Deller <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://www.parisc-linux.org/
 +W:    https://parisc.wiki.kernel.org
  Q:    http://patchwork.kernel.org/project/linux-parisc/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git
@@@ -13128,7 -13060,7 +13146,7 @@@ F:   drivers/pci/controller/pci-xgene-msi
  
  PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS
  M:    Lorenzo Pieralisi <[email protected]>
 -R:    Andrew Murray <[email protected]>
 +R:    Rob Herring <[email protected]>
  L:    [email protected]
  S:    Supported
  Q:    http://patchwork.ozlabs.org/project/linux-pci/list/
@@@ -13340,7 -13272,7 +13358,7 @@@ F:   drivers/input/joystick/pxrc.
  PHONET PROTOCOL
  M:    Remi Denis-Courmont <[email protected]>
  S:    Supported
 -F:    Documentation/networking/phonet.txt
 +F:    Documentation/networking/phonet.rst
  F:    include/linux/phonet.h
  F:    include/net/phonet/
  F:    include/uapi/linux/phonet.h
@@@ -13681,7 -13613,7 +13699,7 @@@ PRISM54 WIRELESS DRIVE
  M:    Luis Chamberlain <[email protected]>
  L:    [email protected]
  S:    Obsolete
 -W:    http://wireless.kernel.org/en/users/Drivers/p54
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/p54
  F:    drivers/net/wireless/intersil/prism54/
  
  PROC FILESYSTEM
@@@ -13750,7 -13682,6 +13768,7 @@@ M:   Tony Luck <[email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/pstore
  F:    Documentation/admin-guide/ramoops.rst
 +F:    Documentation/admin-guide/pstore-blk.rst
  F:    Documentation/devicetree/bindings/reserved-memory/ramoops.txt
  F:    drivers/acpi/apei/erst.c
  F:    drivers/firmware/efi/efi-pstore.c
@@@ -13788,8 -13719,8 +13806,8 @@@ M:   Hans Verkuil <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/cec-drivers/pulse8-cec.rst
- F:    drivers/media/usb/pulse8-cec/*
+ F:    Documentation/admin-guide/media/pulse8-cec.rst
+ F:    drivers/media/cec/usb/pulse8/
  
  PVRUSB2 VIDEO4LINUX DRIVER
  M:    Mike Isely <[email protected]>
  S:    Maintained
  W:    http://www.isely.net/pvrusb2/
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/pvrusb2*
+ F:    Documentation/driver-api/media/drivers/pvrusb2*
  F:    drivers/media/usb/pvrusb2/
  
  PWC WEBCAM DRIVER
@@@ -14023,7 -13954,7 +14041,7 @@@ QUALCOMM ATHEROS ATH10K WIRELESS DRIVE
  M:    Kalle Valo <[email protected]>
  L:    [email protected]
  S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/ath10k
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
  F:    drivers/net/wireless/ath/ath10k/
  
@@@ -14038,15 -13969,15 +14056,15 @@@ QUALCOMM ATHEROS ATH9K WIRELESS DRIVE
  M:    QCA ath9k Development <[email protected]>
  L:    [email protected]
  S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/ath9k
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath9k
  F:    drivers/net/wireless/ath/ath9k/
  
  QUALCOMM CAMERA SUBSYSTEM DRIVER
  M:    Todor Tomov <[email protected]>
  L:    [email protected]
  S:    Maintained
+ F:    Documentation/admin-guide/media/qcom_camss.rst
  F:    Documentation/devicetree/bindings/media/qcom,camss.txt
- F:    Documentation/media/v4l-drivers/qcom_camss.rst
  F:    drivers/media/platform/qcom/camss/
  
  QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
@@@ -14110,7 -14041,7 +14128,7 @@@ M:   Subash Abhinov Kasiviswanathan <suba
  M:    Sean Tranchetti <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/networking/device_drivers/qualcomm/rmnet.txt
 +F:    Documentation/networking/device_drivers/qualcomm/rmnet.rst
  F:    drivers/net/ethernet/qualcomm/rmnet/
  F:    include/linux/if_rmnet.h
  
@@@ -14135,13 -14066,14 +14153,13 @@@ QUALCOMM WCN36XX WIRELESS DRIVE
  M:    Kalle Valo <[email protected]>
  L:    [email protected]
  S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/wcn36xx
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx
  T:    git git://github.com/KrasnikovEugene/wcn36xx.git
  F:    drivers/net/wireless/ath/wcn36xx/
  
  QUANTENNA QTNFMAC WIRELESS DRIVER
  M:    Igor Mitsyanko <[email protected]>
 -M:    Avinash Patil <[email protected]>
 -M:    Sergey Matyukevich <[email protected]>
 +R:    Sergey Matyukevich <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/wireless/quantenna
  RADEON and AMDGPU DRM DRIVERS
  M:    Alex Deucher <[email protected]>
  M:    Christian König <[email protected]>
 -M:    David (ChunMing) Zhou <[email protected]>
  L:    [email protected]
  S:    Supported
  T:    git git://people.freedesktop.org/~agd5f/linux
@@@ -14181,10 -14114,12 +14199,10 @@@ F:        drivers/media/radio/radio-tea5777.
  
  RADOS BLOCK DEVICE (RBD)
  M:    Ilya Dryomov <[email protected]>
 -M:    Sage Weil <[email protected]>
  R:    Dongsheng Yang <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://ceph.com/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
  T:    git git://github.com/ceph/ceph-client.git
  F:    Documentation/ABI/testing/sysfs-bus-rbd
  F:    drivers/block/rbd.c
@@@ -14201,7 -14136,7 +14219,7 @@@ M:   Hans Verkuil <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
- F:    drivers/media/usb/rainshadow-cec/*
+ F:    drivers/media/cec/usb/rainshadow/
  
  RALINK MIPS ARCHITECTURE
  M:    John Crispin <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  W:    https://oss.oracle.com/projects/rds/
 -F:    Documentation/networking/rds.txt
 +F:    Documentation/networking/rds.rst
  F:    net/rds/
  
  RDT - RESOURCE ALLOCATION
@@@ -14304,7 -14239,7 +14322,7 @@@ M:   Reinette Chatre <reinette.chatre@int
  L:    [email protected]
  S:    Supported
  F:    Documentation/x86/resctrl*
 -F:    arch/x86/include/asm/resctrl_sched.h
 +F:    arch/x86/include/asm/resctrl.h
  F:    arch/x86/kernel/cpu/resctrl/
  F:    tools/testing/selftests/resctrl/
  
@@@ -14359,7 -14294,7 +14377,7 @@@ REALTEK WIRELESS DRIVER (rtlwifi family
  M:    Ping-Ke Shih <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/
 +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/rtlwifi/
  
@@@ -14494,7 -14429,7 +14512,7 @@@ RFKIL
  M:    Johannes Berg <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/
 +W:    https://wireless.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  F:    Documentation/ABI/stable/sysfs-class-rfkill
@@@ -14554,10 -14489,19 +14572,19 @@@ ROCKCHIP RASTER 2D GRAPHIC ACCELERATIO
  M:    Jacob Chen <[email protected]>
  M:    Ezequiel Garcia <[email protected]>
  L:    [email protected]
+ L:    [email protected]
  S:    Maintained
- F:    Documentation/devicetree/bindings/media/rockchip-rga.txt
+ F:    Documentation/devicetree/bindings/media/rockchip-rga.yaml
  F:    drivers/media/platform/rockchip/rga/
  
+ ROCKCHIP VIDEO DECODER DRIVER
+ M:    Ezequiel Garcia <[email protected]>
+ L:    [email protected]
+ L:    [email protected]
+ S:    Maintained
+ F:    Documentation/devicetree/bindings/media/rockchip,vdec.yaml
+ F:    drivers/staging/media/rkvdec/
  ROCKER DRIVER
  M:    Jiri Pirko <[email protected]>
  L:    [email protected]
@@@ -14643,7 -14587,7 +14670,7 @@@ F:   drivers/media/dvb-frontends/rtl2832_
  RTL8180 WIRELESS DRIVER
  L:    [email protected]
  S:    Orphan
 -W:    http://wireless.kernel.org/
 +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/
  
@@@ -14653,7 -14597,7 +14680,7 @@@ M:   Hin-Tak Leung <[email protected]
  M:    Larry Finger <[email protected]>
  L:    [email protected]
  S:    Maintained
 -W:    http://wireless.kernel.org/
 +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/
  
@@@ -14669,7 -14613,7 +14696,7 @@@ M:   David Howells <[email protected]
  L:    [email protected]
  S:    Supported
  W:    https://www.infradead.org/~dhowells/kafs/
 -F:    Documentation/networking/rxrpc.txt
 +F:    Documentation/networking/rxrpc.rst
  F:    include/keys/rxrpc-type.h
  F:    include/net/af_rxrpc.h
  F:    include/trace/events/rxrpc.h
@@@ -14711,7 -14655,6 +14738,7 @@@ S:   Supporte
  W:    http://www.ibm.com/developerworks/linux/linux390/
  F:    block/partitions/ibm.c
  F:    drivers/s390/block/dasd*
 +F:    include/linux/dasd_mod.h
  
  S390 IOMMU (PCI)
  M:    Gerald Schaefer <[email protected]>
@@@ -14722,7 -14665,6 +14749,7 @@@ F:   drivers/iommu/s390-iommu.
  
  S390 IUCV NETWORK LAYER
  M:    Julian Wiedmann <[email protected]>
 +M:    Karsten Graul <[email protected]>
  M:    Ursula Braun <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -14733,7 -14675,6 +14760,7 @@@ F:   net/iucv
  
  S390 NETWORK DRIVERS
  M:    Julian Wiedmann <[email protected]>
 +M:    Karsten Graul <[email protected]>
  M:    Ursula Braun <[email protected]>
  L:    [email protected]
  S:    Supported
  S:    Odd fixes
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/saa7134*
+ F:    Documentation/driver-api/media/drivers/saa7134*
  F:    drivers/media/pci/saa7134/
  
  SAA7146 VIDEO4LINUX-2 DRIVER
@@@ -15078,7 -15019,7 +15105,7 @@@ M:   Marcelo Ricardo Leitner <marcelo.lei
  L:    [email protected]
  S:    Maintained
  W:    http://lksctp.sourceforge.net
 -F:    Documentation/networking/sctp.txt
 +F:    Documentation/networking/sctp.rst
  F:    include/linux/sctp.h
  F:    include/net/sctp/
  F:    include/uapi/linux/sctp.h
@@@ -15305,11 -15246,6 +15332,6 @@@ T:  git git://linuxtv.org/media_tree.gi
  F:    drivers/media/i2c/rj54n1cb0c.c
  F:    include/media/i2c/rj54n1cb0c.h
  
- SH_VEU V4L2 MEM2MEM DRIVER
- L:    [email protected]
- S:    Orphan
- F:    drivers/media/platform/sh_veu.c
  SH_VOU V4L2 OUTPUT DRIVER
  L:    [email protected]
  S:    Orphan
@@@ -15554,15 -15490,6 +15576,15 @@@ M: Nicolas Pitre <[email protected]
  S:    Odd Fixes
  F:    drivers/net/ethernet/smsc/smc91x.*
  
 +SECURE MONITOR CALL(SMC) CALLING CONVENTION (SMCCC)
 +M:    Mark Rutland <[email protected]>
 +M:    Lorenzo Pieralisi <[email protected]>
 +M:    Sudeep Holla <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/firmware/smccc/
 +F:    include/linux/arm-smccc.h
 +
  SMIA AND SMIA++ IMAGE SENSOR DRIVER
  M:    Sakari Ailus <[email protected]>
  L:    [email protected]
@@@ -15631,7 -15558,7 +15653,7 @@@ SOCIONEXT (SNI) AVE NETWORK DRIVE
  M:    Kunihiko Hayashi <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt
 +F:    Documentation/devicetree/bindings/net/socionext,uniphier-ave4.yaml
  F:    drivers/net/ethernet/socionext/sni_ave.c
  
  SOCIONEXT (SNI) NETSEC NETWORK DRIVER
@@@ -15739,7 -15666,7 +15761,7 @@@ F:   drivers/ssb
  F:    include/linux/ssb/
  
  SONY IMX214 SENSOR DRIVER
 -M:    Ricardo Ribalda <ri[email protected]>
 +M:    Ricardo Ribalda <ri[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -15962,7 -15889,7 +15984,7 @@@ SPIDERNET NETWORK DRIVER for CEL
  M:    Ishizaki Kou <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/networking/device_drivers/toshiba/spider_net.txt
 +F:    Documentation/networking/device_drivers/toshiba/spider_net.rst
  F:    drivers/net/ethernet/toshiba/spider_net*
  
  SPMI SUBSYSTEM
@@@ -15979,7 -15906,7 +16001,7 @@@ M:   Jeremy Kerr <[email protected]
  L:    [email protected]
  S:    Supported
  W:    http://www.ibm.com/developerworks/power/cell/
 -F:    Documentation/filesystems/spufs.txt
 +F:    Documentation/filesystems/spufs/spufs.rst
  F:    arch/powerpc/platforms/cell/spufs/
  
  SQUASHFS FILE SYSTEM
  S:    Supported
  F:    Documentation/process/stable-kernel-rules.rst
  
+ STAGING - ATOMISP DRIVER
+ M:    Mauro Carvalho Chehab <[email protected]>
+ R:    Sakari Ailus <[email protected]>
+ L:    [email protected]
+ S:    Maintained
+ F:    drivers/staging/media/atomisp/
  STAGING - COMEDI
  M:    Ian Abbott <[email protected]>
  M:    H Hartley Sweeten <[email protected]>
@@@ -16726,7 -16660,7 +16755,7 @@@ S:   Maintaine
  F:    sound/soc/ti/
  
  TEXAS INSTRUMENTS' DAC7612 DAC DRIVER
 -M:    Ricardo Ribalda <ri[email protected]>
 +M:    Ricardo Ribalda <ri[email protected]>
  L:    [email protected]
  S:    Supported
  F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt
@@@ -17020,8 -16954,8 +17049,8 @@@ F:   drivers/media/platform/ti-vpe
  TI WILINK WIRELESS DRIVERS
  L:    [email protected]
  S:    Orphan
 -W:    http://wireless.kernel.org/en/users/Drivers/wl12xx
 -W:    http://wireless.kernel.org/en/users/Drivers/wl1251
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/wl12xx
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/wl1251
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
  F:    drivers/net/wireless/ti/
  F:    include/linux/wl12xx.h
@@@ -17059,7 -16993,7 +17088,7 @@@ M:   Samuel Chessman <[email protected]
  L:    [email protected] (subscribers-only)
  S:    Maintained
  W:    http://sourceforge.net/projects/tlan/
 -F:    Documentation/networking/device_drivers/ti/tlan.txt
 +F:    Documentation/networking/device_drivers/ti/tlan.rst
  F:    drivers/net/ethernet/ti/tlan.*
  
  TM6000 VIDEO4LINUX DRIVER
  S:    Odd fixes
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/tm6000*
+ F:    Documentation/admin-guide/media/tm6000*
  F:    drivers/media/usb/tm6000/
  
  TMIO/SDHI MMC DRIVER
@@@ -17249,7 -17183,7 +17278,7 @@@ TUN/TAP drive
  M:    Maxim Krasnyansky <[email protected]>
  S:    Maintained
  W:    http://vtun.sourceforge.net/tun
 -F:    Documentation/networking/tuntap.txt
 +F:    Documentation/networking/tuntap.rst
  F:    arch/um/os-Linux/drivers/
  
  TURBOCHANNEL SUBSYSTEM
  S:    Maintained
  W:    http://royale.zerezo.com/zr364xx/
  T:    git git://linuxtv.org/media_tree.git
- F:    Documentation/media/v4l-drivers/zr364xx*
+ F:    Documentation/admin-guide/media/zr364xx*
  F:    drivers/media/usb/zr364xx/
  
  USER-MODE LINUX (UML)
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    drivers/media/platform/vicodec/*
+ F:    drivers/media/test-drivers/vicodec/*
  
  VIDEO I2C POLLING DRIVER
  M:    Matt Ranostay <[email protected]>
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    drivers/media/platform/vimc/*
+ F:    drivers/media/test-drivers/vimc/*
  
  VIRT LIB
  M:    Alex Williamson <[email protected]>
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
- F:    drivers/media/platform/vivid/*
+ F:    drivers/media/test-drivers/vivid/*
  
  VLYNQ BUS
  M:    Florian Fainelli <[email protected]>
@@@ -18194,7 -18128,7 +18223,7 @@@ M:   David Ahern <[email protected]
  M:    Shrijeet Mukherjee <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/networking/vrf.txt
 +F:    Documentation/networking/vrf.rst
  F:    drivers/net/vrf.c
  
  VSPRINTF
@@@ -18303,7 -18237,7 +18332,7 @@@ M:   Maya Erez <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 -W:    http://wireless.kernel.org/en/users/Drivers/wil6210
 +W:    https://wireless.wiki.kernel.org/en/users/Drivers/wil6210
  F:    drivers/net/wireless/ath/wil6210/
  
  WIMAX STACK
@@@ -18539,12 -18473,8 +18568,12 @@@ R: Jonathan Lemon <jonathan.lemon@gmail
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    kernel/bpf/xskmap.c
 +F:    include/net/xdp_sock*
 +F:    include/net/xsk_buff_pool.h
 +F:    include/uapi/linux/if_xdp.h
  F:    net/xdp/
 +F:    samples/bpf/xdpsock*
 +F:    tools/lib/bpf/xsk*
  
  XEN BLOCK SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <[email protected]>
@@@ -18634,8 -18564,8 +18663,8 @@@ W:   http://xfs.org
  T:    git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git
  F:    Documentation/ABI/testing/sysfs-fs-xfs
  F:    Documentation/admin-guide/xfs.rst
 -F:    Documentation/filesystems/xfs-delayed-logging-design.txt
 -F:    Documentation/filesystems/xfs-self-describing-metadata.txt
 +F:    Documentation/filesystems/xfs-delayed-logging-design.rst
 +F:    Documentation/filesystems/xfs-self-describing-metadata.rst
  F:    fs/xfs/
  F:    include/uapi/linux/dqblk_xfs.h
  F:    include/uapi/linux/fsmap.h
  S:    Maintained
  W:    http://yaina.de/jreuter/
  W:    http://www.qsl.net/dl1bke/
 -F:    Documentation/networking/z8530drv.txt
 +F:    Documentation/networking/z8530drv.rst
  F:    drivers/net/hamradio/*scc.c
  F:    drivers/net/hamradio/z8530.h
  
index e324d7db7b7db6a698a3fdf6b338f3263ae59e90,126e1517ade2f1a85533bcc6a59af4f78cc349bb..ce07ddc3e058aad7e77f335778a5de100e476b4b
@@@ -22,7 -22,6 +22,7 @@@
  #include <drm/drm_panel.h>
  #include <drm/drm_print.h>
  #include <drm/drm_probe_helper.h>
 +#include <drm/drm_simple_kms_helper.h>
  
  #include "sun4i_backend.h"
  #include "sun4i_crtc.h"
@@@ -205,6 -204,10 +205,6 @@@ static const struct drm_encoder_helper_
        .mode_valid     = sun4i_hdmi_mode_valid,
  };
  
 -static const struct drm_encoder_funcs sun4i_hdmi_funcs = {
 -      .destroy        = drm_encoder_cleanup,
 -};
 -
  static int sun4i_hdmi_get_modes(struct drm_connector *connector)
  {
        struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
@@@ -279,7 -282,7 +279,7 @@@ static const struct drm_connector_func
  };
  
  #ifdef CONFIG_DRM_SUN4I_HDMI_CEC
- static bool sun4i_hdmi_cec_pin_read(struct cec_adapter *adap)
+ static int sun4i_hdmi_cec_pin_read(struct cec_adapter *adap)
  {
        struct sun4i_hdmi *hdmi = cec_get_drvdata(adap);
  
@@@ -608,8 -611,11 +608,8 @@@ static int sun4i_hdmi_bind(struct devic
  
        drm_encoder_helper_add(&hdmi->encoder,
                               &sun4i_hdmi_helper_funcs);
 -      ret = drm_encoder_init(drm,
 -                             &hdmi->encoder,
 -                             &sun4i_hdmi_funcs,
 -                             DRM_MODE_ENCODER_TMDS,
 -                             NULL);
 +      ret = drm_simple_encoder_init(drm, &hdmi->encoder,
 +                                    DRM_MODE_ENCODER_TMDS);
        if (ret) {
                dev_err(dev, "Couldn't initialise the HDMI encoder\n");
                goto err_put_ddc_i2c;
index 0000000000000000000000000000000000000000,e748cd54b45da0b8e6ecda47125c08bd43900dbd..517e0035fc99367baa78bd137c18b0e79f13b971
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,236 +1,236 @@@
 - * Copyright 2016 Russell King <[email protected]>
+ // SPDX-License-Identifier: GPL-2.0-only
+ /*
+  * cec-notifier.c - notify CEC drivers of physical address changes
+  *
++ * Copyright 2016 Russell King.
+  * Copyright 2016-2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
+  */
+ #include <linux/export.h>
+ #include <linux/string.h>
+ #include <linux/slab.h>
+ #include <linux/list.h>
+ #include <linux/kref.h>
+ #include <linux/of_platform.h>
+ #include <media/cec.h>
+ #include <media/cec-notifier.h>
+ #include <drm/drm_edid.h>
+ struct cec_notifier {
+       struct mutex lock;
+       struct list_head head;
+       struct kref kref;
+       struct device *hdmi_dev;
+       struct cec_connector_info conn_info;
+       const char *port_name;
+       struct cec_adapter *cec_adap;
+       u16 phys_addr;
+ };
+ static LIST_HEAD(cec_notifiers);
+ static DEFINE_MUTEX(cec_notifiers_lock);
+ /**
+  * cec_notifier_get_conn - find or create a new cec_notifier for the given
+  * device and connector tuple.
+  * @hdmi_dev: device that sends the events.
+  * @port_name: the connector name from which the event occurs
+  *
+  * If a notifier for device @dev already exists, then increase the refcount
+  * and return that notifier.
+  *
+  * If it doesn't exist, then allocate a new notifier struct and return a
+  * pointer to that new struct.
+  *
+  * Return NULL if the memory could not be allocated.
+  */
+ static struct cec_notifier *
+ cec_notifier_get_conn(struct device *hdmi_dev, const char *port_name)
+ {
+       struct cec_notifier *n;
+       mutex_lock(&cec_notifiers_lock);
+       list_for_each_entry(n, &cec_notifiers, head) {
+               if (n->hdmi_dev == hdmi_dev &&
+                   (!port_name ||
+                    (n->port_name && !strcmp(n->port_name, port_name)))) {
+                       kref_get(&n->kref);
+                       mutex_unlock(&cec_notifiers_lock);
+                       return n;
+               }
+       }
+       n = kzalloc(sizeof(*n), GFP_KERNEL);
+       if (!n)
+               goto unlock;
+       n->hdmi_dev = hdmi_dev;
+       if (port_name) {
+               n->port_name = kstrdup(port_name, GFP_KERNEL);
+               if (!n->port_name) {
+                       kfree(n);
+                       n = NULL;
+                       goto unlock;
+               }
+       }
+       n->phys_addr = CEC_PHYS_ADDR_INVALID;
+       mutex_init(&n->lock);
+       kref_init(&n->kref);
+       list_add_tail(&n->head, &cec_notifiers);
+ unlock:
+       mutex_unlock(&cec_notifiers_lock);
+       return n;
+ }
+ static void cec_notifier_release(struct kref *kref)
+ {
+       struct cec_notifier *n =
+               container_of(kref, struct cec_notifier, kref);
+       list_del(&n->head);
+       kfree(n->port_name);
+       kfree(n);
+ }
+ static void cec_notifier_put(struct cec_notifier *n)
+ {
+       mutex_lock(&cec_notifiers_lock);
+       kref_put(&n->kref, cec_notifier_release);
+       mutex_unlock(&cec_notifiers_lock);
+ }
+ struct cec_notifier *
+ cec_notifier_conn_register(struct device *hdmi_dev, const char *port_name,
+                          const struct cec_connector_info *conn_info)
+ {
+       struct cec_notifier *n = cec_notifier_get_conn(hdmi_dev, port_name);
+       if (!n)
+               return n;
+       mutex_lock(&n->lock);
+       n->phys_addr = CEC_PHYS_ADDR_INVALID;
+       if (conn_info)
+               n->conn_info = *conn_info;
+       else
+               memset(&n->conn_info, 0, sizeof(n->conn_info));
+       if (n->cec_adap) {
+               cec_phys_addr_invalidate(n->cec_adap);
+               cec_s_conn_info(n->cec_adap, conn_info);
+       }
+       mutex_unlock(&n->lock);
+       return n;
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_conn_register);
+ void cec_notifier_conn_unregister(struct cec_notifier *n)
+ {
+       if (!n)
+               return;
+       mutex_lock(&n->lock);
+       memset(&n->conn_info, 0, sizeof(n->conn_info));
+       n->phys_addr = CEC_PHYS_ADDR_INVALID;
+       if (n->cec_adap) {
+               cec_phys_addr_invalidate(n->cec_adap);
+               cec_s_conn_info(n->cec_adap, NULL);
+       }
+       mutex_unlock(&n->lock);
+       cec_notifier_put(n);
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_conn_unregister);
+ struct cec_notifier *
+ cec_notifier_cec_adap_register(struct device *hdmi_dev, const char *port_name,
+                              struct cec_adapter *adap)
+ {
+       struct cec_notifier *n;
+       if (WARN_ON(!adap))
+               return NULL;
+       n = cec_notifier_get_conn(hdmi_dev, port_name);
+       if (!n)
+               return n;
+       mutex_lock(&n->lock);
+       n->cec_adap = adap;
+       adap->conn_info = n->conn_info;
+       adap->notifier = n;
+       cec_s_phys_addr(adap, n->phys_addr, false);
+       mutex_unlock(&n->lock);
+       return n;
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_cec_adap_register);
+ void cec_notifier_cec_adap_unregister(struct cec_notifier *n,
+                                     struct cec_adapter *adap)
+ {
+       if (!n)
+               return;
+       mutex_lock(&n->lock);
+       adap->notifier = NULL;
+       n->cec_adap = NULL;
+       mutex_unlock(&n->lock);
+       cec_notifier_put(n);
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_cec_adap_unregister);
+ void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa)
+ {
+       if (n == NULL)
+               return;
+       mutex_lock(&n->lock);
+       n->phys_addr = pa;
+       if (n->cec_adap)
+               cec_s_phys_addr(n->cec_adap, n->phys_addr, false);
+       mutex_unlock(&n->lock);
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_set_phys_addr);
+ void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
+                                         const struct edid *edid)
+ {
+       u16 pa = CEC_PHYS_ADDR_INVALID;
+       if (n == NULL)
+               return;
+       if (edid && edid->extensions)
+               pa = cec_get_edid_phys_addr((const u8 *)edid,
+                               EDID_LENGTH * (edid->extensions + 1), NULL);
+       cec_notifier_set_phys_addr(n, pa);
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_set_phys_addr_from_edid);
+ struct device *cec_notifier_parse_hdmi_phandle(struct device *dev)
+ {
+       struct platform_device *hdmi_pdev;
+       struct device *hdmi_dev = NULL;
+       struct device_node *np;
+       np = of_parse_phandle(dev->of_node, "hdmi-phandle", 0);
+       if (!np) {
+               dev_err(dev, "Failed to find HDMI node in device tree\n");
+               return ERR_PTR(-ENODEV);
+       }
+       hdmi_pdev = of_find_device_by_node(np);
+       of_node_put(np);
+       if (hdmi_pdev) {
+               hdmi_dev = &hdmi_pdev->dev;
+               /*
+                * Note that the device struct is only used as a key into the
+                * cec_notifiers list, it is never actually accessed.
+                * So we decrement the reference here so we don't leak
+                * memory.
+                */
+               put_device(hdmi_dev);
+               return hdmi_dev;
+       }
+       return ERR_PTR(-EPROBE_DEFER);
+ }
+ EXPORT_SYMBOL_GPL(cec_notifier_parse_hdmi_phandle);
index 0000000000000000000000000000000000000000,0655aa9ecf283a6a73231d12413300a4f7a4c3fa..beae6aa12638a95bcf635a941c4cda7a7c9987c7
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,909 +1,905 @@@
 -      struct tm tm;
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+  * Pulse Eight HDMI CEC driver
+  *
+  * Copyright 2016 Hans Verkuil <[email protected]
+  */
+ /*
+  * Notes:
+  *
+  * - Devices with firmware version < 2 do not store their configuration in
+  *   EEPROM.
+  *
+  * - In autonomous mode, only messages from a TV will be acknowledged, even
+  *   polling messages. Upon receiving a message from a TV, the dongle will
+  *   respond to messages from any logical address.
+  *
+  * - In autonomous mode, the dongle will by default reply Feature Abort
+  *   [Unrecognized Opcode] when it receives Give Device Vendor ID. It will
+  *   however observe vendor ID's reported by other devices and possibly
+  *   alter this behavior. When TV's (and TV's only) report that their vendor ID
+  *   is LG (0x00e091), the dongle will itself reply that it has the same vendor
+  *   ID, and it will respond to at least one vendor specific command.
+  *
+  * - In autonomous mode, the dongle is known to attempt wakeup if it receives
+  *   <User Control Pressed> ["Power On"], ["Power] or ["Power Toggle"], or if it
+  *   receives <Set Stream Path> with its own physical address. It also does this
+  *   if it receives <Vendor Specific Command> [0x03 0x00] from an LG TV.
+  */
+ #include <linux/completion.h>
+ #include <linux/init.h>
+ #include <linux/interrupt.h>
+ #include <linux/kernel.h>
+ #include <linux/module.h>
+ #include <linux/workqueue.h>
+ #include <linux/serio.h>
+ #include <linux/slab.h>
+ #include <linux/time.h>
+ #include <linux/delay.h>
+ #include <media/cec.h>
+ MODULE_AUTHOR("Hans Verkuil <[email protected]>");
+ MODULE_DESCRIPTION("Pulse Eight HDMI CEC driver");
+ MODULE_LICENSE("GPL");
+ static int debug;
+ static int persistent_config;
+ module_param(debug, int, 0644);
+ module_param(persistent_config, int, 0644);
+ MODULE_PARM_DESC(debug, "debug level (0-2)");
+ MODULE_PARM_DESC(persistent_config, "read config from persistent memory (0-1)");
+ enum pulse8_msgcodes {
+       MSGCODE_NOTHING = 0,
+       MSGCODE_PING,
+       MSGCODE_TIMEOUT_ERROR,
+       MSGCODE_HIGH_ERROR,
+       MSGCODE_LOW_ERROR,
+       MSGCODE_FRAME_START,
+       MSGCODE_FRAME_DATA,
+       MSGCODE_RECEIVE_FAILED,
+       MSGCODE_COMMAND_ACCEPTED,       /* 0x08 */
+       MSGCODE_COMMAND_REJECTED,
+       MSGCODE_SET_ACK_MASK,
+       MSGCODE_TRANSMIT,
+       MSGCODE_TRANSMIT_EOM,
+       MSGCODE_TRANSMIT_IDLETIME,
+       MSGCODE_TRANSMIT_ACK_POLARITY,
+       MSGCODE_TRANSMIT_LINE_TIMEOUT,
+       MSGCODE_TRANSMIT_SUCCEEDED,     /* 0x10 */
+       MSGCODE_TRANSMIT_FAILED_LINE,
+       MSGCODE_TRANSMIT_FAILED_ACK,
+       MSGCODE_TRANSMIT_FAILED_TIMEOUT_DATA,
+       MSGCODE_TRANSMIT_FAILED_TIMEOUT_LINE,
+       MSGCODE_FIRMWARE_VERSION,
+       MSGCODE_START_BOOTLOADER,
+       MSGCODE_GET_BUILDDATE,
+       MSGCODE_SET_CONTROLLED,         /* 0x18 */
+       MSGCODE_GET_AUTO_ENABLED,
+       MSGCODE_SET_AUTO_ENABLED,
+       MSGCODE_GET_DEFAULT_LOGICAL_ADDRESS,
+       MSGCODE_SET_DEFAULT_LOGICAL_ADDRESS,
+       MSGCODE_GET_LOGICAL_ADDRESS_MASK,
+       MSGCODE_SET_LOGICAL_ADDRESS_MASK,
+       MSGCODE_GET_PHYSICAL_ADDRESS,
+       MSGCODE_SET_PHYSICAL_ADDRESS,   /* 0x20 */
+       MSGCODE_GET_DEVICE_TYPE,
+       MSGCODE_SET_DEVICE_TYPE,
+       MSGCODE_GET_HDMI_VERSION,
+       MSGCODE_SET_HDMI_VERSION,
+       MSGCODE_GET_OSD_NAME,
+       MSGCODE_SET_OSD_NAME,
+       MSGCODE_WRITE_EEPROM,
+       MSGCODE_GET_ADAPTER_TYPE,       /* 0x28 */
+       MSGCODE_SET_ACTIVE_SOURCE,
+       MSGCODE_FRAME_EOM = 0x80,
+       MSGCODE_FRAME_ACK = 0x40,
+ };
+ static const char * const pulse8_msgnames[] = {
+       "NOTHING",
+       "PING",
+       "TIMEOUT_ERROR",
+       "HIGH_ERROR",
+       "LOW_ERROR",
+       "FRAME_START",
+       "FRAME_DATA",
+       "RECEIVE_FAILED",
+       "COMMAND_ACCEPTED",
+       "COMMAND_REJECTED",
+       "SET_ACK_MASK",
+       "TRANSMIT",
+       "TRANSMIT_EOM",
+       "TRANSMIT_IDLETIME",
+       "TRANSMIT_ACK_POLARITY",
+       "TRANSMIT_LINE_TIMEOUT",
+       "TRANSMIT_SUCCEEDED",
+       "TRANSMIT_FAILED_LINE",
+       "TRANSMIT_FAILED_ACK",
+       "TRANSMIT_FAILED_TIMEOUT_DATA",
+       "TRANSMIT_FAILED_TIMEOUT_LINE",
+       "FIRMWARE_VERSION",
+       "START_BOOTLOADER",
+       "GET_BUILDDATE",
+       "SET_CONTROLLED",
+       "GET_AUTO_ENABLED",
+       "SET_AUTO_ENABLED",
+       "GET_DEFAULT_LOGICAL_ADDRESS",
+       "SET_DEFAULT_LOGICAL_ADDRESS",
+       "GET_LOGICAL_ADDRESS_MASK",
+       "SET_LOGICAL_ADDRESS_MASK",
+       "GET_PHYSICAL_ADDRESS",
+       "SET_PHYSICAL_ADDRESS",
+       "GET_DEVICE_TYPE",
+       "SET_DEVICE_TYPE",
+       "GET_HDMI_VERSION",
+       "SET_HDMI_VERSION",
+       "GET_OSD_NAME",
+       "SET_OSD_NAME",
+       "WRITE_EEPROM",
+       "GET_ADAPTER_TYPE",
+       "SET_ACTIVE_SOURCE",
+ };
+ static const char *pulse8_msgname(u8 cmd)
+ {
+       static char unknown_msg[5];
+       if ((cmd & 0x3f) < ARRAY_SIZE(pulse8_msgnames))
+               return pulse8_msgnames[cmd & 0x3f];
+       snprintf(unknown_msg, sizeof(unknown_msg), "0x%02x", cmd);
+       return unknown_msg;
+ }
+ #define MSGSTART      0xff
+ #define MSGEND                0xfe
+ #define MSGESC                0xfd
+ #define MSGOFFSET     3
+ #define DATA_SIZE 256
+ #define PING_PERIOD   (15 * HZ)
+ #define NUM_MSGS 8
+ struct pulse8 {
+       struct device *dev;
+       struct serio *serio;
+       struct cec_adapter *adap;
+       unsigned int vers;
+       struct delayed_work ping_eeprom_work;
+       struct work_struct irq_work;
+       struct cec_msg rx_msg[NUM_MSGS];
+       unsigned int rx_msg_cur_idx, rx_msg_num;
+       /* protect rx_msg_cur_idx and rx_msg_num */
+       spinlock_t msg_lock;
+       u8 new_rx_msg[CEC_MAX_MSG_SIZE];
+       u8 new_rx_msg_len;
+       struct work_struct tx_work;
+       u32 tx_done_status;
+       u32 tx_signal_free_time;
+       struct cec_msg tx_msg;
+       bool tx_msg_is_bcast;
+       struct completion cmd_done;
+       u8 data[DATA_SIZE];
+       unsigned int len;
+       u8 buf[DATA_SIZE];
+       unsigned int idx;
+       bool escape;
+       bool started;
+       /* locks access to the adapter */
+       struct mutex lock;
+       bool config_pending;
+       bool restoring_config;
+       bool autonomous;
+ };
+ static int pulse8_send(struct serio *serio, const u8 *command, u8 cmd_len)
+ {
+       int err = 0;
+       err = serio_write(serio, MSGSTART);
+       if (err)
+               return err;
+       for (; !err && cmd_len; command++, cmd_len--) {
+               if (*command >= MSGESC) {
+                       err = serio_write(serio, MSGESC);
+                       if (!err)
+                               err = serio_write(serio, *command - MSGOFFSET);
+               } else {
+                       err = serio_write(serio, *command);
+               }
+       }
+       if (!err)
+               err = serio_write(serio, MSGEND);
+       return err;
+ }
+ static int pulse8_send_and_wait_once(struct pulse8 *pulse8,
+                                    const u8 *cmd, u8 cmd_len,
+                                    u8 response, u8 size)
+ {
+       int err;
+       if (debug > 1)
+               dev_info(pulse8->dev, "transmit %s: %*ph\n",
+                        pulse8_msgname(cmd[0]), cmd_len, cmd);
+       init_completion(&pulse8->cmd_done);
+       err = pulse8_send(pulse8->serio, cmd, cmd_len);
+       if (err)
+               return err;
+       if (!wait_for_completion_timeout(&pulse8->cmd_done, HZ))
+               return -ETIMEDOUT;
+       if ((pulse8->data[0] & 0x3f) == MSGCODE_COMMAND_REJECTED &&
+           cmd[0] != MSGCODE_SET_CONTROLLED &&
+           cmd[0] != MSGCODE_SET_AUTO_ENABLED &&
+           cmd[0] != MSGCODE_GET_BUILDDATE)
+               return -ENOTTY;
+       if (response &&
+           ((pulse8->data[0] & 0x3f) != response || pulse8->len < size + 1)) {
+               dev_info(pulse8->dev, "transmit %s failed with %s\n",
+                        pulse8_msgname(cmd[0]),
+                        pulse8_msgname(pulse8->data[0]));
+               return -EIO;
+       }
+       return 0;
+ }
+ static int pulse8_send_and_wait(struct pulse8 *pulse8,
+                               const u8 *cmd, u8 cmd_len, u8 response, u8 size)
+ {
+       u8 cmd_sc[2];
+       int err;
+       err = pulse8_send_and_wait_once(pulse8, cmd, cmd_len, response, size);
+       if (err != -ENOTTY)
+               return err;
+       cmd_sc[0] = MSGCODE_SET_CONTROLLED;
+       cmd_sc[1] = 1;
+       err = pulse8_send_and_wait_once(pulse8, cmd_sc, 2,
+                                       MSGCODE_COMMAND_ACCEPTED, 1);
+       if (!err)
+               err = pulse8_send_and_wait_once(pulse8, cmd, cmd_len,
+                                               response, size);
+       return err == -ENOTTY ? -EIO : err;
+ }
+ static void pulse8_tx_work_handler(struct work_struct *work)
+ {
+       struct pulse8 *pulse8 = container_of(work, struct pulse8, tx_work);
+       struct cec_msg *msg = &pulse8->tx_msg;
+       unsigned int i;
+       u8 cmd[2];
+       int err;
+       if (msg->len == 0)
+               return;
+       mutex_lock(&pulse8->lock);
+       cmd[0] = MSGCODE_TRANSMIT_IDLETIME;
+       cmd[1] = pulse8->tx_signal_free_time;
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 1);
+       cmd[0] = MSGCODE_TRANSMIT_ACK_POLARITY;
+       cmd[1] = cec_msg_is_broadcast(msg);
+       pulse8->tx_msg_is_bcast = cec_msg_is_broadcast(msg);
+       if (!err)
+               err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                          MSGCODE_COMMAND_ACCEPTED, 1);
+       cmd[0] = msg->len == 1 ? MSGCODE_TRANSMIT_EOM : MSGCODE_TRANSMIT;
+       cmd[1] = msg->msg[0];
+       if (!err)
+               err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                          MSGCODE_COMMAND_ACCEPTED, 1);
+       if (!err && msg->len > 1) {
+               for (i = 1; !err && i < msg->len; i++) {
+                       cmd[0] = ((i == msg->len - 1)) ?
+                               MSGCODE_TRANSMIT_EOM : MSGCODE_TRANSMIT;
+                       cmd[1] = msg->msg[i];
+                       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                                  MSGCODE_COMMAND_ACCEPTED, 1);
+               }
+       }
+       if (err && debug)
+               dev_info(pulse8->dev, "%s(0x%02x) failed with error %d for msg %*ph\n",
+                        pulse8_msgname(cmd[0]), cmd[1],
+                        err, msg->len, msg->msg);
+       msg->len = 0;
+       mutex_unlock(&pulse8->lock);
+       if (err)
+               cec_transmit_attempt_done(pulse8->adap, CEC_TX_STATUS_ERROR);
+ }
+ static void pulse8_irq_work_handler(struct work_struct *work)
+ {
+       struct pulse8 *pulse8 =
+               container_of(work, struct pulse8, irq_work);
+       unsigned long flags;
+       u32 status;
+       spin_lock_irqsave(&pulse8->msg_lock, flags);
+       while (pulse8->rx_msg_num) {
+               spin_unlock_irqrestore(&pulse8->msg_lock, flags);
+               if (debug)
+                       dev_info(pulse8->dev, "adap received %*ph\n",
+                                pulse8->rx_msg[pulse8->rx_msg_cur_idx].len,
+                                pulse8->rx_msg[pulse8->rx_msg_cur_idx].msg);
+               cec_received_msg(pulse8->adap,
+                                &pulse8->rx_msg[pulse8->rx_msg_cur_idx]);
+               spin_lock_irqsave(&pulse8->msg_lock, flags);
+               if (pulse8->rx_msg_num)
+                       pulse8->rx_msg_num--;
+               pulse8->rx_msg_cur_idx =
+                       (pulse8->rx_msg_cur_idx + 1) % NUM_MSGS;
+       }
+       spin_unlock_irqrestore(&pulse8->msg_lock, flags);
+       mutex_lock(&pulse8->lock);
+       status = pulse8->tx_done_status;
+       pulse8->tx_done_status = 0;
+       mutex_unlock(&pulse8->lock);
+       if (status)
+               cec_transmit_attempt_done(pulse8->adap, status);
+ }
+ static irqreturn_t pulse8_interrupt(struct serio *serio, unsigned char data,
+                                   unsigned int flags)
+ {
+       struct pulse8 *pulse8 = serio_get_drvdata(serio);
+       unsigned long irq_flags;
+       unsigned int idx;
+       if (!pulse8->started && data != MSGSTART)
+               return IRQ_HANDLED;
+       if (data == MSGESC) {
+               pulse8->escape = true;
+               return IRQ_HANDLED;
+       }
+       if (pulse8->escape) {
+               data += MSGOFFSET;
+               pulse8->escape = false;
+       } else if (data == MSGEND) {
+               u8 msgcode = pulse8->buf[0];
+               if (debug > 1)
+                       dev_info(pulse8->dev, "received %s: %*ph\n",
+                                pulse8_msgname(msgcode),
+                                pulse8->idx, pulse8->buf);
+               switch (msgcode & 0x3f) {
+               case MSGCODE_FRAME_START:
+                       /*
+                        * Test if we are receiving a new msg when a previous
+                        * message is still pending.
+                        */
+                       if (!(msgcode & MSGCODE_FRAME_EOM)) {
+                               pulse8->new_rx_msg_len = 1;
+                               pulse8->new_rx_msg[0] = pulse8->buf[1];
+                               break;
+                       }
+                       /* fall through */
+               case MSGCODE_FRAME_DATA:
+                       if (pulse8->new_rx_msg_len < CEC_MAX_MSG_SIZE)
+                               pulse8->new_rx_msg[pulse8->new_rx_msg_len++] =
+                                       pulse8->buf[1];
+                       if (!(msgcode & MSGCODE_FRAME_EOM))
+                               break;
+                       spin_lock_irqsave(&pulse8->msg_lock, irq_flags);
+                       idx = (pulse8->rx_msg_cur_idx + pulse8->rx_msg_num) %
+                               NUM_MSGS;
+                       if (pulse8->rx_msg_num == NUM_MSGS) {
+                               dev_warn(pulse8->dev,
+                                        "message queue is full, dropping %*ph\n",
+                                        pulse8->new_rx_msg_len,
+                                        pulse8->new_rx_msg);
+                               spin_unlock_irqrestore(&pulse8->msg_lock,
+                                                      irq_flags);
+                               pulse8->new_rx_msg_len = 0;
+                               break;
+                       }
+                       pulse8->rx_msg_num++;
+                       memcpy(pulse8->rx_msg[idx].msg, pulse8->new_rx_msg,
+                              pulse8->new_rx_msg_len);
+                       pulse8->rx_msg[idx].len = pulse8->new_rx_msg_len;
+                       spin_unlock_irqrestore(&pulse8->msg_lock, irq_flags);
+                       schedule_work(&pulse8->irq_work);
+                       pulse8->new_rx_msg_len = 0;
+                       break;
+               case MSGCODE_TRANSMIT_SUCCEEDED:
+                       WARN_ON(pulse8->tx_done_status);
+                       pulse8->tx_done_status = CEC_TX_STATUS_OK;
+                       schedule_work(&pulse8->irq_work);
+                       break;
+               case MSGCODE_TRANSMIT_FAILED_ACK:
+                       /*
+                        * A NACK for a broadcast message makes no sense, these
+                        * seem to be spurious messages and are skipped.
+                        */
+                       if (pulse8->tx_msg_is_bcast)
+                               break;
+                       WARN_ON(pulse8->tx_done_status);
+                       pulse8->tx_done_status = CEC_TX_STATUS_NACK;
+                       schedule_work(&pulse8->irq_work);
+                       break;
+               case MSGCODE_TRANSMIT_FAILED_LINE:
+               case MSGCODE_TRANSMIT_FAILED_TIMEOUT_DATA:
+               case MSGCODE_TRANSMIT_FAILED_TIMEOUT_LINE:
+                       WARN_ON(pulse8->tx_done_status);
+                       pulse8->tx_done_status = CEC_TX_STATUS_ERROR;
+                       schedule_work(&pulse8->irq_work);
+                       break;
+               case MSGCODE_HIGH_ERROR:
+               case MSGCODE_LOW_ERROR:
+               case MSGCODE_RECEIVE_FAILED:
+               case MSGCODE_TIMEOUT_ERROR:
+                       pulse8->new_rx_msg_len = 0;
+                       break;
+               case MSGCODE_COMMAND_ACCEPTED:
+               case MSGCODE_COMMAND_REJECTED:
+               default:
+                       if (pulse8->idx == 0)
+                               break;
+                       memcpy(pulse8->data, pulse8->buf, pulse8->idx);
+                       pulse8->len = pulse8->idx;
+                       complete(&pulse8->cmd_done);
+                       break;
+               }
+               pulse8->idx = 0;
+               pulse8->started = false;
+               return IRQ_HANDLED;
+       } else if (data == MSGSTART) {
+               pulse8->idx = 0;
+               pulse8->started = true;
+               return IRQ_HANDLED;
+       }
+       if (pulse8->idx >= DATA_SIZE) {
+               dev_dbg(pulse8->dev,
+                       "throwing away %d bytes of garbage\n", pulse8->idx);
+               pulse8->idx = 0;
+       }
+       pulse8->buf[pulse8->idx++] = data;
+       return IRQ_HANDLED;
+ }
+ static int pulse8_cec_adap_enable(struct cec_adapter *adap, bool enable)
+ {
+       struct pulse8 *pulse8 = cec_get_drvdata(adap);
+       u8 cmd[16];
+       int err;
+       mutex_lock(&pulse8->lock);
+       cmd[0] = MSGCODE_SET_CONTROLLED;
+       cmd[1] = enable;
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 1);
+       if (!enable) {
+               pulse8->rx_msg_num = 0;
+               pulse8->tx_done_status = 0;
+       }
+       mutex_unlock(&pulse8->lock);
+       return enable ? err : 0;
+ }
+ static int pulse8_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
+ {
+       struct pulse8 *pulse8 = cec_get_drvdata(adap);
+       u16 mask = 0;
+       u16 pa = adap->phys_addr;
+       u8 cmd[16];
+       int err = 0;
+       mutex_lock(&pulse8->lock);
+       if (log_addr != CEC_LOG_ADDR_INVALID)
+               mask = 1 << log_addr;
+       cmd[0] = MSGCODE_SET_ACK_MASK;
+       cmd[1] = mask >> 8;
+       cmd[2] = mask & 0xff;
+       err = pulse8_send_and_wait(pulse8, cmd, 3,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if ((err && mask != 0) || pulse8->restoring_config)
+               goto unlock;
+       cmd[0] = MSGCODE_SET_AUTO_ENABLED;
+       cmd[1] = log_addr == CEC_LOG_ADDR_INVALID ? 0 : 1;
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       pulse8->autonomous = cmd[1];
+       if (log_addr == CEC_LOG_ADDR_INVALID)
+               goto unlock;
+       cmd[0] = MSGCODE_SET_DEVICE_TYPE;
+       cmd[1] = adap->log_addrs.primary_device_type[0];
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       switch (adap->log_addrs.primary_device_type[0]) {
+       case CEC_OP_PRIM_DEVTYPE_TV:
+               mask = CEC_LOG_ADDR_MASK_TV;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_RECORD:
+               mask = CEC_LOG_ADDR_MASK_RECORD;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_TUNER:
+               mask = CEC_LOG_ADDR_MASK_TUNER;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_PLAYBACK:
+               mask = CEC_LOG_ADDR_MASK_PLAYBACK;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM:
+               mask = CEC_LOG_ADDR_MASK_AUDIOSYSTEM;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_SWITCH:
+               mask = CEC_LOG_ADDR_MASK_UNREGISTERED;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_PROCESSOR:
+               mask = CEC_LOG_ADDR_MASK_SPECIFIC;
+               break;
+       default:
+               mask = 0;
+               break;
+       }
+       cmd[0] = MSGCODE_SET_LOGICAL_ADDRESS_MASK;
+       cmd[1] = mask >> 8;
+       cmd[2] = mask & 0xff;
+       err = pulse8_send_and_wait(pulse8, cmd, 3,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       cmd[0] = MSGCODE_SET_DEFAULT_LOGICAL_ADDRESS;
+       cmd[1] = log_addr;
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       cmd[0] = MSGCODE_SET_PHYSICAL_ADDRESS;
+       cmd[1] = pa >> 8;
+       cmd[2] = pa & 0xff;
+       err = pulse8_send_and_wait(pulse8, cmd, 3,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       cmd[0] = MSGCODE_SET_HDMI_VERSION;
+       cmd[1] = adap->log_addrs.cec_version;
+       err = pulse8_send_and_wait(pulse8, cmd, 2,
+                                  MSGCODE_COMMAND_ACCEPTED, 0);
+       if (err)
+               goto unlock;
+       if (adap->log_addrs.osd_name[0]) {
+               size_t osd_len = strlen(adap->log_addrs.osd_name);
+               char *osd_str = cmd + 1;
+               cmd[0] = MSGCODE_SET_OSD_NAME;
+               strscpy(cmd + 1, adap->log_addrs.osd_name, sizeof(cmd) - 1);
+               if (osd_len < 4) {
+                       memset(osd_str + osd_len, ' ', 4 - osd_len);
+                       osd_len = 4;
+                       osd_str[osd_len] = '\0';
+                       strscpy(adap->log_addrs.osd_name, osd_str,
+                               sizeof(adap->log_addrs.osd_name));
+               }
+               err = pulse8_send_and_wait(pulse8, cmd, 1 + osd_len,
+                                          MSGCODE_COMMAND_ACCEPTED, 0);
+               if (err)
+                       goto unlock;
+       }
+ unlock:
+       if (pulse8->restoring_config)
+               pulse8->restoring_config = false;
+       else
+               pulse8->config_pending = true;
+       mutex_unlock(&pulse8->lock);
+       return log_addr == CEC_LOG_ADDR_INVALID ? 0 : err;
+ }
+ static int pulse8_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
+                                   u32 signal_free_time, struct cec_msg *msg)
+ {
+       struct pulse8 *pulse8 = cec_get_drvdata(adap);
+       pulse8->tx_msg = *msg;
+       if (debug)
+               dev_info(pulse8->dev, "adap transmit %*ph\n",
+                        msg->len, msg->msg);
+       pulse8->tx_signal_free_time = signal_free_time;
+       schedule_work(&pulse8->tx_work);
+       return 0;
+ }
+ static void pulse8_cec_adap_free(struct cec_adapter *adap)
+ {
+       struct pulse8 *pulse8 = cec_get_drvdata(adap);
+       cancel_delayed_work_sync(&pulse8->ping_eeprom_work);
+       cancel_work_sync(&pulse8->irq_work);
+       cancel_work_sync(&pulse8->tx_work);
+       kfree(pulse8);
+ }
+ static const struct cec_adap_ops pulse8_cec_adap_ops = {
+       .adap_enable = pulse8_cec_adap_enable,
+       .adap_log_addr = pulse8_cec_adap_log_addr,
+       .adap_transmit = pulse8_cec_adap_transmit,
+       .adap_free = pulse8_cec_adap_free,
+ };
+ static void pulse8_disconnect(struct serio *serio)
+ {
+       struct pulse8 *pulse8 = serio_get_drvdata(serio);
+       cec_unregister_adapter(pulse8->adap);
+       pulse8->serio = NULL;
+       serio_set_drvdata(serio, NULL);
+       serio_close(serio);
+ }
+ static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio,
+                       struct cec_log_addrs *log_addrs, u16 *pa)
+ {
+       u8 *data = pulse8->data + 1;
+       u8 cmd[2];
+       int err;
 -      time64_to_tm(date, 0, &tm);
 -      dev_info(pulse8->dev, "Firmware build date %04ld.%02d.%02d %02d:%02d:%02d\n",
 -               tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
 -               tm.tm_hour, tm.tm_min, tm.tm_sec);
+       time64_t date;
+       pulse8->vers = 0;
+       cmd[0] = MSGCODE_FIRMWARE_VERSION;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 2);
+       if (err)
+               return err;
+       pulse8->vers = (data[0] << 8) | data[1];
+       dev_info(pulse8->dev, "Firmware version %04x\n", pulse8->vers);
+       if (pulse8->vers < 2) {
+               *pa = CEC_PHYS_ADDR_INVALID;
+               return 0;
+       }
+       cmd[0] = MSGCODE_GET_BUILDDATE;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 4);
+       if (err)
+               return err;
+       date = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
++      dev_info(pulse8->dev, "Firmware build date %ptT\n", &date);
+       dev_dbg(pulse8->dev, "Persistent config:\n");
+       cmd[0] = MSGCODE_GET_AUTO_ENABLED;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
+       if (err)
+               return err;
+       pulse8->autonomous = data[0];
+       dev_dbg(pulse8->dev, "Autonomous mode: %s",
+               data[0] ? "on" : "off");
+       cmd[0] = MSGCODE_GET_DEVICE_TYPE;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
+       if (err)
+               return err;
+       log_addrs->primary_device_type[0] = data[0];
+       dev_dbg(pulse8->dev, "Primary device type: %d\n", data[0]);
+       switch (log_addrs->primary_device_type[0]) {
+       case CEC_OP_PRIM_DEVTYPE_TV:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_TV;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_TV;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_RECORD:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_RECORD;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_RECORD;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_TUNER:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_TUNER;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_TUNER;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_PLAYBACK:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_PLAYBACK;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_PLAYBACK;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_PLAYBACK;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_SWITCH:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_UNREGISTERED;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_SWITCH;
+               break;
+       case CEC_OP_PRIM_DEVTYPE_PROCESSOR:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_SPECIFIC;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_SWITCH;
+               break;
+       default:
+               log_addrs->log_addr_type[0] = CEC_LOG_ADDR_TYPE_UNREGISTERED;
+               log_addrs->all_device_types[0] = CEC_OP_ALL_DEVTYPE_SWITCH;
+               dev_info(pulse8->dev, "Unknown Primary Device Type: %d\n",
+                        log_addrs->primary_device_type[0]);
+               break;
+       }
+       cmd[0] = MSGCODE_GET_LOGICAL_ADDRESS_MASK;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 2);
+       if (err)
+               return err;
+       log_addrs->log_addr_mask = (data[0] << 8) | data[1];
+       dev_dbg(pulse8->dev, "Logical address ACK mask: %x\n",
+               log_addrs->log_addr_mask);
+       if (log_addrs->log_addr_mask)
+               log_addrs->num_log_addrs = 1;
+       cmd[0] = MSGCODE_GET_PHYSICAL_ADDRESS;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
+       if (err)
+               return err;
+       *pa = (data[0] << 8) | data[1];
+       dev_dbg(pulse8->dev, "Physical address: %x.%x.%x.%x\n",
+               cec_phys_addr_exp(*pa));
+       cmd[0] = MSGCODE_GET_HDMI_VERSION;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 1);
+       if (err)
+               return err;
+       log_addrs->cec_version = data[0];
+       dev_dbg(pulse8->dev, "CEC version: %d\n", log_addrs->cec_version);
+       cmd[0] = MSGCODE_GET_OSD_NAME;
+       err = pulse8_send_and_wait(pulse8, cmd, 1, cmd[0], 0);
+       if (err)
+               return err;
+       strscpy(log_addrs->osd_name, data, sizeof(log_addrs->osd_name));
+       dev_dbg(pulse8->dev, "OSD name: %s\n", log_addrs->osd_name);
+       return 0;
+ }
+ static int pulse8_apply_persistent_config(struct pulse8 *pulse8,
+                                         struct cec_log_addrs *log_addrs,
+                                         u16 pa)
+ {
+       int err;
+       err = cec_s_log_addrs(pulse8->adap, log_addrs, false);
+       if (err)
+               return err;
+       cec_s_phys_addr(pulse8->adap, pa, false);
+       return 0;
+ }
+ static void pulse8_ping_eeprom_work_handler(struct work_struct *work)
+ {
+       struct pulse8 *pulse8 =
+               container_of(work, struct pulse8, ping_eeprom_work.work);
+       u8 cmd;
+       mutex_lock(&pulse8->lock);
+       cmd = MSGCODE_PING;
+       pulse8_send_and_wait(pulse8, &cmd, 1,
+                            MSGCODE_COMMAND_ACCEPTED, 0);
+       if (pulse8->vers < 2)
+               goto unlock;
+       if (pulse8->config_pending && persistent_config) {
+               dev_dbg(pulse8->dev, "writing pending config to EEPROM\n");
+               cmd = MSGCODE_WRITE_EEPROM;
+               if (pulse8_send_and_wait(pulse8, &cmd, 1,
+                                        MSGCODE_COMMAND_ACCEPTED, 0))
+                       dev_info(pulse8->dev, "failed to write pending config to EEPROM\n");
+               else
+                       pulse8->config_pending = false;
+       }
+ unlock:
+       schedule_delayed_work(&pulse8->ping_eeprom_work, PING_PERIOD);
+       mutex_unlock(&pulse8->lock);
+ }
+ static int pulse8_connect(struct serio *serio, struct serio_driver *drv)
+ {
+       u32 caps = CEC_CAP_DEFAULTS | CEC_CAP_PHYS_ADDR | CEC_CAP_MONITOR_ALL;
+       struct pulse8 *pulse8;
+       int err = -ENOMEM;
+       struct cec_log_addrs log_addrs = {};
+       u16 pa = CEC_PHYS_ADDR_INVALID;
+       pulse8 = kzalloc(sizeof(*pulse8), GFP_KERNEL);
+       if (!pulse8)
+               return -ENOMEM;
+       pulse8->serio = serio;
+       pulse8->adap = cec_allocate_adapter(&pulse8_cec_adap_ops, pulse8,
+                                           dev_name(&serio->dev), caps, 1);
+       err = PTR_ERR_OR_ZERO(pulse8->adap);
+       if (err < 0)
+               goto free_device;
+       pulse8->dev = &serio->dev;
+       serio_set_drvdata(serio, pulse8);
+       INIT_WORK(&pulse8->irq_work, pulse8_irq_work_handler);
+       INIT_WORK(&pulse8->tx_work, pulse8_tx_work_handler);
+       INIT_DELAYED_WORK(&pulse8->ping_eeprom_work,
+                         pulse8_ping_eeprom_work_handler);
+       mutex_init(&pulse8->lock);
+       spin_lock_init(&pulse8->msg_lock);
+       pulse8->config_pending = false;
+       err = serio_open(serio, drv);
+       if (err)
+               goto delete_adap;
+       err = pulse8_setup(pulse8, serio, &log_addrs, &pa);
+       if (err)
+               goto close_serio;
+       err = cec_register_adapter(pulse8->adap, &serio->dev);
+       if (err < 0)
+               goto close_serio;
+       pulse8->dev = &pulse8->adap->devnode.dev;
+       if (persistent_config && pulse8->autonomous) {
+               err = pulse8_apply_persistent_config(pulse8, &log_addrs, pa);
+               if (err)
+                       goto close_serio;
+               pulse8->restoring_config = true;
+       }
+       schedule_delayed_work(&pulse8->ping_eeprom_work, PING_PERIOD);
+       return 0;
+ close_serio:
+       pulse8->serio = NULL;
+       serio_set_drvdata(serio, NULL);
+       serio_close(serio);
+ delete_adap:
+       cec_delete_adapter(pulse8->adap);
+ free_device:
+       kfree(pulse8);
+       return err;
+ }
+ static const struct serio_device_id pulse8_serio_ids[] = {
+       {
+               .type   = SERIO_RS232,
+               .proto  = SERIO_PULSE8_CEC,
+               .id     = SERIO_ANY,
+               .extra  = SERIO_ANY,
+       },
+       { 0 }
+ };
+ MODULE_DEVICE_TABLE(serio, pulse8_serio_ids);
+ static struct serio_driver pulse8_drv = {
+       .driver         = {
+               .name   = "pulse8-cec",
+       },
+       .description    = "Pulse Eight HDMI CEC driver",
+       .id_table       = pulse8_serio_ids,
+       .interrupt      = pulse8_interrupt,
+       .connect        = pulse8_connect,
+       .disconnect     = pulse8_disconnect,
+ };
+ module_serio_driver(pulse8_drv);
index 8a1e1b95b3793b72cadce2478ccb0f81c2f9e336,6cd52e1ef5e4746bd891c12ed4144a66f45fcf85..a4c3c77c1894648eb2cd8087c52591352e4556e7
@@@ -756,6 -756,48 +756,48 @@@ err
  }
  EXPORT_SYMBOL_GPL(v4l2_fwnode_connector_add_link);
  
+ int v4l2_fwnode_device_parse(struct device *dev,
+                            struct v4l2_fwnode_device_properties *props)
+ {
+       struct fwnode_handle *fwnode = dev_fwnode(dev);
+       u32 val;
+       int ret;
+       memset(props, 0, sizeof(*props));
+       props->orientation = V4L2_FWNODE_PROPERTY_UNSET;
+       ret = fwnode_property_read_u32(fwnode, "orientation", &val);
+       if (!ret) {
+               switch (val) {
+               case V4L2_FWNODE_ORIENTATION_FRONT:
+               case V4L2_FWNODE_ORIENTATION_BACK:
+               case V4L2_FWNODE_ORIENTATION_EXTERNAL:
+                       break;
+               default:
+                       dev_warn(dev, "Unsupported device orientation: %u\n", val);
+                       return -EINVAL;
+               }
+               props->orientation = val;
+               dev_dbg(dev, "device orientation: %u\n", val);
+       }
+       props->rotation = V4L2_FWNODE_PROPERTY_UNSET;
+       ret = fwnode_property_read_u32(fwnode, "rotation", &val);
+       if (!ret) {
+               if (val >= 360) {
+                       dev_warn(dev, "Unsupported device rotation: %u\n", val);
+                       return -EINVAL;
+               }
+               props->rotation = val;
+               dev_dbg(dev, "device rotation: %u\n", val);
+       }
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(v4l2_fwnode_device_parse);
  static int
  v4l2_async_notifier_fwnode_parse_endpoint(struct device *dev,
                                          struct v4l2_async_notifier *notifier,
@@@ -980,7 -1022,7 +1022,7 @@@ static int v4l2_fwnode_reference_parse(
   *
   * THIS EXAMPLE EXISTS MERELY TO DOCUMENT THIS FUNCTION. DO NOT USE IT AS A
   * REFERENCE IN HOW ACPI TABLES SHOULD BE WRITTEN!! See documentation under
 - * Documentation/acpi/dsd instead and especially graph.txt,
 + * Documentation/firmware-guide/acpi/dsd/ instead and especially graph.txt,
   * data-node-references.txt and leds.txt .
   *
   *    Scope (\_SB.PCI0.I2C2)
@@@ -1323,68 -1365,6 +1365,6 @@@ out_cleanup
  }
  EXPORT_SYMBOL_GPL(v4l2_async_register_subdev_sensor_common);
  
- int v4l2_async_register_fwnode_subdev(struct v4l2_subdev *sd,
-                                     size_t asd_struct_size,
-                                     unsigned int *ports,
-                                     unsigned int num_ports,
-                                     parse_endpoint_func parse_endpoint)
- {
-       struct v4l2_async_notifier *notifier;
-       struct device *dev = sd->dev;
-       struct fwnode_handle *fwnode;
-       int ret;
-       if (WARN_ON(!dev))
-               return -ENODEV;
-       fwnode = dev_fwnode(dev);
-       if (!fwnode_device_is_available(fwnode))
-               return -ENODEV;
-       notifier = kzalloc(sizeof(*notifier), GFP_KERNEL);
-       if (!notifier)
-               return -ENOMEM;
-       v4l2_async_notifier_init(notifier);
-       if (!ports) {
-               ret = v4l2_async_notifier_parse_fwnode_endpoints(dev, notifier,
-                                                                asd_struct_size,
-                                                                parse_endpoint);
-               if (ret < 0)
-                       goto out_cleanup;
-       } else {
-               unsigned int i;
-               for (i = 0; i < num_ports; i++) {
-                       ret = v4l2_async_notifier_parse_fwnode_endpoints_by_port(dev, notifier, asd_struct_size, ports[i], parse_endpoint);
-                       if (ret < 0)
-                               goto out_cleanup;
-               }
-       }
-       ret = v4l2_async_subdev_notifier_register(sd, notifier);
-       if (ret < 0)
-               goto out_cleanup;
-       ret = v4l2_async_register_subdev(sd);
-       if (ret < 0)
-               goto out_unregister;
-       sd->subdev_notifier = notifier;
-       return 0;
- out_unregister:
-       v4l2_async_notifier_unregister(notifier);
- out_cleanup:
-       v4l2_async_notifier_cleanup(notifier);
-       kfree(notifier);
-       return ret;
- }
- EXPORT_SYMBOL_GPL(v4l2_async_register_fwnode_subdev);
  MODULE_LICENSE("GPL");
  MODULE_AUTHOR("Sakari Ailus <[email protected]>");
  MODULE_AUTHOR("Sylwester Nawrocki <[email protected]>");
index fb739b242796bef2a67aeb4b2324902375c0520c,c257072a7c35bb4be110bd694d90cba22773f940..ee93dcd065b81219c05637c97cb866e864196bce
@@@ -78,16 -78,6 +78,16 @@@ config HUAWEI_WM
          To compile this driver as a module, choose M here: the module
          will be called huawei-wmi.
  
 +config INTEL_WMI_SBL_FW_UPDATE
 +      tristate "Intel WMI Slim Bootloader firmware update signaling driver"
 +      depends on ACPI_WMI
 +      help
 +        Say Y here if you want to be able to use the WMI interface to signal
 +        Slim Bootloader to trigger update on next reboot.
 +
 +        To compile this driver as a module, choose M here: the module will
 +        be called intel-wmi-sbl-fw-update.
 +
  config INTEL_WMI_THUNDERBOLT
        tristate "Intel WMI thunderbolt force power driver"
        depends on ACPI_WMI
@@@ -751,6 -741,7 +751,7 @@@ config THINKPAD_ACPI_HOTKEY_POL
  config INTEL_ATOMISP2_PM
        tristate "Intel AtomISP2 dummy / power-management driver"
        depends on PCI && IOSF_MBI && PM
+       depends on !INTEL_ATOMISP
        help
          Power-management driver for Intel's Image Signal Processor found on
          Bay Trail and Cherry Trail devices. This dummy driver's sole purpose
@@@ -1279,8 -1270,7 +1280,8 @@@ config INTEL_UNCORE_FREQ_CONTRO
  config INTEL_BXTWC_PMIC_TMU
        tristate "Intel BXT Whiskey Cove TMU Driver"
        depends on REGMAP
 -      depends on INTEL_SOC_PMIC_BXTWC && INTEL_PMC_IPC
 +      depends on MFD_INTEL_PMC_BXT
 +      depends on INTEL_SOC_PMIC_BXTWC
        ---help---
          Select this driver to use Intel BXT Whiskey Cove PMIC TMU feature.
          This driver enables the alarm wakeup functionality in the TMU unit
@@@ -1306,7 -1296,7 +1307,7 @@@ config INTEL_MFLD_THERMA
  
  config INTEL_MID_POWER_BUTTON
        tristate "power button driver for Intel MID platforms"
 -      depends on INTEL_SCU_IPC && INPUT
 +      depends on INTEL_SCU && INPUT
        help
          This driver handles the power button on the Intel MID platforms.
  
@@@ -1338,6 -1328,14 +1339,6 @@@ config INTEL_PMC_COR
                - LTR Ignore
                - MPHY/PLL gating status (Sunrisepoint PCH only)
  
 -config INTEL_PMC_IPC
 -      tristate "Intel PMC IPC Driver"
 -      depends on ACPI && PCI
 -      ---help---
 -      This driver provides support for PMC control on some Intel platforms.
 -      The PMC is an ARC processor which defines IPC commands for communication
 -      with other entities in the CPU.
 -
  config INTEL_PUNIT_IPC
        tristate "Intel P-Unit IPC Driver"
        ---help---
          which is used to bridge the communications between kernel and P-Unit.
  
  config INTEL_SCU_IPC
 -      bool "Intel SCU IPC Support"
 -      depends on X86_INTEL_MID
 -      default y
 -      ---help---
 -        IPC is used to bridge the communications between kernel and SCU on
 -        some embedded Intel x86 platforms. This is not needed for PC-type
 -        machines.
 +      bool
 +
 +config INTEL_SCU
 +      bool
 +      select INTEL_SCU_IPC
 +
 +config INTEL_SCU_PCI
 +      bool "Intel SCU PCI driver"
 +      depends on PCI
 +      select INTEL_SCU
 +      help
 +        This driver is used to bridge the communications between kernel
 +        and SCU on some embedded Intel x86 platforms. It also creates
 +        devices that are connected to the SoC through the SCU.
 +        Platforms supported:
 +          Medfield
 +          Clovertrail
 +          Merrifield
 +          Broxton
 +          Apollo Lake
 +
 +config INTEL_SCU_PLATFORM
 +      tristate "Intel SCU platform driver"
 +      depends on ACPI
 +      select INTEL_SCU
 +      help
 +        This driver is used to bridge the communications between kernel
 +        and SCU (sometimes called PMC as well). The driver currently
 +        supports Intel Elkhart Lake and compatible platforms.
  
  config INTEL_SCU_IPC_UTIL
        tristate "Intel SCU IPC utility driver"
 -      depends on INTEL_SCU_IPC
 +      depends on INTEL_SCU
        ---help---
          The IPC Util driver provides an interface with the SCU enabling
          low level access for debug work and updating the firmware. Say
  
  config INTEL_TELEMETRY
        tristate "Intel SoC Telemetry Driver"
 -      depends on INTEL_PMC_IPC && INTEL_PUNIT_IPC && X86_64
 +      depends on X86_64
 +      depends on MFD_INTEL_PMC_BXT
 +      depends on INTEL_PUNIT_IPC
        ---help---
          This driver provides interfaces to configure and use
          telemetry for INTEL SoC from APL onwards. It is also
This page took 0.211725 seconds and 4 git commands to generate.