summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorshadoukun2017-08-22 00:27:56 -0400
committershadoukun2017-08-22 00:41:45 -0400
commitfa9a6d82d601c3c912f6d19bb35f528715bdc71c (patch)
tree7c0a941914572e850145e0befbf8c8577b8d7a81
parenteb4c58b3ab7995cfd3a4114612a28bd5014e4110 (diff)
downloadaur-fa9a6d82d601c3c912f6d19bb35f528715bdc71c.tar.gz
update to 4.12.8. add ipts. (first commit)
-rw-r--r--.SRCINFO38
-rw-r--r--0001-surface4-typecover.patch72
-rw-r--r--0002-ipts.patch5916
-rw-r--r--0003-wifi.patch71
-rw-r--r--99-ipts.rules5
-rw-r--r--PKGBUILD72
-rw-r--r--bonding-ratelimit-failed-speed-duplex-update-warning.patch47
-rw-r--r--bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch68
-rw-r--r--config.i6868331
-rw-r--r--config.x86_64638
-rw-r--r--ipts_fw_config.binbin0 -> 708 bytes
-rw-r--r--mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch35
12 files changed, 6651 insertions, 8642 deletions
diff --git a/.SRCINFO b/.SRCINFO
index caf032865de0..b12cfd60d5b5 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,8 +1,7 @@
pkgbase = linux-surface4
- pkgver = 4.10.8
+ pkgver = 4.12.8
pkgrel = 1
url = https://www.kernel.org/
- arch = i686
arch = x86_64
license = GPL2
makedepends = xmlto
@@ -12,29 +11,40 @@ pkgbase = linux-surface4
makedepends = bc
makedepends = libelf
options = !strip
- source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.10.tar.xz
- source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.10.tar.sign
- source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.10.8.xz
- source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.10.8.sign
- source = config.i686
+ source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.12.tar.xz
+ source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.12.tar.sign
+ source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.12.8.xz
+ source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.12.8.sign
+ source = bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch
+ source = bonding-ratelimit-failed-speed-duplex-update-warning.patch
+ source = mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch
+ source = 0002-ipts.patch
+ source = 0003-wifi.patch
+ source = 99-ipts.rules
+ source = ipts_fw_config.bin
source = config.x86_64
source = 90-linux.hook
source = linux.preset
- source = 0001-surface4-typecover.patch
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
- sha256sums = 3c95d9f049bd085e5c346d2c77f063b8425f191460fcd3ae9fe7e94e0477dc4b
+ sha256sums = a45c3becd4d08ce411c14628a949d08e2433d8cdeca92036c7013980e93858ab
sha256sums = SKIP
- sha256sums = ceb385486e34084dd53425e5ba50b9fba4a8e380d8f2815bfde142852d797da0
+ sha256sums = 32b860911a3bafd5cd5bc813a427c90fad6eafdf607fa64e1b763b16ab605636
sha256sums = SKIP
- sha256sums = 386051f19482672c871e7865fc62f5e2c8010d857729134ba13044734962e42c
- sha256sums = 12a87284e2935cd17e2846a207cc76f1728531416523735d66ef8a0ae690884c
+ sha256sums = 48e0505438bb4ccc7a0e050a896122b490e8f1b1446aa3833841a9d4d7853d68
+ sha256sums = fc606711a922638d5cc4358f47f69f554d9e6eab1cec91f0b49f00911f399722
+ sha256sums = b830ce777543c0edd20a77d70f204c095f2429bb37151cd4a8c9dfae2af8d51a
+ sha256sums = e3b91f55d351612394e14c99631601978f3d8b560203b3467797b758eebf777e
+ sha256sums = 0faba3f84e262ef16ff5a78943025d172f466066d2e5c5e5035d5915fa90ba01
+ sha256sums = 6360955b657947693cd57a702ad84f7fa730e20d3d6b3c48f4ec92f4eba27d79
+ sha256sums = 6db350669dd2250f465e2259c3d7f75316dc448d849a60ef701e5e77ca7a95b0
+ sha256sums = eed5c04a5f8841d52292fbb321990c79316ce98cd21324c71226cdc95cc20d09
+ sha256sums = 585cdf04b6c27b8124e5ce582d2d0d63e020f8e53fc3d794305a96e61e8cc8ab
sha256sums = 834bd254b56ab71d73f59b3221f056c72f559553c04718e350ab2a3e2991afe0
sha256sums = ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65
- sha256sums = fb005f85ce86b14418ddb427a7fda766e7824283f1b7a458cd2348b0b9dce390
pkgname = linux-surface4
- pkgdesc = The Linux-surface4 kernel and modules for Microsoft Surface Pro 4
+ pkgdesc = The Linux-surface4 kernel and modules
install = linux.install
depends = coreutils
depends = linux-firmware
diff --git a/0001-surface4-typecover.patch b/0001-surface4-typecover.patch
deleted file mode 100644
index 56fa2b087f3c..000000000000
--- a/0001-surface4-typecover.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index ea36b557d5ee..3d78f2abaa7b 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -724,13 +724,7 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
- hid->group = HID_GROUP_SENSOR_HUB;
-
- if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
-- (hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3 ||
-- hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2 ||
-- hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP ||
-- hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_4 ||
-- hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_2 ||
-- hid->product == USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP ||
-- hid->product == USB_DEVICE_ID_MS_POWER_COVER) &&
-+ hid->product == USB_DEVICE_ID_MS_POWER_COVER &&
- hid->group == HID_GROUP_MULTITOUCH)
- hid->group = HID_GROUP_GENERIC;
-
-@@ -1985,12 +1979,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_2) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_7K) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) },
-diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
-index 74b7b84a0420..96e7d3231d2f 100644
---- a/drivers/hid/hid-microsoft.c
-+++ b/drivers/hid/hid-microsoft.c
-@@ -274,18 +274,6 @@ static const struct hid_device_id ms_devices[] = {
- .driver_data = MS_NOGET },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
- .driver_data = MS_DUPLICATE_USAGES },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3),
-- .driver_data = MS_HIDINPUT },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2),
-- .driver_data = MS_HIDINPUT },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP),
-- .driver_data = MS_HIDINPUT },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4),
-- .driver_data = MS_HIDINPUT },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_2),
-- .driver_data = MS_HIDINPUT },
-- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP),
-- .driver_data = MS_HIDINPUT },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER),
- .driver_data = MS_HIDINPUT },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD),
-diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
-index 30a2977e2645..27030e6592ff 100644
---- a/drivers/hid/usbhid/hid-quirks.c
-+++ b/drivers/hid/usbhid/hid-quirks.c
-@@ -103,12 +103,6 @@ static const struct hid_blacklist {
- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_2, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_3_JP, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_2, HID_QUIRK_NO_INIT_REPORTS },
-- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_PRO_4_JP, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
diff --git a/0002-ipts.patch b/0002-ipts.patch
new file mode 100644
index 000000000000..7e8d1461f938
--- /dev/null
+++ b/0002-ipts.patch
@@ -0,0 +1,5916 @@
+diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
+index 2cf04504..3359204d 100644
+--- a/drivers/gpu/drm/i915/Makefile
++++ b/drivers/gpu/drm/i915/Makefile
+@@ -116,6 +116,9 @@ i915-y += dvo_ch7017.o \
+ intel_sdvo.o \
+ intel_tv.o
+
++# intel precise touch & stylus
++i915-y += intel_ipts.o
++
+ # Post-mortem debug and GPU hang state capture
+ i915-$(CONFIG_DRM_I915_CAPTURE_ERROR) += i915_gpu_error.o
+ i915-$(CONFIG_DRM_I915_SELFTEST) += \
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index 6ac8d37e..d867a1b8 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -51,6 +51,7 @@
+ #include "i915_vgpu.h"
+ #include "intel_drv.h"
+ #include "intel_uc.h"
++#include "intel_ipts.h"
+
+ static struct drm_driver driver;
+
+@@ -626,6 +627,10 @@ static int i915_load_modeset_init(struct drm_device *dev)
+
+ drm_kms_helper_poll_init(dev);
+
++pr_info(">> let init ipts\n");
++ if (INTEL_GEN(dev_priv) >= 9 && i915.enable_guc_submission)
++ intel_ipts_init(dev);
++
+ return 0;
+
+ cleanup_gem:
+@@ -1316,6 +1321,9 @@ void i915_driver_unload(struct drm_device *dev)
+ struct drm_i915_private *dev_priv = to_i915(dev);
+ struct pci_dev *pdev = dev_priv->drm.pdev;
+
++ if (INTEL_GEN(dev_priv) >= 9 && i915.enable_guc_submission)
++ intel_ipts_cleanup(dev);
++
+ intel_fbdev_fini(dev);
+
+ if (i915_gem_suspend(dev_priv))
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index 2c453a4e..a7f70e00 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -3500,6 +3500,9 @@ void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj,
+ void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj,
+ struct sg_table *pages);
+
++struct i915_gem_context *
++i915_gem_context_create_ipts(struct drm_device *dev);
++
+ static inline struct i915_gem_context *
+ i915_gem_context_lookup(struct drm_i915_file_private *file_priv, u32 id)
+ {
+diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
+index 8bd0c496..e12b8de5 100644
+--- a/drivers/gpu/drm/i915/i915_gem_context.c
++++ b/drivers/gpu/drm/i915/i915_gem_context.c
+@@ -422,6 +422,18 @@ out:
+ return ctx;
+ }
+
++struct i915_gem_context *i915_gem_context_create_ipts(struct drm_device *dev)
++{
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ struct i915_gem_context *ctx;
++
++ BUG_ON(!mutex_is_locked(&dev->struct_mutex));
++
++ ctx = i915_gem_create_context(dev_priv, NULL);
++
++ return ctx;
++}
++
+ int i915_gem_context_init(struct drm_i915_private *dev_priv)
+ {
+ struct i915_gem_context *ctx;
+diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
+index ab5140ba..55748795 100644
+--- a/drivers/gpu/drm/i915/i915_guc_submission.c
++++ b/drivers/gpu/drm/i915/i915_guc_submission.c
+@@ -331,7 +331,14 @@ static void guc_stage_desc_init(struct intel_guc *guc,
+ desc = __get_stage_desc(client);
+ memset(desc, 0, sizeof(*desc));
+
+- desc->attribute = GUC_STAGE_DESC_ATTR_ACTIVE | GUC_STAGE_DESC_ATTR_KERNEL;
++ desc->attribute = GUC_STAGE_DESC_ATTR_ACTIVE;
++ if ((client->priority == GUC_CLIENT_PRIORITY_KMD_NORMAL) ||
++ (client->priority == GUC_CLIENT_PRIORITY_KMD_HIGH)) {
++ desc->attribute |= GUC_STAGE_DESC_ATTR_KERNEL;
++ } else {
++ desc->attribute |= GUC_STAGE_DESC_ATTR_PCH;
++ }
++
+ desc->stage_id = client->stage_id;
+ desc->priority = client->priority;
+ desc->db_id = client->doorbell_id;
+@@ -1143,7 +1150,8 @@ static void guc_interrupts_capture(struct drm_i915_private *dev_priv)
+ I915_WRITE(RING_MODE_GEN7(engine), irqs);
+
+ /* route USER_INTERRUPT to Host, all others are sent to GuC. */
+- irqs = GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
++ irqs = (GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT)
++ << GEN8_RCS_IRQ_SHIFT |
+ GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT;
+ /* These three registers have the same bit definitions */
+ I915_WRITE(GUC_BCS_RCS_IER, ~irqs);
+@@ -1324,3 +1332,47 @@ int intel_guc_resume(struct drm_i915_private *dev_priv)
+
+ return intel_guc_send(guc, data, ARRAY_SIZE(data));
+ }
++
++int i915_guc_ipts_submission_enable(struct drm_i915_private *dev_priv,
++ struct i915_gem_context *ctx)
++{
++ struct intel_guc *guc = &dev_priv->guc;
++ struct i915_guc_client *client;
++
++ /* client for execbuf submission */
++ client = guc_client_alloc(dev_priv,
++ INTEL_INFO(dev_priv)->ring_mask,
++ GUC_CLIENT_PRIORITY_KMD_NORMAL,
++ ctx);
++ if (!client) {
++ DRM_ERROR("Failed to create normal GuC client!\n");
++ return -ENOMEM;
++ }
++
++ guc->ipts_client = client;
++ intel_guc_sample_forcewake(guc);
++ guc_init_doorbell_hw(guc);
++
++ return 0;
++}
++
++void i915_guc_ipts_submission_disable(struct drm_i915_private *dev_priv)
++{
++ struct intel_guc *guc = &dev_priv->guc;
++
++ if (!guc->ipts_client)
++ return;
++
++ guc_client_free(guc->ipts_client);
++ guc->ipts_client = NULL;
++}
++
++void i915_guc_ipts_reacquire_doorbell(struct drm_i915_private *dev_priv)
++{
++ struct intel_guc *guc = &dev_priv->guc;
++
++ int err = __guc_allocate_doorbell(guc, guc->ipts_client);
++
++ if (err)
++ DRM_ERROR("Not able to reacquire IPTS doorbell\n");
++}
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index 190f6aa5..b3834524 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -36,6 +36,7 @@
+ #include "i915_drv.h"
+ #include "i915_trace.h"
+ #include "intel_drv.h"
++#include "intel_ipts.h"
+
+ /**
+ * DOC: interrupt handling
+@@ -1368,6 +1369,9 @@ gen8_cs_irq_handler(struct intel_engine_cs *engine, u32 iir, int test_shift)
+ tasklet |= i915.enable_guc_submission;
+ }
+
++ if (iir & (GT_RENDER_PIPECTL_NOTIFY_INTERRUPT << test_shift))
++ intel_ipts_notify_complete();
++
+ if (tasklet)
+ tasklet_hi_schedule(&engine->irq_tasklet);
+ }
+@@ -3423,7 +3427,8 @@ static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
+ {
+ /* These are interrupts we'll toggle with the ring mask register */
+ uint32_t gt_interrupts[] = {
+- GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
++ GT_RENDER_PIPECTL_NOTIFY_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
++ GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
+ GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
+ GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
+ GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT,
+diff --git a/drivers/gpu/drm/i915/intel_ipts.c b/drivers/gpu/drm/i915/intel_ipts.c
+new file mode 100644
+index 00000000..3ab9b502
+--- /dev/null
++++ b/drivers/gpu/drm/i915/intel_ipts.c
+@@ -0,0 +1,623 @@
++/*
++ * Copyright 2016 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ *
++ */
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/module.h>
++#include <linux/intel_ipts_if.h>
++#include <drm/drmP.h>
++
++#include "i915_drv.h"
++
++#define SUPPORTED_IPTS_INTERFACE_VERSION 1
++
++#define REACQUIRE_DB_THRESHOLD 8
++#define DB_LOST_CHECK_STEP1_INTERVAL 2000 /* ms */
++#define DB_LOST_CHECK_STEP2_INTERVAL 500 /* ms */
++
++/* intel IPTS ctx for ipts support */
++typedef struct intel_ipts {
++ struct drm_device *dev;
++ struct i915_gem_context *ipts_context;
++ intel_ipts_callback_t ipts_clbks;
++
++ /* buffers' list */
++ struct {
++ spinlock_t lock;
++ struct list_head list;
++ } buffers;
++
++ void *data;
++
++ struct delayed_work reacquire_db_work;
++ intel_ipts_wq_info_t wq_info;
++ u32 old_tail;
++ u32 old_head;
++ bool need_reacquire_db;
++
++ bool connected;
++ bool initialized;
++} intel_ipts_t;
++
++intel_ipts_t intel_ipts;
++
++typedef struct intel_ipts_object {
++ struct list_head list;
++ struct drm_i915_gem_object *gem_obj;
++ void *cpu_addr;
++} intel_ipts_object_t;
++
++static intel_ipts_object_t *ipts_object_create(size_t size, u32 flags)
++{
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ intel_ipts_object_t *obj = NULL;
++ struct drm_i915_gem_object *gem_obj = NULL;
++ int ret = 0;
++
++ obj = kzalloc(sizeof(*obj), GFP_KERNEL);
++ if (!obj)
++ return NULL;
++
++ size = roundup(size, PAGE_SIZE);
++ if (size == 0) {
++ ret = -EINVAL;
++ goto err_out;
++ }
++
++ /* Allocate the new object */
++ gem_obj = i915_gem_object_create(dev_priv, size);
++ if (gem_obj == NULL) {
++ ret = -ENOMEM;
++ goto err_out;
++ }
++
++ if (flags & IPTS_BUF_FLAG_CONTIGUOUS) {
++ ret = i915_gem_object_attach_phys(gem_obj, PAGE_SIZE);
++ if (ret) {
++ pr_info(">> ipts no contiguous : %d\n", ret);
++ goto err_out;
++ }
++ }
++
++ obj->gem_obj = gem_obj;
++
++ spin_lock(&intel_ipts.buffers.lock);
++ list_add_tail(&obj->list, &intel_ipts.buffers.list);
++ spin_unlock(&intel_ipts.buffers.lock);
++
++ return obj;
++
++err_out:
++ if (gem_obj)
++ i915_gem_free_object(&gem_obj->base);
++
++ if (obj)
++ kfree(obj);
++
++ return NULL;
++}
++
++static void ipts_object_free(intel_ipts_object_t* obj)
++{
++ spin_lock(&intel_ipts.buffers.lock);
++ list_del(&obj->list);
++ spin_unlock(&intel_ipts.buffers.lock);
++
++ i915_gem_free_object(&obj->gem_obj->base);
++ kfree(obj);
++}
++
++static int ipts_object_pin(intel_ipts_object_t* obj,
++ struct i915_gem_context *ipts_ctx)
++{
++ struct i915_address_space *vm = NULL;
++ struct i915_vma *vma = NULL;
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ int ret = 0;
++
++ if (ipts_ctx->ppgtt) {
++ vm = &ipts_ctx->ppgtt->base;
++ } else {
++ vm = &dev_priv->ggtt.base;
++ }
++
++ vma = i915_vma_instance(obj->gem_obj, vm, NULL);
++ if (IS_ERR(vma)) {
++ DRM_ERROR("cannot find or create vma\n");
++ return -1;
++ }
++
++ ret = i915_vma_pin(vma, 0, PAGE_SIZE, PIN_USER);
++
++ return ret;
++}
++
++static void ipts_object_unpin(intel_ipts_object_t *obj)
++{
++ /* TBD: Add support */
++}
++
++static void* ipts_object_map(intel_ipts_object_t *obj)
++{
++
++ return i915_gem_object_pin_map(obj->gem_obj, I915_MAP_WB);
++}
++
++static void ipts_object_unmap(intel_ipts_object_t* obj)
++{
++ i915_gem_object_unpin_map(obj->gem_obj);
++ obj->cpu_addr = NULL;
++}
++
++static int create_ipts_context(void)
++{
++ struct i915_gem_context *ipts_ctx = NULL;
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ int ret = 0;
++
++ /* Initialize the context right away.*/
++ ret = i915_mutex_lock_interruptible(intel_ipts.dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed \n");
++ return ret;
++ }
++
++ ipts_ctx = i915_gem_context_create_ipts(intel_ipts.dev);
++ if (IS_ERR(ipts_ctx)) {
++ DRM_ERROR("Failed to create IPTS context (error %ld)\n",
++ PTR_ERR(ipts_ctx));
++ ret = PTR_ERR(ipts_ctx);
++ goto err_unlock;
++ }
++
++ ret = execlists_context_deferred_alloc(ipts_ctx, dev_priv->engine[RCS]);
++ if (ret) {
++ DRM_DEBUG("lr context allocation failed : %d\n", ret);
++ goto err_ctx;
++ }
++
++ ret = execlists_context_pin(dev_priv->engine[RCS], ipts_ctx);
++ if (ret) {
++ DRM_DEBUG("lr context pinning failed : %d\n", ret);
++ goto err_ctx;
++ }
++
++ /* Release the mutex */
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++
++ spin_lock_init(&intel_ipts.buffers.lock);
++ INIT_LIST_HEAD(&intel_ipts.buffers.list);
++
++ intel_ipts.ipts_context = ipts_ctx;
++
++ return 0;
++
++err_ctx:
++ if (ipts_ctx)
++ i915_gem_context_put(ipts_ctx);
++
++err_unlock:
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++
++ return ret;
++}
++
++static void destroy_ipts_context(void)
++{
++ struct i915_gem_context *ipts_ctx = NULL;
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ int ret = 0;
++
++ ipts_ctx = intel_ipts.ipts_context;
++
++ /* Initialize the context right away.*/
++ ret = i915_mutex_lock_interruptible(intel_ipts.dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed \n");
++ return;
++ }
++
++ execlists_context_unpin(dev_priv->engine[RCS], ipts_ctx);
++ i915_gem_context_put(ipts_ctx);
++
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++}
++
++int intel_ipts_notify_complete(void)
++{
++ if (intel_ipts.ipts_clbks.workload_complete)
++ intel_ipts.ipts_clbks.workload_complete(intel_ipts.data);
++
++ return 0;
++}
++
++int intel_ipts_notify_backlight_status(bool backlight_on)
++{
++ if (intel_ipts.ipts_clbks.notify_gfx_status) {
++ if (backlight_on) {
++ intel_ipts.ipts_clbks.notify_gfx_status(
++ IPTS_NOTIFY_STA_BACKLIGHT_ON,
++ intel_ipts.data);
++ schedule_delayed_work(&intel_ipts.reacquire_db_work,
++ msecs_to_jiffies(DB_LOST_CHECK_STEP1_INTERVAL));
++ } else {
++ intel_ipts.ipts_clbks.notify_gfx_status(
++ IPTS_NOTIFY_STA_BACKLIGHT_OFF,
++ intel_ipts.data);
++ cancel_delayed_work(&intel_ipts.reacquire_db_work);
++ }
++ }
++
++ return 0;
++}
++
++static void intel_ipts_reacquire_db(intel_ipts_t *intel_ipts_p)
++{
++ int ret = 0;
++
++ ret = i915_mutex_lock_interruptible(intel_ipts_p->dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed \n");
++ return;
++ }
++
++ /* Reacquire the doorbell */
++ i915_guc_ipts_reacquire_doorbell(intel_ipts_p->dev->dev_private);
++
++ mutex_unlock(&intel_ipts_p->dev->struct_mutex);
++
++ return;
++}
++
++static int intel_ipts_get_wq_info(uint64_t gfx_handle,
++ intel_ipts_wq_info_t *wq_info)
++{
++ if (gfx_handle != (uint64_t)&intel_ipts) {
++ DRM_ERROR("invalid gfx handle\n");
++ return -EINVAL;
++ }
++
++ *wq_info = intel_ipts.wq_info;
++
++ intel_ipts_reacquire_db(&intel_ipts);
++ schedule_delayed_work(&intel_ipts.reacquire_db_work,
++ msecs_to_jiffies(DB_LOST_CHECK_STEP1_INTERVAL));
++
++ return 0;
++}
++
++static int set_wq_info(void)
++{
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ struct intel_guc *guc = &dev_priv->guc;
++ struct i915_guc_client *client;
++ struct guc_process_desc *desc;
++ void *base = NULL;
++ intel_ipts_wq_info_t *wq_info;
++ u64 phy_base = 0;
++
++ wq_info = &intel_ipts.wq_info;
++
++ client = guc->ipts_client;
++ if (!client) {
++ DRM_ERROR("IPTS GuC client is NOT available\n");
++ return -EINVAL;
++ }
++
++ base = client->vaddr;
++ desc = (struct guc_process_desc *)((u64)base + client->proc_desc_offset);
++
++ desc->wq_base_addr = (u64)base + client->wq_offset;
++ desc->db_base_addr = (u64)base + client->doorbell_offset;
++
++ /* IPTS expects physical addresses to pass it to ME */
++ phy_base = sg_dma_address(client->vma->pages->sgl);
++
++ wq_info->db_addr = desc->db_base_addr;
++ wq_info->db_phy_addr = phy_base + client->doorbell_offset;
++ wq_info->db_cookie_offset = offsetof(struct guc_doorbell_info, cookie);
++ wq_info->wq_addr = desc->wq_base_addr;
++ wq_info->wq_phy_addr = phy_base + client->wq_offset;
++ wq_info->wq_head_addr = (u64)&desc->head;
++ wq_info->wq_head_phy_addr = phy_base + client->proc_desc_offset +
++ offsetof(struct guc_process_desc, head);
++ wq_info->wq_tail_addr = (u64)&desc->tail;
++ wq_info->wq_tail_phy_addr = phy_base + client->proc_desc_offset +
++ offsetof(struct guc_process_desc, tail);
++ wq_info->wq_size = desc->wq_size_bytes;
++
++ return 0;
++}
++
++static int intel_ipts_init_wq(void)
++{
++ int ret = 0;
++
++ ret = i915_mutex_lock_interruptible(intel_ipts.dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed\n");
++ return ret;
++ }
++
++ /* disable IPTS submission */
++ i915_guc_ipts_submission_disable(intel_ipts.dev->dev_private);
++
++ /* enable IPTS submission */
++ ret = i915_guc_ipts_submission_enable(intel_ipts.dev->dev_private,
++ intel_ipts.ipts_context);
++ if (ret) {
++ DRM_ERROR("i915_guc_ipts_submission_enable failed : %d\n", ret);
++ goto out;
++ }
++
++ ret = set_wq_info();
++ if (ret) {
++ DRM_ERROR("set_wq_info failed\n");
++ goto out;
++ }
++
++out:
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++
++ return ret;
++}
++
++static void intel_ipts_release_wq(void)
++{
++ int ret = 0;
++
++ ret = i915_mutex_lock_interruptible(intel_ipts.dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed\n");
++ return;
++ }
++
++ /* disable IPTS submission */
++ i915_guc_ipts_submission_disable(intel_ipts.dev->dev_private);
++
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++}
++
++static int intel_ipts_map_buffer(u64 gfx_handle, intel_ipts_mapbuffer_t *mapbuf)
++{
++ intel_ipts_object_t* obj;
++ struct i915_gem_context *ipts_ctx = NULL;
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ struct i915_address_space *vm = NULL;
++ struct i915_vma *vma = NULL;
++ int ret = 0;
++
++ if (gfx_handle != (uint64_t)&intel_ipts) {
++ DRM_ERROR("invalid gfx handle\n");
++ return -EINVAL;
++ }
++
++ /* Acquire mutex first */
++ ret = i915_mutex_lock_interruptible(intel_ipts.dev);
++ if (ret) {
++ DRM_ERROR("i915_mutex_lock_interruptible failed \n");
++ return -EINVAL;
++ }
++
++ obj = ipts_object_create(mapbuf->size, mapbuf->flags);
++ if (!obj)
++ return -ENOMEM;
++
++ ipts_ctx = intel_ipts.ipts_context;
++ ret = ipts_object_pin(obj, ipts_ctx);
++ if (ret) {
++ DRM_ERROR("Not able to pin iTouch obj\n");
++ ipts_object_free(obj);
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++ return -ENOMEM;
++ }
++
++ if (mapbuf->flags & IPTS_BUF_FLAG_CONTIGUOUS) {
++ obj->cpu_addr = obj->gem_obj->phys_handle->vaddr;
++ } else {
++ obj->cpu_addr = ipts_object_map(obj);
++ }
++
++ if (ipts_ctx->ppgtt) {
++ vm = &ipts_ctx->ppgtt->base;
++ } else {
++ vm = &dev_priv->ggtt.base;
++ }
++
++ vma = i915_vma_instance(obj->gem_obj, vm, NULL);
++ if (IS_ERR(vma)) {
++ DRM_ERROR("cannot find or create vma\n");
++ return -EINVAL;
++ }
++
++ mapbuf->gfx_addr = (void*)vma->node.start;
++ mapbuf->cpu_addr = (void*)obj->cpu_addr;
++ mapbuf->buf_handle = (u64)obj;
++ if (mapbuf->flags & IPTS_BUF_FLAG_CONTIGUOUS) {
++ mapbuf->phy_addr = (u64)obj->gem_obj->phys_handle->busaddr;
++ }
++
++ /* Release the mutex */
++ mutex_unlock(&intel_ipts.dev->struct_mutex);
++
++ return 0;
++}
++
++static int intel_ipts_unmap_buffer(uint64_t gfx_handle, uint64_t buf_handle)
++{
++ intel_ipts_object_t* obj = (intel_ipts_object_t*)buf_handle;
++
++ if (gfx_handle != (uint64_t)&intel_ipts) {
++ DRM_ERROR("invalid gfx handle\n");
++ return -EINVAL;
++ }
++
++ if (!obj->gem_obj->phys_handle)
++ ipts_object_unmap(obj);
++ ipts_object_unpin(obj);
++ ipts_object_free(obj);
++
++ return 0;
++}
++
++int intel_ipts_connect(intel_ipts_connect_t *ipts_connect)
++{
++ struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private;
++ int ret = 0;
++
++ if (!intel_ipts.initialized)
++ return -EIO;
++
++ if (ipts_connect && ipts_connect->if_version <=
++ SUPPORTED_IPTS_INTERFACE_VERSION) {
++
++ /* return gpu operations for ipts */
++ ipts_connect->ipts_ops.get_wq_info = intel_ipts_get_wq_info;
++ ipts_connect->ipts_ops.map_buffer = intel_ipts_map_buffer;
++ ipts_connect->ipts_ops.unmap_buffer = intel_ipts_unmap_buffer;
++ ipts_connect->gfx_version = INTEL_INFO(dev_priv)->gen;
++ ipts_connect->gfx_handle = (uint64_t)&intel_ipts;
++
++ /* save callback and data */
++ intel_ipts.data = ipts_connect->data;
++ intel_ipts.ipts_clbks = ipts_connect->ipts_cb;
++
++ intel_ipts.connected = true;
++ } else {
++ ret = -EINVAL;
++ }
++
++ return ret;
++}
++EXPORT_SYMBOL_GPL(intel_ipts_connect);
++
++void intel_ipts_disconnect(uint64_t gfx_handle)
++{
++ if (!intel_ipts.initialized)
++ return;
++
++ if (gfx_handle != (uint64_t)&intel_ipts ||
++ intel_ipts.connected == false) {
++ DRM_ERROR("invalid gfx handle\n");
++ return;
++ }
++
++ intel_ipts.data = 0;
++ memset(&intel_ipts.ipts_clbks, 0, sizeof(intel_ipts_callback_t));
++
++ intel_ipts.connected = false;
++}
++EXPORT_SYMBOL_GPL(intel_ipts_disconnect);
++
++static void reacquire_db_work_func(struct work_struct *work)
++{
++ struct delayed_work *d_work = container_of(work, struct delayed_work,
++ work);
++ intel_ipts_t *intel_ipts_p = container_of(d_work, intel_ipts_t,
++ reacquire_db_work);
++ u32 head;
++ u32 tail;
++ u32 size;
++ u32 load;
++
++ head = *(u32*)intel_ipts_p->wq_info.wq_head_addr;
++ tail = *(u32*)intel_ipts_p->wq_info.wq_tail_addr;
++ size = intel_ipts_p->wq_info.wq_size;
++
++ if (head >= tail)
++ load = head - tail;
++ else
++ load = head + size - tail;
++
++ if (load < REACQUIRE_DB_THRESHOLD) {
++ intel_ipts_p->need_reacquire_db = false;
++ goto reschedule_work;
++ }
++
++ if (intel_ipts_p->need_reacquire_db) {
++ if (intel_ipts_p->old_head == head && intel_ipts_p->old_tail == tail)
++ intel_ipts_reacquire_db(intel_ipts_p);
++ intel_ipts_p->need_reacquire_db = false;
++ } else {
++ intel_ipts_p->old_head = head;
++ intel_ipts_p->old_tail = tail;
++ intel_ipts_p->need_reacquire_db = true;
++
++ /* recheck */
++ schedule_delayed_work(&intel_ipts_p->reacquire_db_work,
++ msecs_to_jiffies(DB_LOST_CHECK_STEP2_INTERVAL));
++ return;
++ }
++
++reschedule_work:
++ schedule_delayed_work(&intel_ipts_p->reacquire_db_work,
++ msecs_to_jiffies(DB_LOST_CHECK_STEP1_INTERVAL));
++}
++
++/**
++ * intel_ipts_init - Initialize ipts support
++ * @dev: drm device
++ *
++ * Setup the required structures for ipts.
++ */
++int intel_ipts_init(struct drm_device *dev)
++{
++ int ret = 0;
++
++ intel_ipts.dev = dev;
++ INIT_DELAYED_WORK(&intel_ipts.reacquire_db_work, reacquire_db_work_func);
++
++ ret = create_ipts_context();
++ if (ret)
++ return -ENOMEM;
++
++ ret = intel_ipts_init_wq();
++ if (ret)
++ return ret;
++
++ intel_ipts.initialized = true;
++ DRM_DEBUG_DRIVER("Intel iTouch framework initialized\n");
++
++ return ret;
++}
++
++void intel_ipts_cleanup(struct drm_device *dev)
++{
++ intel_ipts_object_t *obj, *n;
++
++ if (intel_ipts.dev == dev) {
++ list_for_each_entry_safe(obj, n, &intel_ipts.buffers.list, list) {
++ list_del(&obj->list);
++
++ if (!obj->gem_obj->phys_handle)
++ ipts_object_unmap(obj);
++ ipts_object_unpin(obj);
++ i915_gem_free_object(&obj->gem_obj->base);
++ kfree(obj);
++ }
++
++ intel_ipts_release_wq();
++ destroy_ipts_context();
++ cancel_delayed_work(&intel_ipts.reacquire_db_work);
++ }
++}
+diff --git a/drivers/gpu/drm/i915/intel_ipts.h b/drivers/gpu/drm/i915/intel_ipts.h
+new file mode 100644
+index 00000000..a6965d10
+--- /dev/null
++++ b/drivers/gpu/drm/i915/intel_ipts.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright © 2016 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ *
++ */
++#ifndef _INTEL_IPTS_H_
++#define _INTEL_IPTS_H_
++
++struct drm_device;
++
++int intel_ipts_init(struct drm_device *dev);
++void intel_ipts_cleanup(struct drm_device *dev);
++int intel_ipts_notify_backlight_status(bool backlight_on);
++int intel_ipts_notify_complete(void);
++
++#endif //_INTEL_IPTS_H_
+diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
+index 62f44d3e..2204b793 100644
+--- a/drivers/gpu/drm/i915/intel_lrc.c
++++ b/drivers/gpu/drm/i915/intel_lrc.c
+@@ -214,7 +214,7 @@
+
+ #define WA_TAIL_DWORDS 2
+
+-static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
++int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
+ struct intel_engine_cs *engine);
+ static void execlists_init_reg_state(u32 *reg_state,
+ struct i915_gem_context *ctx,
+@@ -735,7 +735,7 @@ static void execlists_schedule(struct drm_i915_gem_request *request, int prio)
+ /* XXX Do we need to preempt to make room for us and our deps? */
+ }
+
+-static int execlists_context_pin(struct intel_engine_cs *engine,
++int execlists_context_pin(struct intel_engine_cs *engine,
+ struct i915_gem_context *ctx)
+ {
+ struct intel_context *ce = &ctx->engine[engine->id];
+@@ -794,7 +794,7 @@ err:
+ return ret;
+ }
+
+-static void execlists_context_unpin(struct intel_engine_cs *engine,
++void execlists_context_unpin(struct intel_engine_cs *engine,
+ struct i915_gem_context *ctx)
+ {
+ struct intel_context *ce = &ctx->engine[engine->id];
+@@ -1683,7 +1683,8 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
+ int ret;
+
+ logical_ring_setup(engine);
+-
++ engine->irq_keep_mask |= GT_RENDER_PIPECTL_NOTIFY_INTERRUPT
++ << GEN8_RCS_IRQ_SHIFT;
+ if (HAS_L3_DPF(dev_priv))
+ engine->irq_keep_mask |= GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
+
+@@ -1944,7 +1945,7 @@ uint32_t intel_lr_context_size(struct intel_engine_cs *engine)
+ return ret;
+ }
+
+-static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
++int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
+ struct intel_engine_cs *engine)
+ {
+ struct drm_i915_gem_object *ctx_obj;
+diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
+index e8015e7b..92e113c1 100644
+--- a/drivers/gpu/drm/i915/intel_lrc.h
++++ b/drivers/gpu/drm/i915/intel_lrc.h
+@@ -78,8 +78,13 @@ int logical_xcs_ring_init(struct intel_engine_cs *engine);
+ struct drm_i915_private;
+ struct i915_gem_context;
+
++int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
++ struct intel_engine_cs *engine);
++int execlists_context_pin(struct intel_engine_cs *engine,
++ struct i915_gem_context *ctx);
++void execlists_context_unpin(struct intel_engine_cs *engine,
++ struct i915_gem_context *ctx);
+ uint32_t intel_lr_context_size(struct intel_engine_cs *engine);
+-
+ void intel_lr_context_resume(struct drm_i915_private *dev_priv);
+ uint64_t intel_lr_context_descriptor(struct i915_gem_context *ctx,
+ struct intel_engine_cs *engine);
+diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
+index cb50c527..48a0300d 100644
+--- a/drivers/gpu/drm/i915/intel_panel.c
++++ b/drivers/gpu/drm/i915/intel_panel.c
+@@ -34,6 +34,7 @@
+ #include <linux/moduleparam.h>
+ #include <linux/pwm.h>
+ #include "intel_drv.h"
++#include "intel_ipts.h"
+
+ #define CRC_PMIC_PWM_PERIOD_NS 21333
+
+@@ -712,6 +713,9 @@ static void lpt_disable_backlight(struct intel_connector *connector)
+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
+ u32 tmp;
+
++ if (INTEL_GEN(dev_priv) >= 9 && i915.enable_guc_submission)
++ intel_ipts_notify_backlight_status(false);
++
+ intel_panel_actually_set_backlight(connector, 0);
+
+ /*
+@@ -881,6 +885,9 @@ static void lpt_enable_backlight(struct intel_connector *connector)
+
+ /* This won't stick until the above enable. */
+ intel_panel_actually_set_backlight(connector, panel->backlight.level);
++
++ if (INTEL_GEN(dev_priv) >= 9 && i915.enable_guc_submission)
++ intel_ipts_notify_backlight_status(true);
+ }
+
+ static void pch_enable_backlight(struct intel_connector *connector)
+diff --git a/drivers/gpu/drm/i915/intel_uc.h b/drivers/gpu/drm/i915/intel_uc.h
+index f8411526..7108714a 100644
+--- a/drivers/gpu/drm/i915/intel_uc.h
++++ b/drivers/gpu/drm/i915/intel_uc.h
+@@ -189,6 +189,7 @@ struct intel_guc {
+ struct ida stage_ids;
+
+ struct i915_guc_client *execbuf_client;
++ struct i915_guc_client *ipts_client;
+
+ DECLARE_BITMAP(doorbell_bitmap, GUC_NUM_DOORBELLS);
+ uint32_t db_cacheline; /* Cyclic counter mod pagesize */
+@@ -267,4 +268,9 @@ void intel_huc_select_fw(struct intel_huc *huc);
+ int intel_huc_init_hw(struct intel_huc *huc);
+ void intel_guc_auth_huc(struct drm_i915_private *dev_priv);
+
++int i915_guc_ipts_submission_enable(struct drm_i915_private *dev_priv,
++ struct i915_gem_context *ctx);
++void i915_guc_ipts_submission_disable(struct drm_i915_private *dev_priv);
++void i915_guc_ipts_reacquire_doorbell(struct drm_i915_private *dev_priv);
++
+ #endif
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index be5bea15..937a7084 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -558,8 +558,12 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ if (field->index >= field->report->maxfield ||
+ usage->usage_index >= field->report_count)
+ return 1;
+- td->cc_index = field->index;
+- td->cc_value_index = usage->usage_index;
++
++ if (td->cc_index < 0) {
++ td->cc_index = field->index;
++ td->cc_value_index = usage->usage_index;
++ }
++
+ return 1;
+ case HID_DG_CONTACTMAX:
+ /* we don't set td->last_slot_field as contactcount and
+@@ -857,8 +861,10 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ field->application != HID_DG_TOUCHSCREEN &&
+ field->application != HID_DG_PEN &&
+ field->application != HID_DG_TOUCHPAD &&
++ field->application != HID_GD_MOUSE &&
+ field->application != HID_GD_KEYBOARD &&
+- field->application != HID_CP_CONSUMER_CONTROL)
++ field->application != HID_CP_CONSUMER_CONTROL &&
++ field->logical != HID_DG_TOUCHSCREEN)
+ return -1;
+
+ /*
+@@ -1041,6 +1047,10 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
+ suffix = "Pen";
+ /* force BTN_STYLUS to allow tablet matching in udev */
+ __set_bit(BTN_STYLUS, hi->input->keybit);
++ } else if (hi->report->field[0]->logical == HID_DG_TOUCHSCREEN) {
++ suffix = "SingleTouch";
++ /* force BTN_STYLUS to allow tablet matching in udev */
++ __set_bit(BTN_STYLUS, hi->input->keybit);
+ } else {
+ switch (field->application) {
+ case HID_GD_KEYBOARD:
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index 07bbd4cc..3029917a 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -505,6 +505,7 @@ source "drivers/misc/ti-st/Kconfig"
+ source "drivers/misc/lis3lv02d/Kconfig"
+ source "drivers/misc/altera-stapl/Kconfig"
+ source "drivers/misc/mei/Kconfig"
++source "drivers/misc/ipts/Kconfig"
+ source "drivers/misc/vmw_vmci/Kconfig"
+ source "drivers/misc/mic/Kconfig"
+ source "drivers/misc/genwqe/Kconfig"
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index 81ef3e67..da6710df 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -43,6 +43,7 @@ obj-y += lis3lv02d/
+ obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
+ obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/
+ obj-$(CONFIG_INTEL_MEI) += mei/
++obj-$(CONFIG_INTEL_IPTS) += ipts/
+ obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/
+ obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o
+ obj-$(CONFIG_SRAM) += sram.o
+diff --git a/drivers/misc/ipts/Kconfig b/drivers/misc/ipts/Kconfig
+new file mode 100644
+index 00000000..360ed386
+--- /dev/null
++++ b/drivers/misc/ipts/Kconfig
+@@ -0,0 +1,9 @@
++config INTEL_IPTS
++ tristate "Intel Precise Touch & Stylus"
++ select INTEL_MEI
++ depends on X86 && PCI && HID
++ help
++ Intel Precise Touch & Stylus support
++ Supported SoCs:
++ Intel Skylake
++ Intel Kabylake
+diff --git a/drivers/misc/ipts/Makefile b/drivers/misc/ipts/Makefile
+new file mode 100644
+index 00000000..1783e9cf
+--- /dev/null
++++ b/drivers/misc/ipts/Makefile
+@@ -0,0 +1,13 @@
++#
++# Makefile - Intel Precise Touch & Stylus device driver
++# Copyright (c) 2016, Intel Corporation.
++#
++
++obj-$(CONFIG_INTEL_IPTS)+= intel-ipts.o
++intel-ipts-objs += ipts-mei.o
++intel-ipts-objs += ipts-hid.o
++intel-ipts-objs += ipts-msg-handler.o
++intel-ipts-objs += ipts-kernel.o
++intel-ipts-objs += ipts-resource.o
++intel-ipts-objs += ipts-gfx.o
++intel-ipts-$(CONFIG_DEBUG_FS) += ipts-dbgfs.o
+diff --git a/drivers/misc/ipts/ipts-binary-spec.h b/drivers/misc/ipts/ipts-binary-spec.h
+new file mode 100644
+index 00000000..87d4bc41
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-binary-spec.h
+@@ -0,0 +1,118 @@
++/*
++ *
++ * Intel Precise Touch & Stylus binary spec
++ * Copyright (c) 2016 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++
++#ifndef _IPTS_BINARY_SPEC_H
++#define _IPTS_BINARY_SPEC_H
++
++#define IPTS_BIN_HEADER_VERSION 2
++
++#pragma pack(1)
++
++/* we support 16 output buffers(1:feedback, 15:HID) */
++#define MAX_NUM_OUTPUT_BUFFERS 16
++
++typedef enum {
++ IPTS_BIN_KERNEL,
++ IPTS_BIN_RO_DATA,
++ IPTS_BIN_RW_DATA,
++ IPTS_BIN_SENSOR_FRAME,
++ IPTS_BIN_OUTPUT,
++ IPTS_BIN_DYNAMIC_STATE_HEAP,
++ IPTS_BIN_PATCH_LOCATION_LIST,
++ IPTS_BIN_ALLOCATION_LIST,
++ IPTS_BIN_COMMAND_BUFFER_PACKET,
++ IPTS_BIN_TAG,
++} ipts_bin_res_type_t;
++
++typedef struct ipts_bin_header {
++ char str[4];
++ unsigned int version;
++
++#if IPTS_BIN_HEADER_VERSION > 1
++ unsigned int gfxcore;
++ unsigned int revid;
++#endif
++} ipts_bin_header_t;
++
++typedef struct ipts_bin_alloc {
++ unsigned int handle;
++ unsigned int reserved;
++} ipts_bin_alloc_t;
++
++typedef struct ipts_bin_alloc_list {
++ unsigned int num;
++ ipts_bin_alloc_t alloc[];
++} ipts_bin_alloc_list_t;
++
++typedef struct ipts_bin_cmdbuf {
++ unsigned int size;
++ char data[];
++} ipts_bin_cmdbuf_t;
++
++typedef struct ipts_bin_res {
++ unsigned int handle;
++ ipts_bin_res_type_t type;
++ unsigned int initialize;
++ unsigned int aligned_size;
++ unsigned int size;
++ char data[];
++} ipts_bin_res_t;
++
++typedef enum {
++ IPTS_INPUT,
++ IPTS_OUTPUT,
++ IPTS_CONFIGURATION,
++ IPTS_CALIBRATION,
++ IPTS_FEATURE,
++} ipts_bin_io_buffer_type_t;
++
++typedef struct ipts_bin_io_header {
++ char str[10];
++ unsigned short type;
++} ipts_bin_io_header_t;
++
++typedef struct ipts_bin_res_list {
++ unsigned int num;
++ ipts_bin_res_t res[];
++} ipts_bin_res_list_t;
++
++typedef struct ipts_bin_patch {
++ unsigned int index;
++ unsigned int reserved1[2];
++ unsigned int alloc_offset;
++ unsigned int patch_offset;
++ unsigned int reserved2;
++} ipts_bin_patch_t;
++
++typedef struct ipts_bin_patch_list {
++ unsigned int num;
++ ipts_bin_patch_t patch[];
++} ipts_bin_patch_list_t;
++
++typedef struct ipts_bin_guc_wq_info {
++ unsigned int batch_offset;
++ unsigned int size;
++ char data[];
++} ipts_bin_guc_wq_info_t;
++
++typedef struct ipts_bin_bufid_patch {
++ unsigned int imm_offset;
++ unsigned int mem_offset;
++} ipts_bin_bufid_patch_t;
++
++#pragma pack()
++
++#endif /* _IPTS_BINARY_SPEC_H */
+diff --git a/drivers/misc/ipts/ipts-dbgfs.c b/drivers/misc/ipts/ipts-dbgfs.c
+new file mode 100644
+index 00000000..1c5c92f7
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-dbgfs.c
+@@ -0,0 +1,152 @@
++/*
++ * Intel Precise Touch & Stylus device driver
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++#include <linux/debugfs.h>
++#include <linux/ctype.h>
++#include <linux/uaccess.h>
++
++#include "ipts.h"
++#include "ipts-sensor-regs.h"
++#include "ipts-msg-handler.h"
++#include "ipts-state.h"
++
++const char sensor_mode_fmt[] = "sensor mode : %01d\n";
++const char ipts_status_fmt[] = "sensor mode : %01d\nipts state : %01d\n";
++
++static ssize_t ipts_dbgfs_mode_read(struct file *fp, char __user *ubuf,
++ size_t cnt, loff_t *ppos)
++{
++ ipts_info_t *ipts = fp->private_data;
++ char mode[80];
++ int len = 0;
++
++ if (cnt < sizeof(sensor_mode_fmt) - 3)
++ return -EINVAL;
++
++ len = scnprintf(mode, 80, sensor_mode_fmt, ipts->sensor_mode);
++ if (len < 0)
++ return -EIO;
++
++ return simple_read_from_buffer(ubuf, cnt, ppos, mode, len);
++}
++
++static ssize_t ipts_dbgfs_mode_write(struct file *fp, const char __user *ubuf,
++ size_t cnt, loff_t *ppos)
++{
++ ipts_info_t *ipts = fp->private_data;
++ ipts_state_t state;
++ int sensor_mode, len;
++ char mode[3];
++
++ if (cnt == 0 || cnt > 3)
++ return -EINVAL;
++
++ state = ipts_get_state(ipts);
++ if (state != IPTS_STA_RAW_DATA_STARTED && state != IPTS_STA_HID_STARTED) {
++ return -EIO;
++ }
++
++ len = cnt;
++ if (copy_from_user(mode, ubuf, len))
++ return -EFAULT;
++
++ while(len > 0 && (isspace(mode[len-1]) || mode[len-1] == '\n'))
++ len--;
++ mode[len] = '\0';
++
++ if (sscanf(mode, "%d", &sensor_mode) != 1)
++ return -EINVAL;
++
++ if (sensor_mode != TOUCH_SENSOR_MODE_RAW_DATA &&
++ sensor_mode != TOUCH_SENSOR_MODE_HID) {
++ return -EINVAL;
++ }
++
++ if (sensor_mode == ipts->sensor_mode)
++ return 0;
++
++ ipts_switch_sensor_mode(ipts, sensor_mode);
++
++ return cnt;
++}
++
++static const struct file_operations ipts_mode_dbgfs_fops = {
++ .open = simple_open,
++ .read = ipts_dbgfs_mode_read,
++ .write = ipts_dbgfs_mode_write,
++ .llseek = generic_file_llseek,
++};
++
++static ssize_t ipts_dbgfs_status_read(struct file *fp, char __user *ubuf,
++ size_t cnt, loff_t *ppos)
++{
++ ipts_info_t *ipts = fp->private_data;
++ char status[256];
++ int len = 0;
++
++ if (cnt < sizeof(ipts_status_fmt) - 3)
++ return -EINVAL;
++
++ len = scnprintf(status, 256, ipts_status_fmt, ipts->sensor_mode,
++ ipts->state);
++ if (len < 0)
++ return -EIO;
++
++ return simple_read_from_buffer(ubuf, cnt, ppos, status, len);
++}
++
++static const struct file_operations ipts_status_dbgfs_fops = {
++ .open = simple_open,
++ .read = ipts_dbgfs_status_read,
++ .llseek = generic_file_llseek,
++};
++
++void ipts_dbgfs_deregister(ipts_info_t* ipts)
++{
++ if (!ipts->dbgfs_dir)
++ return;
++
++ debugfs_remove_recursive(ipts->dbgfs_dir);
++ ipts->dbgfs_dir = NULL;
++}
++
++int ipts_dbgfs_register(ipts_info_t* ipts, const char *name)
++{
++ struct dentry *dir, *f;
++
++ dir = debugfs_create_dir(name, NULL);
++ if (!dir)
++ return -ENOMEM;
++
++ f = debugfs_create_file("mode", S_IRUSR | S_IWUSR, dir,
++ ipts, &ipts_mode_dbgfs_fops);
++ if (!f) {
++ ipts_err(ipts, "debugfs mode creation failed\n");
++ goto err;
++ }
++
++ f = debugfs_create_file("status", S_IRUSR, dir,
++ ipts, &ipts_status_dbgfs_fops);
++ if (!f) {
++ ipts_err(ipts, "debugfs status creation failed\n");
++ goto err;
++ }
++
++ ipts->dbgfs_dir = dir;
++
++ return 0;
++err:
++ ipts_dbgfs_deregister(ipts);
++ return -ENODEV;
++}
+diff --git a/drivers/misc/ipts/ipts-gfx.c b/drivers/misc/ipts/ipts-gfx.c
+new file mode 100644
+index 00000000..ff435650
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-gfx.c
+@@ -0,0 +1,186 @@
++/*
++ *
++ * Intel Integrated Touch Gfx Interface Layer
++ * Copyright (c) 2016 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++#include <linux/kthread.h>
++#include <linux/delay.h>
++#include <linux/intel_ipts_if.h>
++
++#include "ipts.h"
++#include "ipts-msg-handler.h"
++#include "ipts-state.h"
++
++static void gfx_processing_complete(void *data)
++{
++ ipts_info_t *ipts = data;
++
++ if (ipts_get_state(ipts) == IPTS_STA_RAW_DATA_STARTED) {
++ schedule_work(&ipts->raw_data_work);
++ return;
++ }
++
++ ipts_dbg(ipts, "not ready to handle gfx event\n");
++}
++
++static void notify_gfx_status(u32 status, void *data)
++{
++ ipts_info_t *ipts = data;
++
++ ipts->gfx_status = status;
++ schedule_work(&ipts->gfx_status_work);
++}
++
++static int connect_gfx(ipts_info_t *ipts)
++{
++ int ret = 0;
++ intel_ipts_connect_t ipts_connect;
++
++ ipts_connect.if_version = IPTS_INTERFACE_V1;
++ ipts_connect.ipts_cb.workload_complete = gfx_processing_complete;
++ ipts_connect.ipts_cb.notify_gfx_status = notify_gfx_status;
++ ipts_connect.data = (void*)ipts;
++
++ ret = intel_ipts_connect(&ipts_connect);
++ if (ret)
++ return ret;
++
++ /* TODO: gfx version check */
++ ipts->gfx_info.gfx_handle = ipts_connect.gfx_handle;
++ ipts->gfx_info.ipts_ops = ipts_connect.ipts_ops;
++
++ return ret;
++}
++
++static void disconnect_gfx(ipts_info_t *ipts)
++{
++ intel_ipts_disconnect(ipts->gfx_info.gfx_handle);
++}
++
++#define RUN_DBG_THREAD
++
++#ifdef RUN_DBG_THREAD
++#include "../mei/mei_dev.h"
++
++static struct task_struct *dbg_thread;
++
++static void ipts_print_dbg_info(ipts_info_t* ipts)
++{
++ char fw_sts_str[MEI_FW_STATUS_STR_SZ];
++ u32 *db, *head, *tail;
++ intel_ipts_wq_info_t* wq_info;
++
++ wq_info = &ipts->resource.wq_info;
++
++ mei_fw_status_str(ipts->cldev->bus, fw_sts_str, MEI_FW_STATUS_STR_SZ);
++ pr_info(">> tdt : fw status : %s\n", fw_sts_str);
++
++ db = (u32*)wq_info->db_addr;
++ head = (u32*)wq_info->wq_head_addr;
++ tail = (u32*)wq_info->wq_tail_addr;
++ pr_info(">> == DB s:%x, c:%x ==\n", *db, *(db+1));
++ pr_info(">> == WQ h:%u, t:%u ==\n", *head, *tail);
++}
++
++static int ipts_dbg_thread(void *data)
++{
++ ipts_info_t *ipts = (ipts_info_t *)data;
++
++ pr_info(">> start debug thread\n");
++
++ while (!kthread_should_stop()) {
++ if (ipts_get_state(ipts) != IPTS_STA_RAW_DATA_STARTED) {
++ pr_info("state is not IPTS_STA_RAW_DATA_STARTED : %d\n",
++ ipts_get_state(ipts));
++ msleep(5000);
++ continue;
++ }
++
++ ipts_print_dbg_info(ipts);
++
++ msleep(3000);
++ }
++
++ return 0;
++}
++#endif
++
++int ipts_open_gpu(ipts_info_t *ipts)
++{
++ int ret = 0;
++
++ ret = connect_gfx(ipts);
++ if (ret) {
++ ipts_dbg(ipts, "cannot connect GPU\n");
++ return ret;
++ }
++
++ ret = ipts->gfx_info.ipts_ops.get_wq_info(ipts->gfx_info.gfx_handle,
++ &ipts->resource.wq_info);
++ if (ret) {
++ ipts_dbg(ipts, "error in get_wq_info\n");
++ return ret;
++ }
++
++#ifdef RUN_DBG_THREAD
++ dbg_thread = kthread_run(ipts_dbg_thread, (void *)ipts, "ipts_debug");
++#endif
++
++ return 0;
++}
++
++void ipts_close_gpu(ipts_info_t *ipts)
++{
++ disconnect_gfx(ipts);
++
++#ifdef RUN_DBG_THREAD
++ kthread_stop(dbg_thread);
++#endif
++}
++
++intel_ipts_mapbuffer_t *ipts_map_buffer(ipts_info_t *ipts, u32 size, u32 flags)
++{
++ intel_ipts_mapbuffer_t *buf;
++ u64 handle;
++ int ret;
++
++ buf = devm_kzalloc(&ipts->cldev->dev, sizeof(*buf), GFP_KERNEL);
++ if (!buf)
++ return NULL;
++
++ buf->size = size;
++ buf->flags = flags;
++
++ handle = ipts->gfx_info.gfx_handle;
++ ret = ipts->gfx_info.ipts_ops.map_buffer(handle, buf);
++ if (ret) {
++ devm_kfree(&ipts->cldev->dev, buf);
++ return NULL;
++ }
++
++ return buf;
++}
++
++void ipts_unmap_buffer(ipts_info_t *ipts, intel_ipts_mapbuffer_t *buf)
++{
++ u64 handle;
++ int ret;
++
++ if (!buf)
++ return;
++
++ handle = ipts->gfx_info.gfx_handle;
++ ret = ipts->gfx_info.ipts_ops.unmap_buffer(handle, buf->buf_handle);
++
++ devm_kfree(&ipts->cldev->dev, buf);
++}
+diff --git a/drivers/misc/ipts/ipts-gfx.h b/drivers/misc/ipts/ipts-gfx.h
+new file mode 100644
+index 00000000..03a5f355
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-gfx.h
+@@ -0,0 +1,24 @@
++/*
++ * Intel Precise Touch & Stylus gpu wrapper
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++
++#ifndef _IPTS_GFX_H_
++#define _IPTS_GFX_H_
++
++int ipts_open_gpu(ipts_info_t *ipts);
++void ipts_close_gpu(ipts_info_t *ipts);
++intel_ipts_mapbuffer_t *ipts_map_buffer(ipts_info_t *ipts, u32 size, u32 flags);
++void ipts_unmap_buffer(ipts_info_t *ipts, intel_ipts_mapbuffer_t *buf);
++
++#endif // _IPTS_GFX_H_
+diff --git a/drivers/misc/ipts/ipts-hid.c b/drivers/misc/ipts/ipts-hid.c
+new file mode 100644
+index 00000000..3b3be617
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-hid.c
+@@ -0,0 +1,456 @@
++/*
++ * Intel Precise Touch & Stylus HID driver
++ *
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#include <linux/module.h>
++#include <linux/firmware.h>
++#include <linux/hid.h>
++#include <linux/vmalloc.h>
++
++#include "ipts.h"
++#include "ipts-resource.h"
++#include "ipts-sensor-regs.h"
++#include "ipts-msg-handler.h"
++
++#define BUS_MEI 0x44
++
++#define HID_DESC_INTEL "intel/ipts/intel_desc.bin"
++#define HID_DESC_VENDOR "intel/ipts/vendor_desc.bin"
++MODULE_FIRMWARE(HID_DESC_INTEL);
++MODULE_FIRMWARE(HID_DESC_VENDOR);
++
++typedef enum output_buffer_payload_type {
++ OUTPUT_BUFFER_PAYLOAD_ERROR = 0,
++ OUTPUT_BUFFER_PAYLOAD_HID_INPUT_REPORT,
++ OUTPUT_BUFFER_PAYLOAD_HID_FEATURE_REPORT,
++ OUTPUT_BUFFER_PAYLOAD_KERNEL_LOAD,
++ OUTPUT_BUFFER_PAYLOAD_FEEDBACK_BUFFER
++} output_buffer_payload_type_t;
++
++typedef struct kernel_output_buffer_header {
++ u16 length;
++ u8 payload_type;
++ u8 reserved1;
++ touch_hid_private_data_t hid_private_data;
++ u8 reserved2[28];
++ u8 data[0];
++} kernel_output_buffer_header_t;
++
++typedef struct kernel_output_payload_error {
++ u16 severity;
++ u16 source;
++ u8 code[4];
++ char string[128];
++} kernel_output_payload_error_t;
++
++static int ipts_hid_get_hid_descriptor(ipts_info_t *ipts, u8 **desc, int *size)
++{
++ u8 *buf;
++ int hid_size = 0, ret = 0;
++ const struct firmware *intel_desc = NULL;
++ const struct firmware *vendor_desc = NULL;
++ const char *intel_desc_path = HID_DESC_INTEL;
++ const char *vendor_desc_path = HID_DESC_VENDOR;
++
++ ret = request_firmware(&intel_desc, intel_desc_path, &ipts->cldev->dev);
++ if (ret) {
++ goto no_hid;
++ }
++ hid_size = intel_desc->size;
++
++ ret = request_firmware(&vendor_desc, vendor_desc_path, &ipts->cldev->dev);
++ if (ret) {
++ ipts_dbg(ipts, "error in reading HID Vendor Descriptor\n");
++ } else {
++ hid_size += vendor_desc->size;
++ }
++
++ ipts_dbg(ipts, "hid size = %d\n", hid_size);
++ buf = vmalloc(hid_size);
++ if (buf == NULL) {
++ ret = -ENOMEM;
++ goto no_mem;
++ }
++
++ memcpy(buf, intel_desc->data, intel_desc->size);
++ if (vendor_desc) {
++ memcpy(&buf[intel_desc->size], vendor_desc->data,
++ vendor_desc->size);
++ release_firmware(vendor_desc);
++ }
++
++ release_firmware(intel_desc);
++
++ *desc = buf;
++ *size = hid_size;
++
++ return 0;
++no_mem :
++ if (vendor_desc)
++ release_firmware(vendor_desc);
++ release_firmware(intel_desc);
++
++no_hid :
++ return ret;
++}
++
++static int ipts_hid_parse(struct hid_device *hid)
++{
++ ipts_info_t *ipts = hid->driver_data;
++ int ret = 0, size;
++ u8 *buf;
++
++ ipts_dbg(ipts, "ipts_hid_parse() start\n");
++ ret = ipts_hid_get_hid_descriptor(ipts, &buf, &size);
++ if (ret != 0) {
++ ipts_dbg(ipts, "ipts_hid_ipts_get_hid_descriptor ret %d\n", ret);
++ return -EIO;
++ }
++
++ ret = hid_parse_report(hid, buf, size);
++ vfree(buf);
++ if (ret) {
++ ipts_err(ipts, "hid_parse_report error : %d\n", ret);
++ goto out;
++ }
++
++ ipts->hid_desc_ready = true;
++out:
++ return ret;
++}
++
++static int ipts_hid_start(struct hid_device *hid)
++{
++ return 0;
++}
++
++static void ipts_hid_stop(struct hid_device *hid)
++{
++ return;
++}
++
++static int ipts_hid_open(struct hid_device *hid)
++{
++ return 0;
++}
++
++static void ipts_hid_close(struct hid_device *hid)
++{
++ ipts_info_t *ipts = hid->driver_data;
++
++ ipts->hid_desc_ready = false;
++
++ return;
++}
++
++static int ipts_hid_send_hid2me_feedback(ipts_info_t *ipts, u32 fb_data_type,
++ __u8 *buf, size_t count)
++{
++ ipts_buffer_info_t *fb_buf;
++ touch_feedback_hdr_t *feedback;
++ u8 *payload;
++ int header_size;
++ ipts_state_t state;
++
++ header_size = sizeof(touch_feedback_hdr_t);
++
++ if (count > ipts->resource.hid2me_buffer_size - header_size)
++ return -EINVAL;
++
++ state = ipts_get_state(ipts);
++ if (state != IPTS_STA_RAW_DATA_STARTED && state != IPTS_STA_HID_STARTED)
++ return 0;
++
++ fb_buf = ipts_get_hid2me_buffer(ipts);
++ feedback = (touch_feedback_hdr_t *)fb_buf->addr;
++ payload = fb_buf->addr + header_size;
++ memset(feedback, 0, header_size);
++
++ feedback->feedback_data_type = fb_data_type;
++ feedback->feedback_cmd_type = TOUCH_FEEDBACK_CMD_TYPE_NONE;
++ feedback->payload_size_bytes = count;
++ feedback->buffer_id = TOUCH_HID_2_ME_BUFFER_ID;
++ feedback->protocol_ver = 0;
++ feedback->reserved[0] = 0xAC;
++
++ /* copy payload */
++ memcpy(payload, buf, count);
++
++ ipts_send_feedback(ipts, TOUCH_HID_2_ME_BUFFER_ID, 0);
++
++ return 0;
++}
++
++static int ipts_hid_raw_request(struct hid_device *hid,
++ unsigned char report_number, __u8 *buf,
++ size_t count, unsigned char report_type,
++ int reqtype)
++{
++ ipts_info_t *ipts = hid->driver_data;
++ u32 fb_data_type;
++
++ ipts_dbg(ipts, "hid raw request => report %d, request %d\n",
++ (int)report_type, reqtype);
++
++ if (report_type != HID_FEATURE_REPORT)
++ return 0;
++
++ switch (reqtype) {
++ case HID_REQ_GET_REPORT:
++ fb_data_type = TOUCH_FEEDBACK_DATA_TYPE_GET_FEATURES;
++ break;
++ case HID_REQ_SET_REPORT:
++ fb_data_type = TOUCH_FEEDBACK_DATA_TYPE_SET_FEATURES;
++ break;
++ default:
++ ipts_err(ipts, "raw request not supprted: %d\n", reqtype);
++ return -EIO;
++ }
++
++ return ipts_hid_send_hid2me_feedback(ipts, fb_data_type, buf, count);
++}
++
++static int ipts_hid_output_report(struct hid_device *hid,
++ __u8 *buf, size_t count)
++{
++ ipts_info_t *ipts = hid->driver_data;
++ u32 fb_data_type;
++
++ ipts_dbg(ipts, "hid output report\n");
++
++ fb_data_type = TOUCH_FEEDBACK_DATA_TYPE_OUTPUT_REPORT;
++
++ return ipts_hid_send_hid2me_feedback(ipts, fb_data_type, buf, count);
++}
++
++static struct hid_ll_driver ipts_hid_ll_driver = {
++ .parse = ipts_hid_parse,
++ .start = ipts_hid_start,
++ .stop = ipts_hid_stop,
++ .open = ipts_hid_open,
++ .close = ipts_hid_close,
++ .raw_request = ipts_hid_raw_request,
++ .output_report = ipts_hid_output_report,
++};
++
++int ipts_hid_init(ipts_info_t *ipts)
++{
++ int ret = 0;
++ struct hid_device *hid;
++
++ hid = hid_allocate_device();
++ if (IS_ERR(hid)) {
++ ret = PTR_ERR(hid);
++ goto err_dev;
++ }
++
++ hid->driver_data = ipts;
++ hid->ll_driver = &ipts_hid_ll_driver;
++ hid->dev.parent = &ipts->cldev->dev;
++ hid->bus = BUS_MEI;
++ hid->version = ipts->device_info.fw_rev;
++ hid->vendor = ipts->device_info.vendor_id;
++ hid->product = ipts->device_info.device_id;
++
++ snprintf(hid->phys, sizeof(hid->phys), "heci3");
++ snprintf(hid->name, sizeof(hid->name),
++ "%s %04hX:%04hX", "ipts", hid->vendor, hid->product);
++
++ ret = hid_add_device(hid);
++ if (ret) {
++ if (ret != -ENODEV)
++ ipts_err(ipts, "can't add hid device: %d\n", ret);
++ goto err_mem_free;
++ }
++
++ ipts->hid = hid;
++
++ return 0;
++
++err_mem_free:
++ hid_destroy_device(hid);
++err_dev:
++ return ret;
++}
++
++void ipts_hid_release(ipts_info_t *ipts)
++{
++ if (!ipts->hid)
++ return;
++ hid_destroy_device(ipts->hid);
++}
++
++int ipts_handle_hid_data(ipts_info_t *ipts,
++ touch_sensor_hid_ready_for_data_rsp_data_t *hid_rsp)
++{
++ touch_raw_data_hdr_t *raw_header;
++ ipts_buffer_info_t *buffer_info;
++ touch_feedback_hdr_t *feedback;
++ u8 *raw_data;
++ int touch_data_buffer_index;
++ int transaction_id;
++ int ret = 0;
++
++ touch_data_buffer_index = (int)hid_rsp->touch_data_buffer_index;
++ buffer_info = ipts_get_touch_data_buffer_hid(ipts);
++ raw_header = (touch_raw_data_hdr_t *)buffer_info->addr;
++ transaction_id = raw_header->hid_private_data.transaction_id;
++
++ raw_data = (u8*)raw_header + sizeof(touch_raw_data_hdr_t);
++ if (raw_header->data_type == TOUCH_RAW_DATA_TYPE_HID_REPORT) {
++ memcpy(ipts->hid_input_report, raw_data,
++ raw_header->raw_data_size_bytes);
++
++ ret = hid_input_report(ipts->hid, HID_INPUT_REPORT,
++ (u8*)ipts->hid_input_report,
++ raw_header->raw_data_size_bytes, 1);
++ if (ret) {
++ ipts_err(ipts, "error in hid_input_report : %d\n", ret);
++ }
++ } else if (raw_header->data_type == TOUCH_RAW_DATA_TYPE_GET_FEATURES) {
++ /* TODO: implement together with "get feature ioctl" */
++ } else if (raw_header->data_type == TOUCH_RAW_DATA_TYPE_ERROR) {
++ touch_error_t *touch_err = (touch_error_t *)raw_data;
++
++ ipts_err(ipts, "error type : %d, me fw error : %x, err reg : %x\n",
++ touch_err->touch_error_type,
++ touch_err->touch_me_fw_error.value,
++ touch_err->touch_error_register.reg_value);
++ }
++
++ /* send feedback data for HID mode */
++ buffer_info = ipts_get_feedback_buffer(ipts, touch_data_buffer_index);
++ feedback = (touch_feedback_hdr_t *)buffer_info->addr;
++ memset(feedback, 0, sizeof(touch_feedback_hdr_t));
++ feedback->feedback_cmd_type = TOUCH_FEEDBACK_CMD_TYPE_NONE;
++ feedback->payload_size_bytes = 0;
++ feedback->buffer_id = touch_data_buffer_index;
++ feedback->protocol_ver = 0;
++ feedback->reserved[0] = 0xAC;
++
++ ret = ipts_send_feedback(ipts, touch_data_buffer_index, transaction_id);
++
++ return ret;
++}
++
++static int handle_outputs(ipts_info_t *ipts, int parallel_idx)
++{
++ kernel_output_buffer_header_t *out_buf_hdr;
++ ipts_buffer_info_t *output_buf, *fb_buf = NULL;
++ u8 *input_report, *payload;
++ u32 transaction_id;
++ int i, payload_size, ret = 0, header_size;
++
++ header_size = sizeof(kernel_output_buffer_header_t);
++ output_buf = ipts_get_output_buffers_by_parallel_id(ipts, parallel_idx);
++ for (i = 0; i < ipts->resource.num_of_outputs; i++) {
++ out_buf_hdr = (kernel_output_buffer_header_t*)output_buf[i].addr;
++ if (out_buf_hdr->length < header_size)
++ continue;
++
++ payload_size = out_buf_hdr->length - header_size;
++ payload = out_buf_hdr->data;
++
++ switch(out_buf_hdr->payload_type) {
++ case OUTPUT_BUFFER_PAYLOAD_HID_INPUT_REPORT:
++ input_report = ipts->hid_input_report;
++ memcpy(input_report, payload, payload_size);
++ hid_input_report(ipts->hid, HID_INPUT_REPORT,
++ input_report, payload_size, 1);
++ break;
++ case OUTPUT_BUFFER_PAYLOAD_HID_FEATURE_REPORT:
++ ipts_dbg(ipts, "output hid feature report\n");
++ break;
++ case OUTPUT_BUFFER_PAYLOAD_KERNEL_LOAD:
++ ipts_dbg(ipts, "output kernel load\n");
++ break;
++ case OUTPUT_BUFFER_PAYLOAD_FEEDBACK_BUFFER:
++ {
++ /* send feedback data for raw data mode */
++ fb_buf = ipts_get_feedback_buffer(ipts,
++ parallel_idx);
++ transaction_id = out_buf_hdr->
++ hid_private_data.transaction_id;
++ memcpy(fb_buf->addr, payload, payload_size);
++ break;
++ }
++ case OUTPUT_BUFFER_PAYLOAD_ERROR:
++ {
++ kernel_output_payload_error_t *err_payload;
++
++ if (payload_size == 0)
++ break;
++
++ err_payload =
++ (kernel_output_payload_error_t*)payload;
++
++ ipts_err(ipts, "error : severity : %d,"
++ " source : %d,"
++ " code : %d:%d:%d:%d\n"
++ "string %s\n",
++ err_payload->severity,
++ err_payload->source,
++ err_payload->code[0],
++ err_payload->code[1],
++ err_payload->code[2],
++ err_payload->code[3],
++ err_payload->string);
++
++ break;
++ }
++ default:
++ ipts_err(ipts, "invalid output buffer payload\n");
++ break;
++ }
++ }
++
++ if (fb_buf) {
++ ret = ipts_send_feedback(ipts, parallel_idx, transaction_id);
++ if (ret)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int handle_output_buffers(ipts_info_t *ipts, int cur_idx, int end_idx)
++{
++ int max_num_of_buffers = ipts_get_num_of_parallel_buffers(ipts);
++
++ do {
++ cur_idx++; /* cur_idx has last completed so starts with +1 */
++ cur_idx %= max_num_of_buffers;
++ handle_outputs(ipts, cur_idx);
++ } while (cur_idx != end_idx);
++
++ return 0;
++}
++
++int ipts_handle_processed_data(ipts_info_t *ipts)
++{
++ int ret = 0;
++ int current_buffer_idx;
++ int last_buffer_idx;
++
++ current_buffer_idx = *ipts->last_submitted_id;
++ last_buffer_idx = ipts->last_buffer_completed;
++
++ if (current_buffer_idx == last_buffer_idx)
++ return 0;
++
++ ipts->last_buffer_completed = current_buffer_idx;
++ handle_output_buffers(ipts, last_buffer_idx, current_buffer_idx);
++
++ return ret;
++}
+diff --git a/drivers/misc/ipts/ipts-hid.h b/drivers/misc/ipts/ipts-hid.h
+new file mode 100644
+index 00000000..f1b22c91
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-hid.h
+@@ -0,0 +1,34 @@
++/*
++ * Intel Precise Touch & Stylus HID definition
++ *
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#ifndef _IPTS_HID_H_
++#define _IPTS_HID_H_
++
++#define BUS_MEI 0x44
++
++#if 0 /* TODO : we have special report ID. will implement them */
++#define WRITE_CHANNEL_REPORT_ID 0xa
++#define READ_CHANNEL_REPORT_ID 0xb
++#define CONFIG_CHANNEL_REPORT_ID 0xd
++#define VENDOR_INFO_REPORT_ID 0xF
++#define SINGLE_TOUCH_REPORT_ID 0x40
++#endif
++
++int ipts_hid_init(ipts_info_t *ipts);
++void ipts_hid_release(ipts_info_t *ipts);
++int ipts_handle_hid_data(ipts_info_t *ipts,
++ touch_sensor_hid_ready_for_data_rsp_data_t *hid_rsp);
++
++#endif /* _IPTS_HID_H_ */
+diff --git a/drivers/misc/ipts/ipts-kernel.c b/drivers/misc/ipts/ipts-kernel.c
+new file mode 100644
+index 00000000..ca5e24ce
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-kernel.c
+@@ -0,0 +1,1050 @@
++#include <linux/module.h>
++#include <linux/firmware.h>
++#include <linux/vmalloc.h>
++#include <linux/intel_ipts_if.h>
++
++#include "ipts.h"
++#include "ipts-resource.h"
++#include "ipts-binary-spec.h"
++#include "ipts-state.h"
++#include "ipts-msg-handler.h"
++#include "ipts-gfx.h"
++
++#define MAX_IOCL_FILE_NAME_LEN 80
++#define MAX_IOCL_FILE_PATH_LEN 256
++
++#pragma pack(1)
++typedef struct bin_data_file_info {
++ u32 io_buffer_type;
++ u32 flags;
++ char file_name[MAX_IOCL_FILE_NAME_LEN];
++} bin_data_file_info_t;
++
++typedef struct bin_fw_info {
++ char fw_name[MAX_IOCL_FILE_NAME_LEN];
++
++ /* list of parameters to load a kernel */
++ s32 vendor_output; /* output index. -1 for no use */
++ u32 num_of_data_files;
++ bin_data_file_info_t data_file[];
++} bin_fw_info_t;
++
++typedef struct bin_fw_list {
++ u32 num_of_fws;
++ bin_fw_info_t fw_info[];
++} bin_fw_list_t;
++#pragma pack()
++
++/* OpenCL kernel */
++typedef struct bin_workload {
++ int cmdbuf_index;
++ int iobuf_input;
++ int iobuf_output[MAX_NUM_OUTPUT_BUFFERS];
++} bin_workload_t;
++
++typedef struct bin_buffer {
++ unsigned int handle;
++ intel_ipts_mapbuffer_t *buf;
++ bool no_unmap; /* only releasing vendor kernel unmaps output buffers */
++} bin_buffer_t;
++
++typedef struct bin_alloc_info {
++ bin_buffer_t *buffs;
++ int num_of_allocations;
++ int num_of_outputs;
++
++ int num_of_buffers;
++} bin_alloc_info_t;
++
++typedef struct bin_guc_wq_item {
++ unsigned int batch_offset;
++ unsigned int size;
++ char data[];
++} bin_guc_wq_item_t;
++
++typedef struct bin_kernel_info {
++ bin_workload_t *wl;
++ bin_alloc_info_t *alloc_info;
++ bin_guc_wq_item_t *guc_wq_item;
++ ipts_bin_bufid_patch_t bufid_patch;
++
++ bool is_vendor; /* 1: vendor, 0: postprocessing */
++} bin_kernel_info_t;
++
++typedef struct bin_kernel_list {
++ intel_ipts_mapbuffer_t *bufid_buf;
++ int num_of_kernels;
++ bin_kernel_info_t kernels[];
++} bin_kernel_list_t;
++
++typedef struct bin_parse_info {
++ u8 *data;
++ int size;
++ int parsed;
++
++ bin_fw_info_t *fw_info;
++
++ /* only used by postprocessing */
++ bin_kernel_info_t *vendor_kernel;
++ u32 interested_vendor_output; /* interested vendor output index */
++} bin_parse_info_t;
++
++#define BDW_SURFACE_BASE_ADDRESS 0x6101000e
++#define SURFACE_STATE_OFFSET_WORD 4
++#define SBA_OFFSET_BYTES 16384
++#define LASTSUBMITID_DEFAULT_VALUE -1
++
++#define IPTS_FW_PATH_FMT "intel/ipts/%s"
++#define IPTS_FW_CONFIG_FILE "intel/ipts/ipts_fw_config.bin"
++
++MODULE_FIRMWARE(IPTS_FW_CONFIG_FILE);
++
++#define IPTS_INPUT_ON ((u32)1 << IPTS_INPUT)
++#define IPTS_OUTPUT_ON ((u32)1 << IPTS_OUTPUT)
++#define IPTS_CONFIGURATION_ON ((u32)1 << IPTS_CONFIGURATION)
++#define IPTS_CALIBRATION_ON ((u32)1 << IPTS_CALIBRATION)
++#define IPTS_FEATURE_ON ((u32)1 << IPTS_FEATURE)
++
++#define DATA_FILE_FLAG_SHARE 0x00000001
++#define DATA_FILE_FLAG_ALLOC_CONTIGUOUS 0x00000002
++
++static int bin_read_fw(ipts_info_t *ipts, const char *fw_name,
++ u8* data, int size)
++{
++ const struct firmware *fw = NULL;
++ char fw_path[MAX_IOCL_FILE_PATH_LEN];
++ int ret = 0;
++
++ snprintf(fw_path, MAX_IOCL_FILE_PATH_LEN, IPTS_FW_PATH_FMT, fw_name);
++ ret = request_firmware(&fw, fw_path, &ipts->cldev->dev);
++ if (ret) {
++ ipts_err(ipts, "cannot read fw %s\n", fw_path);
++ return ret;
++ }
++
++ if (fw->size > size) {
++ ipts_dbg(ipts, "too small buffer to contain fw data\n");
++ ret = -EINVAL;
++ goto rel_return;
++ }
++
++ memcpy(data, fw->data, fw->size);
++
++rel_return:
++ release_firmware(fw);
++
++ return ret;
++}
++
++
++static bin_data_file_info_t* bin_get_data_file_info(bin_fw_info_t* fw_info,
++ u32 io_buffer_type)
++{
++ int i;
++
++ for (i = 0; i < fw_info->num_of_data_files; i++) {
++ if (fw_info->data_file[i].io_buffer_type == io_buffer_type)
++ break;
++ }
++
++ if (i == fw_info->num_of_data_files)
++ return NULL;
++
++ return &fw_info->data_file[i];
++}
++
++static inline bool is_shared_data(const bin_data_file_info_t *data_file)
++{
++ if (data_file)
++ return (!!(data_file->flags & DATA_FILE_FLAG_SHARE));
++
++ return false;
++}
++
++static inline bool is_alloc_cont_data(const bin_data_file_info_t *data_file)
++{
++ if (data_file)
++ return (!!(data_file->flags & DATA_FILE_FLAG_ALLOC_CONTIGUOUS));
++
++ return false;
++}
++
++static inline bool is_parsing_vendor_kernel(const bin_parse_info_t *parse_info)
++{
++ /* vendor_kernel == null while loading itself(vendor kernel) */
++ return parse_info->vendor_kernel == NULL;
++}
++
++static int bin_read_allocation_list(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ bin_alloc_info_t *alloc_info)
++{
++ ipts_bin_alloc_list_t *alloc_list;
++ int alloc_idx, parallel_idx, num_of_parallels, buf_idx, num_of_buffers;
++ int parsed, size;
++
++ parsed = parse_info->parsed;
++ size = parse_info->size;
++
++ alloc_list = (ipts_bin_alloc_list_t *)&parse_info->data[parsed];
++
++ /* validation check */
++ if (sizeof(alloc_list->num) > size - parsed)
++ return -EINVAL;
++
++ /* read the number of aloocations */
++ parsed += sizeof(alloc_list->num);
++
++ /* validation check */
++ if (sizeof(alloc_list->alloc[0]) * alloc_list->num > size - parsed)
++ return -EINVAL;
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ num_of_buffers = num_of_parallels * alloc_list->num + num_of_parallels;
++
++ alloc_info->buffs = vmalloc(sizeof(bin_buffer_t) * num_of_buffers);
++ if (alloc_info->buffs == NULL)
++ return -ENOMEM;
++
++ memset(alloc_info->buffs, 0, sizeof(bin_buffer_t) * num_of_buffers);
++ for (alloc_idx = 0; alloc_idx < alloc_list->num; alloc_idx++) {
++ for (parallel_idx = 0; parallel_idx < num_of_parallels;
++ parallel_idx++) {
++ buf_idx = alloc_idx + (parallel_idx * alloc_list->num);
++ alloc_info->buffs[buf_idx].handle =
++ alloc_list->alloc[alloc_idx].handle;
++
++ }
++
++ parsed += sizeof(alloc_list->alloc[0]);
++ }
++
++ parse_info->parsed = parsed;
++ alloc_info->num_of_allocations = alloc_list->num;
++ alloc_info->num_of_buffers = num_of_buffers;
++
++ ipts_dbg(ipts, "number of allocations = %d, buffers = %d\n",
++ alloc_info->num_of_allocations,
++ alloc_info->num_of_buffers);
++
++ return 0;
++}
++
++static void patch_SBA(u32 *buf_addr, u64 gpu_addr, int size)
++{
++ u64 *stateBase;
++ u64 SBA;
++ u32 inst;
++ int i;
++
++ SBA = gpu_addr + SBA_OFFSET_BYTES;
++
++ for (i = 0; i < size/4; i++) {
++ inst = buf_addr[i];
++ if (inst == BDW_SURFACE_BASE_ADDRESS) {
++ stateBase = (u64*)&buf_addr[i + SURFACE_STATE_OFFSET_WORD];
++ *stateBase |= SBA;
++ *stateBase |= 0x01; // enable
++ break;
++ }
++ }
++}
++
++static int bin_read_cmd_buffer(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ bin_alloc_info_t *alloc_info,
++ bin_workload_t *wl)
++{
++ ipts_bin_cmdbuf_t *cmd;
++ intel_ipts_mapbuffer_t *buf;
++ int cmdbuf_idx, size, parsed, parallel_idx, num_of_parallels;
++
++ size = parse_info->size;
++ parsed = parse_info->parsed;
++
++ cmd = (ipts_bin_cmdbuf_t *)&parse_info->data[parsed];
++
++ if (sizeof(cmd->size) > size - parsed)
++ return -EINVAL;
++
++ parsed += sizeof(cmd->size);
++ if (cmd->size > size - parsed)
++ return -EINVAL;
++
++ ipts_dbg(ipts, "cmd buf size = %d\n", cmd->size);
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ /* command buffers are located after the other allocations */
++ cmdbuf_idx = num_of_parallels * alloc_info->num_of_allocations;
++ for (parallel_idx = 0; parallel_idx < num_of_parallels; parallel_idx++) {
++ buf = ipts_map_buffer(ipts, cmd->size, 0);
++ if (buf == NULL)
++ return -ENOMEM;
++
++ ipts_dbg(ipts, "cmd_idx[%d] = %d, g:0x%p, c:0x%p\n", parallel_idx,
++ cmdbuf_idx, buf->gfx_addr, buf->cpu_addr);
++
++ memcpy((void *)buf->cpu_addr, &(cmd->data[0]), cmd->size);
++ patch_SBA(buf->cpu_addr, (u64)buf->gfx_addr, cmd->size);
++ alloc_info->buffs[cmdbuf_idx].buf = buf;
++ wl[parallel_idx].cmdbuf_index = cmdbuf_idx;
++
++ cmdbuf_idx++;
++ }
++
++ parsed += cmd->size;
++ parse_info->parsed = parsed;
++
++ return 0;
++}
++
++static int bin_find_alloc(ipts_info_t *ipts,
++ bin_alloc_info_t *alloc_info,
++ u32 handle)
++{
++ int i;
++
++ for (i = 0; i < alloc_info->num_of_allocations; i++) {
++ if (alloc_info->buffs[i].handle == handle)
++ return i;
++ }
++
++ return -1;
++}
++
++static intel_ipts_mapbuffer_t* bin_get_vendor_kernel_output(
++ bin_parse_info_t *parse_info,
++ int parallel_idx)
++{
++ bin_kernel_info_t *vendor = parse_info->vendor_kernel;
++ bin_alloc_info_t *alloc_info;
++ int buf_idx, vendor_output_idx;
++
++ alloc_info = vendor->alloc_info;
++ vendor_output_idx = parse_info->interested_vendor_output;
++
++ if (vendor_output_idx >= alloc_info->num_of_outputs)
++ return NULL;
++
++ buf_idx = vendor->wl[parallel_idx].iobuf_output[vendor_output_idx];
++ return alloc_info->buffs[buf_idx].buf;
++}
++
++static int bin_read_res_list(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ bin_alloc_info_t *alloc_info,
++ bin_workload_t *wl)
++{
++ ipts_bin_res_list_t *res_list;
++ ipts_bin_res_t *res;
++ intel_ipts_mapbuffer_t *buf;
++ bin_data_file_info_t *data_file;
++ u8 *bin_data;
++ int i, size, parsed, parallel_idx, num_of_parallels, output_idx = -1;
++ int buf_idx, num_of_alloc;
++ u32 buf_size, flags, io_buf_type;
++ bool initialize;
++
++ parsed = parse_info->parsed;
++ size = parse_info->size;
++ bin_data = parse_info->data;
++
++ res_list = (ipts_bin_res_list_t *)&parse_info->data[parsed];
++ if (sizeof(res_list->num) > (size - parsed))
++ return -EINVAL;
++ parsed += sizeof(res_list->num);
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++
++ ipts_dbg(ipts, "number of resources %u\n", res_list->num);
++ for (i = 0; i < res_list->num; i++) {
++ initialize = false;
++ io_buf_type = 0;
++ flags = 0;
++
++ /* initial data */
++ data_file = NULL;
++
++ res = (ipts_bin_res_t *)(&(bin_data[parsed]));
++ if (sizeof(res[0]) > (size - parsed)) {
++ return -EINVAL;
++ }
++
++ ipts_dbg(ipts, "Resource(%d):handle 0x%08x type %u init %u"
++ " size %u alsigned %u\n",
++ i, res->handle, res->type, res->initialize,
++ res->size, res->aligned_size);
++ parsed += sizeof(res[0]);
++
++ if (res->initialize) {
++ if (res->size > (size - parsed)) {
++ return -EINVAL;
++ }
++ parsed += res->size;
++ }
++
++ initialize = res->initialize;
++ if (initialize && res->size > sizeof(ipts_bin_io_header_t)) {
++ ipts_bin_io_header_t *io_hdr;
++ io_hdr = (ipts_bin_io_header_t *)(&res->data[0]);
++ if (strncmp(io_hdr->str, "INTELTOUCH", 10) == 0) {
++ data_file = bin_get_data_file_info(
++ parse_info->fw_info,
++ (u32)io_hdr->type);
++ switch (io_hdr->type) {
++ case IPTS_INPUT:
++ ipts_dbg(ipts, "input detected\n");
++ io_buf_type = IPTS_INPUT_ON;
++ flags = IPTS_BUF_FLAG_CONTIGUOUS;
++ break;
++ case IPTS_OUTPUT:
++ ipts_dbg(ipts, "output detected\n");
++ io_buf_type = IPTS_OUTPUT_ON;
++ output_idx++;
++ break;
++ default:
++ if ((u32)io_hdr->type > 31) {
++ ipts_err(ipts,
++ "invalid io buffer : %u\n",
++ (u32)io_hdr->type);
++ continue;
++ }
++
++ if (is_alloc_cont_data(data_file))
++ flags = IPTS_BUF_FLAG_CONTIGUOUS;
++
++ io_buf_type = ((u32)1 << (u32)io_hdr->type);
++ ipts_dbg(ipts, "special io buffer %u\n",
++ io_hdr->type);
++ break;
++ }
++
++ initialize = false;
++ }
++ }
++
++ num_of_alloc = alloc_info->num_of_allocations;
++ buf_idx = bin_find_alloc(ipts, alloc_info, res->handle);
++ if (buf_idx == -1) {
++ ipts_dbg(ipts, "cannot find alloc info\n");
++ return -EINVAL;
++ }
++ for (parallel_idx = 0; parallel_idx < num_of_parallels;
++ parallel_idx++, buf_idx += num_of_alloc) {
++ if (!res->aligned_size)
++ continue;
++
++ if (!(parallel_idx == 0 ||
++ (io_buf_type && !is_shared_data(data_file))))
++ continue;
++
++ buf_size = res->aligned_size;
++ if (io_buf_type & IPTS_INPUT_ON) {
++ buf_size = max_t(u32,
++ ipts->device_info.frame_size,
++ buf_size);
++ wl[parallel_idx].iobuf_input = buf_idx;
++ } else if (io_buf_type & IPTS_OUTPUT_ON) {
++ wl[parallel_idx].iobuf_output[output_idx] = buf_idx;
++
++ if (!is_parsing_vendor_kernel(parse_info) &&
++ output_idx > 0) {
++ ipts_err(ipts,
++ "postproc with more than one inout"
++ " is not supported : %d\n", output_idx);
++ return -EINVAL;
++ }
++ }
++
++ if (!is_parsing_vendor_kernel(parse_info) &&
++ io_buf_type & IPTS_OUTPUT_ON) {
++ buf = bin_get_vendor_kernel_output(
++ parse_info,
++ parallel_idx);
++ alloc_info->buffs[buf_idx].no_unmap = true;
++ } else
++ buf = ipts_map_buffer(ipts, buf_size, flags);
++
++ if (buf == NULL) {
++ ipts_dbg(ipts, "ipts_map_buffer failed\n");
++ return -ENOMEM;
++ }
++
++ if (initialize) {
++ memcpy((void *)buf->cpu_addr, &(res->data[0]),
++ res->size);
++ } else {
++ if (data_file && strlen(data_file->file_name)) {
++ bin_read_fw(ipts, data_file->file_name,
++ buf->cpu_addr, buf_size);
++ } else if (is_parsing_vendor_kernel(parse_info) ||
++ !(io_buf_type & IPTS_OUTPUT_ON)) {
++ memset((void *)buf->cpu_addr, 0, res->size);
++ }
++ }
++
++ alloc_info->buffs[buf_idx].buf = buf;
++ }
++ }
++
++ alloc_info->num_of_outputs = output_idx + 1;
++ parse_info->parsed = parsed;
++
++ return 0;
++}
++
++static int bin_read_patch_list(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ bin_alloc_info_t *alloc_info,
++ bin_workload_t *wl)
++{
++ ipts_bin_patch_list_t *patch_list;
++ ipts_bin_patch_t *patch;
++ intel_ipts_mapbuffer_t *cmd = NULL;
++ u8 *batch;
++ int parsed, size, i, parallel_idx, num_of_parallels, cmd_idx, buf_idx;
++ unsigned int gtt_offset;
++
++ parsed = parse_info->parsed;
++ size = parse_info->size;
++ patch_list = (ipts_bin_patch_list_t *)&parse_info->data[parsed];
++
++ if (sizeof(patch_list->num) > (size - parsed)) {
++ return -EFAULT;
++ }
++ parsed += sizeof(patch_list->num);
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ patch = (ipts_bin_patch_t *)(&patch_list->patch[0]);
++ for (i = 0; i < patch_list->num; i++) {
++ if (sizeof(patch_list->patch[0]) > (size - parsed)) {
++ return -EFAULT;
++ }
++
++ for (parallel_idx = 0; parallel_idx < num_of_parallels;
++ parallel_idx++) {
++ cmd_idx = wl[parallel_idx].cmdbuf_index;
++ buf_idx = patch[i].index + parallel_idx *
++ alloc_info->num_of_allocations;
++
++ if (alloc_info->buffs[buf_idx].buf == NULL) {
++ /* buffer shared */
++ buf_idx = patch[i].index;
++ }
++
++ cmd = alloc_info->buffs[cmd_idx].buf;
++ batch = (char *)(u64)cmd->cpu_addr;
++
++ gtt_offset = 0;
++ if(alloc_info->buffs[buf_idx].buf != NULL) {
++ gtt_offset = (u32)(u64)
++ alloc_info->buffs[buf_idx].buf->gfx_addr;
++ }
++ gtt_offset += patch[i].alloc_offset;
++
++ batch += patch[i].patch_offset;
++ *(u32*)batch = gtt_offset;
++ }
++
++ parsed += sizeof(patch_list->patch[0]);
++ }
++
++ parse_info->parsed = parsed;
++
++ return 0;
++}
++
++static int bin_read_guc_wq_item(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ bin_guc_wq_item_t **guc_wq_item)
++{
++ ipts_bin_guc_wq_info_t *bin_guc_wq;
++ bin_guc_wq_item_t *item;
++ u8 *wi_data;
++ int size, parsed, hdr_size, wi_size;
++ int i, batch_offset;
++
++ parsed = parse_info->parsed;
++ size = parse_info->size;
++ bin_guc_wq = (ipts_bin_guc_wq_info_t *)&parse_info->data[parsed];
++
++ wi_size = bin_guc_wq->size;
++ wi_data = bin_guc_wq->data;
++ batch_offset = bin_guc_wq->batch_offset;
++ ipts_dbg(ipts, "wi size = %d, bt offset = %d\n", wi_size, batch_offset);
++ for (i = 0; i < wi_size / sizeof(u32); i++) {
++ ipts_dbg(ipts, "wi[%d] = 0x%08x\n", i, *((u32*)wi_data + i));
++ }
++ hdr_size = sizeof(bin_guc_wq->size) + sizeof(bin_guc_wq->batch_offset);
++
++ if (hdr_size > (size - parsed)) {
++ return -EINVAL;
++ }
++ parsed += hdr_size;
++
++ item = vmalloc(sizeof(bin_guc_wq_item_t) + wi_size);
++ if (item == NULL)
++ return -ENOMEM;
++
++ item->size = wi_size;
++ item->batch_offset = batch_offset;
++ memcpy(item->data, wi_data, wi_size);
++
++ *guc_wq_item = item;
++
++ parsed += wi_size;
++ parse_info->parsed = parsed;
++
++ return 0;
++}
++
++static int bin_setup_guc_workqueue(ipts_info_t *ipts,
++ bin_kernel_list_t *kernel_list)
++{
++ bin_alloc_info_t *alloc_info;
++ bin_workload_t *wl;
++ bin_kernel_info_t *kernel;
++ u8 *wq_start, *wq_addr, *wi_data;
++ bin_buffer_t *bin_buf;
++ int wq_size, wi_size, parallel_idx, cmd_idx, k_idx, iter_size;
++ int i, num_of_parallels, batch_offset, k_num, total_workload;
++
++ wq_addr = (u8*)ipts->resource.wq_info.wq_addr;
++ wq_size = ipts->resource.wq_info.wq_size;
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ total_workload = ipts_get_wq_item_size(ipts);
++ k_num = kernel_list->num_of_kernels;
++
++ iter_size = total_workload * num_of_parallels;
++ if (wq_size % iter_size) {
++ ipts_err(ipts, "wq item cannot fit into wq\n");
++ return -EINVAL;
++ }
++
++ wq_start = wq_addr;
++ for (parallel_idx = 0; parallel_idx < num_of_parallels;
++ parallel_idx++) {
++ kernel = &kernel_list->kernels[0];
++ for (k_idx = 0; k_idx < k_num; k_idx++, kernel++) {
++ wl = kernel->wl;
++ alloc_info = kernel->alloc_info;
++
++ batch_offset = kernel->guc_wq_item->batch_offset;
++ wi_size = kernel->guc_wq_item->size;
++ wi_data = &kernel->guc_wq_item->data[0];
++
++ cmd_idx = wl[parallel_idx].cmdbuf_index;
++ bin_buf = &alloc_info->buffs[cmd_idx];
++
++ /* Patch the WQ Data with proper batch buffer offset */
++ *(u32*)(wi_data + batch_offset) =
++ (u32)(unsigned long)(bin_buf->buf->gfx_addr);
++
++ memcpy(wq_addr, wi_data, wi_size);
++
++ wq_addr += wi_size;
++ }
++ }
++
++ for (i = 0; i < (wq_size / iter_size) - 1; i++) {
++ memcpy(wq_addr, wq_start, iter_size);
++ wq_addr += iter_size;
++ }
++
++ return 0;
++}
++
++static int bin_read_bufid_patch(ipts_info_t *ipts,
++ bin_parse_info_t *parse_info,
++ ipts_bin_bufid_patch_t *bufid_patch)
++{
++ ipts_bin_bufid_patch_t *patch;
++ int size, parsed;
++
++ parsed = parse_info->parsed;
++ size = parse_info->size;
++ patch = (ipts_bin_bufid_patch_t *)&parse_info->data[parsed];
++
++ if (sizeof(ipts_bin_bufid_patch_t) > (size - parsed)) {
++ ipts_dbg(ipts, "invalid bufid info\n");
++ return -EINVAL;
++ }
++ parsed += sizeof(ipts_bin_bufid_patch_t);
++
++ memcpy(bufid_patch, patch, sizeof(ipts_bin_bufid_patch_t));
++
++ parse_info->parsed = parsed;
++
++ return 0;
++}
++
++static int bin_setup_bufid_buffer(ipts_info_t *ipts, bin_kernel_list_t *kernel_list)
++{
++ intel_ipts_mapbuffer_t *buf, *cmd_buf;
++ bin_kernel_info_t *last_kernel;
++ bin_alloc_info_t *alloc_info;
++ bin_workload_t *wl;
++ u8 *batch;
++ int parallel_idx, num_of_parallels, cmd_idx;
++ u32 mem_offset, imm_offset;
++
++ buf = ipts_map_buffer(ipts, PAGE_SIZE, 0);
++ if (!buf) {
++ return -ENOMEM;
++ }
++
++ last_kernel = &kernel_list->kernels[kernel_list->num_of_kernels - 1];
++
++ mem_offset = last_kernel->bufid_patch.mem_offset;
++ imm_offset = last_kernel->bufid_patch.imm_offset;
++ wl = last_kernel->wl;
++ alloc_info = last_kernel->alloc_info;
++
++ /* Initialize the buffer with default value */
++ *((u32*)buf->cpu_addr) = LASTSUBMITID_DEFAULT_VALUE;
++ ipts->current_buffer_index = LASTSUBMITID_DEFAULT_VALUE;
++ ipts->last_buffer_completed = LASTSUBMITID_DEFAULT_VALUE;
++ ipts->last_submitted_id = (int*)buf->cpu_addr;
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ for (parallel_idx = 0; parallel_idx < num_of_parallels; parallel_idx++) {
++ cmd_idx = wl[parallel_idx].cmdbuf_index;
++ cmd_buf = alloc_info->buffs[cmd_idx].buf;
++ batch = (u8*)(u64)cmd_buf->cpu_addr;
++
++ *((u32*)(batch + mem_offset)) = (u32)(u64)(buf->gfx_addr);
++ *((u32*)(batch + imm_offset)) = parallel_idx;
++ }
++
++ kernel_list->bufid_buf = buf;
++
++ return 0;
++}
++
++static void unmap_buffers(ipts_info_t *ipts, bin_alloc_info_t *alloc_info)
++{
++ bin_buffer_t *buffs;
++ int i, num_of_buffers;
++
++ num_of_buffers = alloc_info->num_of_buffers;
++ buffs = &alloc_info->buffs[0];
++
++ for (i = 0; i < num_of_buffers; i++) {
++ if (buffs[i].no_unmap != true && buffs[i].buf != NULL)
++ ipts_unmap_buffer(ipts, buffs[i].buf);
++ }
++}
++
++static int load_kernel(ipts_info_t *ipts, bin_parse_info_t *parse_info,
++ bin_kernel_info_t *kernel)
++{
++ ipts_bin_header_t *hdr;
++ bin_workload_t *wl;
++ bin_alloc_info_t *alloc_info;
++ bin_guc_wq_item_t *guc_wq_item = NULL;
++ ipts_bin_bufid_patch_t bufid_patch;
++ int num_of_parallels, ret;
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++
++ /* check header version and magic numbers */
++ hdr = (ipts_bin_header_t *)parse_info->data;
++ if (hdr->version != IPTS_BIN_HEADER_VERSION ||
++ strncmp(hdr->str, "IOCL", 4) != 0) {
++ ipts_err(ipts, "binary header is not correct version = %d, "
++ "string = %c%c%c%c\n", hdr->version,
++ hdr->str[0], hdr->str[1],
++ hdr->str[2], hdr->str[3] );
++ return -EINVAL;
++ }
++
++ parse_info->parsed = sizeof(ipts_bin_header_t);
++ wl = vmalloc(sizeof(bin_workload_t) * num_of_parallels);
++ if (wl == NULL)
++ return -ENOMEM;
++ memset(wl, 0, sizeof(bin_workload_t) * num_of_parallels);
++
++ alloc_info = vmalloc(sizeof(bin_alloc_info_t));
++ if (alloc_info == NULL) {
++ vfree(wl);
++ return -ENOMEM;
++ }
++ memset(alloc_info, 0, sizeof(bin_alloc_info_t));
++
++ ipts_dbg(ipts, "kernel setup(size : %d)\n", parse_info->size);
++
++ ret = bin_read_allocation_list(ipts, parse_info, alloc_info);
++ if (ret) {
++ ipts_dbg(ipts, "error read_allocation_list\n");
++ goto setup_error;
++ }
++
++ ret = bin_read_cmd_buffer(ipts, parse_info, alloc_info, wl);
++ if (ret) {
++ ipts_dbg(ipts, "error read_cmd_buffer\n");
++ goto setup_error;
++ }
++
++ ret = bin_read_res_list(ipts, parse_info, alloc_info, wl);
++ if (ret) {
++ ipts_dbg(ipts, "error read_res_list\n");
++ goto setup_error;
++ }
++
++ ret = bin_read_patch_list(ipts, parse_info, alloc_info, wl);
++ if (ret) {
++ ipts_dbg(ipts, "error read_patch_list\n");
++ goto setup_error;
++ }
++
++ ret = bin_read_guc_wq_item(ipts, parse_info, &guc_wq_item);
++ if (ret) {
++ ipts_dbg(ipts, "error read_guc_workqueue\n");
++ goto setup_error;
++ }
++
++ memset(&bufid_patch, 0, sizeof(bufid_patch));
++ ret = bin_read_bufid_patch(ipts, parse_info, &bufid_patch);
++ if (ret) {
++ ipts_dbg(ipts, "error read_bufid_patch\n");
++ goto setup_error;
++ }
++
++ kernel->wl = wl;
++ kernel->alloc_info = alloc_info;
++ kernel->is_vendor = is_parsing_vendor_kernel(parse_info);
++ kernel->guc_wq_item = guc_wq_item;
++ memcpy(&kernel->bufid_patch, &bufid_patch, sizeof(bufid_patch));
++
++ return 0;
++
++setup_error:
++ vfree(guc_wq_item);
++
++ unmap_buffers(ipts, alloc_info);
++
++ vfree(alloc_info->buffs);
++ vfree(alloc_info);
++ vfree(wl);
++
++ return ret;
++}
++
++void bin_setup_input_output(ipts_info_t *ipts, bin_kernel_list_t *kernel_list)
++{
++ bin_kernel_info_t *vendor_kernel;
++ bin_workload_t *wl;
++ intel_ipts_mapbuffer_t *buf;
++ bin_alloc_info_t *alloc_info;
++ int parallel_idx, num_of_parallels, i, buf_idx;
++
++ vendor_kernel = &kernel_list->kernels[0];
++
++ wl = vendor_kernel->wl;
++ alloc_info = vendor_kernel->alloc_info;
++ ipts->resource.num_of_outputs = alloc_info->num_of_outputs;
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++
++ for (parallel_idx = 0; parallel_idx < num_of_parallels; parallel_idx++) {
++ buf_idx = wl[parallel_idx].iobuf_input;
++ buf = alloc_info->buffs[buf_idx].buf;
++
++ ipts_dbg(ipts, "in_buf[%d](%d) c:%p, p:%p, g:%p\n",
++ parallel_idx, buf_idx, (void*)buf->cpu_addr,
++ (void*)buf->phy_addr, (void*)buf->gfx_addr);
++
++ ipts_set_input_buffer(ipts, parallel_idx, buf->cpu_addr,
++ buf->phy_addr);
++
++ for (i = 0; i < alloc_info->num_of_outputs; i++) {
++ buf_idx = wl[parallel_idx].iobuf_output[i];
++ buf = alloc_info->buffs[buf_idx].buf;
++
++ ipts_dbg(ipts, "out_buf[%d][%d] c:%p, p:%p, g:%p\n",
++ parallel_idx, i, (void*)buf->cpu_addr,
++ (void*)buf->phy_addr, (void*)buf->gfx_addr);
++
++ ipts_set_output_buffer(ipts, parallel_idx, i,
++ buf->cpu_addr, buf->phy_addr);
++ }
++ }
++}
++
++static void unload_kernel(ipts_info_t *ipts, bin_kernel_info_t *kernel)
++{
++ bin_alloc_info_t *alloc_info = kernel->alloc_info;
++ bin_guc_wq_item_t *guc_wq_item = kernel->guc_wq_item;
++
++ if (guc_wq_item) {
++ vfree(guc_wq_item);
++ }
++
++ if (alloc_info) {
++ unmap_buffers(ipts, alloc_info);
++
++ vfree(alloc_info->buffs);
++ vfree(alloc_info);
++ }
++}
++
++static int setup_kernel(ipts_info_t *ipts, bin_fw_list_t *fw_list)
++{
++ bin_kernel_list_t *kernel_list = NULL;
++ bin_kernel_info_t *kernel = NULL;
++ const struct firmware *fw = NULL;
++ bin_workload_t *wl;
++ bin_fw_info_t *fw_info;
++ char *fw_name, *fw_data;
++ bin_parse_info_t parse_info;
++ int ret = 0, kernel_idx = 0, num_of_kernels = 0;
++ int vendor_output_idx, total_workload = 0;
++ char fw_path[MAX_IOCL_FILE_PATH_LEN];
++
++ num_of_kernels = fw_list->num_of_fws;
++ kernel_list = vmalloc(sizeof(*kernel) * num_of_kernels + sizeof(*kernel_list));
++ if (kernel_list == NULL)
++ return -ENOMEM;
++
++ memset(kernel_list, 0, sizeof(*kernel) * num_of_kernels + sizeof(*kernel_list));
++ kernel_list->num_of_kernels = num_of_kernels;
++ kernel = &kernel_list->kernels[0];
++
++ fw_data = (char *)&fw_list->fw_info[0];
++ for (kernel_idx = 0; kernel_idx < num_of_kernels; kernel_idx++) {
++ fw_info = (bin_fw_info_t *)fw_data;
++ fw_name = &fw_info->fw_name[0];
++ vendor_output_idx = fw_info->vendor_output;
++ snprintf(fw_path, MAX_IOCL_FILE_PATH_LEN, IPTS_FW_PATH_FMT, fw_name);
++ ret = request_firmware(&fw, (const char *)fw_path, &ipts->cldev->dev);
++ if (ret) {
++ ipts_err(ipts, "cannot read fw %s\n", fw_path);
++ goto error_exit;
++ }
++
++ parse_info.data = (u8*)fw->data;
++ parse_info.size = fw->size;
++ parse_info.parsed = 0;
++ parse_info.fw_info = fw_info;
++ parse_info.vendor_kernel = (kernel_idx == 0) ? NULL : &kernel[0];
++ parse_info.interested_vendor_output = vendor_output_idx;
++
++ ret = load_kernel(ipts, &parse_info, &kernel[kernel_idx]);
++ if (ret) {
++ ipts_err(ipts, "do_setup_kernel error : %d\n", ret);
++ release_firmware(fw);
++ goto error_exit;
++ }
++
++ release_firmware(fw);
++
++ total_workload += kernel[kernel_idx].guc_wq_item->size;
++
++ /* advance to the next kernel */
++ fw_data += sizeof(bin_fw_info_t);
++ fw_data += sizeof(bin_data_file_info_t) * fw_info->num_of_data_files;
++ }
++
++ ipts_set_wq_item_size(ipts, total_workload);
++
++ ret = bin_setup_guc_workqueue(ipts, kernel_list);
++ if (ret) {
++ ipts_dbg(ipts, "error setup_guc_workqueue\n");
++ goto error_exit;
++ }
++
++ ret = bin_setup_bufid_buffer(ipts, kernel_list);
++ if (ret) {
++ ipts_dbg(ipts, "error setup_lastbubmit_buffer\n");
++ goto error_exit;
++ }
++
++ bin_setup_input_output(ipts, kernel_list);
++
++ /* workload is not needed during run-time so free them */
++ for (kernel_idx = 0; kernel_idx < num_of_kernels; kernel_idx++) {
++ wl = kernel[kernel_idx].wl;
++ vfree(wl);
++ }
++
++ ipts->kernel_handle = (u64)kernel_list;
++
++ return 0;
++
++error_exit:
++
++ for (kernel_idx = 0; kernel_idx < num_of_kernels; kernel_idx++) {
++ wl = kernel[kernel_idx].wl;
++ vfree(wl);
++ unload_kernel(ipts, &kernel[kernel_idx]);
++ }
++
++ vfree(kernel_list);
++
++ return ret;
++}
++
++
++static void release_kernel(ipts_info_t *ipts)
++{
++ bin_kernel_list_t *kernel_list;
++ bin_kernel_info_t *kernel;
++ int k_idx, k_num;
++
++ kernel_list = (bin_kernel_list_t *)ipts->kernel_handle;
++ k_num = kernel_list->num_of_kernels;
++ kernel = &kernel_list->kernels[0];
++
++ for (k_idx = 0; k_idx < k_num; k_idx++) {
++ unload_kernel(ipts, kernel);
++ kernel++;
++ }
++
++ ipts_unmap_buffer(ipts, kernel_list->bufid_buf);
++
++ vfree(kernel_list);
++ ipts->kernel_handle = 0;
++}
++
++int ipts_init_kernels(ipts_info_t *ipts)
++{
++ const struct firmware *config_fw = NULL;
++ const char *config_fw_path = IPTS_FW_CONFIG_FILE;
++ bin_fw_list_t *fw_list;
++ int ret;
++
++ ret = ipts_open_gpu(ipts);
++ if (ret) {
++ ipts_err(ipts, "open gpu error : %d\n", ret);
++ return ret;
++ }
++
++ ret = request_firmware(&config_fw, config_fw_path, &ipts->cldev->dev);
++ if (ret) {
++ ipts_err(ipts, "request firmware error : %d\n", ret);
++ goto close_gpu;
++ }
++
++ fw_list = (bin_fw_list_t *)config_fw->data;
++ ret = setup_kernel(ipts, fw_list);
++ if (ret) {
++ ipts_err(ipts, "setup kernel error : %d\n", ret);
++ goto close_firmware;
++ }
++
++ release_firmware(config_fw);
++
++ return ret;
++
++close_firmware:
++ release_firmware(config_fw);
++
++close_gpu:
++ ipts_close_gpu(ipts);
++
++ return ret;
++}
++
++void ipts_release_kernels(ipts_info_t *ipts)
++{
++ release_kernel(ipts);
++ ipts_close_gpu(ipts);
++}
+diff --git a/drivers/misc/ipts/ipts-kernel.h b/drivers/misc/ipts/ipts-kernel.h
+new file mode 100644
+index 00000000..0e7f1393
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-kernel.h
+@@ -0,0 +1,23 @@
++/*
++ *
++ * Intel Precise Touch & Stylus Linux driver
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++
++#ifndef _ITPS_GFX_H
++#define _ITPS_GFX_H
++
++int ipts_init_kernels(ipts_info_t *ipts);
++void ipts_release_kernels(ipts_info_t *ipts);
++
++#endif
+diff --git a/drivers/misc/ipts/ipts-mei-msgs.h b/drivers/misc/ipts/ipts-mei-msgs.h
+new file mode 100644
+index 00000000..8ca14680
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-mei-msgs.h
+@@ -0,0 +1,585 @@
++/*
++ * Precise Touch HECI Message
++ *
++ * Copyright (c) 2013-2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#ifndef _IPTS_MEI_MSGS_H_
++#define _IPTS_MEI_MSGS_H_
++
++#include "ipts-sensor-regs.h"
++
++#pragma pack(1)
++
++
++// Initial protocol version
++#define TOUCH_HECI_CLIENT_PROTOCOL_VERSION 10
++
++// GUID that identifies the Touch HECI client.
++#define TOUCH_HECI_CLIENT_GUID \
++ {0x3e8d0870, 0x271a, 0x4208, {0x8e, 0xb5, 0x9a, 0xcb, 0x94, 0x02, 0xae, 0x04}}
++
++
++// define C_ASSERT macro to check structure size and fail compile for unexpected mismatch
++#ifndef C_ASSERT
++#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
++#endif
++
++
++// General Type Defines for compatibility with HID driver and BIOS
++#ifndef BIT0
++#define BIT0 1
++#endif
++#ifndef BIT1
++#define BIT1 2
++#endif
++#ifndef BIT2
++#define BIT2 4
++#endif
++
++
++#define TOUCH_SENSOR_GET_DEVICE_INFO_CMD 0x00000001
++#define TOUCH_SENSOR_GET_DEVICE_INFO_RSP 0x80000001
++
++
++#define TOUCH_SENSOR_SET_MODE_CMD 0x00000002
++#define TOUCH_SENSOR_SET_MODE_RSP 0x80000002
++
++
++#define TOUCH_SENSOR_SET_MEM_WINDOW_CMD 0x00000003
++#define TOUCH_SENSOR_SET_MEM_WINDOW_RSP 0x80000003
++
++
++#define TOUCH_SENSOR_QUIESCE_IO_CMD 0x00000004
++#define TOUCH_SENSOR_QUIESCE_IO_RSP 0x80000004
++
++
++#define TOUCH_SENSOR_HID_READY_FOR_DATA_CMD 0x00000005
++#define TOUCH_SENSOR_HID_READY_FOR_DATA_RSP 0x80000005
++
++
++#define TOUCH_SENSOR_FEEDBACK_READY_CMD 0x00000006
++#define TOUCH_SENSOR_FEEDBACK_READY_RSP 0x80000006
++
++
++#define TOUCH_SENSOR_CLEAR_MEM_WINDOW_CMD 0x00000007
++#define TOUCH_SENSOR_CLEAR_MEM_WINDOW_RSP 0x80000007
++
++
++#define TOUCH_SENSOR_NOTIFY_DEV_READY_CMD 0x00000008
++#define TOUCH_SENSOR_NOTIFY_DEV_READY_RSP 0x80000008
++
++
++#define TOUCH_SENSOR_SET_POLICIES_CMD 0x00000009
++#define TOUCH_SENSOR_SET_POLICIES_RSP 0x80000009
++
++
++#define TOUCH_SENSOR_GET_POLICIES_CMD 0x0000000A
++#define TOUCH_SENSOR_GET_POLICIES_RSP 0x8000000A
++
++
++#define TOUCH_SENSOR_RESET_CMD 0x0000000B
++#define TOUCH_SENSOR_RESET_RSP 0x8000000B
++
++
++#define TOUCH_SENSOR_READ_ALL_REGS_CMD 0x0000000C
++#define TOUCH_SENSOR_READ_ALL_REGS_RSP 0x8000000C
++
++
++#define TOUCH_SENSOR_CMD_ERROR_RSP 0x8FFFFFFF // M2H: ME sends this message to indicate previous command was unrecognized/unsupported
++
++
++
++//*******************************************************************
++//
++// Touch Sensor Status Codes
++//
++//*******************************************************************
++typedef enum touch_status
++{
++ TOUCH_STATUS_SUCCESS = 0, // 0 Requested operation was successful
++ TOUCH_STATUS_INVALID_PARAMS, // 1 Invalid parameter(s) sent
++ TOUCH_STATUS_ACCESS_DENIED, // 2 Unable to validate address range
++ TOUCH_STATUS_CMD_SIZE_ERROR, // 3 HECI message incorrect size for specified command
++ TOUCH_STATUS_NOT_READY, // 4 Memory window not set or device is not armed for operation
++ TOUCH_STATUS_REQUEST_OUTSTANDING, // 5 There is already an outstanding message of the same type, must wait for response before sending another request of that type
++ TOUCH_STATUS_NO_SENSOR_FOUND, // 6 Sensor could not be found. Either no sensor is connected, the sensor has not yet initialized, or the system is improperly configured.
++ TOUCH_STATUS_OUT_OF_MEMORY, // 7 Not enough memory/storage for requested operation
++ TOUCH_STATUS_INTERNAL_ERROR, // 8 Unexpected error occurred
++ TOUCH_STATUS_SENSOR_DISABLED, // 9 Used in TOUCH_SENSOR_HID_READY_FOR_DATA_RSP to indicate sensor has been disabled or reset and must be reinitialized.
++ TOUCH_STATUS_COMPAT_CHECK_FAIL, // 10 Used to indicate compatibility revision check between sensor and ME failed, or protocol ver between ME/HID/Kernels failed.
++ TOUCH_STATUS_SENSOR_EXPECTED_RESET, // 11 Indicates sensor went through a reset initiated by ME
++ TOUCH_STATUS_SENSOR_UNEXPECTED_RESET, // 12 Indicates sensor went through an unexpected reset
++ TOUCH_STATUS_RESET_FAILED, // 13 Requested sensor reset failed to complete
++ TOUCH_STATUS_TIMEOUT, // 14 Operation timed out
++ TOUCH_STATUS_TEST_MODE_FAIL, // 15 Test mode pattern did not match expected values
++ TOUCH_STATUS_SENSOR_FAIL_FATAL, // 16 Indicates sensor reported fatal error during reset sequence. Further progress is not possible.
++ TOUCH_STATUS_SENSOR_FAIL_NONFATAL, // 17 Indicates sensor reported non-fatal error during reset sequence. HID/BIOS logs error and attempts to continue.
++ TOUCH_STATUS_INVALID_DEVICE_CAPS, // 18 Indicates sensor reported invalid capabilities, such as not supporting required minimum frequency or I/O mode.
++ TOUCH_STATUS_QUIESCE_IO_IN_PROGRESS, // 19 Indicates that command cannot be complete until ongoing Quiesce I/O flow has completed.
++ TOUCH_STATUS_MAX // 20 Invalid value, never returned
++} touch_status_t;
++C_ASSERT(sizeof(touch_status_t) == 4);
++
++
++
++//*******************************************************************
++//
++// Defines for message structures used for Host to ME communication
++//
++//*******************************************************************
++
++
++typedef enum touch_sensor_mode
++{
++ TOUCH_SENSOR_MODE_HID = 0, // Set mode to HID mode
++ TOUCH_SENSOR_MODE_RAW_DATA, // Set mode to Raw Data mode
++ TOUCH_SENSOR_MODE_SENSOR_DEBUG = 4, // Used like TOUCH_SENSOR_MODE_HID but data coming from sensor is not necessarily a HID packet.
++ TOUCH_SENSOR_MODE_MAX // Invalid value
++} touch_sensor_mode_t;
++C_ASSERT(sizeof(touch_sensor_mode_t) == 4);
++
++typedef struct touch_sensor_set_mode_cmd_data
++{
++ touch_sensor_mode_t sensor_mode; // Indicate desired sensor mode
++ u32 Reserved[3]; // For future expansion
++} touch_sensor_set_mode_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_set_mode_cmd_data_t) == 16);
++
++
++#define TOUCH_SENSOR_MAX_DATA_BUFFERS 16
++#define TOUCH_HID_2_ME_BUFFER_ID TOUCH_SENSOR_MAX_DATA_BUFFERS
++#define TOUCH_HID_2_ME_BUFFER_SIZE_MAX 1024
++#define TOUCH_INVALID_BUFFER_ID 0xFF
++
++typedef struct touch_sensor_set_mem_window_cmd_data
++{
++ u32 touch_data_buffer_addr_lower[TOUCH_SENSOR_MAX_DATA_BUFFERS]; // Lower 32 bits of Touch Data Buffer physical address. Size of each buffer should be TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.FrameSize
++ u32 touch_data_buffer_addr_upper[TOUCH_SENSOR_MAX_DATA_BUFFERS]; // Upper 32 bits of Touch Data Buffer physical address. Size of each buffer should be TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.FrameSize
++ u32 tail_offset_addr_lower; // Lower 32 bits of Tail Offset physical address
++ u32 tail_offset_addr_upper; // Upper 32 bits of Tail Offset physical address, always 32 bit, increment by WorkQueueItemSize
++ u32 doorbell_cookie_addr_lower; // Lower 32 bits of Doorbell register physical address
++ u32 doorbell_cookie_addr_upper; // Upper 32 bits of Doorbell register physical address, always 32 bit, increment as integer, rollover to 1
++ u32 feedback_buffer_addr_lower[TOUCH_SENSOR_MAX_DATA_BUFFERS]; // Lower 32 bits of Feedback Buffer physical address. Size of each buffer should be TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.FeedbackSize
++ u32 feedback_buffer_addr_upper[TOUCH_SENSOR_MAX_DATA_BUFFERS]; // Upper 32 bits of Feedback Buffer physical address. Size of each buffer should be TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.FeedbackSize
++ u32 hid2me_buffer_addr_lower; // Lower 32 bits of dedicated HID to ME communication buffer. Size is Hid2MeBufferSize.
++ u32 hid2me_buffer_addr_upper; // Upper 32 bits of dedicated HID to ME communication buffer. Size is Hid2MeBufferSize.
++ u32 hid2me_buffer_size; // Size in bytes of Hid2MeBuffer, can be no bigger than TOUCH_HID_2_ME_BUFFER_SIZE_MAX
++ u8 reserved1; // For future expansion
++ u8 work_queue_item_size; // Size in bytes of the GuC Work Queue Item pointed to by TailOffset
++ u16 work_queue_size; // Size in bytes of the entire GuC Work Queue
++ u32 reserved[8]; // For future expansion
++} touch_sensor_set_mem_window_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_set_mem_window_cmd_data_t) == 320);
++
++
++#define TOUCH_SENSOR_QUIESCE_FLAG_GUC_RESET BIT0 // indicates GuC got reset and ME must re-read GuC data such as TailOffset and Doorbell Cookie values
++
++typedef struct touch_sensor_quiesce_io_cmd_data
++{
++ u32 quiesce_flags; // Optionally set TOUCH_SENSOR_QUIESCE_FLAG_GUC_RESET
++ u32 reserved[2];
++} touch_sensor_quiesce_io_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_quiesce_io_cmd_data_t) == 12);
++
++
++typedef struct touch_sensor_feedback_ready_cmd_data
++{
++ u8 feedback_index; // Index value from 0 to TOUCH_HID_2_ME_BUFFER_ID used to indicate which Feedback Buffer to use. Using special value TOUCH_HID_2_ME_BUFFER_ID
++ // is an indication to ME to get feedback data from the Hid2Me buffer instead of one of the standard Feedback buffers.
++ u8 reserved1[3]; // For future expansion
++ u32 transaction_id; // Transaction ID that was originally passed to host in TOUCH_HID_PRIVATE_DATA. Used to track round trip of a given transaction for performance measurements.
++ u32 reserved2[2]; // For future expansion
++} touch_sensor_feedback_ready_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_feedback_ready_cmd_data_t) == 16);
++
++
++#define TOUCH_DEFAULT_DOZE_TIMER_SECONDS 30
++
++typedef enum touch_freq_override
++{
++ TOUCH_FREQ_OVERRIDE_NONE, // Do not apply any override
++ TOUCH_FREQ_OVERRIDE_10MHZ, // Force frequency to 10MHz (not currently supported)
++ TOUCH_FREQ_OVERRIDE_17MHZ, // Force frequency to 17MHz
++ TOUCH_FREQ_OVERRIDE_30MHZ, // Force frequency to 30MHz
++ TOUCH_FREQ_OVERRIDE_50MHZ, // Force frequency to 50MHz (not currently supported)
++ TOUCH_FREQ_OVERRIDE_MAX // Invalid value
++} touch_freq_override_t;
++C_ASSERT(sizeof(touch_freq_override_t) == 4);
++
++typedef enum touch_spi_io_mode_override
++{
++ TOUCH_SPI_IO_MODE_OVERRIDE_NONE, // Do not apply any override
++ TOUCH_SPI_IO_MODE_OVERRIDE_SINGLE, // Force Single I/O
++ TOUCH_SPI_IO_MODE_OVERRIDE_DUAL, // Force Dual I/O
++ TOUCH_SPI_IO_MODE_OVERRIDE_QUAD, // Force Quad I/O
++ TOUCH_SPI_IO_MODE_OVERRIDE_MAX // Invalid value
++} touch_spi_io_mode_override_t;
++C_ASSERT(sizeof(touch_spi_io_mode_override_t) == 4);
++
++// Debug Policy bits used by TOUCH_POLICY_DATA.DebugOverride
++#define TOUCH_DBG_POLICY_OVERRIDE_STARTUP_TIMER_DIS BIT0 // Disable sensor startup timer
++#define TOUCH_DBG_POLICY_OVERRIDE_SYNC_BYTE_DIS BIT1 // Disable Sync Byte check
++#define TOUCH_DBG_POLICY_OVERRIDE_ERR_RESET_DIS BIT2 // Disable error resets
++
++typedef struct touch_policy_data
++{
++ u32 reserved0; // For future expansion.
++ u32 doze_timer :16; // Value in seconds, after which ME will put the sensor into Doze power state if no activity occurs. Set
++ // to 0 to disable Doze mode (not recommended). Value will be set to TOUCH_DEFAULT_DOZE_TIMER_SECONDS by
++ // default.
++ touch_freq_override_t freq_override :3; // Override frequency requested by sensor
++ touch_spi_io_mode_override_t spi_io_override :3; // Override IO mode requested by sensor
++ u32 reserved1 :10; // For future expansion
++ u32 reserved2; // For future expansion
++ u32 debug_override; // Normally all bits will be zero. Bits will be defined as needed for enabling special debug features
++} touch_policy_data_t;
++C_ASSERT(sizeof(touch_policy_data_t) == 16);
++
++typedef struct touch_sensor_set_policies_cmd_data
++{
++ touch_policy_data_t policy_data; // Contains the desired policy to be set
++} touch_sensor_set_policies_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_set_policies_cmd_data_t) == 16);
++
++
++typedef enum touch_sensor_reset_type
++{
++ TOUCH_SENSOR_RESET_TYPE_HARD, // Hardware Reset using dedicated GPIO pin
++ TOUCH_SENSOR_RESET_TYPE_SOFT, // Software Reset using command written over SPI interface
++ TOUCH_SENSOR_RESET_TYPE_MAX // Invalid value
++} touch_sensor_reset_type_t;
++C_ASSERT(sizeof(touch_sensor_reset_type_t) == 4);
++
++typedef struct touch_sensor_reset_cmd_data
++{
++ touch_sensor_reset_type_t reset_type; // Indicate desired reset type
++ u32 reserved; // For future expansion
++} touch_sensor_reset_cmd_data_t;
++C_ASSERT(sizeof(touch_sensor_reset_cmd_data_t) == 8);
++
++
++//
++// Host to ME message
++//
++typedef struct touch_sensor_msg_h2m
++{
++ u32 command_code;
++ union
++ {
++ touch_sensor_set_mode_cmd_data_t set_mode_cmd_data;
++ touch_sensor_set_mem_window_cmd_data_t set_window_cmd_data;
++ touch_sensor_quiesce_io_cmd_data_t quiesce_io_cmd_data;
++ touch_sensor_feedback_ready_cmd_data_t feedback_ready_cmd_data;
++ touch_sensor_set_policies_cmd_data_t set_policies_cmd_data;
++ touch_sensor_reset_cmd_data_t reset_cmd_data;
++ } h2m_data;
++} touch_sensor_msg_h2m_t;
++C_ASSERT(sizeof(touch_sensor_msg_h2m_t) == 324);
++
++
++//*******************************************************************
++//
++// Defines for message structures used for ME to Host communication
++//
++//*******************************************************************
++
++// I/O mode values used by TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.
++typedef enum touch_spi_io_mode
++{
++ TOUCH_SPI_IO_MODE_SINGLE = 0, // Sensor set for Single I/O SPI
++ TOUCH_SPI_IO_MODE_DUAL, // Sensor set for Dual I/O SPI
++ TOUCH_SPI_IO_MODE_QUAD, // Sensor set for Quad I/O SPI
++ TOUCH_SPI_IO_MODE_MAX // Invalid value
++} touch_spi_io_mode_t;
++C_ASSERT(sizeof(touch_spi_io_mode_t) == 4);
++
++//
++// TOUCH_SENSOR_GET_DEVICE_INFO_RSP code is sent in response to TOUCH_SENSOR_GET_DEVICE_INFO_CMD. This code will be followed
++// by TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and sensor details are reported.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_NO_SENSOR_FOUND: Sensor has not yet been detected. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_DEVICE_CAPS: Indicates sensor does not support minimum required Frequency or I/O Mode. ME firmware will choose best possible option for the errant
++// field. Caller should attempt to continue.
++// TOUCH_STATUS_COMPAT_CHECK_FAIL: Indicates TouchIC/ME compatibility mismatch. Caller should attempt to continue.
++//
++typedef struct touch_sensor_get_device_info_rsp_data
++{
++ u16 vendor_id; // Touch Sensor vendor ID
++ u16 device_id; // Touch Sensor device ID
++ u32 hw_rev; // Touch Sensor Hardware Revision
++ u32 fw_rev; // Touch Sensor Firmware Revision
++ u32 frame_size; // Max size of one frame returned by Touch IC in bytes. This data will be TOUCH_RAW_DATA_HDR followed
++ // by a payload. The payload can be raw data or a HID structure depending on mode.
++ u32 feedback_size; // Max size of one Feedback structure in bytes
++ touch_sensor_mode_t sensor_mode; // Current operating mode of the sensor
++ u32 max_touch_points :8; // Maximum number of simultaneous touch points that can be reported by sensor
++ touch_freq_t spi_frequency :8; // SPI bus Frequency supported by sensor and ME firmware
++ touch_spi_io_mode_t spi_io_mode :8; // SPI bus I/O Mode supported by sensor and ME firmware
++ u32 reserved0 :8; // For future expansion
++ u8 sensor_minor_eds_rev; // Minor version number of EDS spec supported by sensor (from Compat Rev ID Reg)
++ u8 sensor_major_eds_rev; // Major version number of EDS spec supported by sensor (from Compat Rev ID Reg)
++ u8 me_minor_eds_rev; // Minor version number of EDS spec supported by ME
++ u8 me_major_eds_rev; // Major version number of EDS spec supported by ME
++ u8 sensor_eds_intf_rev; // EDS Interface Revision Number supported by sensor (from Compat Rev ID Reg)
++ u8 me_eds_intf_rev; // EDS Interface Revision Number supported by ME
++ u8 kernel_compat_ver; // EU Kernel Compatibility Version (from Compat Rev ID Reg)
++ u8 reserved1; // For future expansion
++ u32 reserved2[2]; // For future expansion
++} touch_sensor_get_device_info_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_get_device_info_rsp_data_t) == 44);
++
++
++//
++// TOUCH_SENSOR_SET_MODE_RSP code is sent in response to TOUCH_SENSOR_SET_MODE_CMD. This code will be followed
++// by TOUCH_SENSOR_SET_MODE_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and mode was set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++//
++typedef struct touch_sensor_set_mode_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_set_mode_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_set_mode_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_SET_MEM_WINDOW_RSP code is sent in response to TOUCH_SENSOR_SET_MEM_WINDOW_CMD. This code will be followed
++// by TOUCH_SENSOR_SET_MEM_WINDOW_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and memory window was set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++// TOUCH_STATUS_ACCESS_DENIED: Unable to map host address ranges for DMA.
++// TOUCH_STATUS_OUT_OF_MEMORY: Unable to allocate enough space for needed buffers.
++//
++typedef struct touch_sensor_set_mem_window_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_set_mem_window_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_set_mem_window_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_QUIESCE_IO_RSP code is sent in response to TOUCH_SENSOR_QUIESCE_IO_CMD. This code will be followed
++// by TOUCH_SENSOR_QUIESCE_IO_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and touch flow has stopped.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_QUIESCE_IO_IN_PROGRESS: Indicates that Quiesce I/O is already in progress and this command cannot be accepted at this time.
++// TOUCH_STATIS_TIMEOUT: Indicates ME timed out waiting for Quiesce I/O flow to complete.
++//
++typedef struct touch_sensor_quiesce_io_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_quiesce_io_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_quiesce_io_rsp_data_t) == 12);
++
++
++// Reset Reason values used in TOUCH_SENSOR_HID_READY_FOR_DATA_RSP_DATA
++typedef enum touch_reset_reason
++{
++ TOUCH_RESET_REASON_UNKNOWN = 0, // Reason for sensor reset is not known
++ TOUCH_RESET_REASON_FEEDBACK_REQUEST, // Reset was requested as part of TOUCH_SENSOR_FEEDBACK_READY_CMD
++ TOUCH_RESET_REASON_HECI_REQUEST, // Reset was requested via TOUCH_SENSOR_RESET_CMD
++ TOUCH_RESET_REASON_MAX
++} touch_reset_reason_t;
++C_ASSERT(sizeof(touch_reset_reason_t) == 4);
++
++//
++// TOUCH_SENSOR_HID_READY_FOR_DATA_RSP code is sent in response to TOUCH_SENSOR_HID_READY_FOR_DATA_CMD. This code will be followed
++// by TOUCH_SENSOR_HID_READY_FOR_DATA_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and HID data was sent by DMA. This will only be sent in HID mode.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_REQUEST_OUTSTANDING: Previous request is still outstanding, ME FW cannot handle another request for the same command.
++// TOUCH_STATUS_NOT_READY: Indicates memory window has not yet been set by BIOS/HID.
++// TOUCH_STATUS_SENSOR_DISABLED: Indicates that ME to HID communication has been stopped either by TOUCH_SENSOR_QUIESCE_IO_CMD or TOUCH_SENSOR_CLEAR_MEM_WINDOW_CMD.
++// TOUCH_STATUS_SENSOR_UNEXPECTED_RESET: Sensor signaled a Reset Interrupt. ME did not expect this and has no info about why this occurred.
++// TOUCH_STATUS_SENSOR_EXPECTED_RESET: Sensor signaled a Reset Interrupt. ME either directly requested this reset, or it was expected as part of a defined flow in the EDS.
++// TOUCH_STATUS_QUIESCE_IO_IN_PROGRESS: Indicates that Quiesce I/O is already in progress and this command cannot be accepted at this time.
++// TOUCH_STATUS_TIMEOUT: Sensor did not generate a reset interrupt in the time allotted. Could indicate sensor is not connected or malfunctioning.
++//
++typedef struct touch_sensor_hid_ready_for_data_rsp_data
++{
++ u32 data_size; // Size of the data the ME DMA'd into a RawDataBuffer. Valid only when Status == TOUCH_STATUS_SUCCESS
++ u8 touch_data_buffer_index; // Index to indicate which RawDataBuffer was used. Valid only when Status == TOUCH_STATUS_SUCCESS
++ u8 reset_reason; // If Status is TOUCH_STATUS_SENSOR_EXPECTED_RESET, ME will provide the cause. See TOUCH_RESET_REASON.
++ u8 reserved1[2]; // For future expansion
++ u32 reserved2[5]; // For future expansion
++} touch_sensor_hid_ready_for_data_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_hid_ready_for_data_rsp_data_t) == 28);
++
++
++//
++// TOUCH_SENSOR_FEEDBACK_READY_RSP code is sent in response to TOUCH_SENSOR_FEEDBACK_READY_CMD. This code will be followed
++// by TOUCH_SENSOR_FEEDBACK_READY_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and any feedback or commands were sent to sensor.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++// TOUCH_STATUS_COMPAT_CHECK_FAIL Indicates ProtocolVer does not match ME supported version. (non-fatal error)
++// TOUCH_STATUS_INTERNAL_ERROR: Unexpected error occurred. This should not normally be seen.
++// TOUCH_STATUS_OUT_OF_MEMORY: Insufficient space to store Calibration Data
++//
++typedef struct touch_sensor_feedback_ready_rsp_data
++{
++ u8 feedback_index; // Index value from 0 to TOUCH_SENSOR_MAX_DATA_BUFFERS used to indicate which Feedback Buffer to use
++ u8 reserved1[3]; // For future expansion
++ u32 reserved2[6]; // For future expansion
++} touch_sensor_feedback_ready_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_feedback_ready_rsp_data_t) == 28);
++
++
++//
++// TOUCH_SENSOR_CLEAR_MEM_WINDOW_RSP code is sent in response to TOUCH_SENSOR_CLEAR_MEM_WINDOW_CMD. This code will be followed
++// by TOUCH_SENSOR_CLEAR_MEM_WINDOW_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and memory window was set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++// TOUCH_STATUS_QUIESCE_IO_IN_PROGRESS: Indicates that Quiesce I/O is already in progress and this command cannot be accepted at this time.
++//
++typedef struct touch_sensor_clear_mem_window_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_clear_mem_window_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_clear_mem_window_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_NOTIFY_DEV_READY_RSP code is sent in response to TOUCH_SENSOR_NOTIFY_DEV_READY_CMD. This code will be followed
++// by TOUCH_SENSOR_NOTIFY_DEV_READY_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and sensor has been detected by ME FW.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size.
++// TOUCH_STATUS_REQUEST_OUTSTANDING: Previous request is still outstanding, ME FW cannot handle another request for the same command.
++// TOUCH_STATUS_TIMEOUT: Sensor did not generate a reset interrupt in the time allotted. Could indicate sensor is not connected or malfunctioning.
++// TOUCH_STATUS_SENSOR_FAIL_FATAL: Sensor indicated a fatal error, further operation is not possible. Error details can be found in ErrReg.
++// TOUCH_STATUS_SENSOR_FAIL_NONFATAL: Sensor indicated a non-fatal error. Error should be logged by caller and init flow can continue. Error details can be found in ErrReg.
++//
++typedef struct touch_sensor_notify_dev_ready_rsp_data
++{
++ touch_err_reg_t err_reg; // Value of sensor Error Register, field is only valid for Status == TOUCH_STATUS_SENSOR_FAIL_FATAL or TOUCH_STATUS_SENSOR_FAIL_NONFATAL
++ u32 reserved[2]; // For future expansion
++} touch_sensor_notify_dev_ready_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_notify_dev_ready_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_SET_POLICIES_RSP code is sent in response to TOUCH_SENSOR_SET_POLICIES_CMD. This code will be followed
++// by TOUCH_SENSOR_SET_POLICIES_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and new policies were set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++//
++typedef struct touch_sensor_set_policies_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_set_policies_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_set_policies_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_GET_POLICIES_RSP code is sent in response to TOUCH_SENSOR_GET_POLICIES_CMD. This code will be followed
++// by TOUCH_SENSOR_GET_POLICIES_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and new policies were set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++//
++typedef struct touch_sensor_get_policies_rsp_data
++{
++ touch_policy_data_t policy_data; // Contains the current policy
++} touch_sensor_get_policies_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_get_policies_rsp_data_t) == 16);
++
++
++//
++// TOUCH_SENSOR_RESET_RSP code is sent in response to TOUCH_SENSOR_RESET_CMD. This code will be followed
++// by TOUCH_SENSOR_RESET_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and sensor reset was completed.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++// TOUCH_STATUS_INVALID_PARAMS: Input parameters are out of range.
++// TOUCH_STATUS_TIMEOUT: Sensor did not generate a reset interrupt in the time allotted. Could indicate sensor is not connected or malfunctioning.
++// TOUCH_STATUS_RESET_FAILED: Sensor generated an invalid or unexpected interrupt.
++// TOUCH_STATUS_QUIESCE_IO_IN_PROGRESS: Indicates that Quiesce I/O is already in progress and this command cannot be accepted at this time.
++//
++typedef struct touch_sensor_reset_rsp_data
++{
++ u32 reserved[3]; // For future expansion
++} touch_sensor_reset_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_reset_rsp_data_t) == 12);
++
++
++//
++// TOUCH_SENSOR_READ_ALL_REGS_RSP code is sent in response to TOUCH_SENSOR_READ_ALL_REGS_CMD. This code will be followed
++// by TOUCH_SENSOR_READ_ALL_REGS_RSP_DATA.
++//
++// Possible Status values:
++// TOUCH_STATUS_SUCCESS: Command was processed successfully and new policies were set.
++// TOUCH_STATUS_CMD_SIZE_ERROR: Command sent did not match expected size. Other fields will not contain valid data.
++//
++typedef struct touch_sensor_read_all_regs_rsp_data
++{
++ touch_reg_block_t sensor_regs; // Returns first 64 bytes of register space used for normal touch operation. Does not include test mode register.
++ u32 reserved[4];
++} touch_sensor_read_all_regs_rsp_data_t;
++C_ASSERT(sizeof(touch_sensor_read_all_regs_rsp_data_t) == 80);
++
++//
++// ME to Host Message
++//
++typedef struct touch_sensor_msg_m2h
++{
++ u32 command_code;
++ touch_status_t status;
++ union
++ {
++ touch_sensor_get_device_info_rsp_data_t device_info_rsp_data;
++ touch_sensor_set_mode_rsp_data_t set_mode_rsp_data;
++ touch_sensor_set_mem_window_rsp_data_t set_mem_window_rsp_data;
++ touch_sensor_quiesce_io_rsp_data_t quiesce_io_rsp_data;
++ touch_sensor_hid_ready_for_data_rsp_data_t hid_ready_for_data_rsp_data;
++ touch_sensor_feedback_ready_rsp_data_t feedback_ready_rsp_data;
++ touch_sensor_clear_mem_window_rsp_data_t clear_mem_window_rsp_data;
++ touch_sensor_notify_dev_ready_rsp_data_t notify_dev_ready_rsp_data;
++ touch_sensor_set_policies_rsp_data_t set_policies_rsp_data;
++ touch_sensor_get_policies_rsp_data_t get_policies_rsp_data;
++ touch_sensor_reset_rsp_data_t reset_rsp_data;
++ touch_sensor_read_all_regs_rsp_data_t read_all_regs_rsp_data;
++ } m2h_data;
++} touch_sensor_msg_m2h_t;
++C_ASSERT(sizeof(touch_sensor_msg_m2h_t) == 88);
++
++
++#define TOUCH_MSG_SIZE_MAX_BYTES (MAX(sizeof(touch_sensor_msg_m2h_t), sizeof(touch_sensor_msg_h2m_t)))
++
++#pragma pack()
++
++#endif // _IPTS_MEI_MSGS_H_
+diff --git a/drivers/misc/ipts/ipts-mei.c b/drivers/misc/ipts/ipts-mei.c
+new file mode 100644
+index 00000000..39667e75
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-mei.c
+@@ -0,0 +1,282 @@
++/*
++ * MEI client driver for Intel Precise Touch and Stylus
++ *
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#include <linux/mei_cl_bus.h>
++#include <linux/module.h>
++#include <linux/mod_devicetable.h>
++#include <linux/hid.h>
++#include <linux/dma-mapping.h>
++#include <linux/kthread.h>
++#include <linux/intel_ipts_if.h>
++
++#include "ipts.h"
++#include "ipts-hid.h"
++#include "ipts-msg-handler.h"
++#include "ipts-mei-msgs.h"
++#include "ipts-binary-spec.h"
++#include "ipts-state.h"
++
++#define IPTS_DRIVER_NAME "ipts"
++#define IPTS_MEI_UUID UUID_LE(0x3e8d0870, 0x271a, 0x4208, \
++ 0x8e, 0xb5, 0x9a, 0xcb, 0x94, 0x02, 0xae, 0x04)
++
++static struct mei_cl_device_id ipts_mei_cl_tbl[] = {
++ { "", IPTS_MEI_UUID, MEI_CL_VERSION_ANY},
++ {}
++};
++
++static ssize_t sensor_mode_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ ipts_info_t *ipts;
++ ipts = dev_get_drvdata(dev);
++
++ return sprintf(buf, "%d\n", ipts->sensor_mode);
++}
++
++//TODO: Verify the function implementation
++static ssize_t sensor_mode_store(struct device *dev,
++ struct device_attribute *attr, const char *buf,
++ size_t count)
++{
++ int ret;
++ long val;
++ ipts_info_t *ipts;
++
++ ipts = dev_get_drvdata(dev);
++ ret = kstrtol(buf, 10, &val);
++ if (ret)
++ return ret;
++
++ ipts_dbg(ipts, "try sensor mode = %ld\n", val);
++
++ switch (val) {
++ case TOUCH_SENSOR_MODE_HID:
++ break;
++ case TOUCH_SENSOR_MODE_RAW_DATA:
++ break;
++ default:
++ ipts_err(ipts, "sensor mode %ld is not supported\n", val);
++ }
++
++ return count;
++}
++
++static ssize_t device_info_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ ipts_info_t *ipts;
++
++ ipts = dev_get_drvdata(dev);
++ return sprintf(buf, "vendor id = 0x%04hX\n"
++ "device id = 0x%04hX\n"
++ "HW rev = 0x%08X\n"
++ "firmware rev = 0x%08X\n",
++ ipts->device_info.vendor_id, ipts->device_info.device_id,
++ ipts->device_info.hw_rev, ipts->device_info.fw_rev);
++}
++
++static DEVICE_ATTR_RW(sensor_mode);
++static DEVICE_ATTR_RO(device_info);
++
++static struct attribute *ipts_attrs[] = {
++ &dev_attr_sensor_mode.attr,
++ &dev_attr_device_info.attr,
++ NULL
++};
++
++static const struct attribute_group ipts_grp = {
++ .attrs = ipts_attrs,
++};
++
++MODULE_DEVICE_TABLE(mei, ipts_mei_cl_tbl);
++
++static void raw_data_work_func(struct work_struct *work)
++{
++ ipts_info_t *ipts = container_of(work, ipts_info_t, raw_data_work);
++
++ ipts_handle_processed_data(ipts);
++}
++
++static void gfx_status_work_func(struct work_struct *work)
++{
++ ipts_info_t *ipts = container_of(work, ipts_info_t, gfx_status_work);
++ ipts_state_t state;
++ int status = ipts->gfx_status;
++
++ ipts_dbg(ipts, "notify gfx status : %d\n", status);
++
++ state = ipts_get_state(ipts);
++
++ if (state == IPTS_STA_RAW_DATA_STARTED || state == IPTS_STA_HID_STARTED) {
++ if (status == IPTS_NOTIFY_STA_BACKLIGHT_ON &&
++ ipts->display_status == false) {
++ ipts_send_sensor_clear_mem_window_cmd(ipts);
++ ipts->display_status = true;
++ } else if (status == IPTS_NOTIFY_STA_BACKLIGHT_OFF &&
++ ipts->display_status == true) {
++ ipts_send_sensor_quiesce_io_cmd(ipts);
++ ipts->display_status = false;
++ }
++ }
++}
++
++/* event loop */
++static int ipts_mei_cl_event_thread(void *data)
++{
++ ipts_info_t *ipts = (ipts_info_t *)data;
++ struct mei_cl_device *cldev = ipts->cldev;
++ ssize_t msg_len;
++ touch_sensor_msg_m2h_t m2h_msg;
++
++ while (!kthread_should_stop()) {
++ msg_len = mei_cldev_recv(cldev, (u8*)&m2h_msg, sizeof(m2h_msg));
++ if (msg_len <= 0) {
++ ipts_err(ipts, "error in reading m2h msg\n");
++ continue;
++ }
++
++ if (ipts_handle_resp(ipts, &m2h_msg, msg_len) != 0) {
++ ipts_err(ipts, "error in handling resp msg\n");
++ }
++ }
++
++ ipts_dbg(ipts, "!! end event loop !!\n");
++
++ return 0;
++}
++
++static void init_work_func(struct work_struct *work)
++{
++ ipts_info_t *ipts = container_of(work, ipts_info_t, init_work);
++
++ ipts->sensor_mode = TOUCH_SENSOR_MODE_RAW_DATA;
++ ipts->display_status = true;
++
++ ipts_start(ipts);
++}
++
++static int ipts_mei_cl_probe(struct mei_cl_device *cldev,
++ const struct mei_cl_device_id *id)
++{
++ int ret = 0;
++ ipts_info_t *ipts = NULL;
++
++ pr_info("probing Intel Precise Touch & Stylus\n");
++
++ // setup the DMA BIT mask, the system will choose the best possible
++ if (dma_coerce_mask_and_coherent(&cldev->dev, DMA_BIT_MASK(64)) == 0) {
++ pr_info("IPTS using DMA_BIT_MASK(64)\n");
++ } else if (dma_coerce_mask_and_coherent(&cldev->dev,
++ DMA_BIT_MASK(32)) == 0) {
++ pr_info("IPTS using DMA_BIT_MASK(32)\n");
++ } else {
++ pr_err("IPTS: No suitable DMA available\n");
++ return -EFAULT;
++ }
++
++ ret = mei_cldev_enable(cldev);
++ if (ret < 0) {
++ pr_err("cannot enable IPTS\n");
++ return ret;
++ }
++
++ ipts = devm_kzalloc(&cldev->dev, sizeof(ipts_info_t), GFP_KERNEL);
++ if (ipts == NULL) {
++ ret = -ENOMEM;
++ goto disable_mei;
++ }
++ ipts->cldev = cldev;
++ mei_cldev_set_drvdata(cldev, ipts);
++
++ ipts->event_loop = kthread_run(ipts_mei_cl_event_thread, (void*)ipts,
++ "ipts_event_thread");
++
++ if(ipts_dbgfs_register(ipts, "ipts"))
++ pr_debug("cannot register debugfs for IPTS\n");
++
++ INIT_WORK(&ipts->init_work, init_work_func);
++ INIT_WORK(&ipts->raw_data_work, raw_data_work_func);
++ INIT_WORK(&ipts->gfx_status_work, gfx_status_work_func);
++
++ ret = sysfs_create_group(&cldev->dev.kobj, &ipts_grp);
++ if (ret != 0) {
++ pr_debug("cannot create sysfs for IPTS\n");
++ }
++
++ schedule_work(&ipts->init_work);
++
++ return 0;
++
++disable_mei :
++ mei_cldev_disable(cldev);
++
++ return ret;
++}
++
++static int ipts_mei_cl_remove(struct mei_cl_device *cldev)
++{
++ ipts_info_t *ipts = mei_cldev_get_drvdata(cldev);
++
++ ipts_stop(ipts);
++
++ sysfs_remove_group(&cldev->dev.kobj, &ipts_grp);
++ ipts_hid_release(ipts);
++ ipts_dbgfs_deregister(ipts);
++ mei_cldev_disable(cldev);
++
++ kthread_stop(ipts->event_loop);
++
++ pr_info("IPTS removed\n");
++
++ return 0;
++}
++
++static struct mei_cl_driver ipts_mei_cl_driver = {
++ .id_table = ipts_mei_cl_tbl,
++ .name = IPTS_DRIVER_NAME,
++ .probe = ipts_mei_cl_probe,
++ .remove = ipts_mei_cl_remove,
++};
++
++static int ipts_mei_cl_init(void)
++{
++ int ret;
++
++ pr_info("IPTS %s() is called\n", __func__);
++
++ ret = mei_cldev_driver_register(&ipts_mei_cl_driver);
++ if (ret) {
++ pr_err("unable to register IPTS mei client driver\n");
++ return ret;
++ }
++
++ return 0;
++}
++
++static void __exit ipts_mei_cl_exit(void)
++{
++ pr_info("IPTS %s() is called\n", __func__);
++
++ mei_cldev_driver_unregister(&ipts_mei_cl_driver);
++}
++
++module_init(ipts_mei_cl_init);
++module_exit(ipts_mei_cl_exit);
++
++MODULE_DESCRIPTION
++ ("Intel(R) Management Engine Interface Client Driver for "\
++ "Intel Precision Touch and Sylus");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/misc/ipts/ipts-msg-handler.c b/drivers/misc/ipts/ipts-msg-handler.c
+new file mode 100644
+index 00000000..b53f668d
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-msg-handler.c
+@@ -0,0 +1,433 @@
++#include <linux/mei_cl_bus.h>
++
++#include "ipts.h"
++#include "ipts-hid.h"
++#include "ipts-resource.h"
++#include "ipts-mei-msgs.h"
++
++int ipts_handle_cmd(ipts_info_t *ipts, u32 cmd, void *data, int data_size)
++{
++ int ret = 0;
++ touch_sensor_msg_h2m_t h2m_msg;
++ int len = 0;
++
++ memset(&h2m_msg, 0, sizeof(h2m_msg));
++
++ h2m_msg.command_code = cmd;
++ len = sizeof(h2m_msg.command_code) + data_size;
++ if (data != NULL && data_size != 0)
++ memcpy(&h2m_msg.h2m_data, data, data_size); /* copy payload */
++
++ ret = mei_cldev_send(ipts->cldev, (u8*)&h2m_msg, len);
++ if (ret < 0) {
++ ipts_err(ipts, "mei_cldev_send() error 0x%X:%d\n",
++ cmd, ret);
++ return ret;
++ }
++
++ return 0;
++}
++
++int ipts_send_feedback(ipts_info_t *ipts, int buffer_idx, u32 transaction_id)
++{
++ int ret;
++ int cmd_len;
++ touch_sensor_feedback_ready_cmd_data_t fb_ready_cmd;
++
++ cmd_len = sizeof(touch_sensor_feedback_ready_cmd_data_t);
++ memset(&fb_ready_cmd, 0, cmd_len);
++
++ fb_ready_cmd.feedback_index = buffer_idx;
++ fb_ready_cmd.transaction_id = transaction_id;
++
++ ret = ipts_handle_cmd(ipts, TOUCH_SENSOR_FEEDBACK_READY_CMD,
++ &fb_ready_cmd, cmd_len);
++
++ return ret;
++}
++
++int ipts_send_sensor_quiesce_io_cmd(ipts_info_t *ipts)
++{
++ int ret;
++ int cmd_len;
++ touch_sensor_quiesce_io_cmd_data_t quiesce_io_cmd;
++
++ cmd_len = sizeof(touch_sensor_quiesce_io_cmd_data_t);
++ memset(&quiesce_io_cmd, 0, cmd_len);
++
++ ret = ipts_handle_cmd(ipts, TOUCH_SENSOR_QUIESCE_IO_CMD,
++ &quiesce_io_cmd, cmd_len);
++
++ return ret;
++}
++
++int ipts_send_sensor_hid_ready_for_data_cmd(ipts_info_t *ipts)
++{
++ return ipts_handle_cmd(ipts, TOUCH_SENSOR_HID_READY_FOR_DATA_CMD, NULL, 0);
++}
++
++int ipts_send_sensor_clear_mem_window_cmd(ipts_info_t *ipts)
++{
++ return ipts_handle_cmd(ipts, TOUCH_SENSOR_CLEAR_MEM_WINDOW_CMD, NULL, 0);
++}
++
++static int check_validity(touch_sensor_msg_m2h_t *m2h_msg, u32 msg_len)
++{
++ int ret = 0;
++ int valid_msg_len = sizeof(m2h_msg->command_code);
++ u32 cmd_code = m2h_msg->command_code;
++
++ switch (cmd_code) {
++ case TOUCH_SENSOR_SET_MODE_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_set_mode_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_SET_MEM_WINDOW_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_set_mem_window_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_QUIESCE_IO_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_quiesce_io_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_HID_READY_FOR_DATA_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_hid_ready_for_data_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_FEEDBACK_READY_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_feedback_ready_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_CLEAR_MEM_WINDOW_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_clear_mem_window_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_NOTIFY_DEV_READY_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_notify_dev_ready_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_SET_POLICIES_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_set_policies_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_GET_POLICIES_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_get_policies_rsp_data_t);
++ break;
++ case TOUCH_SENSOR_RESET_RSP:
++ valid_msg_len +=
++ sizeof(touch_sensor_reset_rsp_data_t);
++ break;
++ }
++
++ if (valid_msg_len != msg_len) {
++ return -EINVAL;
++ }
++
++ return ret;
++}
++
++int ipts_start(ipts_info_t *ipts)
++{
++ int ret = 0;
++ /* TODO : check if we need to do SET_POLICIES_CMD
++ we need to do this when protocol version doesn't match with reported one
++ how we keep vendor specific data is the first thing to solve */
++
++ ipts_set_state(ipts, IPTS_STA_INIT);
++ ipts->num_of_parallel_data_buffers = TOUCH_SENSOR_MAX_DATA_BUFFERS;
++
++#ifdef ENABLE_IPTS_DEBUG
++ ipts->sensor_mode = TOUCH_SENSOR_MODE_HID; /* start with HID */
++#endif
++
++ ret = ipts_handle_cmd(ipts, TOUCH_SENSOR_NOTIFY_DEV_READY_CMD, NULL, 0);
++
++ return ret;
++}
++
++void ipts_stop(ipts_info_t *ipts)
++{
++ ipts_state_t old_state;
++
++ old_state = ipts_get_state(ipts);
++ ipts_set_state(ipts, IPTS_STA_STOPPING);
++
++ if (old_state < IPTS_STA_RESOURCE_READY)
++ return;
++
++ if (old_state == IPTS_STA_RAW_DATA_STARTED ||
++ old_state == IPTS_STA_HID_STARTED) {
++ ipts_free_default_resource(ipts);
++ ipts_free_raw_data_resource(ipts);
++
++ return;
++ }
++}
++
++int ipts_restart(ipts_info_t *ipts)
++{
++ int ret = 0;
++
++ ipts_dbg(ipts, "ipts restart\n");
++
++ ipts_stop(ipts);
++
++ ipts->retry++;
++ if (ipts->retry == IPTS_MAX_RETRY &&
++ ipts->sensor_mode == TOUCH_SENSOR_MODE_RAW_DATA) {
++ /* try with HID mode */
++ ipts->sensor_mode = TOUCH_SENSOR_MODE_HID;
++ } else if (ipts->retry > IPTS_MAX_RETRY) {
++ return -EPERM;
++ }
++
++ ipts_send_sensor_quiesce_io_cmd(ipts);
++ ipts->restart = true;
++
++ return ret;
++}
++
++int ipts_switch_sensor_mode(ipts_info_t *ipts, int new_sensor_mode)
++{
++ int ret = 0;
++
++ ipts->new_sensor_mode = new_sensor_mode;
++ ipts->switch_sensor_mode = true;
++ ret = ipts_send_sensor_quiesce_io_cmd(ipts);
++
++ return ret;
++}
++
++#define rsp_failed(ipts, cmd, status) ipts_err(ipts, \
++ "0x%08x failed status = %d\n", cmd, status);
++
++int ipts_handle_resp(ipts_info_t *ipts, touch_sensor_msg_m2h_t *m2h_msg,
++ u32 msg_len)
++{
++ int ret = 0;
++ int rsp_status = 0;
++ int cmd_status = 0;
++ int cmd_len = 0;
++ u32 cmd;
++
++ if (!check_validity(m2h_msg, msg_len)) {
++ ipts_err(ipts, "wrong rsp\n");
++ return -EINVAL;
++ }
++
++ rsp_status = m2h_msg->status;
++ cmd = m2h_msg->command_code;
++
++ switch (cmd) {
++ case TOUCH_SENSOR_NOTIFY_DEV_READY_RSP:
++ if (rsp_status != 0 &&
++ rsp_status != TOUCH_STATUS_SENSOR_FAIL_NONFATAL) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ cmd_status = ipts_handle_cmd(ipts,
++ TOUCH_SENSOR_GET_DEVICE_INFO_CMD,
++ NULL, 0);
++ break;
++ case TOUCH_SENSOR_GET_DEVICE_INFO_RSP:
++ if (rsp_status != 0 &&
++ rsp_status != TOUCH_STATUS_COMPAT_CHECK_FAIL) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ memcpy(&ipts->device_info,
++ &m2h_msg->m2h_data.device_info_rsp_data,
++ sizeof(touch_sensor_get_device_info_rsp_data_t));
++
++ /*
++ TODO : support raw_request during HID init.
++ Although HID init happens here, technically most of
++ reports (for both direction) can be issued only
++ after SET_MEM_WINDOWS_CMD since they may require
++ ME or touch IC. If ipts vendor requires raw_request
++ during HID init, we need to consider to move HID init.
++ */
++ if (ipts->hid_desc_ready == false) {
++ ret = ipts_hid_init(ipts);
++ if (ret)
++ break;
++ }
++
++ cmd_status = ipts_send_sensor_clear_mem_window_cmd(ipts);
++
++ break;
++ case TOUCH_SENSOR_CLEAR_MEM_WINDOW_RSP:
++ {
++ touch_sensor_set_mode_cmd_data_t sensor_mode_cmd;
++
++ if (rsp_status != 0 &&
++ rsp_status != TOUCH_STATUS_TIMEOUT) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ /* allocate default resource : common & hid only */
++ if (!ipts_is_default_resource_ready(ipts)) {
++ ret = ipts_allocate_default_resource(ipts);
++ if (ret)
++ break;
++ }
++
++ if (ipts->sensor_mode == TOUCH_SENSOR_MODE_RAW_DATA &&
++ !ipts_is_raw_data_resource_ready(ipts)) {
++ ret = ipts_allocate_raw_data_resource(ipts);
++ if (ret) {
++ ipts_free_default_resource(ipts);
++ break;
++ }
++ }
++
++ ipts_set_state(ipts, IPTS_STA_RESOURCE_READY);
++
++ cmd_len = sizeof(touch_sensor_set_mode_cmd_data_t);
++ memset(&sensor_mode_cmd, 0, cmd_len);
++ sensor_mode_cmd.sensor_mode = ipts->sensor_mode;
++ cmd_status = ipts_handle_cmd(ipts,
++ TOUCH_SENSOR_SET_MODE_CMD,
++ &sensor_mode_cmd, cmd_len);
++ break;
++ }
++ case TOUCH_SENSOR_SET_MODE_RSP:
++ {
++ touch_sensor_set_mem_window_cmd_data_t smw_cmd;
++
++ if (rsp_status != 0) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ cmd_len = sizeof(touch_sensor_set_mem_window_cmd_data_t);
++ memset(&smw_cmd, 0, cmd_len);
++ ipts_get_set_mem_window_cmd_data(ipts, &smw_cmd);
++ cmd_status = ipts_handle_cmd(ipts,
++ TOUCH_SENSOR_SET_MEM_WINDOW_CMD,
++ &smw_cmd, cmd_len);
++ break;
++ }
++ case TOUCH_SENSOR_SET_MEM_WINDOW_RSP:
++ if (rsp_status != 0) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ cmd_status = ipts_send_sensor_hid_ready_for_data_cmd(ipts);
++ if (cmd_status)
++ break;
++
++ if (ipts->sensor_mode == TOUCH_SENSOR_MODE_HID) {
++ ipts_set_state(ipts, IPTS_STA_HID_STARTED);
++ } else if (ipts->sensor_mode == TOUCH_SENSOR_MODE_RAW_DATA) {
++ ipts_set_state(ipts, IPTS_STA_RAW_DATA_STARTED);
++ }
++
++ ipts_err(ipts, "touch enabled %d\n", ipts_get_state(ipts));
++
++ break;
++ case TOUCH_SENSOR_HID_READY_FOR_DATA_RSP:
++ {
++ touch_sensor_hid_ready_for_data_rsp_data_t *hid_data;
++ ipts_state_t state;
++
++ if (rsp_status != 0 &&
++ rsp_status != TOUCH_STATUS_SENSOR_DISABLED) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ state = ipts_get_state(ipts);
++ if (ipts->sensor_mode == TOUCH_SENSOR_MODE_HID &&
++ state == IPTS_STA_HID_STARTED) {
++
++ hid_data = &m2h_msg->m2h_data.hid_ready_for_data_rsp_data;
++
++ /* HID mode only uses buffer 0 */
++ if (hid_data->touch_data_buffer_index != 0)
++ break;
++
++ /* handle hid data */
++ ipts_handle_hid_data(ipts, hid_data);
++ }
++
++ break;
++ }
++ case TOUCH_SENSOR_FEEDBACK_READY_RSP:
++ if (rsp_status != 0 &&
++ rsp_status != TOUCH_STATUS_COMPAT_CHECK_FAIL) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ if (m2h_msg->m2h_data.feedback_ready_rsp_data.
++ feedback_index == TOUCH_HID_2_ME_BUFFER_ID)
++ break;
++
++ if (ipts->sensor_mode == TOUCH_SENSOR_MODE_HID) {
++ cmd_status = ipts_handle_cmd(ipts,
++ TOUCH_SENSOR_HID_READY_FOR_DATA_CMD,
++ NULL, 0);
++ }
++
++ /* reset retry since we are getting touch data */
++ ipts->retry = 0;
++
++ break;
++ case TOUCH_SENSOR_QUIESCE_IO_RSP:
++ {
++ ipts_state_t state;
++
++ if (rsp_status != 0) {
++ rsp_failed(ipts, cmd, rsp_status);
++ break;
++ }
++
++ state = ipts_get_state(ipts);
++ if (state == IPTS_STA_STOPPING && ipts->restart) {
++ ipts_dbg(ipts, "restart\n");
++ ipts_start(ipts);
++ ipts->restart = 0;
++ break;
++ }
++
++ /* support sysfs debug node for switch sensor mode */
++ if (ipts->switch_sensor_mode) {
++ ipts_set_state(ipts, IPTS_STA_INIT);
++ ipts->sensor_mode = ipts->new_sensor_mode;
++ ipts->switch_sensor_mode = false;
++
++ ipts_send_sensor_clear_mem_window_cmd(ipts);
++ }
++
++ break;
++ }
++ }
++
++ /* handle error in rsp_status */
++ if (rsp_status != 0) {
++ switch (rsp_status) {
++ case TOUCH_STATUS_SENSOR_EXPECTED_RESET:
++ case TOUCH_STATUS_SENSOR_UNEXPECTED_RESET:
++ ipts_dbg(ipts, "sensor reset %d\n", rsp_status);
++ ipts_restart(ipts);
++ break;
++ default:
++ ipts_dbg(ipts, "cmd : 0x%08x, status %d\n",
++ cmd,
++ rsp_status);
++ break;
++ }
++ }
++
++ if (cmd_status) {
++ ipts_restart(ipts);
++ }
++
++ return ret;
++}
+diff --git a/drivers/misc/ipts/ipts-msg-handler.h b/drivers/misc/ipts/ipts-msg-handler.h
+new file mode 100644
+index 00000000..b8e27d30
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-msg-handler.h
+@@ -0,0 +1,32 @@
++/*
++ *
++ * Intel Precise Touch & Stylus ME message handler
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++
++#ifndef _IPTS_MSG_HANDLER_H
++#define _IPTS_MSG_HANDLER_H
++
++int ipts_handle_cmd(ipts_info_t *ipts, u32 cmd, void *data, int data_size);
++int ipts_start(ipts_info_t *ipts);
++void ipts_stop(ipts_info_t *ipts);
++int ipts_switch_sensor_mode(ipts_info_t *ipts, int new_sensor_mode);
++int ipts_handle_resp(ipts_info_t *ipts, touch_sensor_msg_m2h_t *m2h_msg,
++ u32 msg_len);
++int ipts_handle_processed_data(ipts_info_t *ipts);
++int ipts_send_feedback(ipts_info_t *ipts, int buffer_idx, u32 transaction_id);
++int ipts_send_sensor_quiesce_io_cmd(ipts_info_t *ipts);
++int ipts_send_sensor_hid_ready_for_data_cmd(ipts_info_t *ipts);
++int ipts_send_sensor_clear_mem_window_cmd(ipts_info_t *ipts);
++
++#endif /* _IPTS_MSG_HANDLER_H */
+diff --git a/drivers/misc/ipts/ipts-resource.c b/drivers/misc/ipts/ipts-resource.c
+new file mode 100644
+index 00000000..c353b815
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-resource.c
+@@ -0,0 +1,277 @@
++#include <linux/dma-mapping.h>
++
++#include "ipts.h"
++#include "ipts-mei-msgs.h"
++#include "ipts-kernel.h"
++
++static void free_common_resource(ipts_info_t *ipts)
++{
++ char *addr;
++ ipts_buffer_info_t *feedback_buffer;
++ dma_addr_t dma_addr;
++ u32 buffer_size;
++ int i, num_of_parallels;
++
++ if (ipts->resource.me2hid_buffer) {
++ devm_kfree(&ipts->cldev->dev, ipts->resource.me2hid_buffer);
++ ipts->resource.me2hid_buffer = 0;
++ }
++
++ addr = ipts->resource.hid2me_buffer.addr;
++ dma_addr = ipts->resource.hid2me_buffer.dma_addr;
++ buffer_size = ipts->resource.hid2me_buffer_size;
++
++ if (ipts->resource.hid2me_buffer.addr) {
++ dmam_free_coherent(&ipts->cldev->dev, buffer_size, addr, dma_addr);
++ ipts->resource.hid2me_buffer.addr = 0;
++ ipts->resource.hid2me_buffer.dma_addr = 0;
++ ipts->resource.hid2me_buffer_size = 0;
++ }
++
++ feedback_buffer = ipts->resource.feedback_buffer;
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ for (i = 0; i < num_of_parallels; i++) {
++ if (feedback_buffer[i].addr) {
++ dmam_free_coherent(&ipts->cldev->dev,
++ ipts->device_info.feedback_size,
++ feedback_buffer[i].addr,
++ feedback_buffer[i].dma_addr);
++ feedback_buffer[i].addr = 0;
++ feedback_buffer[i].dma_addr = 0;
++ }
++ }
++}
++
++static int allocate_common_resource(ipts_info_t *ipts)
++{
++ char *addr, *me2hid_addr;
++ ipts_buffer_info_t *feedback_buffer;
++ dma_addr_t dma_addr;
++ int i, ret = 0, num_of_parallels;
++ u32 buffer_size;
++
++ buffer_size = ipts->device_info.feedback_size;
++
++ addr = dmam_alloc_coherent(&ipts->cldev->dev,
++ buffer_size,
++ &dma_addr,
++ GFP_ATOMIC|GFP_DMA32);
++ if (addr == NULL)
++ return -ENOMEM;
++
++ me2hid_addr = devm_kzalloc(&ipts->cldev->dev, buffer_size, GFP_KERNEL);
++ if (me2hid_addr == NULL) {
++ ret = -ENOMEM;
++ goto release_resource;
++ }
++
++ ipts->resource.hid2me_buffer.addr = addr;
++ ipts->resource.hid2me_buffer.dma_addr = dma_addr;
++ ipts->resource.hid2me_buffer_size = buffer_size;
++ ipts->resource.me2hid_buffer = me2hid_addr;
++
++ feedback_buffer = ipts->resource.feedback_buffer;
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ for (i = 0; i < num_of_parallels; i++) {
++ feedback_buffer[i].addr = dmam_alloc_coherent(&ipts->cldev->dev,
++ ipts->device_info.feedback_size,
++ &feedback_buffer[i].dma_addr,
++ GFP_ATOMIC|GFP_DMA32);
++
++ if (feedback_buffer[i].addr == NULL) {
++ ret = -ENOMEM;
++ goto release_resource;
++ }
++ }
++
++ return 0;
++
++release_resource:
++ free_common_resource(ipts);
++
++ return ret;
++}
++
++void ipts_free_raw_data_resource(ipts_info_t *ipts)
++{
++ if (ipts_is_raw_data_resource_ready(ipts)) {
++ ipts->resource.raw_data_resource_ready = false;
++
++ ipts_release_kernels(ipts);
++ }
++}
++
++static int allocate_hid_resource(ipts_info_t *ipts)
++{
++ ipts_buffer_info_t *buffer_hid;
++
++ /* hid mode uses only one touch data buffer */
++ buffer_hid = &ipts->resource.touch_data_buffer_hid;
++ buffer_hid->addr = dmam_alloc_coherent(&ipts->cldev->dev,
++ ipts->device_info.frame_size,
++ &buffer_hid->dma_addr,
++ GFP_ATOMIC|GFP_DMA32);
++ if (buffer_hid->addr == NULL) {
++ return -ENOMEM;
++ }
++
++ return 0;
++}
++
++static void free_hid_resource(ipts_info_t *ipts)
++{
++ ipts_buffer_info_t *buffer_hid;
++
++ buffer_hid = &ipts->resource.touch_data_buffer_hid;
++ if (buffer_hid->addr) {
++ dmam_free_coherent(&ipts->cldev->dev,
++ ipts->device_info.frame_size,
++ buffer_hid->addr,
++ buffer_hid->dma_addr);
++ buffer_hid->addr = 0;
++ buffer_hid->dma_addr = 0;
++ }
++}
++
++int ipts_allocate_default_resource(ipts_info_t *ipts)
++{
++ int ret;
++
++ ret = allocate_common_resource(ipts);
++ if (ret) {
++ ipts_dbg(ipts, "cannot allocate common resource\n");
++ return ret;
++ }
++
++ ret = allocate_hid_resource(ipts);
++ if (ret) {
++ ipts_dbg(ipts, "cannot allocate hid resource\n");
++ free_common_resource(ipts);
++ return ret;
++ }
++
++ ipts->resource.default_resource_ready = true;
++
++ return 0;
++}
++
++void ipts_free_default_resource(ipts_info_t *ipts)
++{
++ if (ipts_is_default_resource_ready(ipts)) {
++ ipts->resource.default_resource_ready = false;
++
++ free_hid_resource(ipts);
++ free_common_resource(ipts);
++ }
++}
++
++int ipts_allocate_raw_data_resource(ipts_info_t *ipts)
++{
++ int ret = 0;
++
++ ret = ipts_init_kernels(ipts);
++ if (ret) {
++ return ret;
++ }
++
++ ipts->resource.raw_data_resource_ready = true;
++
++ return 0;
++}
++
++static void get_hid_only_smw_cmd_data(ipts_info_t *ipts,
++ touch_sensor_set_mem_window_cmd_data_t *data,
++ ipts_resource_t *resrc)
++{
++ ipts_buffer_info_t *touch_buf;
++ ipts_buffer_info_t *feedback_buf;
++
++ touch_buf = &resrc->touch_data_buffer_hid;
++ feedback_buf = &resrc->feedback_buffer[0];
++
++ data->touch_data_buffer_addr_lower[0] =
++ lower_32_bits(touch_buf->dma_addr);
++ data->touch_data_buffer_addr_upper[0] =
++ upper_32_bits(touch_buf->dma_addr);
++ data->feedback_buffer_addr_lower[0] =
++ lower_32_bits(feedback_buf->dma_addr);
++ data->feedback_buffer_addr_upper[0] =
++ upper_32_bits(feedback_buf->dma_addr);
++}
++
++static void get_raw_data_only_smw_cmd_data(ipts_info_t *ipts,
++ touch_sensor_set_mem_window_cmd_data_t *data,
++ ipts_resource_t *resrc)
++{
++ u64 wq_tail_phy_addr;
++ u64 cookie_phy_addr;
++ ipts_buffer_info_t *touch_buf;
++ ipts_buffer_info_t *feedback_buf;
++ int i, num_of_parallels;
++
++ touch_buf = resrc->touch_data_buffer_raw;
++ feedback_buf = resrc->feedback_buffer;
++
++ num_of_parallels = ipts_get_num_of_parallel_buffers(ipts);
++ for (i = 0; i < num_of_parallels; i++) {
++ data->touch_data_buffer_addr_lower[i] =
++ lower_32_bits(touch_buf[i].dma_addr);
++ data->touch_data_buffer_addr_upper[i] =
++ upper_32_bits(touch_buf[i].dma_addr);
++ data->feedback_buffer_addr_lower[i] =
++ lower_32_bits(feedback_buf[i].dma_addr);
++ data->feedback_buffer_addr_upper[i] =
++ upper_32_bits(feedback_buf[i].dma_addr);
++ }
++
++ wq_tail_phy_addr = resrc->wq_info.wq_tail_phy_addr;
++ data->tail_offset_addr_lower = lower_32_bits(wq_tail_phy_addr);
++ data->tail_offset_addr_upper = upper_32_bits(wq_tail_phy_addr);
++
++ cookie_phy_addr = resrc->wq_info.db_phy_addr +
++ resrc->wq_info.db_cookie_offset;
++ data->doorbell_cookie_addr_lower = lower_32_bits(cookie_phy_addr);
++ data->doorbell_cookie_addr_upper = upper_32_bits(cookie_phy_addr);
++ data->work_queue_size = resrc->wq_info.wq_size;
++
++ data->work_queue_item_size = resrc->wq_item_size;
++}
++
++void ipts_get_set_mem_window_cmd_data(ipts_info_t *ipts,
++ touch_sensor_set_mem_window_cmd_data_t *data)
++{
++ ipts_resource_t *resrc = &ipts->resource;
++
++ if (ipts->sensor_mode == TOUCH_SENSOR_MODE_RAW_DATA)
++ get_raw_data_only_smw_cmd_data(ipts, data, resrc);
++ else if (ipts->sensor_mode == TOUCH_SENSOR_MODE_HID)
++ get_hid_only_smw_cmd_data(ipts, data, resrc);
++
++ /* hid2me is common for "raw data" and "hid" */
++ data->hid2me_buffer_addr_lower =
++ lower_32_bits(resrc->hid2me_buffer.dma_addr);
++ data->hid2me_buffer_addr_upper =
++ upper_32_bits(resrc->hid2me_buffer.dma_addr);
++ data->hid2me_buffer_size = resrc->hid2me_buffer_size;
++}
++
++void ipts_set_input_buffer(ipts_info_t *ipts, int parallel_idx,
++ u8* cpu_addr, u64 dma_addr)
++{
++ ipts_buffer_info_t *touch_buf;
++
++ touch_buf = ipts->resource.touch_data_buffer_raw;
++ touch_buf[parallel_idx].dma_addr = dma_addr;
++ touch_buf[parallel_idx].addr = cpu_addr;
++}
++
++void ipts_set_output_buffer(ipts_info_t *ipts, int parallel_idx, int output_idx,
++ u8* cpu_addr, u64 dma_addr)
++{
++ ipts_buffer_info_t *output_buf;
++
++ output_buf = &ipts->resource.raw_data_mode_output_buffer[parallel_idx][output_idx];
++
++ output_buf->dma_addr = dma_addr;
++ output_buf->addr = cpu_addr;
++}
+diff --git a/drivers/misc/ipts/ipts-resource.h b/drivers/misc/ipts/ipts-resource.h
+new file mode 100644
+index 00000000..7d66ac72
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-resource.h
+@@ -0,0 +1,30 @@
++/*
++ * Intel Precise Touch & Stylus state codes
++ *
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#ifndef _IPTS_RESOURCE_H_
++#define _IPTS_RESOURCE_H_
++
++int ipts_allocate_default_resource(ipts_info_t *ipts);
++void ipts_free_default_resource(ipts_info_t *ipts);
++int ipts_allocate_raw_data_resource(ipts_info_t *ipts);
++void ipts_free_raw_data_resource(ipts_info_t *ipts);
++void ipts_get_set_mem_window_cmd_data(ipts_info_t *ipts,
++ touch_sensor_set_mem_window_cmd_data_t *data);
++void ipts_set_input_buffer(ipts_info_t *ipts, int parallel_idx,
++ u8* cpu_addr, u64 dma_addr);
++void ipts_set_output_buffer(ipts_info_t *ipts, int parallel_idx, int output_idx,
++ u8* cpu_addr, u64 dma_addr);
++
++#endif // _IPTS_RESOURCE_H_
+diff --git a/drivers/misc/ipts/ipts-sensor-regs.h b/drivers/misc/ipts/ipts-sensor-regs.h
+new file mode 100644
+index 00000000..96812b0e
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-sensor-regs.h
+@@ -0,0 +1,700 @@
++/*
++ * Touch Sensor Register definition
++ *
++ * Copyright (c) 2013-2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++
++#ifndef _TOUCH_SENSOR_REGS_H
++#define _TOUCH_SENSOR_REGS_H
++
++#pragma pack(1)
++
++// define C_ASSERT macro to check structure size and fail compile for unexpected mismatch
++#ifndef C_ASSERT
++#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
++#endif
++
++//
++// Compatibility versions for this header file
++//
++#define TOUCH_EDS_REV_MINOR 0
++#define TOUCH_EDS_REV_MAJOR 1
++#define TOUCH_EDS_INTF_REV 1
++#define TOUCH_PROTOCOL_VER 0
++
++
++//
++// Offset 00h: TOUCH_STS: Status Register
++// This register is read by the SPI Controller immediately following an interrupt.
++//
++#define TOUCH_STS_REG_OFFSET 0x00
++
++typedef enum touch_sts_reg_int_type
++{
++ TOUCH_STS_REG_INT_TYPE_DATA_AVAIL = 0, // Touch Data Available
++ TOUCH_STS_REG_INT_TYPE_RESET_OCCURRED, // Reset Occurred
++ TOUCH_STS_REG_INT_TYPE_ERROR_OCCURRED, // Error Occurred
++ TOUCH_STS_REG_INT_TYPE_VENDOR_DATA, // Vendor specific data, treated same as raw frame
++ TOUCH_STS_REG_INT_TYPE_GET_FEATURES, // Get Features response data available
++ TOUCH_STS_REG_INT_TYPE_MAX
++} touch_sts_reg_int_type_t;
++C_ASSERT(sizeof(touch_sts_reg_int_type_t) == 4);
++
++typedef enum touch_sts_reg_pwr_state
++{
++ TOUCH_STS_REG_PWR_STATE_SLEEP = 0, // Sleep
++ TOUCH_STS_REG_PWR_STATE_DOZE, // Doze
++ TOUCH_STS_REG_PWR_STATE_ARMED, // Armed
++ TOUCH_STS_REG_PWR_STATE_SENSING, // Sensing
++ TOUCH_STS_REG_PWR_STATE_MAX
++} touch_sts_reg_pwr_state_t;
++C_ASSERT(sizeof(touch_sts_reg_pwr_state_t) == 4);
++
++typedef enum touch_sts_reg_init_state
++{
++ TOUCH_STS_REG_INIT_STATE_READY_FOR_OP = 0, // Ready for normal operation
++ TOUCH_STS_REG_INIT_STATE_FW_NEEDED, // Touch IC needs its Firmware loaded
++ TOUCH_STS_REG_INIT_STATE_DATA_NEEDED, // Touch IC needs its Data loaded
++ TOUCH_STS_REG_INIT_STATE_INIT_ERROR, // Error info in TOUCH_ERR_REG
++ TOUCH_STS_REG_INIT_STATE_MAX
++} touch_sts_reg_init_state_t;
++C_ASSERT(sizeof(touch_sts_reg_init_state_t) == 4);
++
++#define TOUCH_SYNC_BYTE_VALUE 0x5A
++
++typedef union touch_sts_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // When set, this indicates the hardware has data that needs to be read.
++ u32 int_status :1;
++ // see TOUCH_STS_REG_INT_TYPE
++ u32 int_type :4;
++ // see TOUCH_STS_REG_PWR_STATE
++ u32 pwr_state :2;
++ // see TOUCH_STS_REG_INIT_STATE
++ u32 init_state :2;
++ // Busy bit indicates that sensor cannot accept writes at this time
++ u32 busy :1;
++ // Reserved
++ u32 reserved :14;
++ // Synchronization bit, should always be TOUCH_SYNC_BYTE_VALUE
++ u32 sync_byte :8;
++ } fields;
++} touch_sts_reg_t;
++C_ASSERT(sizeof(touch_sts_reg_t) == 4);
++
++
++//
++// Offset 04h: TOUCH_FRAME_CHAR: Frame Characteristics Register
++// This registers describes the characteristics of each data frame read by the SPI Controller in
++// response to a touch interrupt.
++//
++#define TOUCH_FRAME_CHAR_REG_OFFSET 0x04
++
++typedef union touch_frame_char_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Micro-Frame Size (MFS): Indicates the size of a touch micro-frame in byte increments.
++ // When a micro-frame is to be read for processing (in data mode), this is the total number of
++ // bytes that must be read per interrupt, split into multiple read commands no longer than RPS.
++ // Maximum micro-frame size is 256KB.
++ u32 microframe_size :18;
++ // Micro-Frames per Frame (MFPF): Indicates the number of micro-frames per frame. If a
++ // sensor's frame does not contain micro-frames this value will be 1. Valid values are 1-31.
++ u32 microframes_per_frame :5;
++ // Micro-Frame Index (MFI): Indicates the index of the micro-frame within a frame. This allows
++ // the SPI Controller to maintain synchronization with the sensor and determine when the final
++ // micro-frame has arrived. Valid values are 1-31.
++ u32 microframe_index :5;
++ // HID/Raw Data: This bit describes whether the data from the sensor is Raw data or a HID
++ // report. When set, the data is a HID report.
++ u32 hid_report :1;
++ // Reserved
++ u32 reserved :3;
++ } fields;
++} touch_frame_char_reg_t;
++C_ASSERT(sizeof(touch_frame_char_reg_t) == 4);
++
++
++//
++// Offset 08h: Touch Error Register
++//
++#define TOUCH_ERR_REG_OFFSET 0x08
++
++// bit definition is vendor specific
++typedef union touch_err_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ u32 invalid_fw :1;
++ u32 invalid_data :1;
++ u32 self_test_failed :1;
++ u32 reserved :12;
++ u32 fatal_error :1;
++ u32 vendor_errors :16;
++ } fields;
++} touch_err_reg_t;
++C_ASSERT(sizeof(touch_err_reg_t) == 4);
++
++
++//
++// Offset 0Ch: RESERVED
++// This register is reserved for future use.
++//
++
++
++//
++// Offset 10h: Touch Identification Register
++//
++#define TOUCH_ID_REG_OFFSET 0x10
++
++#define TOUCH_ID_REG_VALUE 0x43495424
++
++// expected value is "$TIC" or 0x43495424
++typedef u32 touch_id_reg_t;
++C_ASSERT(sizeof(touch_id_reg_t) == 4);
++
++
++//
++// Offset 14h: TOUCH_DATA_SZ: Touch Data Size Register
++// This register describes the maximum size of frames and feedback data
++//
++#define TOUCH_DATA_SZ_REG_OFFSET 0x14
++
++#define TOUCH_MAX_FRAME_SIZE_INCREMENT 64
++#define TOUCH_MAX_FEEDBACK_SIZE_INCREMENT 64
++
++#define TOUCH_SENSOR_MAX_FRAME_SIZE (32 * 1024) // Max allowed frame size 32KB
++#define TOUCH_SENSOR_MAX_FEEDBACK_SIZE (16 * 1024) // Max allowed feedback size 16KB
++
++typedef union touch_data_sz_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // This value describes the maximum frame size in 64byte increments.
++ u32 max_frame_size :12;
++ // This value describes the maximum feedback size in 64byte increments.
++ u32 max_feedback_size :8;
++ // Reserved
++ u32 reserved :12;
++ } fields;
++} touch_data_sz_reg_t;
++C_ASSERT(sizeof(touch_data_sz_reg_t) == 4);
++
++
++//
++// Offset 18h: TOUCH_CAPABILITIES: Touch Capabilities Register
++// This register informs the host as to the capabilities of the touch IC.
++//
++#define TOUCH_CAPS_REG_OFFSET 0x18
++
++typedef enum touch_caps_reg_read_delay_time
++{
++ TOUCH_CAPS_REG_READ_DELAY_TIME_0,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_10uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_50uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_100uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_150uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_250uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_500uS,
++ TOUCH_CAPS_REG_READ_DELAY_TIME_1mS,
++} touch_caps_reg_read_delay_time_t;
++C_ASSERT(sizeof(touch_caps_reg_read_delay_time_t) == 4);
++
++#define TOUCH_BULK_DATA_MAX_WRITE_INCREMENT 64
++
++typedef union touch_caps_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Reserved for future frequency
++ u32 reserved0 :1;
++ // 17 MHz (14 MHz on Atom) Supported: 0b - Not supported, 1b - Supported
++ u32 supported_17Mhz :1;
++ // 30 MHz (25MHz on Atom) Supported: 0b - Not supported, 1b - Supported
++ u32 supported_30Mhz :1;
++ // 50 MHz Supported: 0b - Not supported, 1b - Supported
++ u32 supported_50Mhz :1;
++ // Reserved
++ u32 reserved1 :4;
++ // Single I/O Supported: 0b - Not supported, 1b - Supported
++ u32 supported_single_io :1;
++ // Dual I/O Supported: 0b - Not supported, 1b - Supported
++ u32 supported_dual_io :1;
++ // Quad I/O Supported: 0b - Not supported, 1b - Supported
++ u32 supported_quad_io :1;
++ // Bulk Data Area Max Write Size: The amount of data the SPI Controller can write to the bulk
++ // data area before it has to poll the busy bit. This field is in multiples of 64 bytes. The
++ // SPI Controller will write the amount of data specified in this field, then check and wait
++ // for the Status.Busy bit to be zero before writing the next data chunk. This field is 6 bits
++ // long, allowing for 4KB of contiguous writes w/o a poll of the busy bit. If this field is
++ // 0x00 the Touch IC has no limit in the amount of data the SPI Controller can write to the
++ // bulk data area.
++ u32 bulk_data_max_write :6;
++ // Read Delay Timer Value: This field describes the delay the SPI Controller will initiate when
++ // a read interrupt follows a write data command. Uses values from TOUCH_CAPS_REG_READ_DELAY_TIME
++ u32 read_delay_timer_value :3;
++ // Reserved
++ u32 reserved2 :4;
++ // Maximum Touch Points: A byte value based on the HID descriptor definition.
++ u32 max_touch_points :8;
++ } fields;
++} touch_caps_reg_t;
++C_ASSERT(sizeof(touch_caps_reg_t) == 4);
++
++
++//
++// Offset 1Ch: TOUCH_CFG: Touch Configuration Register
++// This register allows the SPI Controller to configure the touch sensor as needed during touch
++// operations.
++//
++#define TOUCH_CFG_REG_OFFSET 0x1C
++
++typedef enum touch_cfg_reg_bulk_xfer_size
++{
++ TOUCH_CFG_REG_BULK_XFER_SIZE_4B = 0, // Bulk Data Transfer Size is 4 bytes
++ TOUCH_CFG_REG_BULK_XFER_SIZE_8B, // Bulk Data Transfer Size is 8 bytes
++ TOUCH_CFG_REG_BULK_XFER_SIZE_16B, // Bulk Data Transfer Size is 16 bytes
++ TOUCH_CFG_REG_BULK_XFER_SIZE_32B, // Bulk Data Transfer Size is 32 bytes
++ TOUCH_CFG_REG_BULK_XFER_SIZE_64B, // Bulk Data Transfer Size is 64 bytes
++ TOUCH_CFG_REG_BULK_XFER_SIZE_MAX
++} touch_cfg_reg_bulk_xfer_size_t;
++C_ASSERT(sizeof(touch_cfg_reg_bulk_xfer_size_t) == 4);
++
++// Frequency values used by TOUCH_CFG_REG and TOUCH_SENSOR_GET_DEVICE_INFO_RSP_DATA.
++typedef enum touch_freq
++{
++ TOUCH_FREQ_RSVD = 0, // Reserved value
++ TOUCH_FREQ_17MHZ, // Sensor set for 17MHz operation (14MHz on Atom)
++ TOUCH_FREQ_30MHZ, // Sensor set for 30MHz operation (25MHz on Atom)
++ TOUCH_FREQ_MAX // Invalid value
++} touch_freq_t;
++C_ASSERT(sizeof(touch_freq_t) == 4);
++
++typedef union touch_cfg_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Touch Enable (TE): This bit is used as a HW semaphore for the Touch IC to guarantee to the
++ // SPI Controller to that (when 0) no sensing operations will occur and only the Reset
++ // interrupt will be generated. When TE is cleared by the SPI Controller:
++ // - TICs must flush all output buffers
++ // - TICs must De-assert any pending interrupt
++ // - ME must throw away any partial frame and pending interrupt must be cleared/not serviced.
++ // The SPI Controller will only modify the configuration of the TIC when TE is cleared. TE is
++ // defaulted to 0h on a power-on reset.
++ u32 touch_enable :1;
++ // Data/HID Packet Mode (DHPM): Raw Data Mode: 0h, HID Packet Mode: 1h
++ u32 dhpm :1;
++ // Bulk Data Transfer Size: This field represents the amount of data written to the Bulk Data
++ // Area (SPI Offset 0x1000-0x2FFF) in a single SPI write protocol
++ u32 bulk_xfer_size :4;
++ // Frequency Select: Frequency for the TouchIC to run at. Use values from TOUCH_FREQ
++ u32 freq_select :3;
++ // Reserved
++ u32 reserved :23;
++ } fields;
++} touch_cfg_reg_t;
++C_ASSERT(sizeof(touch_cfg_reg_t) == 4);
++
++
++//
++// Offset 20h: TOUCH_CMD: Touch Command Register
++// This register is used for sending commands to the Touch IC.
++//
++#define TOUCH_CMD_REG_OFFSET 0x20
++
++typedef enum touch_cmd_reg_code
++{
++ TOUCH_CMD_REG_CODE_NOP = 0, // No Operation
++ TOUCH_CMD_REG_CODE_SOFT_RESET, // Soft Reset
++ TOUCH_CMD_REG_CODE_PREP_4_READ, // Prepare All Registers for Read
++ TOUCH_CMD_REG_CODE_GEN_TEST_PACKETS, // Generate Test Packets according to value in TOUCH_TEST_CTRL_REG
++ TOUCH_CMD_REG_CODE_MAX
++} touch_cmd_reg_code_t;
++C_ASSERT(sizeof(touch_cmd_reg_code_t) == 4);
++
++typedef union touch_cmd_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Command Code: See TOUCH_CMD_REG_CODE
++ u32 command_code :8;
++ // Reserved
++ u32 reserved :24;
++ } fields;
++} touch_cmd_reg_t;
++C_ASSERT(sizeof(touch_cmd_reg_t) == 4);
++
++
++//
++// Offset 24h: Power Management Control
++// This register is used for active power management. The Touch IC is allowed to mover from Doze or
++// Armed to Sensing after a touch has occurred. All other transitions will be made at the request
++// of the SPI Controller.
++//
++#define TOUCH_PWR_MGMT_CTRL_REG_OFFSET 0x24
++
++typedef enum touch_pwr_mgmt_ctrl_reg_cmd
++{
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_NOP = 0, // No change to power state
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_SLEEP, // Sleep - set when the system goes into connected standby
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_DOZE, // Doze - set after 300 seconds of inactivity
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_ARMED, // Armed - Set by FW when a "finger off" message is received from the EUs
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_SENSING, // Sensing - not typically set by FW
++ TOUCH_PWR_MGMT_CTRL_REG_CMD_MAX // Values will result in no change to the power state of the Touch IC
++} touch_pwr_mgmt_ctrl_reg_cmd_t;
++C_ASSERT(sizeof(touch_pwr_mgmt_ctrl_reg_cmd_t) == 4);
++
++typedef union touch_pwr_mgmt_ctrl_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Power State Command: See TOUCH_PWR_MGMT_CTRL_REG_CMD
++ u32 pwr_state_cmd :3;
++ // Reserved
++ u32 reserved :29;
++ } fields;
++} touch_pwr_mgmt_ctrl_reg_t;
++C_ASSERT(sizeof(touch_pwr_mgmt_ctrl_reg_t) == 4);
++
++
++//
++// Offset 28h: Vendor HW Information Register
++// This register is used to relay Intel-assigned vendor ID information to the SPI Controller, which
++// may be forwarded to SW running on the host CPU.
++//
++#define TOUCH_VEN_HW_INFO_REG_OFFSET 0x28
++
++typedef union touch_ven_hw_info_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Touch Sensor Vendor ID
++ u32 vendor_id :16;
++ // Touch Sensor Device ID
++ u32 device_id :16;
++ } fields;
++} touch_ven_hw_info_reg_t;
++C_ASSERT(sizeof(touch_ven_hw_info_reg_t) == 4);
++
++
++//
++// Offset 2Ch: HW Revision ID Register
++// This register is used to relay vendor HW revision information to the SPI Controller which may be
++// forwarded to SW running on the host CPU.
++//
++#define TOUCH_HW_REV_REG_OFFSET 0x2C
++
++typedef u32 touch_hw_rev_reg_t; // bit definition is vendor specific
++C_ASSERT(sizeof(touch_hw_rev_reg_t) == 4);
++
++
++//
++// Offset 30h: FW Revision ID Register
++// This register is used to relay vendor FW revision information to the SPI Controller which may be
++// forwarded to SW running on the host CPU.
++//
++#define TOUCH_FW_REV_REG_OFFSET 0x30
++
++typedef u32 touch_fw_rev_reg_t; // bit definition is vendor specific
++C_ASSERT(sizeof(touch_fw_rev_reg_t) == 4);
++
++
++//
++// Offset 34h: Compatibility Revision ID Register
++// This register is used to relay vendor compatibility information to the SPI Controller which may
++// be forwarded to SW running on the host CPU. Compatibility Information is a numeric value given
++// by Intel to the Touch IC vendor based on the major and minor revision of the EDS supported. From
++// a nomenclature point of view in an x.y revision number of the EDS, the major version is the value
++// of x and the minor version is the value of y. For example, a Touch IC supporting an EDS version
++// of 0.61 would contain a major version of 0 and a minor version of 61 in the register.
++//
++#define TOUCH_COMPAT_REV_REG_OFFSET 0x34
++
++typedef union touch_compat_rev_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // EDS Minor Revision
++ u8 minor;
++ // EDS Major Revision
++ u8 major;
++ // Interface Revision Number (from EDS)
++ u8 intf_rev;
++ // EU Kernel Compatibility Version - vendor specific value
++ u8 kernel_compat_ver;
++ } fields;
++} touch_compat_rev_reg_t;
++C_ASSERT(sizeof(touch_compat_rev_reg_t) == 4);
++
++
++//
++// Touch Register Block is the full set of registers from offset 0x00h to 0x3F
++// This is the entire set of registers needed for normal touch operation. It does not include test
++// registers such as TOUCH_TEST_CTRL_REG
++//
++#define TOUCH_REG_BLOCK_OFFSET TOUCH_STS_REG_OFFSET
++
++typedef struct touch_reg_block
++{
++ touch_sts_reg_t sts_reg; // 0x00
++ touch_frame_char_reg_t frame_char_reg; // 0x04
++ touch_err_reg_t error_reg; // 0x08
++ u32 reserved0; // 0x0C
++ touch_id_reg_t id_reg; // 0x10
++ touch_data_sz_reg_t data_size_reg; // 0x14
++ touch_caps_reg_t caps_reg; // 0x18
++ touch_cfg_reg_t cfg_reg; // 0x1C
++ touch_cmd_reg_t cmd_reg; // 0x20
++ touch_pwr_mgmt_ctrl_reg_t pwm_mgme_ctrl_reg; // 0x24
++ touch_ven_hw_info_reg_t ven_hw_info_reg; // 0x28
++ touch_hw_rev_reg_t hw_rev_reg; // 0x2C
++ touch_fw_rev_reg_t fw_rev_reg; // 0x30
++ touch_compat_rev_reg_t compat_rev_reg; // 0x34
++ u32 reserved1; // 0x38
++ u32 reserved2; // 0x3C
++} touch_reg_block_t;
++C_ASSERT(sizeof(touch_reg_block_t) == 64);
++
++
++//
++// Offset 40h: Test Control Register
++// This register
++//
++#define TOUCH_TEST_CTRL_REG_OFFSET 0x40
++
++typedef union touch_test_ctrl_reg
++{
++ u32 reg_value;
++
++ struct
++ {
++ // Size of Test Frame in Raw Data Mode: This field specifies the test frame size in raw data
++ // mode in multiple of 64 bytes. For example, if this field value is 16, the test frame size
++ // will be 16x64 = 1K.
++ u32 raw_test_frame_size :16;
++ // Number of Raw Data Frames or HID Report Packets Generation. This field represents the number
++ // of test frames or HID reports to be generated when test mode is enabled. When multiple
++ // packets/frames are generated, they need be generated at 100 Hz frequency, i.e. 10ms per
++ // packet/frame.
++ u32 num_test_frames :16;
++ } fields;
++} touch_test_ctrl_reg_t;
++C_ASSERT(sizeof(touch_test_ctrl_reg_t) == 4);
++
++
++//
++// Offsets 0x000 to 0xFFF are reserved for Intel-defined Registers
++//
++#define TOUCH_REGISTER_LIMIT 0xFFF
++
++
++//
++// Data Window: Address 0x1000-0x1FFFF
++// The data window is reserved for writing and reading large quantities of data to and from the
++// sensor.
++//
++#define TOUCH_DATA_WINDOW_OFFSET 0x1000
++#define TOUCH_DATA_WINDOW_LIMIT 0x1FFFF
++
++#define TOUCH_SENSOR_MAX_OFFSET TOUCH_DATA_WINDOW_LIMIT
++
++
++//
++// The following data structures represent the headers defined in the Data Structures chapter of the
++// Intel Integrated Touch EDS
++//
++
++// Enumeration used in TOUCH_RAW_DATA_HDR
++typedef enum touch_raw_data_types
++{
++ TOUCH_RAW_DATA_TYPE_FRAME = 0,
++ TOUCH_RAW_DATA_TYPE_ERROR, // RawData will be the TOUCH_ERROR struct below
++ TOUCH_RAW_DATA_TYPE_VENDOR_DATA, // Set when InterruptType is Vendor Data
++ TOUCH_RAW_DATA_TYPE_HID_REPORT,
++ TOUCH_RAW_DATA_TYPE_GET_FEATURES,
++ TOUCH_RAW_DATA_TYPE_MAX
++} touch_raw_data_types_t;
++C_ASSERT(sizeof(touch_raw_data_types_t) == 4);
++
++// Private data structure. Kernels must copy to HID driver buffer
++typedef struct touch_hid_private_data
++{
++ u32 transaction_id;
++ u8 reserved[28];
++} touch_hid_private_data_t;
++C_ASSERT(sizeof(touch_hid_private_data_t) == 32);
++
++// This is the data structure sent from the PCH FW to the EU kernel
++typedef struct touch_raw_data_hdr
++{
++ u32 data_type; // use values from TOUCH_RAW_DATA_TYPES
++ u32 raw_data_size_bytes; // The size in bytes of the raw data read from the
++ // sensor, does not include TOUCH_RAW_DATA_HDR. Will
++ // be the sum of all uFrames, or size of TOUCH_ERROR
++ // for if DataType is TOUCH_RAW_DATA_TYPE_ERROR
++ u32 buffer_id; // An ID to qualify with the feedback data to track
++ // buffer usage
++ u32 protocol_ver; // Must match protocol version of the EDS
++ u8 kernel_compat_id; // Copied from the Compatibility Revision ID Reg
++ u8 reserved[15]; // Padding to extend header to full 64 bytes and
++ // allow for growth
++ touch_hid_private_data_t hid_private_data; // Private data structure. Kernels must copy to HID
++ // driver buffer
++} touch_raw_data_hdr_t;
++C_ASSERT(sizeof(touch_raw_data_hdr_t) == 64);
++
++typedef struct touch_raw_data
++{
++ touch_raw_data_hdr_t header;
++ u8 raw_data[1]; // used to access the raw data as an array and keep the
++ // compilers happy. Actual size of this array is
++ // Header.RawDataSizeBytes
++} touch_raw_data_t;
++
++
++// The following section describes the data passed in TOUCH_RAW_DATA.RawData when DataType equals
++// TOUCH_RAW_DATA_TYPE_ERROR
++// Note: This data structure is also applied to HID mode
++typedef enum touch_err_types
++{
++ TOUCH_RAW_DATA_ERROR = 0,
++ TOUCH_RAW_ERROR_MAX
++} touch_err_types_t;
++C_ASSERT(sizeof(touch_err_types_t) == 4);
++
++typedef union touch_me_fw_error
++{
++ u32 value;
++
++ struct
++ {
++ u32 invalid_frame_characteristics : 1;
++ u32 microframe_index_invalid : 1;
++ u32 reserved : 30;
++ } fields;
++} touch_me_fw_error_t;
++C_ASSERT(sizeof(touch_me_fw_error_t) == 4);
++
++typedef struct touch_error
++{
++ u8 touch_error_type; // This must be a value from TOUCH_ERROR_TYPES
++ u8 reserved[3];
++ touch_me_fw_error_t touch_me_fw_error;
++ touch_err_reg_t touch_error_register; // Contains the value copied from the Touch Error Reg
++} touch_error_t;
++C_ASSERT(sizeof(touch_error_t) == 12);
++
++// Enumeration used in TOUCH_FEEDBACK_BUFFER
++typedef enum touch_feedback_cmd_types
++{
++ TOUCH_FEEDBACK_CMD_TYPE_NONE = 0,
++ TOUCH_FEEDBACK_CMD_TYPE_SOFT_RESET,
++ TOUCH_FEEDBACK_CMD_TYPE_GOTO_ARMED,
++ TOUCH_FEEDBACK_CMD_TYPE_GOTO_SENSING,
++ TOUCH_FEEDBACK_CMD_TYPE_GOTO_SLEEP,
++ TOUCH_FEEDBACK_CMD_TYPE_GOTO_DOZE,
++ TOUCH_FEEDBACK_CMD_TYPE_HARD_RESET,
++ TOUCH_FEEDBACK_CMD_TYPE_MAX
++} touch_feedback_cmd_types_t;
++C_ASSERT(sizeof(touch_feedback_cmd_types_t) == 4);
++
++// Enumeration used in TOUCH_FEEDBACK_HDR
++typedef enum touch_feedback_data_types
++{
++ TOUCH_FEEDBACK_DATA_TYPE_FEEDBACK = 0, // This is vendor specific feedback to be written to the sensor
++ TOUCH_FEEDBACK_DATA_TYPE_SET_FEATURES, // This is a set features command to be written to the sensor
++ TOUCH_FEEDBACK_DATA_TYPE_GET_FEATURES, // This is a get features command to be written to the sensor
++ TOUCH_FEEDBACK_DATA_TYPE_OUTPUT_REPORT, // This is a HID output report to be written to the sensor
++ TOUCH_FEEDBACK_DATA_TYPE_STORE_DATA, // This is calibration data to be written to system flash
++ TOUCH_FEEDBACK_DATA_TYPE_MAX
++} touch_feedback_data_types_t;
++C_ASSERT(sizeof(touch_feedback_data_types_t) == 4);
++
++// This is the data structure sent from the EU kernels back to the ME FW.
++// In addition to "feedback" data, the FW can execute a "command" described by the command type parameter.
++// Any payload data will always be sent to the TIC first, then any command will be issued.
++typedef struct touch_feedback_hdr
++{
++ u32 feedback_cmd_type; // use values from TOUCH_FEEDBACK_CMD_TYPES
++ u32 payload_size_bytes; // The amount of data to be written to the sensor, not including the header
++ u32 buffer_id; // The ID of the raw data buffer that generated this feedback data
++ u32 protocol_ver; // Must match protocol version of the EDS
++ u32 feedback_data_type; // use values from TOUCH_FEEDBACK_DATA_TYPES. This is not relevant if PayloadSizeBytes is 0
++ u32 spi_offest; // The offset from TOUCH_DATA_WINDOW_OFFSET at which to write the Payload data. Maximum offset is 0x1EFFF.
++ u8 reserved[40]; // Padding to extend header to full 64 bytes and allow for growth
++} touch_feedback_hdr_t;
++C_ASSERT(sizeof(touch_feedback_hdr_t) == 64);
++
++typedef struct touch_feedback_buffer
++{
++ touch_feedback_hdr_t Header;
++ u8 feedback_data[1]; // used to access the feedback data as an array and keep the compilers happy. Actual size of this array is Header.PayloadSizeBytes
++} touch_feedback_buffer_t;
++
++
++//
++// This data structure describes the header prepended to all data
++// written to the touch IC at the bulk data write (TOUCH_DATA_WINDOW_OFFSET + TOUCH_FEEDBACK_HDR.SpiOffest) address.
++typedef enum touch_write_data_type
++{
++ TOUCH_WRITE_DATA_TYPE_FW_LOAD = 0,
++ TOUCH_WRITE_DATA_TYPE_DATA_LOAD,
++ TOUCH_WRITE_DATA_TYPE_FEEDBACK,
++ TOUCH_WRITE_DATA_TYPE_SET_FEATURES,
++ TOUCH_WRITE_DATA_TYPE_GET_FEATURES,
++ TOUCH_WRITE_DATA_TYPE_OUTPUT_REPORT,
++ TOUCH_WRITE_DATA_TYPE_NO_DATA_USE_DEFAULTS,
++ TOUCH_WRITE_DATA_TYPE_MAX
++} touch_write_data_type_t;
++C_ASSERT(sizeof(touch_write_data_type_t) == 4);
++
++typedef struct touch_write_hdr
++{
++ u32 write_data_type; // Use values from TOUCH_WRITE_DATA_TYPE
++ u32 write_data_len; // This field designates the amount of data to follow
++} touch_write_hdr_t;
++C_ASSERT(sizeof(touch_write_hdr_t) == 8);
++
++typedef struct touch_write_data
++{
++ touch_write_hdr_t header;
++ u8 write_data[1]; // used to access the write data as an array and keep the compilers happy. Actual size of this array is Header.WriteDataLen
++} touch_write_data_t;
++
++#pragma pack()
++
++#endif // _TOUCH_SENSOR_REGS_H
+diff --git a/drivers/misc/ipts/ipts-state.h b/drivers/misc/ipts/ipts-state.h
+new file mode 100644
+index 00000000..39a2eaf5
+--- /dev/null
++++ b/drivers/misc/ipts/ipts-state.h
+@@ -0,0 +1,29 @@
++/*
++ * Intel Precise Touch & Stylus state codes
++ *
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ */
++
++#ifndef _IPTS_STATE_H_
++#define _IPTS_STATE_H_
++
++/* ipts driver states */
++typedef enum ipts_state {
++ IPTS_STA_NONE,
++ IPTS_STA_INIT,
++ IPTS_STA_RESOURCE_READY,
++ IPTS_STA_HID_STARTED,
++ IPTS_STA_RAW_DATA_STARTED,
++ IPTS_STA_STOPPING
++} ipts_state_t;
++
++#endif // _IPTS_STATE_H_
+diff --git a/drivers/misc/ipts/ipts.h b/drivers/misc/ipts/ipts.h
+new file mode 100644
+index 00000000..397b70ae
+--- /dev/null
++++ b/drivers/misc/ipts/ipts.h
+@@ -0,0 +1,200 @@
++/*
++ *
++ * Intel Management Engine Interface (Intel MEI) Client Driver for IPTS
++ * Copyright (c) 2016, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++
++#ifndef _IPTS_H_
++#define _IPTS_H_
++
++#include <linux/types.h>
++#include <linux/mei_cl_bus.h>
++#include <linux/hid.h>
++#include <linux/intel_ipts_if.h>
++
++#include "ipts-mei-msgs.h"
++#include "ipts-state.h"
++#include "ipts-binary-spec.h"
++
++#define ENABLE_IPTS_DEBUG /* enable IPTS debug */
++
++#ifdef ENABLE_IPTS_DEBUG
++
++#define ipts_info(ipts, format, arg...) do {\
++ dev_info(&ipts->cldev->dev, format, ##arg);\
++} while (0)
++
++#define ipts_dbg(ipts, format, arg...) do {\
++ dev_info(&ipts->cldev->dev, format, ##arg);\
++} while (0)
++
++#define RUN_DBG_THREAD
++
++#else
++
++#define ipts_info(ipts, format, arg...) do {} while(0);
++#define ipts_dbg(ipts, format, arg...) do {} while(0);
++
++#endif
++
++#define ipts_err(ipts, format, arg...) do {\
++ dev_err(&ipts->cldev->dev, format, ##arg);\
++} while (0)
++
++#define HID_PARALLEL_DATA_BUFFERS TOUCH_SENSOR_MAX_DATA_BUFFERS
++
++#define IPTS_MAX_RETRY 3
++
++typedef struct ipts_buffer_info {
++ char *addr;
++ dma_addr_t dma_addr;
++} ipts_buffer_info_t;
++
++typedef struct ipts_gfx_info {
++ u64 gfx_handle;
++ intel_ipts_ops_t ipts_ops;
++} ipts_gfx_info_t;
++
++typedef struct ipts_resource {
++ /* ME & Gfx resource */
++ ipts_buffer_info_t touch_data_buffer_raw[HID_PARALLEL_DATA_BUFFERS];
++ ipts_buffer_info_t touch_data_buffer_hid;
++
++ ipts_buffer_info_t feedback_buffer[HID_PARALLEL_DATA_BUFFERS];
++
++ ipts_buffer_info_t hid2me_buffer;
++ u32 hid2me_buffer_size;
++
++ u8 wq_item_size;
++ intel_ipts_wq_info_t wq_info;
++
++ /* ME2HID buffer */
++ char *me2hid_buffer;
++
++ /* Gfx specific resource */
++ ipts_buffer_info_t raw_data_mode_output_buffer
++ [HID_PARALLEL_DATA_BUFFERS][MAX_NUM_OUTPUT_BUFFERS];
++
++ int num_of_outputs;
++
++ bool default_resource_ready;
++ bool raw_data_resource_ready;
++} ipts_resource_t;
++
++typedef struct ipts_info {
++ struct mei_cl_device *cldev;
++ struct hid_device *hid;
++
++ struct work_struct init_work;
++ struct work_struct raw_data_work;
++ struct work_struct gfx_status_work;
++
++ struct task_struct *event_loop;
++
++#if IS_ENABLED(CONFIG_DEBUG_FS)
++ struct dentry *dbgfs_dir;
++#endif
++
++ ipts_state_t state;
++
++ touch_sensor_mode_t sensor_mode;
++ touch_sensor_get_device_info_rsp_data_t device_info;
++ ipts_resource_t resource;
++ u8 hid_input_report[HID_MAX_BUFFER_SIZE];
++ int num_of_parallel_data_buffers;
++ bool hid_desc_ready;
++
++ int current_buffer_index;
++ int last_buffer_completed;
++ int *last_submitted_id;
++
++ ipts_gfx_info_t gfx_info;
++ u64 kernel_handle;
++ int gfx_status;
++ bool display_status;
++
++ bool switch_sensor_mode;
++ touch_sensor_mode_t new_sensor_mode;
++
++ int retry;
++ bool restart;
++} ipts_info_t;
++
++#if IS_ENABLED(CONFIG_DEBUG_FS)
++int ipts_dbgfs_register(ipts_info_t *ipts, const char *name);
++void ipts_dbgfs_deregister(ipts_info_t *ipts);
++#else
++static int ipts_dbgfs_register(ipts_info_t *ipts, const char *name);
++static void ipts_dbgfs_deregister(ipts_info_t *ipts);
++#endif /* CONFIG_DEBUG_FS */
++
++/* inline functions */
++static inline void ipts_set_state(ipts_info_t *ipts, ipts_state_t state)
++{
++ ipts->state = state;
++}
++
++static inline ipts_state_t ipts_get_state(const ipts_info_t *ipts)
++{
++ return ipts->state;
++}
++
++static inline bool ipts_is_default_resource_ready(const ipts_info_t *ipts)
++{
++ return ipts->resource.default_resource_ready;
++}
++
++static inline bool ipts_is_raw_data_resource_ready(const ipts_info_t *ipts)
++{
++ return ipts->resource.raw_data_resource_ready;
++}
++
++static inline ipts_buffer_info_t* ipts_get_feedback_buffer(ipts_info_t *ipts,
++ int buffer_idx)
++{
++ return &ipts->resource.feedback_buffer[buffer_idx];
++}
++
++static inline ipts_buffer_info_t* ipts_get_touch_data_buffer_hid(ipts_info_t *ipts)
++{
++ return &ipts->resource.touch_data_buffer_hid;
++}
++
++static inline ipts_buffer_info_t* ipts_get_output_buffers_by_parallel_id(
++ ipts_info_t *ipts,
++ int parallel_idx)
++{
++ return &ipts->resource.raw_data_mode_output_buffer[parallel_idx][0];
++}
++
++static inline ipts_buffer_info_t* ipts_get_hid2me_buffer(ipts_info_t *ipts)
++{
++ return &ipts->resource.hid2me_buffer;
++}
++
++static inline void ipts_set_wq_item_size(ipts_info_t *ipts, u8 size)
++{
++ ipts->resource.wq_item_size = size;
++}
++
++static inline u8 ipts_get_wq_item_size(const ipts_info_t *ipts)
++{
++ return ipts->resource.wq_item_size;
++}
++
++static inline int ipts_get_num_of_parallel_buffers(const ipts_info_t *ipts)
++{
++ return ipts->num_of_parallel_data_buffers;
++}
++
++#endif // _IPTS_H_
+diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
+index c8307e8b..cde23f9a 100644
+--- a/drivers/misc/mei/hw-me-regs.h
++++ b/drivers/misc/mei/hw-me-regs.h
+@@ -119,6 +119,7 @@
+
+ #define MEI_DEV_ID_SPT 0x9D3A /* Sunrise Point */
+ #define MEI_DEV_ID_SPT_2 0x9D3B /* Sunrise Point 2 */
++#define MEI_DEV_ID_SPT_4 0x9D3E /* Sunrise Point 4 */
+ #define MEI_DEV_ID_SPT_H 0xA13A /* Sunrise Point H */
+ #define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */
+
+diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
+index 8621a198..79485fd7 100644
+--- a/drivers/misc/mei/pci-me.c
++++ b/drivers/misc/mei/pci-me.c
+@@ -85,6 +85,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
+
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT, mei_me_pch8_cfg)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, mei_me_pch8_cfg)},
++ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_4, mei_me_pch8_cfg)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, mei_me_pch8_sps_cfg)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, mei_me_pch8_sps_cfg)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, mei_me_pch8_cfg)},
+diff --git a/firmware/Makefile b/firmware/Makefile
+index fa3e81c2..dc98092f 100644
+--- a/firmware/Makefile
++++ b/firmware/Makefile
+@@ -135,6 +135,7 @@ fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw
+ fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
+ fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
+ fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
++fw-shipped-$(CONFIG_INTEL_IPTS) += intel/ipts/ipts_fw_config.bin
+
+ fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
+
+diff --git a/include/linux/intel_ipts_if.h b/include/linux/intel_ipts_if.h
+new file mode 100644
+index 00000000..f329bbfb
+--- /dev/null
++++ b/include/linux/intel_ipts_if.h
+@@ -0,0 +1,75 @@
++/*
++ *
++ * GFX interface to support Intel Precise Touch & Stylus
++ * Copyright (c) 2016 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms and conditions of the GNU General Public License,
++ * version 2, as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ */
++
++#ifndef INTEL_IPTS_IF_H
++#define INTEL_IPTS_IF_H
++
++enum {
++ IPTS_INTERFACE_V1 = 1,
++};
++
++#define IPTS_BUF_FLAG_CONTIGUOUS 0x01
++
++#define IPTS_NOTIFY_STA_BACKLIGHT_OFF 0x00
++#define IPTS_NOTIFY_STA_BACKLIGHT_ON 0x01
++
++typedef struct intel_ipts_mapbuffer {
++ u32 size;
++ u32 flags;
++ void *gfx_addr;
++ void *cpu_addr;
++ u64 buf_handle;
++ u64 phy_addr;
++} intel_ipts_mapbuffer_t;
++
++typedef struct intel_ipts_wq_info {
++ u64 db_addr;
++ u64 db_phy_addr;
++ u32 db_cookie_offset;
++ u32 wq_size;
++ u64 wq_addr;
++ u64 wq_phy_addr;
++ u64 wq_head_addr; /* head of wq is managed by GPU */
++ u64 wq_head_phy_addr; /* head of wq is managed by GPU */
++ u64 wq_tail_addr; /* tail of wq is managed by CSME */
++ u64 wq_tail_phy_addr; /* tail of wq is managed by CSME */
++} intel_ipts_wq_info_t;
++
++typedef struct intel_ipts_ops {
++ int (*get_wq_info)(uint64_t gfx_handle, intel_ipts_wq_info_t *wq_info);
++ int (*map_buffer)(uint64_t gfx_handle, intel_ipts_mapbuffer_t *mapbuffer);
++ int (*unmap_buffer)(uint64_t gfx_handle, uint64_t buf_handle);
++} intel_ipts_ops_t;
++
++typedef struct intel_ipts_callback {
++ void (*workload_complete)(void *data);
++ void (*notify_gfx_status)(u32 status, void *data);
++} intel_ipts_callback_t;
++
++typedef struct intel_ipts_connect {
++ intel_ipts_callback_t ipts_cb; /* input : callback addresses */
++ void *data; /* input : callback data */
++ u32 if_version; /* input : interface version */
++
++ u32 gfx_version; /* output : gfx version */
++ u64 gfx_handle; /* output : gfx handle */
++ intel_ipts_ops_t ipts_ops; /* output : gfx ops for IPTS */
++} intel_ipts_connect_t;
++
++int intel_ipts_connect(intel_ipts_connect_t *ipts_connect);
++void intel_ipts_disconnect(uint64_t gfx_handle);
++
++#endif // INTEL_IPTS_IF_H
diff --git a/0003-wifi.patch b/0003-wifi.patch
new file mode 100644
index 000000000000..6e96af8f971e
--- /dev/null
+++ b/0003-wifi.patch
@@ -0,0 +1,71 @@
+diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+index 025bc06a..07bdf271 100644
+--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
++++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+@@ -418,6 +418,9 @@ mwifiex_cfg80211_set_power_mgmt(struct wiphy *wiphy,
+
+ ps_mode = enabled;
+
++ mwifiex_dbg(priv->adapter, ERROR, "overriding ps_mode to false\n");
++ ps_mode = 0;
++
+ return mwifiex_drv_set_power(priv, &ps_mode);
+ }
+
+diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+index 83916c14..b47def60 100644
+--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
++++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+@@ -2308,7 +2308,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
+ if (ret)
+ return -1;
+
+- if (priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
++ if (0 && priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
+ /* Enable IEEE PS by default */
+ priv->adapter->ps_mode = MWIFIEX_802_11_POWER_MODE_PSP;
+ ret = mwifiex_send_cmd(priv,
+@@ -2364,7 +2364,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
+ if (ret)
+ return -1;
+
+- if (!disable_auto_ds && first_sta &&
++ if (0 && !disable_auto_ds && first_sta &&
+ priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
+ /* Enable auto deep sleep */
+ auto_ds.auto_ds = DEEP_SLEEP_ON;
+diff --git a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
+index a75013ac..448ba72d 100644
+--- a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
++++ b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
+@@ -200,8 +200,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
+
+ do {
+ /* Check if AMSDU can accommodate this MSDU */
+- if ((skb_aggr->len + skb_src->len + LLC_SNAP_LEN) >
+- adapter->tx_buf_size)
++ if (skb_tailroom(skb_aggr) < (skb_src->len + LLC_SNAP_LEN))
+ break;
+
+ skb_src = skb_dequeue(&pra_list->skb_head);
+diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
+index ac62bce5..293607e6 100644
+--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
++++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
+@@ -1716,6 +1716,16 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
+ }
+
+ rx_len = get_unaligned_le16(skb->data);
++
++
++ if (rx_len == 0) {
++ mwifiex_dbg(adapter, ERROR,
++ "0 byte cmdrsp\n");
++ mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
++ PCI_DMA_FROMDEVICE);
++ return 0;
++ }
++
+ skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len);
+ skb_trim(skb, rx_len);
+
diff --git a/99-ipts.rules b/99-ipts.rules
new file mode 100644
index 000000000000..31e717b551ff
--- /dev/null
+++ b/99-ipts.rules
@@ -0,0 +1,5 @@
+# IPTS Touchscreen
+SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:005E SingleTouch", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/touchscreen"
+
+# IPTS Pen
+SUBSYSTEMS=="input", ATTRS{name}=="ipts 1B96:005E Pen", ENV{ID_INPUT_TOUCHSCREEN}="1", SYMLINK+="input/pen"
diff --git a/PKGBUILD b/PKGBUILD
index cf3537522263..4b1c23670519 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,14 +1,14 @@
-# $Id: PKGBUILD 291740 2017-03-28 06:36:10Z tpowa $
+# Maintainer: Shadoukun <shadoukun@gmail.com>
+# Contributor: SuperBo <supernbo@gmail.com>
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>
-# Maintainer: Super Bo <supernbo@gmail.com>
-#pkgbase=linux # Build stock -ARCH kernel
+#pkgbase=linux # Build stock -ARCH kernel
pkgbase=linux-surface4 # Build kernel with a different name
-_srcname=linux-4.10
-pkgver=4.10.8
+_srcname=linux-4.12
+pkgver=4.12.8
pkgrel=1
-arch=('i686' 'x86_64')
+arch=('x86_64')
url="https://www.kernel.org/"
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'libelf')
@@ -17,23 +17,38 @@ source=("https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.xz"
"https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.sign"
"https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.xz"
"https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.sign"
+ 'bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch'
+ 'bonding-ratelimit-failed-speed-duplex-update-warning.patch'
+ 'mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch'
+ # surface patches
+ '0002-ipts.patch'
+ '0003-wifi.patch'
+ # touchscreen udev rules
+ '99-ipts.rules'
+ # IPTS firmware config.
+ 'ipts_fw_config.bin'
# the main kernel config files
- 'config.i686' 'config.x86_64'
+ 'config.x86_64'
# pacman hook for initramfs regeneration
'90-linux.hook'
# standard config files for mkinitcpio ramdisk
- 'linux.preset'
- '0001-surface4-typecover.patch')
+ 'linux.preset')
-sha256sums=('3c95d9f049bd085e5c346d2c77f063b8425f191460fcd3ae9fe7e94e0477dc4b'
+sha256sums=('a45c3becd4d08ce411c14628a949d08e2433d8cdeca92036c7013980e93858ab'
'SKIP'
- 'ceb385486e34084dd53425e5ba50b9fba4a8e380d8f2815bfde142852d797da0'
+ '32b860911a3bafd5cd5bc813a427c90fad6eafdf607fa64e1b763b16ab605636'
'SKIP'
- '386051f19482672c871e7865fc62f5e2c8010d857729134ba13044734962e42c'
- '12a87284e2935cd17e2846a207cc76f1728531416523735d66ef8a0ae690884c'
+ '48e0505438bb4ccc7a0e050a896122b490e8f1b1446aa3833841a9d4d7853d68'
+ 'fc606711a922638d5cc4358f47f69f554d9e6eab1cec91f0b49f00911f399722'
+ 'b830ce777543c0edd20a77d70f204c095f2429bb37151cd4a8c9dfae2af8d51a'
+ 'e3b91f55d351612394e14c99631601978f3d8b560203b3467797b758eebf777e'
+ '0faba3f84e262ef16ff5a78943025d172f466066d2e5c5e5035d5915fa90ba01'
+ '6360955b657947693cd57a702ad84f7fa730e20d3d6b3c48f4ec92f4eba27d79'
+ '6db350669dd2250f465e2259c3d7f75316dc448d849a60ef701e5e77ca7a95b0'
+ 'eed5c04a5f8841d52292fbb321990c79316ce98cd21324c71226cdc95cc20d09'
+ '585cdf04b6c27b8124e5ce582d2d0d63e020f8e53fc3d794305a96e61e8cc8ab'
'834bd254b56ab71d73f59b3221f056c72f559553c04718e350ab2a3e2991afe0'
- 'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65'
- 'fb005f85ce86b14418ddb427a7fda766e7824283f1b7a458cd2348b0b9dce390')
+ 'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65')
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
@@ -47,11 +62,27 @@ prepare() {
# add upstream patch
patch -p1 -i "${srcdir}/patch-${pkgver}"
+ # surface Patches
+ patch -Np1 -i "${srcdir}/0002-ipts.patch"
+ patch -Np1 -i "${srcdir}/0003-wifi.patch"
+
+ mkdir -p "firmware/intel/ipts"
+ cp "${srcdir}/ipts_fw_config.bin" "firmware/intel/ipts/"
+
+ # security patches
+
# add latest fixes from stable queue, if needed
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
- # Apply Surface Pro 4 patch
- patch -p1 -i "${srcdir}/0001-surface4-typecover.patch"
+ # https://bugzilla.kernel.org/show_bug.cgi?id=196547
+ patch -Np1 -i ../bonding-ratelimit-failed-speed-duplex-update-warning.patch
+ patch -Np1 -i ../bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch
+
+ # https://github.com/google/sanitizers/issues/837
+ # https://patchwork.kernel.org/patch/9886105/
+ patch -Np1 -i ../mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch
+
+
cat "${srcdir}/config.${CARCH}" > ./.config
@@ -88,7 +119,7 @@ build() {
}
_package() {
- pkgdesc="The ${pkgbase/linux/Linux} kernel and modules for Microsoft Surface Pro 4"
+ pkgdesc="The ${pkgbase/linux/Linux} kernel and modules"
[ "${pkgbase}" = "linux" ] && groups=('base')
depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
optdepends=('crda: to set the correct wireless channels of your country')
@@ -140,6 +171,9 @@ _package() {
# add vmlinux
install -D -m644 vmlinux "${pkgdir}/usr/lib/modules/${_kernver}/build/vmlinux"
+
+ # install surface touchscreen udev rules
+ install -D -C -m644 "${srcdir}/99-ipts.rules" "${pkgdir}/usr/lib/udev/rules.d/99-ipts.rules"
}
_package-headers() {
@@ -158,7 +192,7 @@ _package-headers() {
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include"
for i in acpi asm-generic config crypto drm generated keys linux math-emu \
- media net pcmcia scsi soc sound trace uapi video xen; do
+ media net pcmcia rdma scsi soc sound trace uapi video xen; do
cp -a include/${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/include/"
done
diff --git a/bonding-ratelimit-failed-speed-duplex-update-warning.patch b/bonding-ratelimit-failed-speed-duplex-update-warning.patch
new file mode 100644
index 000000000000..c1a8bc5b47e6
--- /dev/null
+++ b/bonding-ratelimit-failed-speed-duplex-update-warning.patch
@@ -0,0 +1,47 @@
+From 11e9d7829dd08dbafb24517fe922f11c3a8a9dc2 Mon Sep 17 00:00:00 2001
+From: Andreas Born <futur.andy@googlemail.com>
+Date: Sat, 12 Aug 2017 00:36:55 +0200
+Subject: [PATCH] bonding: ratelimit failed speed/duplex update warning
+
+bond_miimon_commit() handles the UP transition for each slave of a bond
+in the case of MII. It is triggered 10 times per second for the default
+MII Polling interval of 100ms. For device drivers that do not implement
+__ethtool_get_link_ksettings() the call to bond_update_speed_duplex()
+fails persistently while the MII status could remain UP. That is, in
+this and other cases where the speed/duplex update keeps failing over a
+longer period of time while the MII state is UP, a warning is printed
+every MII polling interval.
+
+To address these excessive warnings net_ratelimit() should be used.
+Printing a warning once would not be sufficient since the call to
+bond_update_speed_duplex() could recover to succeed and fail again
+later. In that case there would be no new indication what went wrong.
+
+Fixes: b5bf0f5b16b9c (bonding: correctly update link status during mii-commit phase)
+Signed-off-by: Andreas Born <futur.andy@googlemail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/bonding/bond_main.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 85bb272d2a34..fc63992ab0e0 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -2144,9 +2144,10 @@ static void bond_miimon_commit(struct bonding *bond)
+ if (bond_update_speed_duplex(slave) &&
+ bond_needs_speed_duplex(bond)) {
+ slave->link = BOND_LINK_DOWN;
+- netdev_warn(bond->dev,
+- "failed to get link speed/duplex for %s\n",
+- slave->dev->name);
++ if (net_ratelimit())
++ netdev_warn(bond->dev,
++ "failed to get link speed/duplex for %s\n",
++ slave->dev->name);
+ continue;
+ }
+ bond_set_slave_link_state(slave, BOND_LINK_UP,
+--
+2.14.1
+
diff --git a/bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch b/bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch
new file mode 100644
index 000000000000..09028515b84f
--- /dev/null
+++ b/bonding-require-speed-duplex-only-for-802.3ad-alb-an.patch
@@ -0,0 +1,68 @@
+From ad729bc9acfb7c47112964b4877ef5404578ed13 Mon Sep 17 00:00:00 2001
+From: Andreas Born <futur.andy@googlemail.com>
+Date: Thu, 10 Aug 2017 06:41:44 +0200
+Subject: [PATCH] bonding: require speed/duplex only for 802.3ad, alb and tlb
+
+The patch c4adfc822bf5 ("bonding: make speed, duplex setting consistent
+with link state") puts the link state to down if
+bond_update_speed_duplex() cannot retrieve speed and duplex settings.
+Assumably the patch was written with 802.3ad mode in mind which relies
+on link speed/duplex settings. For other modes like active-backup these
+settings are not required. Thus, only for these other modes, this patch
+reintroduces support for slaves that do not support reporting speed or
+duplex such as wireless devices. This fixes the regression reported in
+bug 196547 (https://bugzilla.kernel.org/show_bug.cgi?id=196547).
+
+Fixes: c4adfc822bf5 ("bonding: make speed, duplex setting consistent
+with link state")
+Signed-off-by: Andreas Born <futur.andy@googlemail.com>
+Acked-by: Mahesh Bandewar <maheshb@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/bonding/bond_main.c | 6 ++++--
+ include/net/bonding.h | 5 +++++
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 9bee6c1c70cc..85bb272d2a34 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -1569,7 +1569,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
+ new_slave->delay = 0;
+ new_slave->link_failure_count = 0;
+
+- if (bond_update_speed_duplex(new_slave))
++ if (bond_update_speed_duplex(new_slave) &&
++ bond_needs_speed_duplex(bond))
+ new_slave->link = BOND_LINK_DOWN;
+
+ new_slave->last_rx = jiffies -
+@@ -2140,7 +2141,8 @@ static void bond_miimon_commit(struct bonding *bond)
+ continue;
+
+ case BOND_LINK_UP:
+- if (bond_update_speed_duplex(slave)) {
++ if (bond_update_speed_duplex(slave) &&
++ bond_needs_speed_duplex(bond)) {
+ slave->link = BOND_LINK_DOWN;
+ netdev_warn(bond->dev,
+ "failed to get link speed/duplex for %s\n",
+diff --git a/include/net/bonding.h b/include/net/bonding.h
+index b00508d22e0a..b2e68657a216 100644
+--- a/include/net/bonding.h
++++ b/include/net/bonding.h
+@@ -277,6 +277,11 @@ static inline bool bond_is_lb(const struct bonding *bond)
+ BOND_MODE(bond) == BOND_MODE_ALB;
+ }
+
++static inline bool bond_needs_speed_duplex(const struct bonding *bond)
++{
++ return BOND_MODE(bond) == BOND_MODE_8023AD || bond_is_lb(bond);
++}
++
+ static inline bool bond_is_nondyn_tlb(const struct bonding *bond)
+ {
+ return (BOND_MODE(bond) == BOND_MODE_TLB) &&
+--
+2.14.1
+
diff --git a/config.i686 b/config.i686
deleted file mode 100644
index c615b8b393d3..000000000000
--- a/config.i686
+++ /dev/null
@@ -1,8331 +0,0 @@
-#
-# Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.10.0-1 Kernel Configuration
-#
-# CONFIG_64BIT is not set
-CONFIG_X86_32=y
-CONFIG_X86=y
-CONFIG_INSTRUCTION_DECODER=y
-CONFIG_OUTPUT_FORMAT="elf32-i386"
-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_MMU=y
-CONFIG_ARCH_MMAP_RND_BITS_MIN=8
-CONFIG_ARCH_MMAP_RND_BITS_MAX=16
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_HAS_CPU_RELAX=y
-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
-CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
-CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
-CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
-CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
-CONFIG_HAVE_INTEL_TXT=y
-CONFIG_X86_32_SMP=y
-CONFIG_ARCH_SUPPORTS_UPROBES=y
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_DEBUG_RODATA=y
-CONFIG_PGTABLE_LEVELS=2
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_IRQ_WORK=y
-CONFIG_BUILDTIME_EXTABLE_SORT=y
-CONFIG_THREAD_INFO_IN_TASK=y
-
-#
-# General setup
-#
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_CROSS_COMPILE=""
-# CONFIG_COMPILE_TEST is not set
-CONFIG_LOCALVERSION="-ARCH"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_HAVE_KERNEL_GZIP=y
-CONFIG_HAVE_KERNEL_BZIP2=y
-CONFIG_HAVE_KERNEL_LZMA=y
-CONFIG_HAVE_KERNEL_XZ=y
-CONFIG_HAVE_KERNEL_LZO=y
-CONFIG_HAVE_KERNEL_LZ4=y
-CONFIG_KERNEL_GZIP=y
-# CONFIG_KERNEL_BZIP2 is not set
-# CONFIG_KERNEL_LZMA is not set
-# CONFIG_KERNEL_XZ is not set
-# CONFIG_KERNEL_LZO is not set
-# CONFIG_KERNEL_LZ4 is not set
-CONFIG_DEFAULT_HOSTNAME="(none)"
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-CONFIG_CROSS_MEMORY_ATTACH=y
-CONFIG_FHANDLE=y
-# CONFIG_USELIB is not set
-# CONFIG_AUDIT is not set
-CONFIG_HAVE_ARCH_AUDITSYSCALL=y
-
-#
-# IRQ subsystem
-#
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_DOMAIN_HIERARCHY=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
-# CONFIG_IRQ_DOMAIN_DEBUG is not set
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_ARCH_CLOCKSOURCE_DATA=y
-CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
-CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-
-#
-# Timers subsystem
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ_COMMON=y
-# CONFIG_HZ_PERIODIC is not set
-CONFIG_NO_HZ_IDLE=y
-# CONFIG_NO_HZ is not set
-CONFIG_HIGH_RES_TIMERS=y
-
-#
-# CPU/Task time and stats accounting
-#
-CONFIG_TICK_CPU_ACCOUNTING=y
-# CONFIG_IRQ_TIME_ACCOUNTING is not set
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
-CONFIG_TASK_XACCT=y
-CONFIG_TASK_IO_ACCOUNTING=y
-
-#
-# RCU Subsystem
-#
-CONFIG_PREEMPT_RCU=y
-# CONFIG_RCU_EXPERT is not set
-CONFIG_SRCU=y
-# CONFIG_TASKS_RCU is not set
-CONFIG_RCU_STALL_COMMON=y
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_EXPEDITE_BOOT is not set
-CONFIG_BUILD_BIN2C=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=19
-CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
-CONFIG_NMI_LOG_BUF_SHIFT=13
-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
-CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
-CONFIG_CGROUPS=y
-CONFIG_PAGE_COUNTER=y
-CONFIG_MEMCG=y
-CONFIG_MEMCG_SWAP=y
-CONFIG_MEMCG_SWAP_ENABLED=y
-CONFIG_BLK_CGROUP=y
-# CONFIG_DEBUG_BLK_CGROUP is not set
-CONFIG_CGROUP_WRITEBACK=y
-CONFIG_CGROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_CFS_BANDWIDTH=y
-# CONFIG_RT_GROUP_SCHED is not set
-CONFIG_CGROUP_PIDS=y
-CONFIG_CGROUP_FREEZER=y
-# CONFIG_CGROUP_HUGETLB is not set
-CONFIG_CPUSETS=y
-CONFIG_PROC_PID_CPUSET=y
-CONFIG_CGROUP_DEVICE=y
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_CGROUP_PERF=y
-CONFIG_CGROUP_BPF=y
-# CONFIG_CGROUP_DEBUG is not set
-CONFIG_SOCK_CGROUP_DATA=y
-# CONFIG_CHECKPOINT_RESTORE is not set
-CONFIG_NAMESPACES=y
-CONFIG_UTS_NS=y
-CONFIG_IPC_NS=y
-# CONFIG_USER_NS is not set
-CONFIG_PID_NS=y
-CONFIG_NET_NS=y
-CONFIG_SCHED_AUTOGROUP=y
-# CONFIG_SYSFS_DEPRECATED is not set
-CONFIG_RELAY=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_RD_GZIP=y
-CONFIG_RD_BZIP2=y
-CONFIG_RD_LZMA=y
-CONFIG_RD_XZ=y
-CONFIG_RD_LZO=y
-CONFIG_RD_LZ4=y
-CONFIG_INITRAMFS_COMPRESSION=".gz"
-CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_HAVE_UID16=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-CONFIG_HAVE_PCSPKR_PLATFORM=y
-CONFIG_BPF=y
-# CONFIG_EXPERT is not set
-CONFIG_UID16=y
-CONFIG_MULTIUSER=y
-CONFIG_SGETMASK_SYSCALL=y
-CONFIG_SYSFS_SYSCALL=y
-# CONFIG_SYSCTL_SYSCALL is not set
-CONFIG_POSIX_TIMERS=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set
-CONFIG_KALLSYMS_BASE_RELATIVE=y
-CONFIG_PRINTK=y
-CONFIG_PRINTK_NMI=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_PCSPKR_PLATFORM=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_BPF_SYSCALL=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_ADVISE_SYSCALLS=y
-CONFIG_USERFAULTFD=y
-CONFIG_PCI_QUIRKS=y
-CONFIG_MEMBARRIER=y
-# CONFIG_EMBEDDED is not set
-CONFIG_HAVE_PERF_EVENTS=y
-
-#
-# Kernel Performance Events And Counters
-#
-CONFIG_PERF_EVENTS=y
-# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-CONFIG_SLAB_FREELIST_RANDOM=y
-CONFIG_SLUB_CPU_PARTIAL=y
-# CONFIG_SYSTEM_DATA_VERIFICATION is not set
-CONFIG_PROFILING=y
-CONFIG_TRACEPOINTS=y
-CONFIG_KEXEC_CORE=y
-CONFIG_OPROFILE=m
-# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
-CONFIG_HAVE_OPROFILE=y
-CONFIG_OPROFILE_NMI_TIMER=y
-CONFIG_KPROBES=y
-CONFIG_JUMP_LABEL=y
-# CONFIG_STATIC_KEYS_SELFTEST is not set
-CONFIG_KPROBES_ON_FTRACE=y
-CONFIG_UPROBES=y
-# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-CONFIG_ARCH_USE_BUILTIN_BSWAP=y
-CONFIG_KRETPROBES=y
-CONFIG_USER_RETURN_NOTIFIER=y
-CONFIG_HAVE_IOREMAP_PROT=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_OPTPROBES=y
-CONFIG_HAVE_KPROBES_ON_FTRACE=y
-CONFIG_HAVE_NMI=y
-CONFIG_HAVE_ARCH_TRACEHOOK=y
-CONFIG_HAVE_DMA_CONTIGUOUS=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_HAVE_HW_BREAKPOINT=y
-CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
-CONFIG_HAVE_USER_RETURN_NOTIFIER=y
-CONFIG_HAVE_PERF_EVENTS_NMI=y
-CONFIG_HAVE_PERF_REGS=y
-CONFIG_HAVE_PERF_USER_STACK_DUMP=y
-CONFIG_HAVE_ARCH_JUMP_LABEL=y
-CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
-CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
-CONFIG_HAVE_CMPXCHG_LOCAL=y
-CONFIG_HAVE_CMPXCHG_DOUBLE=y
-CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
-CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
-CONFIG_SECCOMP_FILTER=y
-CONFIG_HAVE_GCC_PLUGINS=y
-# CONFIG_GCC_PLUGINS is not set
-CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
-# CONFIG_CC_STACKPROTECTOR_NONE is not set
-# CONFIG_CC_STACKPROTECTOR_REGULAR is not set
-CONFIG_CC_STACKPROTECTOR_STRONG=y
-CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
-CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
-CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
-CONFIG_MODULES_USE_ELF_REL=y
-CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
-CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
-CONFIG_HAVE_EXIT_THREAD=y
-CONFIG_ARCH_MMAP_RND_BITS=8
-CONFIG_HAVE_COPY_THREAD_TLS=y
-# CONFIG_HAVE_ARCH_HASH is not set
-CONFIG_ISA_BUS_API=y
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_OLD_SIGSUSPEND3=y
-CONFIG_OLD_SIGACTION=y
-# CONFIG_CPU_NO_EFFICIENT_FFS is not set
-# CONFIG_HAVE_ARCH_VMAP_STACK is not set
-
-#
-# GCOV-based kernel profiling
-#
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_FORCE_LOAD=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_MODULE_SIG is not set
-CONFIG_MODULE_COMPRESS=y
-CONFIG_MODULE_COMPRESS_GZIP=y
-# CONFIG_MODULE_COMPRESS_XZ is not set
-CONFIG_MODULES_TREE_LOOKUP=y
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-CONFIG_BLK_DEV_BSG=y
-CONFIG_BLK_DEV_BSGLIB=y
-CONFIG_BLK_DEV_INTEGRITY=y
-CONFIG_BLK_DEV_ZONED=y
-CONFIG_BLK_DEV_THROTTLING=y
-# CONFIG_BLK_CMDLINE_PARSER is not set
-CONFIG_BLK_WBT=y
-CONFIG_BLK_WBT_SQ=y
-CONFIG_BLK_WBT_MQ=y
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-CONFIG_AIX_PARTITION=y
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_MAC_PARTITION=y
-CONFIG_MSDOS_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_LDM_PARTITION=y
-# CONFIG_LDM_DEBUG is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-CONFIG_KARMA_PARTITION=y
-CONFIG_EFI_PARTITION=y
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_CMDLINE_PARTITION is not set
-CONFIG_BLK_MQ_PCI=y
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_CFQ_GROUP_IOSCHED=y
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_PREEMPT_NOTIFIERS=y
-CONFIG_PADATA=y
-CONFIG_ASN1=m
-CONFIG_UNINLINE_SPIN_UNLOCK=y
-CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_RWSEM_SPIN_ON_OWNER=y
-CONFIG_LOCK_SPIN_ON_OWNER=y
-CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
-CONFIG_QUEUED_SPINLOCKS=y
-CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_RWLOCKS=y
-CONFIG_FREEZER=y
-
-#
-# Processor type and features
-#
-CONFIG_ZONE_DMA=y
-CONFIG_SMP=y
-CONFIG_X86_FEATURE_NAMES=y
-CONFIG_X86_FAST_FEATURE_TESTS=y
-CONFIG_X86_MPPARSE=y
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_GOLDFISH is not set
-CONFIG_INTEL_RDT_A=y
-# CONFIG_X86_EXTENDED_PLATFORM is not set
-CONFIG_X86_INTEL_LPSS=y
-CONFIG_X86_AMD_PLATFORM_DEVICE=y
-CONFIG_IOSF_MBI=y
-# CONFIG_IOSF_MBI_DEBUG is not set
-CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
-CONFIG_X86_32_IRIS=m
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-CONFIG_HYPERVISOR_GUEST=y
-CONFIG_PARAVIRT=y
-# CONFIG_PARAVIRT_DEBUG is not set
-CONFIG_PARAVIRT_SPINLOCKS=y
-# CONFIG_QUEUED_LOCK_STAT is not set
-CONFIG_KVM_GUEST=y
-# CONFIG_KVM_DEBUG_FS is not set
-# CONFIG_LGUEST_GUEST is not set
-CONFIG_PARAVIRT_TIME_ACCOUNTING=y
-CONFIG_PARAVIRT_CLOCK=y
-CONFIG_NO_BOOTMEM=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-CONFIG_M686=y
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MELAN is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-# CONFIG_MVIAC7 is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MATOM is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_INTERNODE_CACHE_SHIFT=6
-CONFIG_X86_L1_CACHE_SHIFT=6
-# CONFIG_X86_PPRO_FENCE is not set
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_X86_CMPXCHG64=y
-CONFIG_X86_CMOV=y
-CONFIG_X86_MINIMUM_CPU_FAMILY=5
-CONFIG_X86_DEBUGCTLMSR=y
-CONFIG_CPU_SUP_INTEL=y
-CONFIG_CPU_SUP_AMD=y
-CONFIG_CPU_SUP_CENTAUR=y
-CONFIG_CPU_SUP_TRANSMETA_32=y
-CONFIG_HPET_TIMER=y
-CONFIG_HPET_EMULATE_RTC=y
-CONFIG_DMI=y
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_SCHED_MC_PRIO=y
-# CONFIG_PREEMPT_NONE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_COUNT=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_INTEL=y
-CONFIG_X86_MCE_AMD=y
-# CONFIG_X86_ANCIENT_MCE is not set
-CONFIG_X86_MCE_THRESHOLD=y
-# CONFIG_X86_MCE_INJECT is not set
-CONFIG_X86_THERMAL_VECTOR=y
-
-#
-# Performance monitoring
-#
-CONFIG_PERF_EVENTS_INTEL_UNCORE=y
-CONFIG_PERF_EVENTS_INTEL_RAPL=m
-CONFIG_PERF_EVENTS_INTEL_CSTATE=m
-CONFIG_PERF_EVENTS_AMD_POWER=m
-# CONFIG_X86_LEGACY_VM86 is not set
-# CONFIG_VM86 is not set
-CONFIG_X86_16BIT=y
-CONFIG_X86_ESPFIX32=y
-CONFIG_TOSHIBA=m
-CONFIG_I8K=m
-CONFIG_X86_REBOOTFIXUPS=y
-CONFIG_MICROCODE=y
-CONFIG_MICROCODE_INTEL=y
-CONFIG_MICROCODE_AMD=y
-CONFIG_MICROCODE_OLD_INTERFACE=y
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-# CONFIG_NOHIGHMEM is not set
-CONFIG_HIGHMEM4G=y
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_HIGHMEM=y
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ILLEGAL_POINTER_VALUE=0
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_HAVE_MEMBLOCK=y
-CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
-CONFIG_ARCH_DISCARD_MEMBLOCK=y
-CONFIG_MEMORY_ISOLATION=y
-# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-CONFIG_MEMORY_BALLOON=y
-CONFIG_BALLOON_COMPACTION=y
-CONFIG_COMPACTION=y
-CONFIG_MIGRATION=y
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_MMU_NOTIFIER=y
-CONFIG_KSM=y
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
-CONFIG_MEMORY_FAILURE=y
-CONFIG_HWPOISON_INJECT=m
-CONFIG_TRANSPARENT_HUGEPAGE=y
-CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
-# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
-CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
-CONFIG_CLEANCACHE=y
-CONFIG_FRONTSWAP=y
-# CONFIG_CMA is not set
-CONFIG_ZSWAP=y
-CONFIG_ZPOOL=y
-CONFIG_ZBUD=y
-CONFIG_Z3FOLD=y
-CONFIG_ZSMALLOC=y
-# CONFIG_PGTABLE_MAPPING is not set
-# CONFIG_ZSMALLOC_STAT is not set
-CONFIG_GENERIC_EARLY_IOREMAP=y
-CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y
-# CONFIG_IDLE_PAGE_TRACKING is not set
-CONFIG_FRAME_VECTOR=y
-# CONFIG_HIGHPTE is not set
-CONFIG_X86_CHECK_BIOS_CORRUPTION=y
-CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-CONFIG_MTRR_SANITIZER=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
-CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
-CONFIG_X86_PAT=y
-CONFIG_ARCH_USES_PG_UNCACHED=y
-CONFIG_ARCH_RANDOM=y
-CONFIG_X86_SMAP=y
-CONFIG_X86_INTEL_MPX=y
-CONFIG_EFI=y
-CONFIG_EFI_STUB=y
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-# CONFIG_HZ_250 is not set
-CONFIG_HZ_300=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=300
-CONFIG_SCHED_HRTICK=y
-CONFIG_KEXEC=y
-CONFIG_CRASH_DUMP=y
-CONFIG_KEXEC_JUMP=y
-CONFIG_PHYSICAL_START=0x1000000
-CONFIG_RELOCATABLE=y
-# CONFIG_RANDOMIZE_BASE is not set
-CONFIG_X86_NEED_RELOCS=y
-CONFIG_PHYSICAL_ALIGN=0x1000000
-CONFIG_HOTPLUG_CPU=y
-# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
-# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
-# CONFIG_COMPAT_VDSO is not set
-# CONFIG_CMDLINE_BOOL is not set
-CONFIG_MODIFY_LDT_SYSCALL=y
-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-
-#
-# Power management and ACPI options
-#
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_HIBERNATE_CALLBACKS=y
-CONFIG_HIBERNATION=y
-CONFIG_PM_STD_PARTITION=""
-CONFIG_PM_SLEEP=y
-CONFIG_PM_SLEEP_SMP=y
-CONFIG_PM_AUTOSLEEP=y
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_WAKELOCKS_LIMIT=100
-CONFIG_PM_WAKELOCKS_GC=y
-CONFIG_PM=y
-CONFIG_PM_DEBUG=y
-CONFIG_PM_ADVANCED_DEBUG=y
-# CONFIG_PM_TEST_SUSPEND is not set
-CONFIG_PM_SLEEP_DEBUG=y
-CONFIG_PM_TRACE=y
-CONFIG_PM_TRACE_RTC=y
-CONFIG_PM_CLK=y
-CONFIG_PM_GENERIC_DOMAINS=y
-CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
-CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
-CONFIG_PM_GENERIC_DOMAINS_OF=y
-CONFIG_ACPI=y
-CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
-CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
-CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
-# CONFIG_ACPI_DEBUGGER is not set
-CONFIG_ACPI_SLEEP=y
-# CONFIG_ACPI_PROCFS_POWER is not set
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
-CONFIG_ACPI_EC_DEBUGFS=m
-CONFIG_ACPI_AC=m
-CONFIG_ACPI_BATTERY=m
-CONFIG_ACPI_BUTTON=m
-CONFIG_ACPI_VIDEO=m
-CONFIG_ACPI_FAN=m
-CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_CPU_FREQ_PSS=y
-CONFIG_ACPI_PROCESSOR_CSTATE=y
-CONFIG_ACPI_PROCESSOR_IDLE=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_IPMI=m
-CONFIG_ACPI_HOTPLUG_CPU=y
-CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
-CONFIG_ACPI_THERMAL=m
-# CONFIG_ACPI_CUSTOM_DSDT is not set
-CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
-CONFIG_ACPI_TABLE_UPGRADE=y
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_PCI_SLOT=y
-CONFIG_X86_PM_TIMER=y
-CONFIG_ACPI_CONTAINER=y
-CONFIG_ACPI_HOTPLUG_IOAPIC=y
-CONFIG_ACPI_SBS=m
-CONFIG_ACPI_HED=y
-CONFIG_ACPI_CUSTOM_METHOD=m
-CONFIG_ACPI_BGRT=y
-# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
-CONFIG_HAVE_ACPI_APEI=y
-CONFIG_HAVE_ACPI_APEI_NMI=y
-CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=y
-CONFIG_ACPI_APEI_PCIEAER=y
-CONFIG_ACPI_APEI_MEMORY_FAILURE=y
-CONFIG_ACPI_APEI_EINJ=m
-CONFIG_ACPI_APEI_ERST_DEBUG=m
-CONFIG_DPTF_POWER=m
-CONFIG_ACPI_WATCHDOG=y
-CONFIG_ACPI_EXTLOG=m
-CONFIG_PMIC_OPREGION=y
-CONFIG_CRC_PMIC_OPREGION=y
-CONFIG_BXT_WC_PMIC_OPREGION=y
-CONFIG_ACPI_CONFIGFS=m
-CONFIG_SFI=y
-CONFIG_X86_APM_BOOT=y
-CONFIG_APM=y
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-CONFIG_APM_DO_ENABLE=y
-# CONFIG_APM_CPU_IDLE is not set
-# CONFIG_APM_DISPLAY_BLANK is not set
-# CONFIG_APM_ALLOW_INTS is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-CONFIG_CPU_FREQ_GOV_COMMON=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
-
-#
-# CPU frequency scaling drivers
-#
-# CONFIG_CPUFREQ_DT is not set
-CONFIG_X86_INTEL_PSTATE=y
-CONFIG_X86_PCC_CPUFREQ=m
-CONFIG_X86_ACPI_CPUFREQ=m
-CONFIG_X86_ACPI_CPUFREQ_CPB=y
-CONFIG_X86_POWERNOW_K6=m
-CONFIG_X86_POWERNOW_K7=m
-CONFIG_X86_POWERNOW_K7_ACPI=y
-CONFIG_X86_POWERNOW_K8=m
-CONFIG_X86_AMD_FREQ_SENSITIVITY=m
-CONFIG_X86_GX_SUSPMOD=m
-# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
-CONFIG_X86_SPEEDSTEP_ICH=m
-CONFIG_X86_SPEEDSTEP_SMI=m
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_X86_CPUFREQ_NFORCE2=m
-CONFIG_X86_LONGRUN=m
-CONFIG_X86_LONGHAUL=m
-CONFIG_X86_E_POWERSAVER=m
-
-#
-# shared options
-#
-CONFIG_X86_SPEEDSTEP_LIB=m
-CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
-
-#
-# CPU Idle
-#
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_CPU_IDLE_GOV_MENU=y
-# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
-CONFIG_INTEL_IDLE=y
-
-#
-# Bus options (PCI etc.)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-# CONFIG_PCI_GOOLPC is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCI_OLPC=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_HOTPLUG_PCI_PCIE=y
-CONFIG_PCIEAER=y
-# CONFIG_PCIE_ECRC is not set
-# CONFIG_PCIEAER_INJECT is not set
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEBUG is not set
-CONFIG_PCIEASPM_DEFAULT=y
-# CONFIG_PCIEASPM_POWERSAVE is not set
-# CONFIG_PCIEASPM_PERFORMANCE is not set
-CONFIG_PCIE_PME=y
-CONFIG_PCIE_DPC=y
-CONFIG_PCIE_PTM=y
-CONFIG_PCI_MSI=y
-CONFIG_PCI_MSI_IRQ_DOMAIN=y
-# CONFIG_PCI_DEBUG is not set
-CONFIG_PCI_REALLOC_ENABLE_AUTO=y
-CONFIG_PCI_STUB=m
-CONFIG_HT_IRQ=y
-CONFIG_PCI_ATS=y
-CONFIG_PCI_IOV=y
-CONFIG_PCI_PRI=y
-CONFIG_PCI_PASID=y
-CONFIG_PCI_LABEL=y
-CONFIG_HOTPLUG_PCI=y
-CONFIG_HOTPLUG_PCI_COMPAQ=m
-# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-CONFIG_HOTPLUG_PCI_IBM=m
-CONFIG_HOTPLUG_PCI_ACPI=y
-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
-CONFIG_HOTPLUG_PCI_CPCI=y
-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
-CONFIG_HOTPLUG_PCI_SHPC=m
-
-#
-# PCI host controller drivers
-#
-# CONFIG_PCIE_DW_PLAT is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_SCx200 is not set
-CONFIG_OLPC=y
-CONFIG_OLPC_XO1_PM=y
-CONFIG_OLPC_XO1_RTC=y
-CONFIG_OLPC_XO1_SCI=y
-CONFIG_OLPC_XO15_SCI=y
-CONFIG_ALIX=y
-# CONFIG_NET5501 is not set
-# CONFIG_GEOS is not set
-CONFIG_AMD_NB=y
-CONFIG_PCCARD=m
-CONFIG_PCMCIA=m
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_CARDBUS=y
-
-#
-# PC-card bridges
-#
-CONFIG_YENTA=m
-CONFIG_YENTA_O2=y
-CONFIG_YENTA_RICOH=y
-CONFIG_YENTA_TI=y
-CONFIG_YENTA_ENE_TUNE=y
-CONFIG_YENTA_TOSHIBA=y
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_I82365=m
-CONFIG_TCIC=m
-CONFIG_PCMCIA_PROBE=y
-CONFIG_PCCARD_NONSTATIC=y
-# CONFIG_RAPIDIO is not set
-# CONFIG_X86_SYSFB is not set
-
-#
-# Executable file formats / Emulations
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_ELFCORE=y
-CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
-CONFIG_BINFMT_SCRIPT=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=y
-CONFIG_COREDUMP=y
-CONFIG_COMPAT_32=y
-CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_PMC_ATOM=y
-CONFIG_NET=y
-CONFIG_NET_INGRESS=y
-CONFIG_NET_EGRESS=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_DIAG=m
-CONFIG_UNIX=y
-CONFIG_UNIX_DIAG=m
-CONFIG_XFRM=y
-CONFIG_XFRM_ALGO=m
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-CONFIG_XFRM_IPCOMP=m
-CONFIG_NET_KEY=m
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_FIB_TRIE_STATS=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_ROUTE_CLASSID=y
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE_DEMUX=m
-CONFIG_NET_IP_TUNNEL=m
-CONFIG_NET_IPGRE=m
-# CONFIG_NET_IPGRE_BROADCAST is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_SYN_COOKIES=y
-CONFIG_NET_IPVTI=m
-CONFIG_NET_UDP_TUNNEL=m
-CONFIG_NET_FOU=m
-CONFIG_NET_FOU_IP_TUNNELS=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-CONFIG_INET_UDP_DIAG=m
-CONFIG_INET_RAW_DIAG=m
-CONFIG_INET_DIAG_DESTROY=y
-CONFIG_TCP_CONG_ADVANCED=y
-CONFIG_TCP_CONG_BIC=m
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_TCP_CONG_WESTWOOD=m
-CONFIG_TCP_CONG_HTCP=m
-CONFIG_TCP_CONG_HSTCP=m
-CONFIG_TCP_CONG_HYBLA=m
-CONFIG_TCP_CONG_VEGAS=m
-CONFIG_TCP_CONG_NV=m
-CONFIG_TCP_CONG_SCALABLE=m
-CONFIG_TCP_CONG_LP=m
-CONFIG_TCP_CONG_VENO=m
-CONFIG_TCP_CONG_YEAH=m
-CONFIG_TCP_CONG_ILLINOIS=m
-CONFIG_TCP_CONG_DCTCP=m
-CONFIG_TCP_CONG_CDG=m
-CONFIG_TCP_CONG_BBR=m
-CONFIG_DEFAULT_CUBIC=y
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="cubic"
-CONFIG_TCP_MD5SIG=y
-CONFIG_IPV6=y
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_IPV6_OPTIMISTIC_DAD=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_MIP6=m
-CONFIG_IPV6_ILA=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_SIT_6RD=y
-CONFIG_IPV6_NDISC_NODETYPE=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_GRE=m
-CONFIG_IPV6_FOU=m
-CONFIG_IPV6_FOU_TUNNEL=m
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
-CONFIG_IPV6_SEG6_LWTUNNEL=y
-# CONFIG_IPV6_SEG6_INLINE is not set
-CONFIG_IPV6_SEG6_HMAC=y
-CONFIG_NETLABEL=y
-CONFIG_NETWORK_SECMARK=y
-CONFIG_NET_PTP_CLASSIFY=y
-CONFIG_NETWORK_PHY_TIMESTAMPING=y
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-CONFIG_BRIDGE_NETFILTER=m
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_INGRESS=y
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_ACCT=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_LOG_COMMON=m
-CONFIG_NF_LOG_NETDEV=m
-CONFIG_NF_CONNTRACK_MARK=y
-CONFIG_NF_CONNTRACK_SECMARK=y
-CONFIG_NF_CONNTRACK_ZONES=y
-CONFIG_NF_CONNTRACK_PROCFS=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CONNTRACK_TIMEOUT=y
-CONFIG_NF_CONNTRACK_TIMESTAMP=y
-CONFIG_NF_CONNTRACK_LABELS=y
-CONFIG_NF_CT_PROTO_DCCP=y
-CONFIG_NF_CT_PROTO_GRE=m
-CONFIG_NF_CT_PROTO_SCTP=y
-CONFIG_NF_CT_PROTO_UDPLITE=y
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_BROADCAST=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_SNMP=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NF_CT_NETLINK_TIMEOUT=m
-CONFIG_NF_CT_NETLINK_HELPER=m
-CONFIG_NETFILTER_NETLINK_GLUE_CT=y
-CONFIG_NF_NAT=m
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_NF_NAT_PROTO_DCCP=y
-CONFIG_NF_NAT_PROTO_UDPLITE=y
-CONFIG_NF_NAT_PROTO_SCTP=y
-CONFIG_NF_NAT_AMANDA=m
-CONFIG_NF_NAT_FTP=m
-CONFIG_NF_NAT_IRC=m
-CONFIG_NF_NAT_SIP=m
-CONFIG_NF_NAT_TFTP=m
-CONFIG_NF_NAT_REDIRECT=m
-CONFIG_NETFILTER_SYNPROXY=m
-CONFIG_NF_TABLES=m
-CONFIG_NF_TABLES_INET=m
-CONFIG_NF_TABLES_NETDEV=m
-CONFIG_NFT_EXTHDR=m
-CONFIG_NFT_META=m
-CONFIG_NFT_RT=m
-CONFIG_NFT_NUMGEN=m
-CONFIG_NFT_CT=m
-CONFIG_NFT_SET_RBTREE=m
-CONFIG_NFT_SET_HASH=m
-CONFIG_NFT_COUNTER=m
-CONFIG_NFT_LOG=m
-CONFIG_NFT_LIMIT=m
-CONFIG_NFT_MASQ=m
-CONFIG_NFT_REDIR=m
-CONFIG_NFT_NAT=m
-CONFIG_NFT_OBJREF=m
-CONFIG_NFT_QUEUE=m
-CONFIG_NFT_QUOTA=m
-CONFIG_NFT_REJECT=m
-CONFIG_NFT_REJECT_INET=m
-CONFIG_NFT_COMPAT=m
-CONFIG_NFT_HASH=m
-CONFIG_NFT_FIB=m
-CONFIG_NFT_FIB_INET=m
-CONFIG_NF_DUP_NETDEV=m
-CONFIG_NFT_DUP_NETDEV=m
-CONFIG_NFT_FWD_NETDEV=m
-CONFIG_NETFILTER_XTABLES=m
-
-#
-# Xtables combined modules
-#
-CONFIG_NETFILTER_XT_MARK=m
-CONFIG_NETFILTER_XT_CONNMARK=m
-CONFIG_NETFILTER_XT_SET=m
-
-#
-# Xtables targets
-#
-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
-CONFIG_NETFILTER_XT_TARGET_CT=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_HL=m
-CONFIG_NETFILTER_XT_TARGET_HMARK=m
-CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
-CONFIG_NETFILTER_XT_TARGET_LED=m
-CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_NAT=m
-CONFIG_NETFILTER_XT_TARGET_NETMAP=m
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
-CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
-CONFIG_NETFILTER_XT_TARGET_TEE=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
-CONFIG_NETFILTER_XT_TARGET_TRACE=m
-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
-
-#
-# Xtables matches
-#
-CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
-CONFIG_NETFILTER_XT_MATCH_BPF=m
-CONFIG_NETFILTER_XT_MATCH_CGROUP=m
-CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_CPU=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-CONFIG_NETFILTER_XT_MATCH_ECN=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_HL=m
-CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_IPVS=m
-CONFIG_NETFILTER_XT_MATCH_L2TP=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_NFACCT=m
-CONFIG_NETFILTER_XT_MATCH_OSF=m
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_RECENT=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_SOCKET=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=m
-CONFIG_IP_SET=m
-CONFIG_IP_SET_MAX=256
-CONFIG_IP_SET_BITMAP_IP=m
-CONFIG_IP_SET_BITMAP_IPMAC=m
-CONFIG_IP_SET_BITMAP_PORT=m
-CONFIG_IP_SET_HASH_IP=m
-CONFIG_IP_SET_HASH_IPMARK=m
-CONFIG_IP_SET_HASH_IPPORT=m
-CONFIG_IP_SET_HASH_IPPORTIP=m
-CONFIG_IP_SET_HASH_IPPORTNET=m
-CONFIG_IP_SET_HASH_IPMAC=m
-CONFIG_IP_SET_HASH_MAC=m
-CONFIG_IP_SET_HASH_NETPORTNET=m
-CONFIG_IP_SET_HASH_NET=m
-CONFIG_IP_SET_HASH_NETNET=m
-CONFIG_IP_SET_HASH_NETPORT=m
-CONFIG_IP_SET_HASH_NETIFACE=m
-CONFIG_IP_SET_LIST_SET=m
-CONFIG_IP_VS=m
-CONFIG_IP_VS_IPV6=y
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_TAB_BITS=12
-
-#
-# IPVS transport protocol load balancing support
-#
-CONFIG_IP_VS_PROTO_TCP=y
-CONFIG_IP_VS_PROTO_UDP=y
-CONFIG_IP_VS_PROTO_AH_ESP=y
-CONFIG_IP_VS_PROTO_ESP=y
-CONFIG_IP_VS_PROTO_AH=y
-CONFIG_IP_VS_PROTO_SCTP=y
-
-#
-# IPVS scheduler
-#
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_WRR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_FO=m
-CONFIG_IP_VS_OVF=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_NQ=m
-
-#
-# IPVS SH scheduler
-#
-CONFIG_IP_VS_SH_TAB_BITS=8
-
-#
-# IPVS application helper
-#
-CONFIG_IP_VS_FTP=m
-CONFIG_IP_VS_NFCT=y
-CONFIG_IP_VS_PE_SIP=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_SOCKET_IPV4=m
-CONFIG_NF_TABLES_IPV4=m
-CONFIG_NFT_CHAIN_ROUTE_IPV4=m
-CONFIG_NFT_REJECT_IPV4=m
-CONFIG_NFT_DUP_IPV4=m
-CONFIG_NFT_FIB_IPV4=m
-CONFIG_NF_TABLES_ARP=m
-CONFIG_NF_DUP_IPV4=m
-CONFIG_NF_LOG_ARP=m
-CONFIG_NF_LOG_IPV4=m
-CONFIG_NF_REJECT_IPV4=m
-CONFIG_NF_NAT_IPV4=m
-CONFIG_NFT_CHAIN_NAT_IPV4=m
-CONFIG_NF_NAT_MASQUERADE_IPV4=m
-CONFIG_NFT_MASQ_IPV4=m
-CONFIG_NFT_REDIR_IPV4=m
-CONFIG_NF_NAT_SNMP_BASIC=m
-CONFIG_NF_NAT_PROTO_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_RPFILTER=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_SECURITY=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV6=m
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_NF_SOCKET_IPV6=m
-CONFIG_NF_TABLES_IPV6=m
-CONFIG_NFT_CHAIN_ROUTE_IPV6=m
-CONFIG_NFT_REJECT_IPV6=m
-CONFIG_NFT_DUP_IPV6=m
-CONFIG_NFT_FIB_IPV6=m
-CONFIG_NF_DUP_IPV6=m
-CONFIG_NF_REJECT_IPV6=m
-CONFIG_NF_LOG_IPV6=m
-CONFIG_NF_NAT_IPV6=m
-CONFIG_NFT_CHAIN_NAT_IPV6=m
-CONFIG_NF_NAT_MASQUERADE_IPV6=m
-CONFIG_NFT_MASQ_IPV6=m
-CONFIG_NFT_REDIR_IPV6=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_MH=m
-CONFIG_IP6_NF_MATCH_RPFILTER=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_TARGET_SYNPROXY=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_RAW=m
-CONFIG_IP6_NF_SECURITY=m
-CONFIG_IP6_NF_NAT=m
-CONFIG_IP6_NF_TARGET_MASQUERADE=m
-CONFIG_IP6_NF_TARGET_NPT=m
-CONFIG_NF_TABLES_BRIDGE=m
-CONFIG_NFT_BRIDGE_META=m
-CONFIG_NFT_BRIDGE_REJECT=m
-CONFIG_NF_LOG_BRIDGE=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
-CONFIG_IP_DCCP=m
-CONFIG_INET_DCCP_DIAG=m
-
-#
-# DCCP CCIDs Configuration
-#
-# CONFIG_IP_DCCP_CCID2_DEBUG is not set
-CONFIG_IP_DCCP_CCID3=y
-# CONFIG_IP_DCCP_CCID3_DEBUG is not set
-CONFIG_IP_DCCP_TFRC_LIB=y
-
-#
-# DCCP Kernel Hacking
-#
-# CONFIG_IP_DCCP_DEBUG is not set
-CONFIG_NET_DCCPPROBE=m
-CONFIG_IP_SCTP=m
-CONFIG_NET_SCTPPROBE=m
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
-# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
-CONFIG_SCTP_COOKIE_HMAC_MD5=y
-CONFIG_SCTP_COOKIE_HMAC_SHA1=y
-CONFIG_INET_SCTP_DIAG=m
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-CONFIG_ATM=m
-CONFIG_ATM_CLIP=m
-# CONFIG_ATM_CLIP_NO_ICMP is not set
-CONFIG_ATM_LANE=m
-CONFIG_ATM_MPOA=m
-CONFIG_ATM_BR2684=m
-# CONFIG_ATM_BR2684_IPFILTER is not set
-CONFIG_L2TP=m
-# CONFIG_L2TP_DEBUGFS is not set
-CONFIG_L2TP_V3=y
-CONFIG_L2TP_IP=m
-CONFIG_L2TP_ETH=m
-CONFIG_STP=m
-CONFIG_MRP=m
-CONFIG_BRIDGE=m
-CONFIG_BRIDGE_IGMP_SNOOPING=y
-CONFIG_BRIDGE_VLAN_FILTERING=y
-CONFIG_HAVE_NET_DSA=y
-CONFIG_NET_DSA=m
-CONFIG_NET_DSA_HWMON=y
-CONFIG_NET_DSA_TAG_BRCM=y
-CONFIG_NET_DSA_TAG_DSA=y
-CONFIG_NET_DSA_TAG_EDSA=y
-CONFIG_NET_DSA_TAG_TRAILER=y
-CONFIG_NET_DSA_TAG_QCA=y
-CONFIG_VLAN_8021Q=m
-# CONFIG_VLAN_8021Q_GVRP is not set
-CONFIG_VLAN_8021Q_MVRP=y
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-CONFIG_LLC2=m
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-CONFIG_PHONET=m
-CONFIG_6LOWPAN=m
-# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN_NHC=m
-CONFIG_6LOWPAN_NHC_DEST=m
-CONFIG_6LOWPAN_NHC_FRAGMENT=m
-CONFIG_6LOWPAN_NHC_HOP=m
-CONFIG_6LOWPAN_NHC_IPV6=m
-CONFIG_6LOWPAN_NHC_MOBILITY=m
-CONFIG_6LOWPAN_NHC_ROUTING=m
-CONFIG_6LOWPAN_NHC_UDP=m
-CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m
-CONFIG_6LOWPAN_GHC_UDP=m
-CONFIG_6LOWPAN_GHC_ICMPV6=m
-CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m
-CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m
-CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
-CONFIG_IEEE802154=m
-CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
-CONFIG_IEEE802154_SOCKET=m
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_MAC802154=m
-CONFIG_NET_SCHED=y
-
-#
-# Queueing/Scheduling
-#
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_ATM=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_MULTIQ=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFB=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_DRR=m
-CONFIG_NET_SCH_MQPRIO=m
-CONFIG_NET_SCH_CHOKE=m
-CONFIG_NET_SCH_QFQ=m
-CONFIG_NET_SCH_CODEL=m
-CONFIG_NET_SCH_FQ_CODEL=m
-CONFIG_NET_SCH_FQ=m
-CONFIG_NET_SCH_HHF=m
-CONFIG_NET_SCH_PIE=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_SCH_PLUG=m
-
-#
-# Classification
-#
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-# CONFIG_CLS_U32_PERF is not set
-# CONFIG_CLS_U32_MARK is not set
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_FLOW=m
-CONFIG_NET_CLS_CGROUP=m
-CONFIG_NET_CLS_BPF=m
-CONFIG_NET_CLS_FLOWER=m
-CONFIG_NET_CLS_MATCHALL=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_STACK=32
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_EMATCH_CANID=m
-CONFIG_NET_EMATCH_IPSET=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_NAT=m
-CONFIG_NET_ACT_PEDIT=m
-CONFIG_NET_ACT_SIMP=m
-CONFIG_NET_ACT_SKBEDIT=m
-CONFIG_NET_ACT_CSUM=m
-CONFIG_NET_ACT_VLAN=m
-CONFIG_NET_ACT_BPF=m
-CONFIG_NET_ACT_CONNMARK=m
-CONFIG_NET_ACT_SKBMOD=m
-CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_TUNNEL_KEY=m
-CONFIG_NET_IFE_SKBMARK=m
-CONFIG_NET_IFE_SKBPRIO=m
-CONFIG_NET_IFE_SKBTCINDEX=m
-CONFIG_NET_CLS_IND=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_DCB is not set
-CONFIG_DNS_RESOLVER=m
-CONFIG_BATMAN_ADV=m
-CONFIG_BATMAN_ADV_BATMAN_V=y
-CONFIG_BATMAN_ADV_BLA=y
-CONFIG_BATMAN_ADV_DAT=y
-CONFIG_BATMAN_ADV_NC=y
-CONFIG_BATMAN_ADV_MCAST=y
-CONFIG_BATMAN_ADV_DEBUGFS=y
-# CONFIG_BATMAN_ADV_DEBUG is not set
-CONFIG_OPENVSWITCH=m
-CONFIG_OPENVSWITCH_GRE=m
-CONFIG_OPENVSWITCH_VXLAN=m
-CONFIG_OPENVSWITCH_GENEVE=m
-CONFIG_VSOCKETS=m
-CONFIG_VMWARE_VMCI_VSOCKETS=m
-CONFIG_VIRTIO_VSOCKETS=m
-CONFIG_VIRTIO_VSOCKETS_COMMON=m
-CONFIG_NETLINK_DIAG=m
-CONFIG_MPLS=y
-CONFIG_NET_MPLS_GSO=m
-CONFIG_MPLS_ROUTING=m
-CONFIG_MPLS_IPTUNNEL=m
-CONFIG_HSR=m
-CONFIG_NET_SWITCHDEV=y
-CONFIG_NET_L3_MASTER_DEV=y
-CONFIG_NET_NCSI=y
-CONFIG_RPS=y
-CONFIG_RFS_ACCEL=y
-CONFIG_XPS=y
-# CONFIG_CGROUP_NET_PRIO is not set
-CONFIG_CGROUP_NET_CLASSID=y
-CONFIG_NET_RX_BUSY_POLL=y
-CONFIG_BQL=y
-CONFIG_NET_FLOW_LIMIT=y
-
-#
-# Network testing
-#
-CONFIG_NET_PKTGEN=m
-CONFIG_NET_TCPPROBE=m
-CONFIG_NET_DROP_MONITOR=m
-CONFIG_HAMRADIO=y
-
-#
-# Packet Radio protocols
-#
-CONFIG_AX25=m
-CONFIG_AX25_DAMA_SLAVE=y
-CONFIG_NETROM=m
-CONFIG_ROSE=m
-
-#
-# AX.25 network device drivers
-#
-CONFIG_MKISS=m
-CONFIG_6PACK=m
-CONFIG_BPQETHER=m
-CONFIG_SCC=m
-# CONFIG_SCC_DELAY is not set
-# CONFIG_SCC_TRXECHO is not set
-CONFIG_BAYCOM_SER_FDX=m
-CONFIG_BAYCOM_SER_HDX=m
-CONFIG_BAYCOM_PAR=m
-CONFIG_BAYCOM_EPP=m
-CONFIG_YAM=m
-CONFIG_CAN=m
-CONFIG_CAN_RAW=m
-CONFIG_CAN_BCM=m
-CONFIG_CAN_GW=m
-
-#
-# CAN Device Drivers
-#
-CONFIG_CAN_VCAN=m
-CONFIG_CAN_SLCAN=m
-CONFIG_CAN_DEV=m
-CONFIG_CAN_CALC_BITTIMING=y
-CONFIG_CAN_LEDS=y
-# CONFIG_CAN_GRCAN is not set
-CONFIG_PCH_CAN=m
-CONFIG_CAN_C_CAN=m
-CONFIG_CAN_C_CAN_PLATFORM=m
-CONFIG_CAN_C_CAN_PCI=m
-CONFIG_CAN_CC770=m
-# CONFIG_CAN_CC770_ISA is not set
-CONFIG_CAN_CC770_PLATFORM=m
-CONFIG_CAN_IFI_CANFD=m
-CONFIG_CAN_M_CAN=m
-CONFIG_CAN_SJA1000=m
-# CONFIG_CAN_SJA1000_ISA is not set
-CONFIG_CAN_SJA1000_PLATFORM=m
-# CONFIG_CAN_EMS_PCMCIA is not set
-CONFIG_CAN_EMS_PCI=m
-CONFIG_CAN_PEAK_PCMCIA=m
-CONFIG_CAN_PEAK_PCI=m
-CONFIG_CAN_PEAK_PCIEC=y
-CONFIG_CAN_KVASER_PCI=m
-CONFIG_CAN_PLX_PCI=m
-# CONFIG_CAN_TSCAN1 is not set
-CONFIG_CAN_SOFTING=m
-# CONFIG_CAN_SOFTING_CS is not set
-
-#
-# CAN SPI interfaces
-#
-# CONFIG_CAN_MCP251X is not set
-
-#
-# CAN USB interfaces
-#
-CONFIG_CAN_EMS_USB=m
-CONFIG_CAN_ESD_USB2=m
-CONFIG_CAN_GS_USB=m
-CONFIG_CAN_KVASER_USB=m
-CONFIG_CAN_PEAK_USB=m
-CONFIG_CAN_8DEV_USB=m
-# CONFIG_CAN_DEBUG_DEVICES is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-CONFIG_DONGLE=y
-CONFIG_ESI_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
-CONFIG_TEKRAM_DONGLE=m
-CONFIG_TOIM3232_DONGLE=m
-CONFIG_LITELINK_DONGLE=m
-CONFIG_MA600_DONGLE=m
-CONFIG_GIRBIL_DONGLE=m
-CONFIG_MCP2120_DONGLE=m
-CONFIG_OLD_BELKIN_DONGLE=m
-CONFIG_ACT200L_DONGLE=m
-CONFIG_KINGSUN_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
-CONFIG_KS959_DONGLE=m
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-CONFIG_SIGMATEL_FIR=m
-CONFIG_NSC_FIR=m
-CONFIG_WINBOND_FIR=m
-CONFIG_TOSHIBA_FIR=m
-CONFIG_SMC_IRCC_FIR=m
-CONFIG_ALI_FIR=m
-CONFIG_VLSI_FIR=m
-CONFIG_VIA_FIR=m
-CONFIG_MCS_FIR=m
-CONFIG_BT=m
-CONFIG_BT_BREDR=y
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_CMTP=m
-CONFIG_BT_HIDP=m
-CONFIG_BT_HS=y
-CONFIG_BT_LE=y
-CONFIG_BT_6LOWPAN=m
-CONFIG_BT_LEDS=y
-# CONFIG_BT_SELFTEST is not set
-CONFIG_BT_DEBUGFS=y
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_INTEL=m
-CONFIG_BT_BCM=m
-CONFIG_BT_RTL=m
-CONFIG_BT_QCA=m
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTUSB_BCM=y
-CONFIG_BT_HCIBTUSB_RTL=y
-CONFIG_BT_HCIBTSDIO=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIUART_LL=y
-CONFIG_BT_HCIUART_3WIRE=y
-CONFIG_BT_HCIUART_INTEL=y
-CONFIG_BT_HCIUART_BCM=y
-CONFIG_BT_HCIUART_QCA=y
-CONFIG_BT_HCIUART_AG6XX=y
-CONFIG_BT_HCIUART_MRVL=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_BT_MRVL=m
-CONFIG_BT_MRVL_SDIO=m
-CONFIG_BT_ATH3K=m
-CONFIG_BT_WILINK=m
-CONFIG_AF_RXRPC=m
-CONFIG_AF_RXRPC_IPV6=y
-# CONFIG_AF_RXRPC_INJECT_LOSS is not set
-# CONFIG_AF_RXRPC_DEBUG is not set
-CONFIG_RXKAD=y
-CONFIG_AF_KCM=m
-CONFIG_STREAM_PARSER=m
-CONFIG_FIB_RULES=y
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-CONFIG_WEXT_SPY=y
-CONFIG_WEXT_PRIV=y
-CONFIG_CFG80211=m
-# CONFIG_NL80211_TESTMODE is not set
-# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
-CONFIG_CFG80211_DEFAULT_PS=y
-# CONFIG_CFG80211_DEBUGFS is not set
-# CONFIG_CFG80211_INTERNAL_REGDB is not set
-CONFIG_CFG80211_CRDA_SUPPORT=y
-CONFIG_CFG80211_WEXT=y
-CONFIG_CFG80211_WEXT_EXPORT=y
-CONFIG_LIB80211=m
-CONFIG_LIB80211_CRYPT_WEP=m
-CONFIG_LIB80211_CRYPT_CCMP=m
-CONFIG_LIB80211_CRYPT_TKIP=m
-# CONFIG_LIB80211_DEBUG is not set
-CONFIG_MAC80211=m
-CONFIG_MAC80211_HAS_RC=y
-CONFIG_MAC80211_RC_MINSTREL=y
-CONFIG_MAC80211_RC_MINSTREL_HT=y
-# CONFIG_MAC80211_RC_MINSTREL_VHT is not set
-CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
-CONFIG_MAC80211_MESH=y
-CONFIG_MAC80211_LEDS=y
-CONFIG_MAC80211_DEBUGFS=y
-# CONFIG_MAC80211_MESSAGE_TRACING is not set
-# CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
-CONFIG_WIMAX=m
-CONFIG_WIMAX_DEBUG_LEVEL=8
-CONFIG_RFKILL=m
-CONFIG_RFKILL_LEDS=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_GPIO=m
-CONFIG_NET_9P=m
-CONFIG_NET_9P_VIRTIO=m
-# CONFIG_NET_9P_RDMA is not set
-# CONFIG_NET_9P_DEBUG is not set
-CONFIG_CAIF=m
-# CONFIG_CAIF_DEBUG is not set
-CONFIG_CAIF_NETDEV=m
-CONFIG_CAIF_USB=m
-CONFIG_CEPH_LIB=m
-# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
-# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
-CONFIG_NFC=m
-CONFIG_NFC_DIGITAL=m
-CONFIG_NFC_NCI=m
-# CONFIG_NFC_NCI_SPI is not set
-# CONFIG_NFC_NCI_UART is not set
-CONFIG_NFC_HCI=m
-# CONFIG_NFC_SHDLC is not set
-
-#
-# Near Field Communication (NFC) devices
-#
-CONFIG_NFC_WILINK=m
-CONFIG_NFC_TRF7970A=m
-CONFIG_NFC_MEI_PHY=m
-CONFIG_NFC_SIM=m
-CONFIG_NFC_PORT100=m
-CONFIG_NFC_FDP=m
-CONFIG_NFC_FDP_I2C=m
-CONFIG_NFC_PN544=m
-CONFIG_NFC_PN544_MEI=m
-CONFIG_NFC_PN533=m
-CONFIG_NFC_PN533_USB=m
-CONFIG_NFC_PN533_I2C=m
-CONFIG_NFC_MICROREAD=m
-CONFIG_NFC_MICROREAD_MEI=m
-CONFIG_NFC_MRVL=m
-CONFIG_NFC_MRVL_USB=m
-CONFIG_NFC_MRVL_I2C=m
-CONFIG_NFC_ST_NCI=m
-CONFIG_NFC_ST_NCI_I2C=m
-# CONFIG_NFC_ST_NCI_SPI is not set
-# CONFIG_NFC_NXP_NCI is not set
-# CONFIG_NFC_S3FWRN5_I2C is not set
-# CONFIG_NFC_ST95HF is not set
-CONFIG_LWTUNNEL=y
-CONFIG_LWTUNNEL_BPF=y
-CONFIG_DST_CACHE=y
-CONFIG_NET_DEVLINK=m
-CONFIG_MAY_USE_DEVLINK=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-# CONFIG_UEVENT_HELPER is not set
-CONFIG_DEVTMPFS=y
-# CONFIG_DEVTMPFS_MOUNT is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-CONFIG_EXTRA_FIRMWARE=""
-CONFIG_FW_LOADER_USER_HELPER=y
-# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
-CONFIG_WANT_DEV_COREDUMP=y
-CONFIG_ALLOW_DEV_COREDUMP=y
-CONFIG_DEV_COREDUMP=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
-# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_GENERIC_CPU_DEVICES is not set
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-CONFIG_REGMAP=y
-CONFIG_REGMAP_I2C=y
-CONFIG_REGMAP_SPI=y
-CONFIG_REGMAP_SPMI=m
-CONFIG_REGMAP_MMIO=y
-CONFIG_REGMAP_IRQ=y
-CONFIG_DMA_SHARED_BUFFER=y
-# CONFIG_DMA_FENCE_TRACE is not set
-
-#
-# Bus devices
-#
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
-CONFIG_MTD=m
-CONFIG_MTD_TESTS=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-CONFIG_MTD_CMDLINE_PARTS=m
-CONFIG_MTD_OF_PARTS=m
-CONFIG_MTD_AR7_PARTS=m
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_BLKDEVS=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-CONFIG_SSFDC=m
-# CONFIG_SM_FTL is not set
-CONFIG_MTD_OOPS=m
-CONFIG_MTD_SWAP=m
-# CONFIG_MTD_PARTITIONED_MASTER is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_CFI_UTIL=m
-CONFIG_MTD_RAM=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_PHYSMAP_OF=m
-# CONFIG_MTD_PHYSMAP_OF_VERSATILE is not set
-# CONFIG_MTD_SBC_GXX is not set
-# CONFIG_MTD_AMD76XROM is not set
-# CONFIG_MTD_ICHXROM is not set
-# CONFIG_MTD_ESB2ROM is not set
-# CONFIG_MTD_CK804XROM is not set
-CONFIG_MTD_SCB2_FLASH=m
-# CONFIG_MTD_NETtel is not set
-# CONFIG_MTD_L440GX is not set
-CONFIG_MTD_PCI=m
-CONFIG_MTD_PCMCIA=m
-# CONFIG_MTD_PCMCIA_ANONYMOUS is not set
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_INTEL_VR_NOR is not set
-CONFIG_MTD_PLATRAM=m
-# CONFIG_MTD_LATCH_ADDR is not set
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_PMC551=m
-# CONFIG_MTD_PMC551_BUGFIX is not set
-# CONFIG_MTD_PMC551_DEBUG is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_SST25L is not set
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-CONFIG_MTD_BLOCK2MTD=m
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOCG3 is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR & LPDDR2 PCM memory drivers
-#
-CONFIG_MTD_LPDDR=m
-CONFIG_MTD_QINFO_PROBE=m
-# CONFIG_MTD_SPI_NOR is not set
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_LIMIT=20
-# CONFIG_MTD_UBI_FASTMAP is not set
-# CONFIG_MTD_UBI_GLUEBI is not set
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_OF=y
-# CONFIG_OF_UNITTEST is not set
-CONFIG_OF_PROMTREE=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_ADDRESS_PCI=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_NET=y
-CONFIG_OF_MDIO=m
-CONFIG_OF_PCI=y
-CONFIG_OF_PCI_IRQ=y
-# CONFIG_OF_OVERLAY is not set
-CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_SERIAL=m
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_GSC is not set
-CONFIG_PARPORT_AX88796=m
-CONFIG_PARPORT_1284=y
-CONFIG_PARPORT_NOT_PC=y
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG_MESSAGES is not set
-
-#
-# Protocols
-#
-CONFIG_ISAPNP=y
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_NULL_BLK is not set
-CONFIG_BLK_DEV_FD=m
-# CONFIG_PARIDE is not set
-CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_ZRAM=m
-CONFIG_BLK_CPQ_CISS_DA=m
-# CONFIG_CISS_SCSI_TAPE is not set
-CONFIG_BLK_DEV_DAC960=m
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_DRBD=m
-# CONFIG_DRBD_FAULT_INJECTION is not set
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_OSD=m
-CONFIG_BLK_DEV_SX8=m
-CONFIG_BLK_DEV_RAM=m
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=16384
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-CONFIG_ATA_OVER_ETH=m
-CONFIG_VIRTIO_BLK=m
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_RBD=m
-CONFIG_BLK_DEV_RSXX=m
-CONFIG_NVME_CORE=m
-CONFIG_BLK_DEV_NVME=m
-# CONFIG_BLK_DEV_NVME_SCSI is not set
-CONFIG_NVME_FABRICS=m
-CONFIG_NVME_RDMA=m
-CONFIG_NVME_FC=m
-CONFIG_NVME_TARGET=m
-CONFIG_NVME_TARGET_LOOP=m
-CONFIG_NVME_TARGET_RDMA=m
-CONFIG_NVME_TARGET_FC=m
-# CONFIG_NVME_TARGET_FCLOOP is not set
-
-#
-# Misc devices
-#
-CONFIG_SENSORS_LIS3LV02D=m
-CONFIG_AD525X_DPOT=m
-CONFIG_AD525X_DPOT_I2C=m
-# CONFIG_AD525X_DPOT_SPI is not set
-# CONFIG_DUMMY_IRQ is not set
-# CONFIG_IBM_ASM is not set
-CONFIG_PHANTOM=m
-CONFIG_SGI_IOC4=m
-CONFIG_TIFM_CORE=m
-CONFIG_TIFM_7XX1=m
-CONFIG_ICS932S401=m
-CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_CS5535_MFGPT=m
-CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
-CONFIG_CS5535_CLOCK_EVENT_SRC=m
-CONFIG_HP_ILO=m
-CONFIG_APDS9802ALS=m
-CONFIG_ISL29003=m
-CONFIG_ISL29020=m
-CONFIG_SENSORS_TSL2550=m
-CONFIG_SENSORS_BH1770=m
-CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_DS1682=m
-# CONFIG_TI_DAC7512 is not set
-CONFIG_VMWARE_BALLOON=m
-CONFIG_PCH_PHUB=m
-CONFIG_USB_SWITCH_FSA9480=m
-# CONFIG_LATTICE_ECP3_CONFIG is not set
-# CONFIG_SRAM is not set
-# CONFIG_PANEL is not set
-CONFIG_C2PORT=m
-CONFIG_C2PORT_DURAMAR_2150=m
-
-#
-# EEPROM support
-#
-CONFIG_EEPROM_AT24=m
-# CONFIG_EEPROM_AT25 is not set
-CONFIG_EEPROM_LEGACY=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93CX6=m
-# CONFIG_EEPROM_93XX46 is not set
-CONFIG_CB710_CORE=m
-# CONFIG_CB710_DEBUG is not set
-CONFIG_CB710_DEBUG_ASSUMPTIONS=y
-
-#
-# Texas Instruments shared transport line discipline
-#
-CONFIG_TI_ST=m
-CONFIG_SENSORS_LIS3_I2C=m
-
-#
-# Altera FPGA firmware download module
-#
-CONFIG_ALTERA_STAPL=m
-CONFIG_INTEL_MEI=m
-CONFIG_INTEL_MEI_ME=m
-CONFIG_INTEL_MEI_TXE=m
-CONFIG_VMWARE_VMCI=m
-
-#
-# Intel MIC Bus Driver
-#
-
-#
-# SCIF Bus Driver
-#
-
-#
-# VOP Bus Driver
-#
-
-#
-# Intel MIC Host Driver
-#
-
-#
-# Intel MIC Card Driver
-#
-
-#
-# SCIF Driver
-#
-
-#
-# Intel MIC Coprocessor State Management (COSM) Drivers
-#
-
-#
-# VOP Driver
-#
-CONFIG_VHOST_RING=m
-CONFIG_ECHO=m
-# CONFIG_CXL_BASE is not set
-# CONFIG_CXL_AFU_DRIVER_OPS is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=m
-CONFIG_RAID_ATTRS=m
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-CONFIG_SCSI_NETLINK=y
-# CONFIG_SCSI_MQ_DEFAULT is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-CONFIG_BLK_DEV_SR_VENDOR=y
-CONFIG_CHR_DEV_SG=m
-CONFIG_CHR_DEV_SCH=m
-CONFIG_SCSI_ENCLOSURE=m
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_SCAN_ASYNC=y
-
-#
-# SCSI Transports
-#
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_ISCSI_ATTRS=m
-CONFIG_SCSI_SAS_ATTRS=m
-CONFIG_SCSI_SAS_LIBSAS=m
-CONFIG_SCSI_SAS_ATA=y
-CONFIG_SCSI_SAS_HOST_SMP=y
-CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_LOWLEVEL=y
-CONFIG_ISCSI_TCP=m
-CONFIG_ISCSI_BOOT_SYSFS=m
-CONFIG_SCSI_CXGB3_ISCSI=m
-CONFIG_SCSI_CXGB4_ISCSI=m
-CONFIG_SCSI_BNX2_ISCSI=m
-CONFIG_SCSI_BNX2X_FCOE=m
-CONFIG_BE2ISCSI=m
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_HPSA=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_3W_SAS=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AHA152X=m
-CONFIG_SCSI_AHA1542=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
-CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_AIC7XXX_DEBUG_MASK=0
-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_AIC79XX=m
-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
-CONFIG_AIC79XX_RESET_DELAY_MS=15000
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_AIC79XX_DEBUG_MASK=0
-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_AIC94XX=m
-# CONFIG_AIC94XX_DEBUG is not set
-CONFIG_SCSI_MVSAS=m
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-CONFIG_SCSI_MVSAS_TASKLET=y
-CONFIG_SCSI_MVUMI=m
-CONFIG_SCSI_DPT_I2O=m
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_ARCMSR=m
-CONFIG_SCSI_ESAS2R=m
-CONFIG_MEGARAID_NEWGEN=y
-CONFIG_MEGARAID_MM=m
-CONFIG_MEGARAID_MAILBOX=m
-CONFIG_MEGARAID_LEGACY=m
-CONFIG_MEGARAID_SAS=m
-CONFIG_SCSI_MPT3SAS=m
-CONFIG_SCSI_MPT2SAS_MAX_SGE=128
-CONFIG_SCSI_MPT3SAS_MAX_SGE=128
-CONFIG_SCSI_MPT2SAS=m
-CONFIG_SCSI_SMARTPQI=m
-CONFIG_SCSI_UFSHCD=m
-CONFIG_SCSI_UFSHCD_PCI=m
-# CONFIG_SCSI_UFS_DWC_TC_PCI is not set
-CONFIG_SCSI_UFSHCD_PLATFORM=m
-# CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set
-CONFIG_SCSI_HPTIOP=m
-CONFIG_SCSI_BUSLOGIC=m
-# CONFIG_SCSI_FLASHPOINT is not set
-CONFIG_VMWARE_PVSCSI=m
-CONFIG_HYPERV_STORAGE=m
-CONFIG_LIBFC=m
-CONFIG_LIBFCOE=m
-CONFIG_FCOE=m
-CONFIG_FCOE_FNIC=m
-CONFIG_SCSI_SNIC=m
-# CONFIG_SCSI_SNIC_DEBUG_FS is not set
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_EATA=m
-# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
-# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
-CONFIG_SCSI_EATA_MAX_TAGS=16
-CONFIG_SCSI_FUTURE_DOMAIN=m
-CONFIG_SCSI_GDTH=m
-CONFIG_SCSI_ISCI=m
-CONFIG_SCSI_GENERIC_NCR5380=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-CONFIG_SCSI_NCR53C406A=m
-CONFIG_SCSI_STEX=m
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-CONFIG_SCSI_QLOGIC_FAS=m
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA_FC=m
-CONFIG_TCM_QLA2XXX=m
-# CONFIG_TCM_QLA2XXX_DEBUG is not set
-CONFIG_SCSI_QLA_ISCSI=m
-CONFIG_QEDI=m
-CONFIG_SCSI_LPFC=m
-# CONFIG_SCSI_LPFC_DEBUG_FS is not set
-CONFIG_SCSI_SYM53C416=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_AM53C974=m
-CONFIG_SCSI_NSP32=m
-CONFIG_SCSI_WD719X=m
-# CONFIG_SCSI_DEBUG is not set
-CONFIG_SCSI_PMCRAID=m
-CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_BFA_FC=m
-CONFIG_SCSI_VIRTIO=m
-CONFIG_SCSI_CHELSIO_FCOE=m
-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_NINJA_SCSI=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-CONFIG_SCSI_DH=y
-CONFIG_SCSI_DH_RDAC=m
-CONFIG_SCSI_DH_HP_SW=m
-CONFIG_SCSI_DH_EMC=m
-CONFIG_SCSI_DH_ALUA=m
-CONFIG_SCSI_OSD_INITIATOR=m
-CONFIG_SCSI_OSD_ULD=m
-CONFIG_SCSI_OSD_DPRINT_SENSE=0
-# CONFIG_SCSI_OSD_DEBUG is not set
-CONFIG_ATA=m
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_ATA_ACPI=y
-CONFIG_SATA_ZPODD=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI=m
-CONFIG_SATA_AHCI_PLATFORM=m
-# CONFIG_AHCI_CEVA is not set
-# CONFIG_AHCI_QORIQ is not set
-CONFIG_SATA_INIC162X=m
-CONFIG_SATA_ACARD_AHCI=m
-CONFIG_SATA_SIL24=m
-CONFIG_ATA_SFF=y
-
-#
-# SFF controllers with custom DMA interface
-#
-CONFIG_PDC_ADMA=m
-CONFIG_SATA_QSTOR=m
-CONFIG_SATA_SX4=m
-CONFIG_ATA_BMDMA=y
-
-#
-# SATA SFF controllers with BMDMA
-#
-CONFIG_ATA_PIIX=m
-CONFIG_SATA_DWC=m
-# CONFIG_SATA_DWC_OLD_DMA is not set
-# CONFIG_SATA_DWC_DEBUG is not set
-CONFIG_SATA_MV=m
-CONFIG_SATA_NV=m
-CONFIG_SATA_PROMISE=m
-CONFIG_SATA_SIL=m
-CONFIG_SATA_SIS=m
-CONFIG_SATA_SVW=m
-CONFIG_SATA_ULI=m
-CONFIG_SATA_VIA=m
-CONFIG_SATA_VITESSE=m
-
-#
-# PATA SFF controllers with BMDMA
-#
-CONFIG_PATA_ALI=m
-CONFIG_PATA_AMD=m
-CONFIG_PATA_ARTOP=m
-CONFIG_PATA_ATIIXP=m
-CONFIG_PATA_ATP867X=m
-CONFIG_PATA_CMD64X=m
-CONFIG_PATA_CS5520=m
-CONFIG_PATA_CS5530=m
-CONFIG_PATA_CS5535=m
-CONFIG_PATA_CS5536=m
-CONFIG_PATA_CYPRESS=m
-CONFIG_PATA_EFAR=m
-CONFIG_PATA_HPT366=m
-CONFIG_PATA_HPT37X=m
-CONFIG_PATA_HPT3X2N=m
-CONFIG_PATA_HPT3X3=m
-# CONFIG_PATA_HPT3X3_DMA is not set
-CONFIG_PATA_IT8213=m
-CONFIG_PATA_IT821X=m
-CONFIG_PATA_JMICRON=m
-CONFIG_PATA_MARVELL=m
-CONFIG_PATA_NETCELL=m
-CONFIG_PATA_NINJA32=m
-CONFIG_PATA_NS87415=m
-CONFIG_PATA_OLDPIIX=m
-CONFIG_PATA_OPTIDMA=m
-CONFIG_PATA_PDC2027X=m
-CONFIG_PATA_PDC_OLD=m
-CONFIG_PATA_RADISYS=m
-CONFIG_PATA_RDC=m
-CONFIG_PATA_SC1200=m
-CONFIG_PATA_SCH=m
-CONFIG_PATA_SERVERWORKS=m
-CONFIG_PATA_SIL680=m
-CONFIG_PATA_SIS=m
-CONFIG_PATA_TOSHIBA=m
-CONFIG_PATA_TRIFLEX=m
-CONFIG_PATA_VIA=m
-CONFIG_PATA_WINBOND=m
-
-#
-# PIO-only SFF controllers
-#
-CONFIG_PATA_CMD640_PCI=m
-CONFIG_PATA_ISAPNP=m
-CONFIG_PATA_MPIIX=m
-CONFIG_PATA_NS87410=m
-CONFIG_PATA_OPTI=m
-CONFIG_PATA_PCMCIA=m
-CONFIG_PATA_QDI=m
-CONFIG_PATA_RZ1000=m
-CONFIG_PATA_WINBOND_VLB=m
-
-#
-# Generic fallback / legacy drivers
-#
-CONFIG_PATA_ACPI=m
-CONFIG_ATA_GENERIC=m
-CONFIG_PATA_LEGACY=m
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID456=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-# CONFIG_MD_CLUSTER is not set
-CONFIG_BCACHE=m
-# CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_CLOSURES_DEBUG is not set
-CONFIG_BLK_DEV_DM_BUILTIN=y
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_MQ_DEFAULT is not set
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
-# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set
-CONFIG_DM_BIO_PRISON=m
-CONFIG_DM_PERSISTENT_DATA=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_THIN_PROVISIONING=m
-CONFIG_DM_CACHE=m
-CONFIG_DM_CACHE_SMQ=m
-CONFIG_DM_CACHE_CLEANER=m
-CONFIG_DM_ERA=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_LOG_USERSPACE=m
-CONFIG_DM_RAID=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
-CONFIG_DM_DELAY=m
-CONFIG_DM_UEVENT=y
-CONFIG_DM_FLAKEY=m
-CONFIG_DM_VERITY=m
-CONFIG_DM_VERITY_FEC=y
-CONFIG_DM_SWITCH=m
-CONFIG_DM_LOG_WRITES=m
-CONFIG_TARGET_CORE=m
-CONFIG_TCM_IBLOCK=m
-CONFIG_TCM_FILEIO=m
-CONFIG_TCM_PSCSI=m
-CONFIG_TCM_USER2=m
-CONFIG_LOOPBACK_TARGET=m
-CONFIG_TCM_FC=m
-CONFIG_ISCSI_TARGET=m
-CONFIG_ISCSI_TARGET_CXGB4=m
-CONFIG_SBP_TARGET=m
-CONFIG_FUSION=y
-CONFIG_FUSION_SPI=m
-CONFIG_FUSION_FC=m
-CONFIG_FUSION_SAS=m
-CONFIG_FUSION_MAX_SGE=128
-CONFIG_FUSION_CTL=m
-# CONFIG_FUSION_LOGGING is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_FIREWIRE=m
-CONFIG_FIREWIRE_OHCI=m
-CONFIG_FIREWIRE_SBP2=m
-CONFIG_FIREWIRE_NET=m
-CONFIG_FIREWIRE_NOSY=m
-CONFIG_MACINTOSH_DRIVERS=y
-CONFIG_MAC_EMUMOUSEBTN=m
-CONFIG_NETDEVICES=y
-CONFIG_MII=m
-CONFIG_NET_CORE=y
-CONFIG_BONDING=m
-CONFIG_DUMMY=m
-CONFIG_EQUALIZER=m
-# CONFIG_NET_FC is not set
-CONFIG_IFB=m
-CONFIG_NET_TEAM=m
-CONFIG_NET_TEAM_MODE_BROADCAST=m
-CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
-CONFIG_NET_TEAM_MODE_RANDOM=m
-CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
-CONFIG_NET_TEAM_MODE_LOADBALANCE=m
-CONFIG_MACVLAN=m
-CONFIG_MACVTAP=m
-CONFIG_IPVLAN=m
-CONFIG_VXLAN=m
-CONFIG_GENEVE=m
-CONFIG_GTP=m
-CONFIG_MACSEC=m
-CONFIG_NETCONSOLE=m
-CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_NETPOLL=y
-CONFIG_NET_POLL_CONTROLLER=y
-CONFIG_TUN=m
-# CONFIG_TUN_VNET_CROSS_LE is not set
-CONFIG_VETH=m
-CONFIG_VIRTIO_NET=m
-CONFIG_NLMON=m
-CONFIG_NET_VRF=m
-CONFIG_SUNGEM_PHY=m
-# CONFIG_ARCNET is not set
-CONFIG_ATM_DRIVERS=y
-# CONFIG_ATM_DUMMY is not set
-CONFIG_ATM_TCP=m
-CONFIG_ATM_LANAI=m
-CONFIG_ATM_ENI=m
-# CONFIG_ATM_ENI_DEBUG is not set
-# CONFIG_ATM_ENI_TUNE_BURST is not set
-CONFIG_ATM_FIRESTREAM=m
-CONFIG_ATM_ZATM=m
-# CONFIG_ATM_ZATM_DEBUG is not set
-CONFIG_ATM_NICSTAR=m
-# CONFIG_ATM_NICSTAR_USE_SUNI is not set
-# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
-CONFIG_ATM_IDT77252=m
-# CONFIG_ATM_IDT77252_DEBUG is not set
-# CONFIG_ATM_IDT77252_RCV_ALL is not set
-CONFIG_ATM_IDT77252_USE_SUNI=y
-CONFIG_ATM_AMBASSADOR=m
-# CONFIG_ATM_AMBASSADOR_DEBUG is not set
-CONFIG_ATM_HORIZON=m
-# CONFIG_ATM_HORIZON_DEBUG is not set
-CONFIG_ATM_IA=m
-# CONFIG_ATM_IA_DEBUG is not set
-CONFIG_ATM_FORE200E=m
-# CONFIG_ATM_FORE200E_USE_TASKLET is not set
-CONFIG_ATM_FORE200E_TX_RETRY=16
-CONFIG_ATM_FORE200E_DEBUG=0
-CONFIG_ATM_HE=m
-# CONFIG_ATM_HE_USE_SUNI is not set
-CONFIG_ATM_SOLOS=m
-
-#
-# CAIF transport drivers
-#
-CONFIG_CAIF_TTY=m
-CONFIG_CAIF_SPI_SLAVE=m
-CONFIG_CAIF_SPI_SYNC=y
-CONFIG_CAIF_HSI=m
-CONFIG_CAIF_VIRTIO=m
-
-#
-# Distributed Switch Architecture drivers
-#
-CONFIG_NET_DSA_MV88E6060=m
-CONFIG_NET_DSA_BCM_SF2=m
-CONFIG_B53=m
-CONFIG_B53_SPI_DRIVER=m
-CONFIG_B53_MDIO_DRIVER=m
-CONFIG_B53_MMAP_DRIVER=m
-CONFIG_B53_SRAB_DRIVER=m
-CONFIG_NET_DSA_MV88E6XXX=m
-CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
-CONFIG_NET_DSA_QCA8K=m
-CONFIG_ETHERNET=y
-CONFIG_MDIO=m
-CONFIG_NET_VENDOR_3COM=y
-CONFIG_EL3=m
-CONFIG_3C515=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_3C589=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_NET_VENDOR_ADAPTEC=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_NET_VENDOR_AGERE=y
-CONFIG_ET131X=m
-CONFIG_NET_VENDOR_ALACRITECH=y
-CONFIG_SLICOSS=m
-CONFIG_NET_VENDOR_ALTEON=y
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_ALTERA_TSE=m
-CONFIG_NET_VENDOR_AMAZON=y
-CONFIG_ENA_ETHERNET=m
-CONFIG_NET_VENDOR_AMD=y
-CONFIG_AMD8111_ETH=m
-CONFIG_LANCE=m
-CONFIG_PCNET32=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_NI65=m
-CONFIG_AMD_XGBE=m
-CONFIG_AMD_XGBE_HAVE_ECC=y
-CONFIG_NET_VENDOR_ARC=y
-CONFIG_NET_VENDOR_ATHEROS=y
-CONFIG_ATL2=m
-CONFIG_ATL1=m
-CONFIG_ATL1E=m
-CONFIG_ATL1C=m
-CONFIG_ALX=m
-CONFIG_NET_VENDOR_AURORA=y
-CONFIG_AURORA_NB8800=m
-CONFIG_NET_CADENCE=y
-CONFIG_MACB=m
-CONFIG_MACB_PCI=m
-CONFIG_NET_VENDOR_BROADCOM=y
-CONFIG_B44=m
-CONFIG_B44_PCI_AUTOSELECT=y
-CONFIG_B44_PCICORE_AUTOSELECT=y
-CONFIG_B44_PCI=y
-CONFIG_BCMGENET=m
-CONFIG_BNX2=m
-CONFIG_CNIC=m
-CONFIG_TIGON3=m
-CONFIG_BNX2X=m
-CONFIG_BNX2X_SRIOV=y
-CONFIG_SYSTEMPORT=m
-CONFIG_BNXT=m
-CONFIG_BNXT_SRIOV=y
-CONFIG_NET_VENDOR_BROCADE=y
-CONFIG_BNA=m
-# CONFIG_NET_VENDOR_CAVIUM is not set
-CONFIG_NET_VENDOR_CHELSIO=y
-CONFIG_CHELSIO_T1=m
-CONFIG_CHELSIO_T1_1G=y
-CONFIG_CHELSIO_T3=m
-CONFIG_CHELSIO_T4=m
-CONFIG_CHELSIO_T4VF=m
-CONFIG_CHELSIO_LIB=m
-CONFIG_NET_VENDOR_CIRRUS=y
-CONFIG_CS89x0=m
-# CONFIG_CS89x0_PLATFORM is not set
-CONFIG_NET_VENDOR_CISCO=y
-CONFIG_ENIC=m
-CONFIG_CX_ECAT=m
-CONFIG_DNET=m
-CONFIG_NET_VENDOR_DEC=y
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_DE2104X_DSL=0
-CONFIG_TULIP=m
-# CONFIG_TULIP_MWI is not set
-# CONFIG_TULIP_MMIO is not set
-# CONFIG_TULIP_NAPI is not set
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_NET_VENDOR_DLINK=y
-CONFIG_DL2K=m
-CONFIG_SUNDANCE=m
-# CONFIG_SUNDANCE_MMIO is not set
-CONFIG_NET_VENDOR_EMULEX=y
-CONFIG_BE2NET=m
-CONFIG_BE2NET_HWMON=y
-# CONFIG_NET_VENDOR_EZCHIP is not set
-CONFIG_NET_VENDOR_EXAR=y
-CONFIG_S2IO=m
-CONFIG_VXGE=m
-# CONFIG_VXGE_DEBUG_TRACE_ALL is not set
-CONFIG_NET_VENDOR_FUJITSU=y
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_NET_VENDOR_HP=y
-CONFIG_HP100=m
-CONFIG_NET_VENDOR_INTEL=y
-CONFIG_E100=m
-CONFIG_E1000=m
-CONFIG_E1000E=m
-CONFIG_E1000E_HWTS=y
-CONFIG_IGB=m
-CONFIG_IGB_HWMON=y
-CONFIG_IGBVF=m
-CONFIG_IXGB=m
-CONFIG_IXGBE=m
-CONFIG_IXGBE_HWMON=y
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
-CONFIG_I40EVF=m
-CONFIG_FM10K=m
-CONFIG_NET_VENDOR_I825XX=y
-CONFIG_JME=m
-CONFIG_NET_VENDOR_MARVELL=y
-CONFIG_MVMDIO=m
-# CONFIG_MVNETA_BM is not set
-CONFIG_SKGE=m
-# CONFIG_SKGE_DEBUG is not set
-CONFIG_SKGE_GENESIS=y
-CONFIG_SKY2=m
-# CONFIG_SKY2_DEBUG is not set
-CONFIG_NET_VENDOR_MELLANOX=y
-CONFIG_MLX4_EN=m
-CONFIG_MLX4_CORE=m
-CONFIG_MLX4_DEBUG=y
-CONFIG_MLX5_CORE=m
-CONFIG_MLX5_CORE_EN=y
-CONFIG_MLXSW_CORE=m
-CONFIG_MLXSW_CORE_HWMON=y
-CONFIG_MLXSW_CORE_THERMAL=y
-CONFIG_MLXSW_PCI=m
-CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
-CONFIG_MLXSW_SPECTRUM=m
-CONFIG_MLXSW_MINIMAL=m
-CONFIG_NET_VENDOR_MICREL=y
-CONFIG_KS8842=m
-CONFIG_KS8851=m
-CONFIG_KS8851_MLL=m
-CONFIG_KSZ884X_PCI=m
-CONFIG_NET_VENDOR_MICROCHIP=y
-CONFIG_ENC28J60=m
-# CONFIG_ENC28J60_WRITEVERIFY is not set
-CONFIG_ENCX24J600=m
-CONFIG_NET_VENDOR_MYRI=y
-CONFIG_MYRI10GE=m
-CONFIG_FEALNX=m
-CONFIG_NET_VENDOR_NATSEMI=y
-CONFIG_NATSEMI=m
-CONFIG_NS83820=m
-CONFIG_NET_VENDOR_NETRONOME=y
-CONFIG_NFP_NETVF=m
-# CONFIG_NFP_NET_DEBUG is not set
-CONFIG_NET_VENDOR_8390=y
-CONFIG_PCMCIA_AXNET=m
-CONFIG_NE2000=m
-CONFIG_NE2K_PCI=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_ULTRA=m
-CONFIG_WD80x3=m
-CONFIG_NET_VENDOR_NVIDIA=y
-CONFIG_FORCEDETH=m
-CONFIG_NET_VENDOR_OKI=y
-CONFIG_PCH_GBE=m
-CONFIG_ETHOC=m
-CONFIG_NET_PACKET_ENGINE=y
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_NET_VENDOR_QLOGIC=y
-CONFIG_QLA3XXX=m
-CONFIG_QLCNIC=m
-CONFIG_QLCNIC_SRIOV=y
-CONFIG_QLCNIC_HWMON=y
-CONFIG_QLGE=m
-CONFIG_NETXEN_NIC=m
-CONFIG_QED=m
-CONFIG_QED_LL2=y
-CONFIG_QED_SRIOV=y
-CONFIG_QEDE=m
-CONFIG_QED_ISCSI=y
-CONFIG_NET_VENDOR_QUALCOMM=y
-CONFIG_QCA7000=m
-CONFIG_QCOM_EMAC=m
-CONFIG_NET_VENDOR_REALTEK=y
-CONFIG_ATP=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-# CONFIG_8139TOO_PIO is not set
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_R8169=m
-# CONFIG_NET_VENDOR_RENESAS is not set
-CONFIG_NET_VENDOR_RDC=y
-CONFIG_R6040=m
-CONFIG_NET_VENDOR_ROCKER=y
-CONFIG_ROCKER=m
-CONFIG_NET_VENDOR_SAMSUNG=y
-CONFIG_SXGBE_ETH=m
-CONFIG_NET_VENDOR_SEEQ=y
-CONFIG_NET_VENDOR_SILAN=y
-CONFIG_SC92031=m
-CONFIG_NET_VENDOR_SIS=y
-CONFIG_SIS900=m
-CONFIG_SIS190=m
-CONFIG_NET_VENDOR_SOLARFLARE=y
-CONFIG_SFC=m
-CONFIG_SFC_MTD=y
-CONFIG_SFC_MCDI_MON=y
-CONFIG_SFC_SRIOV=y
-CONFIG_SFC_MCDI_LOGGING=y
-CONFIG_SFC_FALCON=m
-CONFIG_SFC_FALCON_MTD=y
-CONFIG_NET_VENDOR_SMSC=y
-CONFIG_SMC9194=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_EPIC100=m
-CONFIG_SMSC911X=m
-# CONFIG_SMSC911X_ARCH_HOOKS is not set
-CONFIG_SMSC9420=m
-CONFIG_NET_VENDOR_STMICRO=y
-CONFIG_STMMAC_ETH=m
-# CONFIG_STMMAC_PLATFORM is not set
-CONFIG_STMMAC_PCI=m
-CONFIG_NET_VENDOR_SUN=y
-CONFIG_HAPPYMEAL=m
-CONFIG_SUNGEM=m
-CONFIG_CASSINI=m
-CONFIG_NIU=m
-CONFIG_NET_VENDOR_SYNOPSYS=y
-CONFIG_SYNOPSYS_DWC_ETH_QOS=m
-CONFIG_NET_VENDOR_TEHUTI=y
-CONFIG_TEHUTI=m
-CONFIG_NET_VENDOR_TI=y
-CONFIG_TI_CPSW_ALE=m
-CONFIG_TLAN=m
-CONFIG_NET_VENDOR_VIA=y
-CONFIG_VIA_RHINE=m
-# CONFIG_VIA_RHINE_MMIO is not set
-CONFIG_VIA_VELOCITY=m
-CONFIG_NET_VENDOR_WIZNET=y
-CONFIG_WIZNET_W5100=m
-CONFIG_WIZNET_W5300=m
-# CONFIG_WIZNET_BUS_DIRECT is not set
-# CONFIG_WIZNET_BUS_INDIRECT is not set
-CONFIG_WIZNET_BUS_ANY=y
-CONFIG_WIZNET_W5100_SPI=m
-CONFIG_NET_VENDOR_XIRCOM=y
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_NET_SB1000=m
-CONFIG_PHYLIB=m
-CONFIG_SWPHY=y
-CONFIG_LED_TRIGGER_PHY=y
-
-#
-# MDIO bus device drivers
-#
-CONFIG_MDIO_BCM_UNIMAC=m
-CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_BUS_MUX=m
-CONFIG_MDIO_BUS_MUX_GPIO=m
-CONFIG_MDIO_BUS_MUX_MMIOREG=m
-# CONFIG_MDIO_GPIO is not set
-# CONFIG_MDIO_HISI_FEMAC is not set
-
-#
-# MII PHY device drivers
-#
-CONFIG_AMD_PHY=m
-CONFIG_AQUANTIA_PHY=m
-CONFIG_AT803X_PHY=m
-CONFIG_BCM7XXX_PHY=m
-CONFIG_BCM87XX_PHY=m
-CONFIG_BCM_NET_PHYLIB=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_DP83848_PHY=m
-CONFIG_DP83867_PHY=m
-CONFIG_FIXED_PHY=m
-CONFIG_ICPLUS_PHY=m
-CONFIG_INTEL_XWAY_PHY=m
-CONFIG_LSI_ET1011C_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_MARVELL_PHY=m
-CONFIG_MICREL_PHY=m
-CONFIG_MICROCHIP_PHY=m
-CONFIG_MICROSEMI_PHY=m
-CONFIG_NATIONAL_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_REALTEK_PHY=m
-CONFIG_SMSC_PHY=m
-CONFIG_STE10XP=m
-CONFIG_TERANETICS_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_XILINX_GMII2RGMII=m
-# CONFIG_MICREL_KS8995MA is not set
-CONFIG_PLIP=m
-CONFIG_PPP=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_MPPE=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPPOATM=m
-CONFIG_PPPOE=m
-CONFIG_PPTP=m
-CONFIG_PPPOL2TP=m
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_SLIP=m
-CONFIG_SLHC=m
-# CONFIG_SLIP_COMPRESSED is not set
-# CONFIG_SLIP_SMART is not set
-# CONFIG_SLIP_MODE_SLIP6 is not set
-
-#
-# Host-side USB support is needed for USB Network Adapter support
-#
-CONFIG_USB_NET_DRIVERS=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
-CONFIG_USB_LAN78XX=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_AX88179_178A=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_CDC_NCM=m
-CONFIG_USB_NET_HUAWEI_CDC_NCM=m
-CONFIG_USB_NET_CDC_MBIM=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SR9700=m
-CONFIG_USB_NET_SR9800=m
-CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET_ENABLE=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_NET_KALMIA=m
-CONFIG_USB_NET_QMI_WWAN=m
-CONFIG_USB_HSO=m
-CONFIG_USB_NET_INT51X1=m
-CONFIG_USB_CDC_PHONET=m
-CONFIG_USB_IPHETH=m
-CONFIG_USB_SIERRA_NET=m
-CONFIG_USB_VL600=m
-CONFIG_USB_NET_CH9200=m
-CONFIG_WLAN=y
-CONFIG_WLAN_VENDOR_ADMTEK=y
-CONFIG_ADM8211=m
-CONFIG_ATH_COMMON=m
-CONFIG_WLAN_VENDOR_ATH=y
-# CONFIG_ATH_DEBUG is not set
-CONFIG_ATH5K=m
-# CONFIG_ATH5K_DEBUG is not set
-# CONFIG_ATH5K_TRACER is not set
-CONFIG_ATH5K_PCI=y
-CONFIG_ATH9K_HW=m
-CONFIG_ATH9K_COMMON=m
-CONFIG_ATH9K_BTCOEX_SUPPORT=y
-CONFIG_ATH9K=m
-CONFIG_ATH9K_PCI=y
-CONFIG_ATH9K_AHB=y
-CONFIG_ATH9K_DEBUGFS=y
-CONFIG_ATH9K_STATION_STATISTICS=y
-# CONFIG_ATH9K_DYNACK is not set
-CONFIG_ATH9K_WOW=y
-CONFIG_ATH9K_RFKILL=y
-# CONFIG_ATH9K_CHANNEL_CONTEXT is not set
-CONFIG_ATH9K_PCOEM=y
-CONFIG_ATH9K_HTC=m
-# CONFIG_ATH9K_HTC_DEBUGFS is not set
-# CONFIG_ATH9K_HWRNG is not set
-CONFIG_CARL9170=m
-CONFIG_CARL9170_LEDS=y
-# CONFIG_CARL9170_DEBUGFS is not set
-CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
-CONFIG_ATH6KL=m
-CONFIG_ATH6KL_SDIO=m
-CONFIG_ATH6KL_USB=m
-# CONFIG_ATH6KL_DEBUG is not set
-# CONFIG_ATH6KL_TRACING is not set
-CONFIG_AR5523=m
-CONFIG_WIL6210=m
-CONFIG_WIL6210_ISR_COR=y
-# CONFIG_WIL6210_TRACING is not set
-CONFIG_ATH10K=m
-CONFIG_ATH10K_PCI=m
-CONFIG_ATH10K_AHB=y
-# CONFIG_ATH10K_DEBUG is not set
-CONFIG_ATH10K_DEBUGFS=y
-# CONFIG_ATH10K_TRACING is not set
-CONFIG_WCN36XX=m
-# CONFIG_WCN36XX_DEBUGFS is not set
-CONFIG_WLAN_VENDOR_ATMEL=y
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_AT76C50X_USB=m
-CONFIG_WLAN_VENDOR_BROADCOM=y
-CONFIG_B43=m
-CONFIG_B43_BCMA=y
-CONFIG_B43_SSB=y
-CONFIG_B43_BUSES_BCMA_AND_SSB=y
-# CONFIG_B43_BUSES_BCMA is not set
-# CONFIG_B43_BUSES_SSB is not set
-CONFIG_B43_PCI_AUTOSELECT=y
-CONFIG_B43_PCICORE_AUTOSELECT=y
-CONFIG_B43_SDIO=y
-CONFIG_B43_BCMA_PIO=y
-CONFIG_B43_PIO=y
-CONFIG_B43_PHY_G=y
-CONFIG_B43_PHY_N=y
-CONFIG_B43_PHY_LP=y
-CONFIG_B43_PHY_HT=y
-CONFIG_B43_LEDS=y
-CONFIG_B43_HWRNG=y
-# CONFIG_B43_DEBUG is not set
-CONFIG_B43LEGACY=m
-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
-CONFIG_B43LEGACY_LEDS=y
-CONFIG_B43LEGACY_HWRNG=y
-# CONFIG_B43LEGACY_DEBUG is not set
-CONFIG_B43LEGACY_DMA=y
-CONFIG_B43LEGACY_PIO=y
-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
-# CONFIG_B43LEGACY_DMA_MODE is not set
-# CONFIG_B43LEGACY_PIO_MODE is not set
-CONFIG_BRCMUTIL=m
-CONFIG_BRCMSMAC=m
-CONFIG_BRCMFMAC=m
-CONFIG_BRCMFMAC_PROTO_BCDC=y
-CONFIG_BRCMFMAC_PROTO_MSGBUF=y
-CONFIG_BRCMFMAC_SDIO=y
-CONFIG_BRCMFMAC_USB=y
-CONFIG_BRCMFMAC_PCIE=y
-# CONFIG_BRCM_TRACING is not set
-# CONFIG_BRCMDBG is not set
-CONFIG_WLAN_VENDOR_CISCO=y
-CONFIG_AIRO=m
-CONFIG_AIRO_CS=m
-CONFIG_WLAN_VENDOR_INTEL=y
-CONFIG_IPW2100=m
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2100_DEBUG is not set
-CONFIG_IPW2200=m
-CONFIG_IPW2200_MONITOR=y
-CONFIG_IPW2200_RADIOTAP=y
-CONFIG_IPW2200_PROMISCUOUS=y
-CONFIG_IPW2200_QOS=y
-# CONFIG_IPW2200_DEBUG is not set
-CONFIG_LIBIPW=m
-# CONFIG_LIBIPW_DEBUG is not set
-CONFIG_IWLEGACY=m
-CONFIG_IWL4965=m
-CONFIG_IWL3945=m
-
-#
-# iwl3945 / iwl4965 Debugging Options
-#
-# CONFIG_IWLEGACY_DEBUG is not set
-# CONFIG_IWLEGACY_DEBUGFS is not set
-CONFIG_IWLWIFI=m
-CONFIG_IWLWIFI_LEDS=y
-CONFIG_IWLDVM=m
-CONFIG_IWLMVM=m
-CONFIG_IWLWIFI_OPMODE_MODULAR=y
-# CONFIG_IWLWIFI_BCAST_FILTERING is not set
-# CONFIG_IWLWIFI_PCIE_RTPM is not set
-
-#
-# Debugging Options
-#
-# CONFIG_IWLWIFI_DEBUG is not set
-# CONFIG_IWLWIFI_DEBUGFS is not set
-CONFIG_IWLWIFI_DEVICE_TRACING=y
-CONFIG_WLAN_VENDOR_INTERSIL=y
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_PLX=m
-CONFIG_HOSTAP_PCI=m
-CONFIG_HOSTAP_CS=m
-CONFIG_HERMES=m
-CONFIG_HERMES_PRISM=y
-CONFIG_HERMES_CACHE_FW_ON_INIT=y
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_NORTEL_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_ORINOCO_USB=m
-CONFIG_P54_COMMON=m
-CONFIG_P54_USB=m
-CONFIG_P54_PCI=m
-CONFIG_P54_SPI=m
-# CONFIG_P54_SPI_DEFAULT_EEPROM is not set
-CONFIG_P54_LEDS=y
-CONFIG_PRISM54=m
-CONFIG_WLAN_VENDOR_MARVELL=y
-CONFIG_LIBERTAS=m
-CONFIG_LIBERTAS_USB=m
-CONFIG_LIBERTAS_CS=m
-CONFIG_LIBERTAS_SDIO=m
-CONFIG_LIBERTAS_SPI=m
-# CONFIG_LIBERTAS_DEBUG is not set
-CONFIG_LIBERTAS_MESH=y
-CONFIG_LIBERTAS_THINFIRM=m
-# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
-CONFIG_LIBERTAS_THINFIRM_USB=m
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_MWIFIEX_PCIE=m
-CONFIG_MWIFIEX_USB=m
-CONFIG_MWL8K=m
-CONFIG_WLAN_VENDOR_MEDIATEK=y
-CONFIG_MT7601U=m
-CONFIG_WLAN_VENDOR_RALINK=y
-CONFIG_RT2X00=m
-CONFIG_RT2400PCI=m
-CONFIG_RT2500PCI=m
-CONFIG_RT61PCI=m
-CONFIG_RT2800PCI=m
-CONFIG_RT2800PCI_RT33XX=y
-CONFIG_RT2800PCI_RT35XX=y
-CONFIG_RT2800PCI_RT53XX=y
-CONFIG_RT2800PCI_RT3290=y
-CONFIG_RT2500USB=m
-CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-CONFIG_RT2800USB_RT33XX=y
-CONFIG_RT2800USB_RT35XX=y
-CONFIG_RT2800USB_RT3573=y
-CONFIG_RT2800USB_RT53XX=y
-CONFIG_RT2800USB_RT55XX=y
-CONFIG_RT2800USB_UNKNOWN=y
-CONFIG_RT2800_LIB=m
-CONFIG_RT2800_LIB_MMIO=m
-CONFIG_RT2X00_LIB_MMIO=m
-CONFIG_RT2X00_LIB_PCI=m
-CONFIG_RT2X00_LIB_USB=m
-CONFIG_RT2X00_LIB=m
-CONFIG_RT2X00_LIB_FIRMWARE=y
-CONFIG_RT2X00_LIB_CRYPTO=y
-CONFIG_RT2X00_LIB_LEDS=y
-# CONFIG_RT2X00_LIB_DEBUGFS is not set
-# CONFIG_RT2X00_DEBUG is not set
-CONFIG_WLAN_VENDOR_REALTEK=y
-CONFIG_RTL8180=m
-CONFIG_RTL8187=m
-CONFIG_RTL8187_LEDS=y
-CONFIG_RTL_CARDS=m
-CONFIG_RTL8192CE=m
-CONFIG_RTL8192SE=m
-CONFIG_RTL8192DE=m
-CONFIG_RTL8723AE=m
-CONFIG_RTL8723BE=m
-CONFIG_RTL8188EE=m
-CONFIG_RTL8192EE=m
-CONFIG_RTL8821AE=m
-CONFIG_RTL8192CU=m
-CONFIG_RTLWIFI=m
-CONFIG_RTLWIFI_PCI=m
-CONFIG_RTLWIFI_USB=m
-# CONFIG_RTLWIFI_DEBUG is not set
-CONFIG_RTL8192C_COMMON=m
-CONFIG_RTL8723_COMMON=m
-CONFIG_RTLBTCOEXIST=m
-CONFIG_RTL8XXXU=m
-CONFIG_RTL8XXXU_UNTESTED=y
-CONFIG_WLAN_VENDOR_RSI=y
-CONFIG_RSI_91X=m
-# CONFIG_RSI_DEBUGFS is not set
-CONFIG_RSI_SDIO=m
-CONFIG_RSI_USB=m
-CONFIG_WLAN_VENDOR_ST=y
-CONFIG_CW1200=m
-CONFIG_CW1200_WLAN_SDIO=m
-CONFIG_CW1200_WLAN_SPI=m
-CONFIG_WLAN_VENDOR_TI=y
-CONFIG_WL1251=m
-# CONFIG_WL1251_SPI is not set
-CONFIG_WL1251_SDIO=m
-CONFIG_WL12XX=m
-CONFIG_WL18XX=m
-CONFIG_WLCORE=m
-# CONFIG_WLCORE_SPI is not set
-CONFIG_WLCORE_SDIO=m
-CONFIG_WILINK_PLATFORM_DATA=y
-CONFIG_WLAN_VENDOR_ZYDAS=y
-CONFIG_USB_ZD1201=m
-CONFIG_ZD1211RW=m
-# CONFIG_ZD1211RW_DEBUG is not set
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_WL3501=m
-# CONFIG_MAC80211_HWSIM is not set
-CONFIG_USB_NET_RNDIS_WLAN=m
-
-#
-# WiMAX Wireless Broadband devices
-#
-CONFIG_WIMAX_I2400M=m
-CONFIG_WIMAX_I2400M_USB=m
-CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
-# CONFIG_WAN is not set
-CONFIG_IEEE802154_DRIVERS=m
-CONFIG_IEEE802154_FAKELB=m
-CONFIG_IEEE802154_AT86RF230=m
-# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
-# CONFIG_IEEE802154_MRF24J40 is not set
-# CONFIG_IEEE802154_CC2520 is not set
-CONFIG_IEEE802154_ATUSB=m
-# CONFIG_IEEE802154_ADF7242 is not set
-CONFIG_VMXNET3=m
-CONFIG_FUJITSU_ES=m
-CONFIG_HYPERV_NET=m
-CONFIG_ISDN=y
-CONFIG_ISDN_I4L=m
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_IPPP_FILTER=y
-CONFIG_ISDN_PPP_BSDCOMP=m
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-
-#
-# ISDN feature submodules
-#
-CONFIG_ISDN_DIVERSION=m
-
-#
-# ISDN4Linux hardware drivers
-#
-
-#
-# Passive cards
-#
-CONFIG_ISDN_DRV_HISAX=m
-
-#
-# D-channel protocol features
-#
-CONFIG_HISAX_EURO=y
-CONFIG_DE_AOC=y
-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
-# CONFIG_HISAX_NO_LLC is not set
-# CONFIG_HISAX_NO_KEYPAD is not set
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_MAX_CARDS=8
-
-#
-# HiSax supported cards
-#
-CONFIG_HISAX_16_0=y
-CONFIG_HISAX_16_3=y
-CONFIG_HISAX_TELESPCI=y
-CONFIG_HISAX_S0BOX=y
-CONFIG_HISAX_AVM_A1=y
-CONFIG_HISAX_FRITZPCI=y
-CONFIG_HISAX_AVM_A1_PCMCIA=y
-CONFIG_HISAX_ELSA=y
-CONFIG_HISAX_IX1MICROR2=y
-CONFIG_HISAX_DIEHLDIVA=y
-CONFIG_HISAX_ASUSCOM=y
-CONFIG_HISAX_TELEINT=y
-CONFIG_HISAX_HFCS=y
-CONFIG_HISAX_SEDLBAUER=y
-CONFIG_HISAX_SPORTSTER=y
-CONFIG_HISAX_MIC=y
-CONFIG_HISAX_NETJET=y
-CONFIG_HISAX_NETJET_U=y
-CONFIG_HISAX_NICCY=y
-CONFIG_HISAX_ISURF=y
-CONFIG_HISAX_HSTSAPHIR=y
-CONFIG_HISAX_BKM_A4T=y
-CONFIG_HISAX_SCT_QUADRO=y
-CONFIG_HISAX_GAZEL=y
-CONFIG_HISAX_HFC_PCI=y
-CONFIG_HISAX_W6692=y
-CONFIG_HISAX_HFC_SX=y
-CONFIG_HISAX_ENTERNOW_PCI=y
-# CONFIG_HISAX_DEBUG is not set
-
-#
-# HiSax PCMCIA card service modules
-#
-CONFIG_HISAX_SEDLBAUER_CS=m
-CONFIG_HISAX_ELSA_CS=m
-CONFIG_HISAX_AVM_A1_CS=m
-CONFIG_HISAX_TELES_CS=m
-
-#
-# HiSax sub driver modules
-#
-CONFIG_HISAX_ST5481=m
-CONFIG_HISAX_HFCUSB=m
-CONFIG_HISAX_HFC4S8S=m
-CONFIG_HISAX_FRITZ_PCIPNP=m
-CONFIG_ISDN_CAPI=m
-CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
-CONFIG_ISDN_CAPI_CAPIDRV=m
-# CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE is not set
-
-#
-# CAPI hardware drivers
-#
-CONFIG_CAPI_AVM=y
-CONFIG_ISDN_DRV_AVMB1_B1ISA=m
-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
-CONFIG_ISDN_DRV_AVMB1_T1ISA=m
-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
-CONFIG_ISDN_DRV_AVMB1_C4=m
-CONFIG_CAPI_EICON=y
-CONFIG_ISDN_DIVAS=m
-CONFIG_ISDN_DIVAS_BRIPCI=y
-CONFIG_ISDN_DIVAS_PRIPCI=y
-CONFIG_ISDN_DIVAS_DIVACAPI=m
-CONFIG_ISDN_DIVAS_USERIDI=m
-CONFIG_ISDN_DIVAS_MAINT=m
-CONFIG_ISDN_DRV_GIGASET=m
-CONFIG_GIGASET_CAPI=y
-# CONFIG_GIGASET_I4L is not set
-# CONFIG_GIGASET_DUMMYLL is not set
-CONFIG_GIGASET_BASE=m
-CONFIG_GIGASET_M105=m
-CONFIG_GIGASET_M101=m
-# CONFIG_GIGASET_DEBUG is not set
-CONFIG_HYSDN=m
-CONFIG_HYSDN_CAPI=y
-CONFIG_MISDN=m
-CONFIG_MISDN_DSP=m
-CONFIG_MISDN_L1OIP=m
-
-#
-# mISDN hardware drivers
-#
-CONFIG_MISDN_HFCPCI=m
-CONFIG_MISDN_HFCMULTI=m
-CONFIG_MISDN_HFCUSB=m
-CONFIG_MISDN_AVMFRITZ=m
-CONFIG_MISDN_SPEEDFAX=m
-CONFIG_MISDN_INFINEON=m
-CONFIG_MISDN_W6692=m
-CONFIG_MISDN_NETJET=m
-CONFIG_MISDN_IPAC=m
-CONFIG_MISDN_ISAR=m
-CONFIG_ISDN_HDLC=m
-# CONFIG_NVM is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-CONFIG_INPUT_LEDS=m
-CONFIG_INPUT_FF_MEMLESS=m
-CONFIG_INPUT_POLLDEV=m
-CONFIG_INPUT_SPARSEKMAP=m
-CONFIG_INPUT_MATRIXKMAP=m
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ADC is not set
-CONFIG_KEYBOARD_ADP5588=m
-CONFIG_KEYBOARD_ADP5589=m
-CONFIG_KEYBOARD_ATKBD=m
-CONFIG_KEYBOARD_QT1070=m
-CONFIG_KEYBOARD_QT2160=m
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=m
-# CONFIG_KEYBOARD_GPIO_POLLED is not set
-CONFIG_KEYBOARD_TCA6416=m
-CONFIG_KEYBOARD_TCA8418=m
-CONFIG_KEYBOARD_MATRIX=m
-# CONFIG_KEYBOARD_LM8323 is not set
-CONFIG_KEYBOARD_LM8333=m
-# CONFIG_KEYBOARD_MAX7359 is not set
-CONFIG_KEYBOARD_MCS=m
-CONFIG_KEYBOARD_MPR121=m
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_SAMSUNG is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_OMAP4 is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_CROS_EC is not set
-# CONFIG_KEYBOARD_CAP11XX is not set
-# CONFIG_KEYBOARD_BCM is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_PS2_ALPS=y
-CONFIG_MOUSE_PS2_BYD=y
-CONFIG_MOUSE_PS2_LOGIPS2PP=y
-CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_CYPRESS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
-CONFIG_MOUSE_PS2_TRACKPOINT=y
-CONFIG_MOUSE_PS2_ELANTECH=y
-CONFIG_MOUSE_PS2_SENTELIC=y
-CONFIG_MOUSE_PS2_TOUCHKIT=y
-CONFIG_MOUSE_PS2_OLPC=y
-CONFIG_MOUSE_PS2_FOCALTECH=y
-CONFIG_MOUSE_PS2_VMMOUSE=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_APPLETOUCH=m
-CONFIG_MOUSE_BCM5974=m
-CONFIG_MOUSE_CYAPA=m
-CONFIG_MOUSE_ELAN_I2C=m
-CONFIG_MOUSE_ELAN_I2C_I2C=y
-CONFIG_MOUSE_ELAN_I2C_SMBUS=y
-CONFIG_MOUSE_INPORT=m
-# CONFIG_MOUSE_ATIXL is not set
-CONFIG_MOUSE_LOGIBM=m
-CONFIG_MOUSE_PC110PAD=m
-CONFIG_MOUSE_VSXXXAA=m
-# CONFIG_MOUSE_GPIO is not set
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=y
-CONFIG_JOYSTICK_IFORCE_232=y
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDJOY=m
-CONFIG_JOYSTICK_ZHENHUA=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-CONFIG_JOYSTICK_AS5011=m
-CONFIG_JOYSTICK_JOYDUMP=m
-CONFIG_JOYSTICK_XPAD=m
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_JOYSTICK_WALKERA0701=m
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=m
-CONFIG_TABLET_USB_AIPTEK=m
-CONFIG_TABLET_USB_GTCO=m
-CONFIG_TABLET_USB_HANWANG=m
-CONFIG_TABLET_USB_KBTAB=m
-CONFIG_TABLET_USB_PEGASUS=m
-CONFIG_TABLET_SERIAL_WACOM4=m
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_PROPERTIES=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-CONFIG_TOUCHSCREEN_AD7879=m
-CONFIG_TOUCHSCREEN_AD7879_I2C=m
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-# CONFIG_TOUCHSCREEN_CYTTSP_SPI is not set
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_EGALAX=m
-CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_GOODIX=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_EKTF2127=m
-CONFIG_TOUCHSCREEN_ELAN=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_IMX6UL_TSC=m
-CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_HTCPEN=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
-CONFIG_TOUCHSCREEN_UCB1400=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
-CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
-CONFIG_TOUCHSCREEN_WM97XX=m
-CONFIG_TOUCHSCREEN_WM9705=y
-CONFIG_TOUCHSCREEN_WM9712=y
-CONFIG_TOUCHSCREEN_WM9713=y
-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_MC13783=m
-CONFIG_TOUCHSCREEN_USB_EGALAX=y
-CONFIG_TOUCHSCREEN_USB_PANJIT=y
-CONFIG_TOUCHSCREEN_USB_3M=y
-CONFIG_TOUCHSCREEN_USB_ITM=y
-CONFIG_TOUCHSCREEN_USB_ETURBO=y
-CONFIG_TOUCHSCREEN_USB_GUNZE=y
-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
-CONFIG_TOUCHSCREEN_USB_GOTOP=y
-CONFIG_TOUCHSCREEN_USB_JASTEC=y
-CONFIG_TOUCHSCREEN_USB_ELO=y
-CONFIG_TOUCHSCREEN_USB_E2I=y
-CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
-CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
-CONFIG_TOUCHSCREEN_USB_NEXIO=y
-CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC200X_CORE=m
-CONFIG_TOUCHSCREEN_TSC2004=m
-# CONFIG_TOUCHSCREEN_TSC2005 is not set
-CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_RM_TS=m
-CONFIG_TOUCHSCREEN_SILEAD=m
-CONFIG_TOUCHSCREEN_SIS_I2C=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
-# CONFIG_TOUCHSCREEN_SX8654 is not set
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
-CONFIG_TOUCHSCREEN_ROHM_BU21023=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_AD714X_I2C=m
-CONFIG_INPUT_AD714X_SPI=m
-# CONFIG_INPUT_ARIZONA_HAPTICS is not set
-# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_E3X0_BUTTON=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MC13783_PWRBUTTON=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
-CONFIG_INPUT_APANEL=m
-CONFIG_INPUT_GP2A=m
-CONFIG_INPUT_GPIO_BEEPER=m
-# CONFIG_INPUT_GPIO_TILT_POLLED is not set
-# CONFIG_INPUT_GPIO_DECODER is not set
-CONFIG_INPUT_WISTRON_BTNS=m
-CONFIG_INPUT_ATLAS_BTNS=m
-CONFIG_INPUT_ATI_REMOTE2=m
-CONFIG_INPUT_KEYSPAN_REMOTE=m
-CONFIG_INPUT_KXTJ9=m
-# CONFIG_INPUT_KXTJ9_POLLED_MODE is not set
-CONFIG_INPUT_POWERMATE=m
-CONFIG_INPUT_YEALINK=m
-CONFIG_INPUT_CM109=m
-CONFIG_INPUT_RETU_PWRBUTTON=m
-CONFIG_INPUT_TPS65218_PWRBUTTON=m
-CONFIG_INPUT_UINPUT=m
-CONFIG_INPUT_PCF50633_PMU=m
-CONFIG_INPUT_PCF8574=m
-CONFIG_INPUT_PWM_BEEPER=m
-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-CONFIG_INPUT_ADXL34X=m
-CONFIG_INPUT_ADXL34X_I2C=m
-CONFIG_INPUT_ADXL34X_SPI=m
-# CONFIG_INPUT_IMS_PCU is not set
-CONFIG_INPUT_CMA3000=m
-CONFIG_INPUT_CMA3000_I2C=m
-CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
-CONFIG_INPUT_SOC_BUTTON_ARRAY=m
-# CONFIG_INPUT_DRV260X_HAPTICS is not set
-# CONFIG_INPUT_DRV2665_HAPTICS is not set
-# CONFIG_INPUT_DRV2667_HAPTICS is not set
-CONFIG_RMI4_CORE=m
-CONFIG_RMI4_I2C=m
-CONFIG_RMI4_SPI=m
-CONFIG_RMI4_SMB=m
-CONFIG_RMI4_F03=y
-CONFIG_RMI4_F03_SERIO=m
-CONFIG_RMI4_2D_SENSOR=y
-CONFIG_RMI4_F11=y
-CONFIG_RMI4_F12=y
-CONFIG_RMI4_F30=y
-CONFIG_RMI4_F34=y
-CONFIG_RMI4_F54=y
-CONFIG_RMI4_F55=y
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=m
-CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
-CONFIG_SERIO_I8042=m
-CONFIG_SERIO_SERPORT=m
-CONFIG_SERIO_CT82C710=m
-CONFIG_SERIO_PARKBD=m
-CONFIG_SERIO_PCIPS2=m
-CONFIG_SERIO_LIBPS2=m
-CONFIG_SERIO_RAW=m
-CONFIG_SERIO_ALTERA_PS2=m
-CONFIG_SERIO_PS2MULT=m
-CONFIG_SERIO_ARC_PS2=m
-CONFIG_SERIO_APBPS2=m
-CONFIG_SERIO_OLPC_APSP=m
-CONFIG_HYPERV_KEYBOARD=m
-# CONFIG_USERIO is not set
-CONFIG_GAMEPORT=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_FM801=m
-
-#
-# Character devices
-#
-CONFIG_TTY=y
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_VT_CONSOLE_SLEEP=y
-CONFIG_HW_CONSOLE=y
-CONFIG_VT_HW_CONSOLE_BINDING=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_ROCKETPORT=m
-CONFIG_CYCLADES=m
-# CONFIG_CYZ_INTR is not set
-# CONFIG_MOXA_INTELLIO is not set
-# CONFIG_MOXA_SMARTIO is not set
-CONFIG_SYNCLINK=m
-CONFIG_SYNCLINKMP=m
-# CONFIG_SYNCLINK_GT is not set
-CONFIG_NOZOMI=m
-# CONFIG_ISI is not set
-CONFIG_N_HDLC=m
-CONFIG_N_GSM=m
-CONFIG_TRACE_ROUTER=m
-CONFIG_TRACE_SINK=m
-CONFIG_DEVMEM=y
-# CONFIG_DEVKMEM is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_EARLYCON=y
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
-CONFIG_SERIAL_8250_PNP=y
-# CONFIG_SERIAL_8250_FINTEK is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_DMA=y
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=32
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-# CONFIG_SERIAL_8250_FOURPORT is not set
-# CONFIG_SERIAL_8250_ACCENT is not set
-# CONFIG_SERIAL_8250_BOCA is not set
-# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-CONFIG_SERIAL_8250_RSA=y
-# CONFIG_SERIAL_8250_FSL is not set
-CONFIG_SERIAL_8250_DW=m
-CONFIG_SERIAL_8250_RT288X=y
-CONFIG_SERIAL_8250_LPSS=y
-CONFIG_SERIAL_8250_MID=y
-CONFIG_SERIAL_8250_MOXA=m
-CONFIG_SERIAL_OF_PLATFORM=m
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_MAX310X is not set
-# CONFIG_SERIAL_UARTLITE is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_JSM=m
-CONFIG_SERIAL_SCCNXP=m
-CONFIG_SERIAL_SC16IS7XX_CORE=m
-CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_I2C=y
-# CONFIG_SERIAL_SC16IS7XX_SPI is not set
-# CONFIG_SERIAL_TIMBERDALE is not set
-CONFIG_SERIAL_ALTERA_JTAGUART=m
-CONFIG_SERIAL_ALTERA_UART=m
-CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
-CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
-# CONFIG_SERIAL_IFX6X60 is not set
-CONFIG_SERIAL_PCH_UART=m
-CONFIG_SERIAL_XILINX_PS_UART=m
-CONFIG_SERIAL_ARC=m
-CONFIG_SERIAL_ARC_NR_PORTS=1
-CONFIG_SERIAL_RP2=m
-CONFIG_SERIAL_RP2_NR_UARTS=32
-CONFIG_SERIAL_FSL_LPUART=m
-CONFIG_SERIAL_CONEXANT_DIGICOLOR=m
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-CONFIG_PPDEV=m
-CONFIG_HVC_DRIVER=y
-CONFIG_VIRTIO_CONSOLE=m
-CONFIG_IPMI_HANDLER=m
-# CONFIG_IPMI_PANIC_EVENT is not set
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SI=m
-CONFIG_IPMI_SSIF=m
-CONFIG_IPMI_WATCHDOG=m
-CONFIG_IPMI_POWEROFF=m
-CONFIG_HW_RANDOM=m
-CONFIG_HW_RANDOM_TIMERIOMEM=m
-CONFIG_HW_RANDOM_INTEL=m
-CONFIG_HW_RANDOM_AMD=m
-CONFIG_HW_RANDOM_GEODE=m
-CONFIG_HW_RANDOM_VIA=m
-CONFIG_HW_RANDOM_VIRTIO=m
-CONFIG_HW_RANDOM_TPM=m
-CONFIG_NVRAM=m
-CONFIG_DTLK=m
-CONFIG_R3964=m
-CONFIG_APPLICOM=m
-CONFIG_SONYPI=m
-
-#
-# PCMCIA character devices
-#
-CONFIG_SYNCLINK_CS=m
-CONFIG_CARDMAN_4000=m
-CONFIG_CARDMAN_4040=m
-CONFIG_SCR24X=m
-CONFIG_IPWIRELESS=m
-CONFIG_MWAVE=m
-CONFIG_PC8736x_GPIO=m
-CONFIG_NSC_GPIO=m
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=256
-CONFIG_HPET=y
-CONFIG_HPET_MMAP=y
-CONFIG_HPET_MMAP_DEFAULT=y
-CONFIG_HANGCHECK_TIMER=m
-CONFIG_TCG_TPM=m
-CONFIG_TCG_TIS_CORE=m
-CONFIG_TCG_TIS=m
-# CONFIG_TCG_TIS_SPI is not set
-CONFIG_TCG_TIS_I2C_ATMEL=m
-CONFIG_TCG_TIS_I2C_INFINEON=m
-CONFIG_TCG_TIS_I2C_NUVOTON=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-CONFIG_TCG_INFINEON=m
-CONFIG_TCG_CRB=m
-# CONFIG_TCG_VTPM_PROXY is not set
-# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
-# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
-CONFIG_TELCLOCK=m
-CONFIG_DEVPORT=y
-# CONFIG_XILLYBUS is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_ACPI_I2C_OPREGION=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_COMPAT=y
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_MUX=m
-
-#
-# Multiplexer I2C Chip support
-#
-# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
-# CONFIG_I2C_MUX_GPIO is not set
-CONFIG_I2C_MUX_PCA9541=m
-CONFIG_I2C_MUX_PCA954x=m
-# CONFIG_I2C_MUX_PINCTRL is not set
-# CONFIG_I2C_MUX_REG is not set
-# CONFIG_I2C_DEMUX_PINCTRL is not set
-# CONFIG_I2C_MUX_MLXCPLD is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_SMBUS=m
-CONFIG_I2C_ALGOBIT=m
-CONFIG_I2C_ALGOPCA=m
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# PC SMBus host controller drivers
-#
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD756_S4882=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_NFORCE2=m
-CONFIG_I2C_NFORCE2_S4985=m
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-
-#
-# ACPI drivers
-#
-CONFIG_I2C_SCMI=m
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_CBUS_GPIO is not set
-CONFIG_I2C_DESIGNWARE_CORE=m
-CONFIG_I2C_DESIGNWARE_PLATFORM=m
-CONFIG_I2C_DESIGNWARE_PCI=m
-CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
-CONFIG_I2C_EG20T=m
-# CONFIG_I2C_EMEV2 is not set
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_OCORES=m
-CONFIG_I2C_PCA_PLATFORM=m
-CONFIG_I2C_PXA=m
-CONFIG_I2C_PXA_PCI=y
-CONFIG_I2C_RK3X=m
-CONFIG_I2C_SIMTEC=m
-CONFIG_I2C_XILINX=m
-
-#
-# External I2C/SMBus adapter drivers
-#
-CONFIG_I2C_DIOLAN_U2C=m
-CONFIG_I2C_PARPORT=m
-CONFIG_I2C_PARPORT_LIGHT=m
-CONFIG_I2C_ROBOTFUZZ_OSIF=m
-CONFIG_I2C_TAOS_EVM=m
-CONFIG_I2C_TINY_USB=m
-CONFIG_I2C_VIPERBOARD=m
-
-#
-# Other I2C/SMBus bus drivers
-#
-CONFIG_I2C_PCA_ISA=m
-# CONFIG_I2C_CROS_EC_TUNNEL is not set
-CONFIG_SCx200_ACB=m
-# CONFIG_I2C_STUB is not set
-CONFIG_I2C_SLAVE=y
-CONFIG_I2C_SLAVE_EEPROM=m
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_ALTERA=m
-# CONFIG_SPI_AXI_SPI_ENGINE is not set
-CONFIG_SPI_BITBANG=m
-CONFIG_SPI_BUTTERFLY=m
-# CONFIG_SPI_CADENCE is not set
-CONFIG_SPI_DESIGNWARE=m
-CONFIG_SPI_DW_PCI=m
-# CONFIG_SPI_DW_MID_DMA is not set
-CONFIG_SPI_DW_MMIO=m
-CONFIG_SPI_GPIO=m
-CONFIG_SPI_LM70_LLP=m
-# CONFIG_SPI_FSL_SPI is not set
-CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_PXA2XX=m
-CONFIG_SPI_PXA2XX_PCI=m
-CONFIG_SPI_ROCKCHIP=m
-CONFIG_SPI_SC18IS602=m
-CONFIG_SPI_TOPCLIFF_PCH=m
-CONFIG_SPI_XCOMM=m
-CONFIG_SPI_XILINX=m
-CONFIG_SPI_ZYNQMP_GQSPI=m
-
-#
-# SPI Protocol Masters
-#
-CONFIG_SPI_SPIDEV=m
-# CONFIG_SPI_LOOPBACK_TEST is not set
-CONFIG_SPI_TLE62X0=m
-CONFIG_SPMI=m
-# CONFIG_HSI is not set
-
-#
-# PPS support
-#
-CONFIG_PPS=m
-# CONFIG_PPS_DEBUG is not set
-
-#
-# PPS clients support
-#
-CONFIG_PPS_CLIENT_KTIMER=m
-CONFIG_PPS_CLIENT_LDISC=m
-CONFIG_PPS_CLIENT_PARPORT=m
-CONFIG_PPS_CLIENT_GPIO=m
-
-#
-# PPS generators support
-#
-
-#
-# PTP clock support
-#
-CONFIG_PTP_1588_CLOCK=m
-CONFIG_DP83640_PHY=m
-CONFIG_PTP_1588_CLOCK_PCH=m
-CONFIG_PINCTRL=y
-
-#
-# Pin controllers
-#
-CONFIG_PINMUX=y
-CONFIG_PINCONF=y
-CONFIG_GENERIC_PINCONF=y
-# CONFIG_DEBUG_PINCTRL is not set
-# CONFIG_PINCTRL_AMD is not set
-# CONFIG_PINCTRL_SINGLE is not set
-# CONFIG_PINCTRL_SX150X is not set
-CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=y
-CONFIG_PINCTRL_INTEL=y
-CONFIG_PINCTRL_BROXTON=y
-CONFIG_PINCTRL_SUNRISEPOINT=y
-CONFIG_GPIOLIB=y
-CONFIG_OF_GPIO=y
-CONFIG_GPIO_ACPI=y
-CONFIG_GPIOLIB_IRQCHIP=y
-# CONFIG_DEBUG_GPIO is not set
-CONFIG_GPIO_SYSFS=y
-
-#
-# Memory mapped GPIO drivers
-#
-# CONFIG_GPIO_74XX_MMIO is not set
-# CONFIG_GPIO_ALTERA is not set
-# CONFIG_GPIO_AMDPT is not set
-# CONFIG_GPIO_DWAPB is not set
-# CONFIG_GPIO_GENERIC_PLATFORM is not set
-# CONFIG_GPIO_GRGPIO is not set
-CONFIG_GPIO_ICH=m
-CONFIG_GPIO_LYNXPOINT=y
-# CONFIG_GPIO_MOCKUP is not set
-# CONFIG_GPIO_SYSCON is not set
-# CONFIG_GPIO_VX855 is not set
-# CONFIG_GPIO_XILINX is not set
-
-#
-# Port-mapped I/O GPIO drivers
-#
-# CONFIG_GPIO_104_DIO_48E is not set
-# CONFIG_GPIO_104_IDIO_16 is not set
-# CONFIG_GPIO_104_IDI_48 is not set
-# CONFIG_GPIO_F7188X is not set
-# CONFIG_GPIO_GPIO_MM is not set
-# CONFIG_GPIO_IT87 is not set
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_SCH311X=m
-# CONFIG_GPIO_WS16C48 is not set
-
-#
-# I2C GPIO expanders
-#
-# CONFIG_GPIO_ADP5588 is not set
-# CONFIG_GPIO_ADNP is not set
-# CONFIG_GPIO_MAX7300 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_TPIC2810 is not set
-
-#
-# MFD GPIO expanders
-#
-# CONFIG_GPIO_ARIZONA is not set
-CONFIG_GPIO_CRYSTAL_COVE=y
-CONFIG_GPIO_CS5535=y
-# CONFIG_GPIO_LP3943 is not set
-# CONFIG_GPIO_TPS65218 is not set
-# CONFIG_GPIO_UCB1400 is not set
-CONFIG_GPIO_WHISKEY_COVE=y
-
-#
-# PCI GPIO expanders
-#
-CONFIG_GPIO_AMD8111=m
-# CONFIG_GPIO_ML_IOH is not set
-# CONFIG_GPIO_PCH is not set
-# CONFIG_GPIO_RDC321X is not set
-# CONFIG_GPIO_SODAVILLE is not set
-
-#
-# SPI GPIO expanders
-#
-# CONFIG_GPIO_74X164 is not set
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MC33880 is not set
-# CONFIG_GPIO_PISOSR is not set
-
-#
-# SPI or I2C GPIO expanders
-#
-# CONFIG_GPIO_MCP23S08 is not set
-
-#
-# USB GPIO expanders
-#
-CONFIG_GPIO_VIPERBOARD=m
-# CONFIG_W1 is not set
-CONFIG_POWER_AVS=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_GPIO=y
-# CONFIG_POWER_RESET_GPIO_RESTART is not set
-# CONFIG_POWER_RESET_LTC2952 is not set
-# CONFIG_POWER_RESET_RESTART is not set
-# CONFIG_POWER_RESET_SYSCON is not set
-# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
-CONFIG_REBOOT_MODE=m
-CONFIG_SYSCON_REBOOT_MODE=m
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=m
-# CONFIG_GENERIC_ADC_BATTERY is not set
-CONFIG_TEST_POWER=m
-# CONFIG_BATTERY_DS2780 is not set
-# CONFIG_BATTERY_DS2781 is not set
-# CONFIG_BATTERY_DS2782 is not set
-CONFIG_BATTERY_OLPC=m
-# CONFIG_BATTERY_SBS is not set
-# CONFIG_BATTERY_BQ27XXX is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BATTERY_MAX17042 is not set
-# CONFIG_CHARGER_PCF50633 is not set
-# CONFIG_CHARGER_ISP1704 is not set
-# CONFIG_CHARGER_MAX8903 is not set
-# CONFIG_CHARGER_LP8727 is not set
-# CONFIG_CHARGER_GPIO is not set
-# CONFIG_CHARGER_BQ2415X is not set
-# CONFIG_CHARGER_BQ24190 is not set
-# CONFIG_CHARGER_BQ24257 is not set
-CONFIG_CHARGER_BQ24735=m
-# CONFIG_CHARGER_BQ25890 is not set
-# CONFIG_CHARGER_SMB347 is not set
-# CONFIG_CHARGER_TPS65217 is not set
-# CONFIG_BATTERY_GAUGE_LTC2941 is not set
-# CONFIG_BATTERY_RT5033 is not set
-# CONFIG_CHARGER_RT9455 is not set
-CONFIG_HWMON=y
-CONFIG_HWMON_VID=m
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Native drivers
-#
-CONFIG_SENSORS_ABITUGURU=m
-CONFIG_SENSORS_ABITUGURU3=m
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7X10=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_K8TEMP=m
-CONFIG_SENSORS_K10TEMP=m
-CONFIG_SENSORS_FAM15H_POWER=m
-CONFIG_SENSORS_APPLESMC=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_DELL_SMM=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_MC13783_ADC=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_FTSTEUTATES=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_GPIO_FAN=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_IBMAEM=m
-CONFIG_SENSORS_IBMPEX=m
-# CONFIG_SENSORS_IIO_HWMON is not set
-CONFIG_SENSORS_I5500=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_POWR1220=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LTC2945=m
-CONFIG_SENSORS_LTC2990=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4222=m
-CONFIG_SENSORS_LTC4245=m
-CONFIG_SENSORS_LTC4260=m
-CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX31722=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6642=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MAX31790=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_TC654=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_NCT6683=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NCT7802=m
-CONFIG_SENSORS_NCT7904=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_PMBUS=m
-CONFIG_SENSORS_PMBUS=m
-CONFIG_SENSORS_ADM1275=m
-CONFIG_SENSORS_LM25066=m
-CONFIG_SENSORS_LTC2978=m
-CONFIG_SENSORS_LTC3815=m
-CONFIG_SENSORS_MAX16064=m
-CONFIG_SENSORS_MAX20751=m
-CONFIG_SENSORS_MAX34440=m
-CONFIG_SENSORS_MAX8688=m
-CONFIG_SENSORS_TPS40422=m
-CONFIG_SENSORS_UCD9000=m
-CONFIG_SENSORS_UCD9200=m
-CONFIG_SENSORS_ZL6100=m
-CONFIG_SENSORS_PWM_FAN=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SHT3x=m
-CONFIG_SENSORS_SHTC1=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
-CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH56XX_COMMON=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_ADC128D818=m
-CONFIG_SENSORS_ADS1015=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_INA3221=m
-CONFIG_SENSORS_TC74=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP103=m
-CONFIG_SENSORS_TMP108=m
-CONFIG_SENSORS_TMP401=m
-CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA_CPUTEMP=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
-CONFIG_SENSORS_W83795=m
-# CONFIG_SENSORS_W83795_FANCTRL is not set
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_XGENE=m
-
-#
-# ACPI drivers
-#
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_SENSORS_ATK0110=m
-CONFIG_THERMAL=y
-CONFIG_THERMAL_HWMON=y
-CONFIG_THERMAL_OF=y
-CONFIG_THERMAL_WRITABLE_TRIPS=y
-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
-# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
-# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
-# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_GOV_BANG_BANG=y
-CONFIG_THERMAL_GOV_USER_SPACE=y
-# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set
-# CONFIG_CPU_THERMAL is not set
-# CONFIG_THERMAL_EMULATION is not set
-# CONFIG_QORIQ_THERMAL is not set
-CONFIG_INTEL_POWERCLAMP=m
-CONFIG_X86_PKG_TEMP_THERMAL=m
-CONFIG_INTEL_SOC_DTS_IOSF_CORE=m
-CONFIG_INTEL_SOC_DTS_THERMAL=m
-
-#
-# ACPI INT340X thermal drivers
-#
-CONFIG_INT340X_THERMAL=m
-CONFIG_ACPI_THERMAL_REL=m
-CONFIG_INT3406_THERMAL=m
-CONFIG_INTEL_BXT_PMIC_THERMAL=m
-CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_QCOM_SPMI_TEMP_ALARM=m
-CONFIG_GENERIC_ADC_THERMAL=m
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_CORE=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-CONFIG_WATCHDOG_SYSFS=y
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_GPIO_WATCHDOG=m
-CONFIG_WDAT_WDT=m
-CONFIG_XILINX_WATCHDOG=m
-CONFIG_ZIIRAVE_WATCHDOG=m
-# CONFIG_CADENCE_WATCHDOG is not set
-CONFIG_DW_WATCHDOG=m
-# CONFIG_RN5T618_WATCHDOG is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-CONFIG_RETU_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_EBC_C384_WDT=m
-CONFIG_F71808E_WDT=m
-CONFIG_SP5100_TCO=m
-CONFIG_GEODE_WDT=m
-CONFIG_SBC_FITPC2_WATCHDOG=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_IBMASR=m
-CONFIG_WAFER_WDT=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_IT8712F_WDT=m
-CONFIG_IT87_WDT=m
-CONFIG_HP_WATCHDOG=m
-CONFIG_HPWDT_NMI_DECODING=y
-CONFIG_SC1200_WDT=m
-CONFIG_PC87413_WDT=m
-CONFIG_NV_TCO=m
-CONFIG_60XX_WDT=m
-CONFIG_SBC8360_WDT=m
-CONFIG_SBC7240_WDT=m
-CONFIG_CPU5_WDT=m
-CONFIG_SMSC_SCH311X_WDT=m
-CONFIG_SMSC37B787_WDT=m
-CONFIG_VIA_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_MACHZ_WDT=m
-CONFIG_SBC_EPX_C3_WATCHDOG=m
-CONFIG_INTEL_MEI_WDT=m
-CONFIG_NI903X_WDT=m
-CONFIG_MEN_A21_WDT=m
-
-#
-# ISA-based Watchdog Cards
-#
-CONFIG_PCWATCHDOG=m
-CONFIG_MIXCOMWD=m
-CONFIG_WDT=m
-
-#
-# PCI-based Watchdog Cards
-#
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-
-#
-# USB-based Watchdog Cards
-#
-CONFIG_USBPCWATCHDOG=m
-
-#
-# Watchdog Pretimeout Governors
-#
-CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
-# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
-CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y
-CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m
-CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB=m
-CONFIG_SSB_SPROM=y
-CONFIG_SSB_BLOCKIO=y
-CONFIG_SSB_PCIHOST_POSSIBLE=y
-CONFIG_SSB_PCIHOST=y
-CONFIG_SSB_B43_PCI_BRIDGE=y
-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
-CONFIG_SSB_PCMCIAHOST=y
-CONFIG_SSB_SDIOHOST_POSSIBLE=y
-CONFIG_SSB_SDIOHOST=y
-# CONFIG_SSB_DEBUG is not set
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
-CONFIG_SSB_DRIVER_PCICORE=y
-CONFIG_SSB_DRIVER_GPIO=y
-CONFIG_BCMA_POSSIBLE=y
-
-#
-# Broadcom specific AMBA
-#
-CONFIG_BCMA=m
-CONFIG_BCMA_BLOCKIO=y
-CONFIG_BCMA_HOST_PCI_POSSIBLE=y
-CONFIG_BCMA_HOST_PCI=y
-# CONFIG_BCMA_HOST_SOC is not set
-CONFIG_BCMA_DRIVER_PCI=y
-CONFIG_BCMA_DRIVER_GMAC_CMN=y
-CONFIG_BCMA_DRIVER_GPIO=y
-# CONFIG_BCMA_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-CONFIG_MFD_CORE=y
-CONFIG_MFD_CS5535=m
-# CONFIG_MFD_ACT8945A is not set
-# CONFIG_MFD_AS3711 is not set
-# CONFIG_MFD_AS3722 is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_AAT2870_CORE is not set
-# CONFIG_MFD_ATMEL_FLEXCOM is not set
-# CONFIG_MFD_ATMEL_HLCDC is not set
-CONFIG_MFD_BCM590XX=m
-# CONFIG_MFD_AXP20X_I2C is not set
-CONFIG_MFD_CROS_EC=m
-CONFIG_MFD_CROS_EC_I2C=m
-CONFIG_MFD_CROS_EC_SPI=m
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_MFD_DA9052_SPI is not set
-# CONFIG_MFD_DA9052_I2C is not set
-# CONFIG_MFD_DA9055 is not set
-# CONFIG_MFD_DA9062 is not set
-# CONFIG_MFD_DA9063 is not set
-# CONFIG_MFD_DA9150 is not set
-# CONFIG_MFD_DLN2 is not set
-CONFIG_MFD_MC13XXX=m
-# CONFIG_MFD_MC13XXX_SPI is not set
-CONFIG_MFD_MC13XXX_I2C=m
-# CONFIG_MFD_HI6421_PMIC is not set
-CONFIG_HTC_PASIC3=m
-# CONFIG_HTC_I2CPLD is not set
-# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
-CONFIG_LPC_ICH=m
-CONFIG_LPC_SCH=m
-CONFIG_INTEL_SOC_PMIC=y
-CONFIG_MFD_INTEL_LPSS=m
-CONFIG_MFD_INTEL_LPSS_ACPI=m
-CONFIG_MFD_INTEL_LPSS_PCI=m
-# CONFIG_MFD_JANZ_CMODIO is not set
-# CONFIG_MFD_KEMPLD is not set
-# CONFIG_MFD_88PM800 is not set
-# CONFIG_MFD_88PM805 is not set
-# CONFIG_MFD_88PM860X is not set
-# CONFIG_MFD_MAX14577 is not set
-# CONFIG_MFD_MAX77620 is not set
-# CONFIG_MFD_MAX77686 is not set
-# CONFIG_MFD_MAX77693 is not set
-# CONFIG_MFD_MAX77843 is not set
-# CONFIG_MFD_MAX8907 is not set
-# CONFIG_MFD_MAX8925 is not set
-# CONFIG_MFD_MAX8997 is not set
-# CONFIG_MFD_MAX8998 is not set
-# CONFIG_MFD_MT6397 is not set
-# CONFIG_MFD_MENF21BMC is not set
-# CONFIG_EZX_PCAP is not set
-CONFIG_MFD_VIPERBOARD=m
-CONFIG_MFD_RETU=m
-CONFIG_MFD_PCF50633=m
-CONFIG_PCF50633_ADC=m
-CONFIG_PCF50633_GPIO=m
-CONFIG_UCB1400_CORE=m
-CONFIG_MFD_RDC321X=m
-CONFIG_MFD_RTSX_PCI=m
-CONFIG_MFD_RT5033=m
-CONFIG_MFD_RTSX_USB=m
-# CONFIG_MFD_RC5T583 is not set
-CONFIG_MFD_RK808=m
-CONFIG_MFD_RN5T618=m
-# CONFIG_MFD_SEC_CORE is not set
-CONFIG_MFD_SI476X_CORE=m
-CONFIG_MFD_SM501=m
-CONFIG_MFD_SM501_GPIO=y
-# CONFIG_MFD_SKY81452 is not set
-# CONFIG_MFD_SMSC is not set
-CONFIG_ABX500_CORE=y
-# CONFIG_AB3100_CORE is not set
-# CONFIG_MFD_STMPE is not set
-CONFIG_MFD_SYSCON=y
-CONFIG_MFD_TI_AM335X_TSCADC=m
-CONFIG_MFD_LP3943=m
-# CONFIG_MFD_LP8788 is not set
-# CONFIG_MFD_PALMAS is not set
-# CONFIG_TPS6105X is not set
-CONFIG_TPS65010=m
-CONFIG_TPS6507X=m
-# CONFIG_MFD_TPS65086 is not set
-# CONFIG_MFD_TPS65090 is not set
-CONFIG_MFD_TPS65217=m
-# CONFIG_MFD_TI_LP873X is not set
-CONFIG_MFD_TPS65218=m
-# CONFIG_MFD_TPS6586X is not set
-# CONFIG_MFD_TPS65910 is not set
-# CONFIG_MFD_TPS65912_I2C is not set
-# CONFIG_MFD_TPS65912_SPI is not set
-# CONFIG_MFD_TPS80031 is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_TWL6040_CORE is not set
-CONFIG_MFD_WL1273_CORE=m
-CONFIG_MFD_LM3533=m
-# CONFIG_MFD_TIMBERDALE is not set
-# CONFIG_MFD_TC3589X is not set
-# CONFIG_MFD_TMIO is not set
-CONFIG_MFD_VX855=m
-CONFIG_MFD_ARIZONA=y
-CONFIG_MFD_ARIZONA_I2C=m
-# CONFIG_MFD_ARIZONA_SPI is not set
-# CONFIG_MFD_CS47L24 is not set
-CONFIG_MFD_WM5102=y
-CONFIG_MFD_WM5110=y
-# CONFIG_MFD_WM8997 is not set
-# CONFIG_MFD_WM8998 is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM831X_I2C is not set
-# CONFIG_MFD_WM831X_SPI is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8994 is not set
-# CONFIG_REGULATOR is not set
-CONFIG_MEDIA_SUPPORT=m
-
-#
-# Multimedia core support
-#
-CONFIG_MEDIA_CAMERA_SUPPORT=y
-CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
-CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
-CONFIG_MEDIA_RADIO_SUPPORT=y
-CONFIG_MEDIA_SDR_SUPPORT=y
-CONFIG_MEDIA_RC_SUPPORT=y
-CONFIG_MEDIA_CEC_SUPPORT=y
-CONFIG_MEDIA_CEC_DEBUG=y
-CONFIG_MEDIA_CEC_EDID=y
-CONFIG_MEDIA_CONTROLLER=y
-# CONFIG_MEDIA_CONTROLLER_DVB is not set
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-CONFIG_VIDEO_V4L2=m
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_PCI_SKELETON is not set
-CONFIG_VIDEO_TUNER=m
-CONFIG_V4L2_MEM2MEM_DEV=m
-# CONFIG_V4L2_FLASH_LED_CLASS is not set
-CONFIG_VIDEOBUF_GEN=m
-CONFIG_VIDEOBUF_DMA_SG=m
-CONFIG_VIDEOBUF_VMALLOC=m
-CONFIG_VIDEOBUF_DVB=m
-CONFIG_VIDEOBUF2_CORE=m
-CONFIG_VIDEOBUF2_MEMOPS=m
-CONFIG_VIDEOBUF2_DMA_CONTIG=m
-CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEOBUF2_DMA_SG=m
-CONFIG_VIDEOBUF2_DVB=m
-CONFIG_DVB_CORE=m
-CONFIG_DVB_NET=y
-CONFIG_TTPCI_EEPROM=m
-CONFIG_DVB_MAX_ADAPTERS=8
-# CONFIG_DVB_DYNAMIC_MINORS is not set
-# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set
-
-#
-# Media drivers
-#
-CONFIG_RC_CORE=m
-CONFIG_RC_MAP=m
-CONFIG_RC_DECODERS=y
-CONFIG_LIRC=m
-CONFIG_IR_LIRC_CODEC=m
-CONFIG_IR_NEC_DECODER=m
-CONFIG_IR_RC5_DECODER=m
-CONFIG_IR_RC6_DECODER=m
-CONFIG_IR_JVC_DECODER=m
-CONFIG_IR_SONY_DECODER=m
-CONFIG_IR_SANYO_DECODER=m
-CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_MCE_KBD_DECODER=m
-CONFIG_IR_XMP_DECODER=m
-CONFIG_RC_DEVICES=y
-CONFIG_RC_ATI_REMOTE=m
-CONFIG_IR_ENE=m
-CONFIG_IR_HIX5HD2=m
-CONFIG_IR_IMON=m
-CONFIG_IR_MCEUSB=m
-CONFIG_IR_ITE_CIR=m
-CONFIG_IR_FINTEK=m
-CONFIG_IR_NUVOTON=m
-CONFIG_IR_REDRAT3=m
-CONFIG_IR_STREAMZAP=m
-CONFIG_IR_WINBOND_CIR=m
-CONFIG_IR_IGORPLUGUSB=m
-CONFIG_IR_IGUANA=m
-CONFIG_IR_TTUSBIR=m
-CONFIG_RC_LOOPBACK=m
-CONFIG_IR_GPIO_CIR=m
-CONFIG_IR_SERIAL=m
-CONFIG_IR_SERIAL_TRANSMITTER=y
-CONFIG_MEDIA_USB_SUPPORT=y
-
-#
-# Webcam devices
-#
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-CONFIG_USB_GSPCA=m
-CONFIG_USB_M5602=m
-CONFIG_USB_STV06XX=m
-CONFIG_USB_GL860=m
-CONFIG_USB_GSPCA_BENQ=m
-CONFIG_USB_GSPCA_CONEX=m
-CONFIG_USB_GSPCA_CPIA1=m
-CONFIG_USB_GSPCA_DTCS033=m
-CONFIG_USB_GSPCA_ETOMS=m
-CONFIG_USB_GSPCA_FINEPIX=m
-CONFIG_USB_GSPCA_JEILINJ=m
-CONFIG_USB_GSPCA_JL2005BCD=m
-CONFIG_USB_GSPCA_KINECT=m
-CONFIG_USB_GSPCA_KONICA=m
-CONFIG_USB_GSPCA_MARS=m
-CONFIG_USB_GSPCA_MR97310A=m
-CONFIG_USB_GSPCA_NW80X=m
-CONFIG_USB_GSPCA_OV519=m
-CONFIG_USB_GSPCA_OV534=m
-CONFIG_USB_GSPCA_OV534_9=m
-CONFIG_USB_GSPCA_PAC207=m
-CONFIG_USB_GSPCA_PAC7302=m
-CONFIG_USB_GSPCA_PAC7311=m
-CONFIG_USB_GSPCA_SE401=m
-CONFIG_USB_GSPCA_SN9C2028=m
-CONFIG_USB_GSPCA_SN9C20X=m
-CONFIG_USB_GSPCA_SONIXB=m
-CONFIG_USB_GSPCA_SONIXJ=m
-CONFIG_USB_GSPCA_SPCA500=m
-CONFIG_USB_GSPCA_SPCA501=m
-CONFIG_USB_GSPCA_SPCA505=m
-CONFIG_USB_GSPCA_SPCA506=m
-CONFIG_USB_GSPCA_SPCA508=m
-CONFIG_USB_GSPCA_SPCA561=m
-CONFIG_USB_GSPCA_SPCA1528=m
-CONFIG_USB_GSPCA_SQ905=m
-CONFIG_USB_GSPCA_SQ905C=m
-CONFIG_USB_GSPCA_SQ930X=m
-CONFIG_USB_GSPCA_STK014=m
-CONFIG_USB_GSPCA_STK1135=m
-CONFIG_USB_GSPCA_STV0680=m
-CONFIG_USB_GSPCA_SUNPLUS=m
-CONFIG_USB_GSPCA_T613=m
-CONFIG_USB_GSPCA_TOPRO=m
-CONFIG_USB_GSPCA_TOUPTEK=m
-CONFIG_USB_GSPCA_TV8532=m
-CONFIG_USB_GSPCA_VC032X=m
-CONFIG_USB_GSPCA_VICAM=m
-CONFIG_USB_GSPCA_XIRLINK_CIT=m
-CONFIG_USB_GSPCA_ZC3XX=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_PWC_DEBUG is not set
-CONFIG_USB_PWC_INPUT_EVDEV=y
-CONFIG_VIDEO_CPIA2=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-CONFIG_USB_S2255=m
-CONFIG_VIDEO_USBTV=m
-
-#
-# Analog TV USB devices
-#
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_PVRUSB2_SYSFS=y
-CONFIG_VIDEO_PVRUSB2_DVB=y
-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
-CONFIG_VIDEO_STK1160=m
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-
-#
-# Analog/digital TV USB devices
-#
-CONFIG_VIDEO_AU0828=m
-CONFIG_VIDEO_AU0828_V4L2=y
-CONFIG_VIDEO_AU0828_RC=y
-CONFIG_VIDEO_CX231XX=m
-CONFIG_VIDEO_CX231XX_RC=y
-CONFIG_VIDEO_CX231XX_ALSA=m
-CONFIG_VIDEO_CX231XX_DVB=m
-CONFIG_VIDEO_TM6000=m
-CONFIG_VIDEO_TM6000_ALSA=m
-CONFIG_VIDEO_TM6000_DVB=m
-
-#
-# Digital TV USB devices
-#
-CONFIG_DVB_USB=m
-# CONFIG_DVB_USB_DEBUG is not set
-CONFIG_DVB_USB_DIB3000MC=m
-CONFIG_DVB_USB_A800=m
-CONFIG_DVB_USB_DIBUSB_MB=m
-CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
-CONFIG_DVB_USB_DIBUSB_MC=m
-CONFIG_DVB_USB_DIB0700=m
-CONFIG_DVB_USB_UMT_010=m
-CONFIG_DVB_USB_CXUSB=m
-CONFIG_DVB_USB_M920X=m
-CONFIG_DVB_USB_DIGITV=m
-CONFIG_DVB_USB_VP7045=m
-CONFIG_DVB_USB_VP702X=m
-CONFIG_DVB_USB_GP8PSK=m
-CONFIG_DVB_USB_NOVA_T_USB2=m
-CONFIG_DVB_USB_TTUSB2=m
-CONFIG_DVB_USB_DTT200U=m
-CONFIG_DVB_USB_OPERA1=m
-CONFIG_DVB_USB_AF9005=m
-CONFIG_DVB_USB_AF9005_REMOTE=m
-CONFIG_DVB_USB_PCTV452E=m
-CONFIG_DVB_USB_DW2102=m
-CONFIG_DVB_USB_CINERGY_T2=m
-CONFIG_DVB_USB_DTV5100=m
-CONFIG_DVB_USB_FRIIO=m
-CONFIG_DVB_USB_AZ6027=m
-CONFIG_DVB_USB_TECHNISAT_USB2=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9015=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_LME2510=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_RTL28XXU=m
-CONFIG_DVB_USB_DVBSKY=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
-CONFIG_DVB_AS102=m
-
-#
-# Webcam, TV (analog/digital) USB devices
-#
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_V4L2=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_VIDEO_EM28XX_RC=m
-
-#
-# Software defined radio USB devices
-#
-CONFIG_USB_AIRSPY=m
-CONFIG_USB_HACKRF=m
-CONFIG_USB_MSI2500=m
-
-#
-# USB HDMI CEC adapters
-#
-CONFIG_USB_PULSE8_CEC=m
-CONFIG_MEDIA_PCI_SUPPORT=y
-
-#
-# Media capture support
-#
-CONFIG_VIDEO_MEYE=m
-CONFIG_VIDEO_SOLO6X10=m
-CONFIG_VIDEO_TW5864=m
-CONFIG_VIDEO_TW68=m
-CONFIG_VIDEO_TW686X=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_ZR36060=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_ZORAN_AVS6EYES=m
-
-#
-# Media capture/analog TV support
-#
-CONFIG_VIDEO_IVTV=m
-CONFIG_VIDEO_IVTV_ALSA=m
-CONFIG_VIDEO_FB_IVTV=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DT3155=m
-
-#
-# Media capture/analog/hybrid TV support
-#
-CONFIG_VIDEO_CX18=m
-CONFIG_VIDEO_CX18_ALSA=m
-CONFIG_VIDEO_CX23885=m
-CONFIG_MEDIA_ALTERA_CI=m
-CONFIG_VIDEO_CX25821=m
-CONFIG_VIDEO_CX25821_ALSA=m
-CONFIG_VIDEO_CX88=m
-CONFIG_VIDEO_CX88_ALSA=m
-CONFIG_VIDEO_CX88_BLACKBIRD=m
-CONFIG_VIDEO_CX88_DVB=m
-CONFIG_VIDEO_CX88_ENABLE_VP3054=y
-CONFIG_VIDEO_CX88_VP3054=m
-CONFIG_VIDEO_CX88_MPEG=m
-CONFIG_VIDEO_BT848=m
-CONFIG_DVB_BT8XX=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_SAA7134_ALSA=m
-CONFIG_VIDEO_SAA7134_RC=y
-CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_SAA7134_GO7007=m
-CONFIG_VIDEO_SAA7164=m
-CONFIG_VIDEO_COBALT=m
-
-#
-# Media digital TV PCI Adapters
-#
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
-CONFIG_DVB_BUDGET_CORE=m
-CONFIG_DVB_BUDGET=m
-CONFIG_DVB_BUDGET_CI=m
-CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
-CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_DM1105=m
-CONFIG_DVB_PT1=m
-CONFIG_DVB_PT3=m
-CONFIG_MANTIS_CORE=m
-CONFIG_DVB_MANTIS=m
-CONFIG_DVB_HOPPER=m
-CONFIG_DVB_NGENE=m
-CONFIG_DVB_DDBRIDGE=m
-CONFIG_DVB_SMIPCIE=m
-CONFIG_DVB_NETUP_UNIDVB=m
-# CONFIG_V4L_PLATFORM_DRIVERS is not set
-CONFIG_V4L_MEM2MEM_DRIVERS=y
-CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
-CONFIG_VIDEO_SH_VEU=m
-CONFIG_V4L_TEST_DRIVERS=y
-# CONFIG_VIDEO_VIVID is not set
-# CONFIG_VIDEO_VIM2M is not set
-# CONFIG_DVB_PLATFORM_DRIVERS is not set
-
-#
-# Supported MMC/SDIO adapters
-#
-CONFIG_SMS_SDIO_DRV=m
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_RADIO_TEA575X=m
-CONFIG_RADIO_SI470X=y
-CONFIG_USB_SI470X=m
-CONFIG_I2C_SI470X=m
-CONFIG_RADIO_SI4713=m
-CONFIG_USB_SI4713=m
-CONFIG_PLATFORM_SI4713=m
-CONFIG_I2C_SI4713=m
-CONFIG_RADIO_SI476X=m
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_RAREMONO=m
-CONFIG_USB_MA901=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-
-#
-# Texas Instruments WL128x FM driver (ST based)
-#
-CONFIG_RADIO_WL128X=m
-# CONFIG_V4L_RADIO_ISA_DRIVERS is not set
-
-#
-# Supported FireWire (IEEE 1394) Adapters
-#
-CONFIG_DVB_FIREDTV=m
-CONFIG_DVB_FIREDTV_INPUT=y
-CONFIG_MEDIA_COMMON_OPTIONS=y
-
-#
-# common driver options
-#
-CONFIG_VIDEO_CX2341X=m
-CONFIG_VIDEO_TVEEPROM=m
-CONFIG_CYPRESS_FIRMWARE=m
-CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_SMS_SIANO_MDTV=m
-CONFIG_SMS_SIANO_RC=y
-# CONFIG_SMS_SIANO_DEBUGFS is not set
-
-#
-# Media ancillary drivers (tuners, sensors, i2c, spi, frontends)
-#
-CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
-CONFIG_MEDIA_ATTACH=y
-CONFIG_VIDEO_IR_I2C=m
-
-#
-# Audio decoders, processors and mixers
-#
-CONFIG_VIDEO_TVAUDIO=m
-CONFIG_VIDEO_TDA7432=m
-CONFIG_VIDEO_TDA9840=m
-CONFIG_VIDEO_TEA6415C=m
-CONFIG_VIDEO_TEA6420=m
-CONFIG_VIDEO_MSP3400=m
-CONFIG_VIDEO_CS3308=m
-CONFIG_VIDEO_CS5345=m
-CONFIG_VIDEO_CS53L32A=m
-CONFIG_VIDEO_UDA1342=m
-CONFIG_VIDEO_WM8775=m
-CONFIG_VIDEO_WM8739=m
-CONFIG_VIDEO_VP27SMPX=m
-CONFIG_VIDEO_SONY_BTF_MPX=m
-
-#
-# RDS decoders
-#
-CONFIG_VIDEO_SAA6588=m
-
-#
-# Video decoders
-#
-CONFIG_VIDEO_ADV7604=m
-CONFIG_VIDEO_ADV7842=m
-CONFIG_VIDEO_BT819=m
-CONFIG_VIDEO_BT856=m
-CONFIG_VIDEO_BT866=m
-CONFIG_VIDEO_KS0127=m
-CONFIG_VIDEO_SAA7110=m
-CONFIG_VIDEO_SAA711X=m
-CONFIG_VIDEO_TVP5150=m
-CONFIG_VIDEO_TW2804=m
-CONFIG_VIDEO_TW9903=m
-CONFIG_VIDEO_TW9906=m
-CONFIG_VIDEO_VPX3220=m
-
-#
-# Video and audio decoders
-#
-CONFIG_VIDEO_SAA717X=m
-CONFIG_VIDEO_CX25840=m
-
-#
-# Video encoders
-#
-CONFIG_VIDEO_SAA7127=m
-CONFIG_VIDEO_SAA7185=m
-CONFIG_VIDEO_ADV7170=m
-CONFIG_VIDEO_ADV7175=m
-CONFIG_VIDEO_ADV7511=m
-
-#
-# Camera sensor devices
-#
-CONFIG_VIDEO_OV7640=m
-CONFIG_VIDEO_MT9V011=m
-
-#
-# Flash devices
-#
-
-#
-# Video improvement chips
-#
-CONFIG_VIDEO_UPD64031A=m
-CONFIG_VIDEO_UPD64083=m
-
-#
-# Audio/Video compression chips
-#
-CONFIG_VIDEO_SAA6752HS=m
-
-#
-# Miscellaneous helper chips
-#
-CONFIG_VIDEO_M52790=m
-
-#
-# Sensors used on soc_camera driver
-#
-CONFIG_MEDIA_TUNER=m
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA827X=m
-CONFIG_MEDIA_TUNER_TDA18271=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MSI001=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_MT2060=m
-CONFIG_MEDIA_TUNER_MT2063=m
-CONFIG_MEDIA_TUNER_MT2266=m
-CONFIG_MEDIA_TUNER_MT2131=m
-CONFIG_MEDIA_TUNER_QT1010=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_MEDIA_TUNER_XC4000=m
-CONFIG_MEDIA_TUNER_MXL5005S=m
-CONFIG_MEDIA_TUNER_MXL5007T=m
-CONFIG_MEDIA_TUNER_MC44S803=m
-CONFIG_MEDIA_TUNER_MAX2165=m
-CONFIG_MEDIA_TUNER_TDA18218=m
-CONFIG_MEDIA_TUNER_FC0011=m
-CONFIG_MEDIA_TUNER_FC0012=m
-CONFIG_MEDIA_TUNER_FC0013=m
-CONFIG_MEDIA_TUNER_TDA18212=m
-CONFIG_MEDIA_TUNER_E4000=m
-CONFIG_MEDIA_TUNER_FC2580=m
-CONFIG_MEDIA_TUNER_M88RS6000T=m
-CONFIG_MEDIA_TUNER_TUA9001=m
-CONFIG_MEDIA_TUNER_SI2157=m
-CONFIG_MEDIA_TUNER_IT913X=m
-CONFIG_MEDIA_TUNER_R820T=m
-CONFIG_MEDIA_TUNER_MXL301RF=m
-CONFIG_MEDIA_TUNER_QM1D1C0042=m
-
-#
-# Multistandard (satellite) frontends
-#
-CONFIG_DVB_STB0899=m
-CONFIG_DVB_STB6100=m
-CONFIG_DVB_STV090x=m
-CONFIG_DVB_STV6110x=m
-CONFIG_DVB_M88DS3103=m
-
-#
-# Multistandard (cable + terrestrial) frontends
-#
-CONFIG_DVB_DRXK=m
-CONFIG_DVB_TDA18271C2DD=m
-CONFIG_DVB_SI2165=m
-CONFIG_DVB_MN88472=m
-CONFIG_DVB_MN88473=m
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_CX24123=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_ZL10036=m
-CONFIG_DVB_ZL10039=m
-CONFIG_DVB_S5H1420=m
-CONFIG_DVB_STV0288=m
-CONFIG_DVB_STB6000=m
-CONFIG_DVB_STV0299=m
-CONFIG_DVB_STV6110=m
-CONFIG_DVB_STV0900=m
-CONFIG_DVB_TDA8083=m
-CONFIG_DVB_TDA10086=m
-CONFIG_DVB_TDA8261=m
-CONFIG_DVB_VES1X93=m
-CONFIG_DVB_TUNER_ITD1000=m
-CONFIG_DVB_TUNER_CX24113=m
-CONFIG_DVB_TDA826X=m
-CONFIG_DVB_TUA6100=m
-CONFIG_DVB_CX24116=m
-CONFIG_DVB_CX24117=m
-CONFIG_DVB_CX24120=m
-CONFIG_DVB_SI21XX=m
-CONFIG_DVB_TS2020=m
-CONFIG_DVB_DS3000=m
-CONFIG_DVB_MB86A16=m
-CONFIG_DVB_TDA10071=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_SP887X=m
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-CONFIG_DVB_DRXD=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
-CONFIG_DVB_MT352=m
-CONFIG_DVB_ZL10353=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
-CONFIG_DVB_DIB7000M=m
-CONFIG_DVB_DIB7000P=m
-CONFIG_DVB_TDA10048=m
-CONFIG_DVB_AF9013=m
-CONFIG_DVB_EC100=m
-CONFIG_DVB_STV0367=m
-CONFIG_DVB_CXD2820R=m
-CONFIG_DVB_CXD2841ER=m
-CONFIG_DVB_RTL2830=m
-CONFIG_DVB_RTL2832=m
-CONFIG_DVB_RTL2832_SDR=m
-CONFIG_DVB_SI2168=m
-CONFIG_DVB_AS102_FE=m
-CONFIG_DVB_GP8PSK_FE=m
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_TDA10023=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-#
-CONFIG_DVB_NXT200X=m
-CONFIG_DVB_OR51211=m
-CONFIG_DVB_OR51132=m
-CONFIG_DVB_BCM3510=m
-CONFIG_DVB_LGDT330X=m
-CONFIG_DVB_LGDT3305=m
-CONFIG_DVB_LGDT3306A=m
-CONFIG_DVB_LG2160=m
-CONFIG_DVB_S5H1409=m
-CONFIG_DVB_AU8522=m
-CONFIG_DVB_AU8522_DTV=m
-CONFIG_DVB_AU8522_V4L=m
-CONFIG_DVB_S5H1411=m
-
-#
-# ISDB-T (terrestrial) frontends
-#
-CONFIG_DVB_S921=m
-CONFIG_DVB_DIB8000=m
-CONFIG_DVB_MB86A20S=m
-
-#
-# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
-#
-CONFIG_DVB_TC90522=m
-
-#
-# Digital terrestrial only tuners/PLL
-#
-CONFIG_DVB_PLL=m
-CONFIG_DVB_TUNER_DIB0070=m
-CONFIG_DVB_TUNER_DIB0090=m
-
-#
-# SEC control devices for DVB-S
-#
-CONFIG_DVB_DRX39XYJ=m
-CONFIG_DVB_LNBH25=m
-CONFIG_DVB_LNBP21=m
-CONFIG_DVB_LNBP22=m
-CONFIG_DVB_ISL6405=m
-CONFIG_DVB_ISL6421=m
-CONFIG_DVB_ISL6423=m
-CONFIG_DVB_A8293=m
-CONFIG_DVB_SP2=m
-CONFIG_DVB_LGS8GXX=m
-CONFIG_DVB_ATBM8830=m
-CONFIG_DVB_TDA665x=m
-CONFIG_DVB_IX2505V=m
-CONFIG_DVB_M88RS2000=m
-CONFIG_DVB_AF9033=m
-CONFIG_DVB_HORUS3A=m
-CONFIG_DVB_ASCOT2E=m
-CONFIG_DVB_HELENE=m
-
-#
-# Tools to develop new frontends
-#
-# CONFIG_DVB_DUMMY_FE is not set
-
-#
-# Graphics support
-#
-CONFIG_AGP=m
-CONFIG_AGP_ALI=m
-CONFIG_AGP_ATI=m
-CONFIG_AGP_AMD=m
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_NVIDIA=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_SWORKS=m
-CONFIG_AGP_VIA=m
-CONFIG_AGP_EFFICEON=m
-CONFIG_INTEL_GTT=m
-CONFIG_VGA_ARB=y
-CONFIG_VGA_ARB_MAX_GPUS=16
-CONFIG_VGA_SWITCHEROO=y
-CONFIG_DRM=m
-CONFIG_DRM_MIPI_DSI=y
-CONFIG_DRM_DP_AUX_CHARDEV=y
-CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
-CONFIG_DRM_FBDEV_EMULATION=y
-CONFIG_DRM_LOAD_EDID_FIRMWARE=y
-CONFIG_DRM_TTM=m
-CONFIG_DRM_GEM_CMA_HELPER=y
-CONFIG_DRM_KMS_CMA_HELPER=y
-
-#
-# I2C encoder or helper chips
-#
-CONFIG_DRM_I2C_CH7006=m
-CONFIG_DRM_I2C_SIL164=m
-CONFIG_DRM_I2C_NXP_TDA998X=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_RADEON_USERPTR=y
-CONFIG_DRM_AMDGPU=m
-CONFIG_DRM_AMDGPU_SI=y
-CONFIG_DRM_AMDGPU_CIK=y
-CONFIG_DRM_AMDGPU_USERPTR=y
-# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
-
-#
-# ACP (Audio CoProcessor) Configuration
-#
-CONFIG_DRM_AMD_ACP=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_NOUVEAU_DEBUG=5
-CONFIG_NOUVEAU_DEBUG_DEFAULT=3
-CONFIG_DRM_NOUVEAU_BACKLIGHT=y
-CONFIG_DRM_I915=m
-# CONFIG_DRM_I915_ALPHA_SUPPORT is not set
-CONFIG_DRM_I915_CAPTURE_ERROR=y
-CONFIG_DRM_I915_COMPRESS_ERROR=y
-CONFIG_DRM_I915_USERPTR=y
-CONFIG_DRM_VGEM=m
-CONFIG_DRM_VMWGFX=m
-CONFIG_DRM_VMWGFX_FBCON=y
-CONFIG_DRM_GMA500=m
-CONFIG_DRM_GMA600=y
-CONFIG_DRM_GMA3600=y
-CONFIG_DRM_UDL=m
-CONFIG_DRM_AST=m
-CONFIG_DRM_MGAG200=m
-CONFIG_DRM_CIRRUS_QEMU=m
-CONFIG_DRM_QXL=m
-CONFIG_DRM_BOCHS=m
-CONFIG_DRM_VIRTIO_GPU=m
-CONFIG_DRM_PANEL=y
-
-#
-# Display Panels
-#
-# CONFIG_DRM_PANEL_SIMPLE is not set
-# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
-# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
-# CONFIG_DRM_PANEL_LG_LG4573 is not set
-# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
-# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
-# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
-# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
-CONFIG_DRM_BRIDGE=y
-
-#
-# Display Interface Bridges
-#
-CONFIG_DRM_ANALOGIX_ANX78XX=m
-# CONFIG_DRM_DUMB_VGA_DAC is not set
-# CONFIG_DRM_NXP_PTN3460 is not set
-# CONFIG_DRM_PARADE_PS8622 is not set
-# CONFIG_DRM_SIL_SII8620 is not set
-# CONFIG_DRM_SII902X is not set
-# CONFIG_DRM_TOSHIBA_TC358767 is not set
-# CONFIG_DRM_TI_TFP410 is not set
-CONFIG_DRM_I2C_ADV7511=m
-CONFIG_DRM_I2C_ADV7511_AUDIO=y
-# CONFIG_DRM_I2C_ADV7533 is not set
-# CONFIG_DRM_ARCPGU is not set
-CONFIG_DRM_HISI_HIBMC=m
-CONFIG_DRM_MXS=y
-CONFIG_DRM_MXSFB=m
-# CONFIG_DRM_LEGACY is not set
-
-#
-# Frame buffer Devices
-#
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB_CMDLINE=y
-CONFIG_FB_NOTIFY=y
-CONFIG_FB_DDC=m
-CONFIG_FB_BOOT_VESA_SUPPORT=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-CONFIG_FB_SYS_FILLRECT=m
-CONFIG_FB_SYS_COPYAREA=m
-CONFIG_FB_SYS_IMAGEBLIT=m
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-CONFIG_FB_SYS_FOPS=m
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_BACKLIGHT=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=m
-CONFIG_FB_UVESA=m
-CONFIG_FB_VESA=y
-CONFIG_FB_EFI=y
-# CONFIG_FB_N411 is not set
-# CONFIG_FB_HGA is not set
-CONFIG_FB_OPENCORES=m
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I740 is not set
-CONFIG_FB_I810=m
-CONFIG_FB_I810_GTF=y
-CONFIG_FB_I810_I2C=y
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-CONFIG_FB_VIA=m
-CONFIG_FB_VIA_DIRECT_PROCFS=y
-CONFIG_FB_VIA_X_COMPATIBILITY=y
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-CONFIG_FB_VOODOO1=m
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_CARMINE is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_SM501 is not set
-# CONFIG_FB_SMSCUFX is not set
-CONFIG_FB_UDL=m
-# CONFIG_FB_IBM_GXT4500 is not set
-CONFIG_FB_VIRTUAL=m
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_FB_AUO_K190X is not set
-CONFIG_FB_HYPERV=m
-# CONFIG_FB_SIMPLE is not set
-CONFIG_FB_SSD1307=m
-# CONFIG_FB_SM712 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-# CONFIG_LCD_L4F00242T03 is not set
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_ILI922X is not set
-# CONFIG_LCD_ILI9320 is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-CONFIG_LCD_PLATFORM=m
-# CONFIG_LCD_S6E63M0 is not set
-# CONFIG_LCD_LD9040 is not set
-# CONFIG_LCD_AMS369FG06 is not set
-# CONFIG_LCD_LMS501KF03 is not set
-# CONFIG_LCD_HX8357 is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_GENERIC is not set
-CONFIG_BACKLIGHT_LM3533=m
-# CONFIG_BACKLIGHT_PWM is not set
-CONFIG_BACKLIGHT_APPLE=m
-# CONFIG_BACKLIGHT_PM8941_WLED is not set
-# CONFIG_BACKLIGHT_SAHARA is not set
-# CONFIG_BACKLIGHT_ADP8860 is not set
-# CONFIG_BACKLIGHT_ADP8870 is not set
-CONFIG_BACKLIGHT_PCF50633=m
-CONFIG_BACKLIGHT_LM3630A=m
-# CONFIG_BACKLIGHT_LM3639 is not set
-# CONFIG_BACKLIGHT_LP855X is not set
-# CONFIG_BACKLIGHT_OT200 is not set
-# CONFIG_BACKLIGHT_TPS65217 is not set
-# CONFIG_BACKLIGHT_GPIO is not set
-# CONFIG_BACKLIGHT_LV5207LP is not set
-# CONFIG_BACKLIGHT_BD6107 is not set
-CONFIG_VGASTATE=m
-CONFIG_HDMI=y
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-CONFIG_VGACON_SOFT_SCROLLBACK=y
-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_DUMMY_CONSOLE_COLUMNS=80
-CONFIG_DUMMY_CONSOLE_ROWS=25
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_LOGO is not set
-CONFIG_SOUND=m
-CONFIG_SOUND_OSS_CORE=y
-# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_PCM_ELD=y
-CONFIG_SND_PCM_IEC958=y
-CONFIG_SND_DMAENGINE_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_COMPRESS_OFFLOAD=m
-CONFIG_SND_JACK=y
-CONFIG_SND_JACK_INPUT_DEV=y
-CONFIG_SND_SEQUENCER=m
-CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_PCM_TIMER=y
-CONFIG_SND_SEQUENCER_OSS=y
-CONFIG_SND_HRTIMER=m
-CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
-CONFIG_SND_DYNAMIC_MINORS=y
-CONFIG_SND_MAX_CARDS=32
-# CONFIG_SND_SUPPORT_OLD_API is not set
-CONFIG_SND_PROC_FS=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_VMASTER=y
-CONFIG_SND_DMA_SGBUF=y
-CONFIG_SND_RAWMIDI_SEQ=m
-CONFIG_SND_OPL3_LIB_SEQ=m
-CONFIG_SND_OPL4_LIB_SEQ=m
-CONFIG_SND_SBAWE_SEQ=m
-CONFIG_SND_EMU10K1_SEQ=m
-CONFIG_SND_MPU401_UART=m
-CONFIG_SND_OPL3_LIB=m
-CONFIG_SND_OPL4_LIB=m
-CONFIG_SND_VX_LIB=m
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_PCSP is not set
-CONFIG_SND_DUMMY=m
-CONFIG_SND_ALOOP=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-CONFIG_SND_MTS64=m
-CONFIG_SND_SERIAL_U16550=m
-CONFIG_SND_MPU401=m
-CONFIG_SND_PORTMAN2X4=m
-CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
-CONFIG_SND_WSS_LIB=m
-CONFIG_SND_SB_COMMON=m
-CONFIG_SND_SB8_DSP=m
-CONFIG_SND_SB16_DSP=m
-CONFIG_SND_ISA=y
-CONFIG_SND_ADLIB=m
-CONFIG_SND_AD1816A=m
-CONFIG_SND_AD1848=m
-CONFIG_SND_ALS100=m
-CONFIG_SND_AZT1605=m
-CONFIG_SND_AZT2316=m
-CONFIG_SND_AZT2320=m
-CONFIG_SND_CMI8328=m
-CONFIG_SND_CMI8330=m
-CONFIG_SND_CS4231=m
-CONFIG_SND_CS4236=m
-CONFIG_SND_ES1688=m
-CONFIG_SND_ES18XX=m
-CONFIG_SND_SC6000=m
-CONFIG_SND_GUSCLASSIC=m
-CONFIG_SND_GUSEXTREME=m
-CONFIG_SND_GUSMAX=m
-CONFIG_SND_INTERWAVE=m
-CONFIG_SND_INTERWAVE_STB=m
-CONFIG_SND_JAZZ16=m
-CONFIG_SND_OPL3SA2=m
-CONFIG_SND_OPTI92X_AD1848=m
-CONFIG_SND_OPTI92X_CS4231=m
-CONFIG_SND_OPTI93X=m
-CONFIG_SND_MIRO=m
-CONFIG_SND_SB8=m
-CONFIG_SND_SB16=m
-CONFIG_SND_SBAWE=m
-CONFIG_SND_SB16_CSP=y
-CONFIG_SND_SSCAPE=m
-CONFIG_SND_WAVEFRONT=m
-CONFIG_SND_MSND_PINNACLE=m
-CONFIG_SND_MSND_CLASSIC=m
-CONFIG_SND_PCI=y
-CONFIG_SND_AD1889=m
-CONFIG_SND_ALS300=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ASIHPI=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_ATIIXP_MODEM=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AW2=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-# CONFIG_SND_BT87X_OVERCLOCK is not set
-CONFIG_SND_CA0106=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_OXYGEN_LIB=m
-CONFIG_SND_OXYGEN=m
-CONFIG_SND_CS4281=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CS46XX_NEW_DSP=y
-CONFIG_SND_CS5530=m
-CONFIG_SND_CS5535AUDIO=m
-CONFIG_SND_CTXFI=m
-CONFIG_SND_DARLA20=m
-CONFIG_SND_GINA20=m
-CONFIG_SND_LAYLA20=m
-CONFIG_SND_DARLA24=m
-CONFIG_SND_GINA24=m
-CONFIG_SND_LAYLA24=m
-CONFIG_SND_MONA=m
-CONFIG_SND_MIA=m
-CONFIG_SND_ECHO3G=m
-CONFIG_SND_INDIGO=m
-CONFIG_SND_INDIGOIO=m
-CONFIG_SND_INDIGODJ=m
-CONFIG_SND_INDIGOIOX=m
-CONFIG_SND_INDIGODJX=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_EMU10K1X=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
-CONFIG_SND_HDSP=m
-CONFIG_SND_HDSPM=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_LOLA=m
-CONFIG_SND_LX6464ES=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_MAESTRO3_INPUT=y
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_PCXHR=m
-CONFIG_SND_RIPTIDE=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_SIS7019=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VIA82XX_MODEM=m
-CONFIG_SND_VIRTUOSO=m
-CONFIG_SND_VX222=m
-CONFIG_SND_YMFPCI=m
-
-#
-# HD-Audio
-#
-CONFIG_SND_HDA=m
-CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_HWDEP=y
-CONFIG_SND_HDA_RECONFIG=y
-CONFIG_SND_HDA_INPUT_BEEP=y
-CONFIG_SND_HDA_INPUT_BEEP_MODE=1
-CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
-CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
-CONFIG_SND_HDA_CODEC_CA0132=m
-CONFIG_SND_HDA_CODEC_CA0132_DSP=y
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
-CONFIG_SND_HDA_GENERIC=m
-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
-CONFIG_SND_HDA_CORE=m
-CONFIG_SND_HDA_DSP_LOADER=y
-CONFIG_SND_HDA_I915=y
-CONFIG_SND_HDA_EXT_CORE=m
-CONFIG_SND_HDA_PREALLOC_SIZE=4096
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_UA101=m
-CONFIG_SND_USB_USX2Y=m
-CONFIG_SND_USB_CAIAQ=m
-CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_SND_USB_US122L=m
-CONFIG_SND_USB_6FIRE=m
-CONFIG_SND_USB_HIFACE=m
-CONFIG_SND_BCD2000=m
-CONFIG_SND_USB_LINE6=m
-CONFIG_SND_USB_POD=m
-CONFIG_SND_USB_PODHD=m
-CONFIG_SND_USB_TONEPORT=m
-CONFIG_SND_USB_VARIAX=m
-CONFIG_SND_FIREWIRE=y
-CONFIG_SND_FIREWIRE_LIB=m
-CONFIG_SND_DICE=m
-CONFIG_SND_OXFW=m
-CONFIG_SND_ISIGHT=m
-CONFIG_SND_FIREWORKS=m
-CONFIG_SND_BEBOB=m
-CONFIG_SND_FIREWIRE_DIGI00X=m
-CONFIG_SND_FIREWIRE_TASCAM=m
-CONFIG_SND_PCMCIA=y
-CONFIG_SND_VXPOCKET=m
-CONFIG_SND_PDAUDIOCF=m
-CONFIG_SND_SOC=m
-CONFIG_SND_SOC_AC97_BUS=y
-CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
-CONFIG_SND_SOC_COMPRESS=y
-CONFIG_SND_SOC_TOPOLOGY=y
-CONFIG_SND_SOC_AMD_ACP=m
-# CONFIG_SND_ATMEL_SOC is not set
-CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_DESIGNWARE_PCM=m
-
-#
-# SoC Audio for Freescale CPUs
-#
-
-#
-# Common SoC Audio options for Freescale CPUs:
-#
-# CONFIG_SND_SOC_FSL_ASRC is not set
-# CONFIG_SND_SOC_FSL_SAI is not set
-# CONFIG_SND_SOC_FSL_SSI is not set
-# CONFIG_SND_SOC_FSL_SPDIF is not set
-# CONFIG_SND_SOC_FSL_ESAI is not set
-# CONFIG_SND_SOC_IMX_AUDMUX is not set
-# CONFIG_SND_SOC_IMG is not set
-CONFIG_SND_SST_MFLD_PLATFORM=m
-CONFIG_SND_SST_IPC=m
-CONFIG_SND_SST_IPC_ACPI=m
-CONFIG_SND_SOC_INTEL_SST=m
-CONFIG_SND_SOC_INTEL_SST_FIRMWARE=m
-CONFIG_SND_SOC_INTEL_SST_ACPI=m
-CONFIG_SND_SOC_INTEL_SST_MATCH=m
-CONFIG_SND_SOC_INTEL_HASWELL=m
-CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
-CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
-CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
-CONFIG_SND_SOC_INTEL_SKYLAKE=m
-CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
-# CONFIG_SND_SOC_XTFPGA_I2S is not set
-CONFIG_SND_SOC_I2C_AND_SPI=m
-
-#
-# CODEC drivers
-#
-CONFIG_SND_SOC_AC97_CODEC=m
-# CONFIG_SND_SOC_ADAU1701 is not set
-# CONFIG_SND_SOC_ADAU7002 is not set
-# CONFIG_SND_SOC_AK4104 is not set
-# CONFIG_SND_SOC_AK4554 is not set
-# CONFIG_SND_SOC_AK4613 is not set
-# CONFIG_SND_SOC_AK4642 is not set
-# CONFIG_SND_SOC_AK5386 is not set
-# CONFIG_SND_SOC_ALC5623 is not set
-# CONFIG_SND_SOC_BT_SCO is not set
-# CONFIG_SND_SOC_CS35L32 is not set
-# CONFIG_SND_SOC_CS35L33 is not set
-# CONFIG_SND_SOC_CS35L34 is not set
-# CONFIG_SND_SOC_CS42L42 is not set
-# CONFIG_SND_SOC_CS42L51_I2C is not set
-# CONFIG_SND_SOC_CS42L52 is not set
-# CONFIG_SND_SOC_CS42L56 is not set
-# CONFIG_SND_SOC_CS42L73 is not set
-# CONFIG_SND_SOC_CS4265 is not set
-# CONFIG_SND_SOC_CS4270 is not set
-# CONFIG_SND_SOC_CS4271_I2C is not set
-# CONFIG_SND_SOC_CS4271_SPI is not set
-# CONFIG_SND_SOC_CS42XX8_I2C is not set
-# CONFIG_SND_SOC_CS4349 is not set
-# CONFIG_SND_SOC_CS53L30 is not set
-CONFIG_SND_SOC_DA7219=m
-CONFIG_SND_SOC_DMIC=m
-CONFIG_SND_SOC_HDMI_CODEC=m
-# CONFIG_SND_SOC_ES8328 is not set
-# CONFIG_SND_SOC_GTM601 is not set
-CONFIG_SND_SOC_HDAC_HDMI=m
-# CONFIG_SND_SOC_INNO_RK3036 is not set
-CONFIG_SND_SOC_MAX98090=m
-CONFIG_SND_SOC_MAX98357A=m
-# CONFIG_SND_SOC_MAX98504 is not set
-# CONFIG_SND_SOC_MAX9860 is not set
-# CONFIG_SND_SOC_MSM8916_WCD_ANALOG is not set
-# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
-# CONFIG_SND_SOC_PCM1681 is not set
-# CONFIG_SND_SOC_PCM179X_I2C is not set
-# CONFIG_SND_SOC_PCM179X_SPI is not set
-# CONFIG_SND_SOC_PCM3168A_I2C is not set
-# CONFIG_SND_SOC_PCM3168A_SPI is not set
-# CONFIG_SND_SOC_PCM512x_I2C is not set
-# CONFIG_SND_SOC_PCM512x_SPI is not set
-CONFIG_SND_SOC_RL6231=m
-CONFIG_SND_SOC_RL6347A=m
-CONFIG_SND_SOC_RT286=m
-CONFIG_SND_SOC_RT298=m
-# CONFIG_SND_SOC_RT5616 is not set
-# CONFIG_SND_SOC_RT5631 is not set
-CONFIG_SND_SOC_RT5640=m
-CONFIG_SND_SOC_RT5645=m
-CONFIG_SND_SOC_RT5651=m
-CONFIG_SND_SOC_RT5670=m
-CONFIG_SND_SOC_RT5677=m
-CONFIG_SND_SOC_RT5677_SPI=m
-# CONFIG_SND_SOC_SGTL5000 is not set
-CONFIG_SND_SOC_SI476X=m
-# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
-CONFIG_SND_SOC_SPDIF=m
-# CONFIG_SND_SOC_SSM2602_SPI is not set
-# CONFIG_SND_SOC_SSM2602_I2C is not set
-CONFIG_SND_SOC_SSM4567=m
-# CONFIG_SND_SOC_STA32X is not set
-# CONFIG_SND_SOC_STA350 is not set
-# CONFIG_SND_SOC_STI_SAS is not set
-# CONFIG_SND_SOC_TAS2552 is not set
-# CONFIG_SND_SOC_TAS5086 is not set
-# CONFIG_SND_SOC_TAS571X is not set
-# CONFIG_SND_SOC_TAS5720 is not set
-# CONFIG_SND_SOC_TFA9879 is not set
-# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
-# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
-# CONFIG_SND_SOC_TLV320AIC31XX is not set
-# CONFIG_SND_SOC_TLV320AIC3X is not set
-CONFIG_SND_SOC_TS3A227E=m
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8523 is not set
-# CONFIG_SND_SOC_WM8580 is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8728 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8737 is not set
-# CONFIG_SND_SOC_WM8741 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8770 is not set
-# CONFIG_SND_SOC_WM8776 is not set
-# CONFIG_SND_SOC_WM8804_I2C is not set
-# CONFIG_SND_SOC_WM8804_SPI is not set
-# CONFIG_SND_SOC_WM8903 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8962 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8978 is not set
-# CONFIG_SND_SOC_WM8985 is not set
-# CONFIG_SND_SOC_NAU8810 is not set
-CONFIG_SND_SOC_NAU8825=m
-# CONFIG_SND_SOC_TPA6130A2 is not set
-CONFIG_SND_SIMPLE_CARD_UTILS=m
-CONFIG_SND_SIMPLE_CARD=m
-# CONFIG_SND_SIMPLE_SCU_CARD is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID support
-#
-CONFIG_HID=m
-CONFIG_HID_BATTERY_STRENGTH=y
-CONFIG_HIDRAW=y
-CONFIG_UHID=m
-CONFIG_HID_GENERIC=m
-
-#
-# Special HID drivers
-#
-CONFIG_HID_A4TECH=m
-CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=m
-CONFIG_HID_APPLEIR=m
-CONFIG_HID_ASUS=m
-CONFIG_HID_AUREAL=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_BETOP_FF=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_CORSAIR=m
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CMEDIA=m
-CONFIG_HID_CP2112=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_DRAGONRISE=m
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=m
-CONFIG_HID_ELECOM=m
-CONFIG_HID_ELO=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_GEMBIRD=m
-CONFIG_HID_GFRM=m
-CONFIG_HID_HOLTEK=m
-CONFIG_HOLTEK_FF=y
-CONFIG_HID_GT683R=m
-CONFIG_HID_KEYTOUCH=m
-CONFIG_HID_KYE=m
-CONFIG_HID_UCLOGIC=m
-CONFIG_HID_WALTOP=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_ICADE=m
-CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=m
-CONFIG_HID_LCPOWER=m
-CONFIG_HID_LED=m
-CONFIG_HID_LENOVO=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_LOGITECH_DJ=m
-CONFIG_HID_LOGITECH_HIDPP=m
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_LOGIWHEELS_FF=y
-CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MAYFLASH=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_NTRIG=m
-CONFIG_HID_ORTEK=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PENMOUNT=m
-CONFIG_HID_PETALYNX=m
-CONFIG_HID_PICOLCD=m
-CONFIG_HID_PICOLCD_FB=y
-CONFIG_HID_PICOLCD_BACKLIGHT=y
-CONFIG_HID_PICOLCD_LCD=y
-CONFIG_HID_PICOLCD_LEDS=y
-CONFIG_HID_PICOLCD_CIR=y
-CONFIG_HID_PLANTRONICS=m
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_SONY_FF=y
-CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_STEELSERIES=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_HID_RMI=m
-CONFIG_HID_GREENASIA=m
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_HYPERV_MOUSE=m
-CONFIG_HID_SMARTJOYPLUS=m
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=m
-CONFIG_HID_TOPSEED=m
-CONFIG_HID_THINGM=m
-CONFIG_HID_THRUSTMASTER=m
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_HID_UDRAW_PS3=m
-CONFIG_HID_WACOM=m
-CONFIG_HID_WIIMOTE=m
-CONFIG_HID_XINMO=m
-CONFIG_HID_ZEROPLUS=m
-CONFIG_ZEROPLUS_FF=y
-CONFIG_HID_ZYDACRON=m
-CONFIG_HID_SENSOR_HUB=m
-# CONFIG_HID_SENSOR_CUSTOM_SENSOR is not set
-CONFIG_HID_ALPS=m
-
-#
-# USB HID support
-#
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
-
-#
-# I2C HID support
-#
-CONFIG_I2C_HID=m
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_COMMON=m
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB=m
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEFAULT_PERSIST=y
-CONFIG_USB_DYNAMIC_MINORS=y
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-CONFIG_USB_LEDS_TRIGGER_USBPORT=m
-CONFIG_USB_MON=m
-CONFIG_USB_WUSB=m
-CONFIG_USB_WUSB_CBAF=m
-# CONFIG_USB_WUSB_CBAF_DEBUG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_C67X00_HCD=m
-CONFIG_USB_XHCI_HCD=m
-CONFIG_USB_XHCI_PCI=m
-# CONFIG_USB_XHCI_PLATFORM is not set
-CONFIG_USB_EHCI_HCD=m
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_EHCI_TT_NEWSCHED=y
-CONFIG_USB_EHCI_PCI=m
-# CONFIG_USB_EHCI_HCD_PLATFORM is not set
-CONFIG_USB_OXU210HP_HCD=m
-CONFIG_USB_ISP116X_HCD=m
-CONFIG_USB_ISP1362_HCD=m
-# CONFIG_USB_FOTG210_HCD is not set
-CONFIG_USB_MAX3421_HCD=m
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_OHCI_HCD_PCI=m
-# CONFIG_USB_OHCI_HCD_SSB is not set
-# CONFIG_USB_OHCI_HCD_PLATFORM is not set
-CONFIG_USB_UHCI_HCD=m
-CONFIG_USB_U132_HCD=m
-CONFIG_USB_SL811_HCD=m
-# CONFIG_USB_SL811_HCD_ISO is not set
-CONFIG_USB_SL811_CS=m
-CONFIG_USB_R8A66597_HCD=m
-CONFIG_USB_WHCI_HCD=m
-CONFIG_USB_HWA_HCD=m
-# CONFIG_USB_HCD_BCMA is not set
-# CONFIG_USB_HCD_SSB is not set
-# CONFIG_USB_HCD_TEST_MODE is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_WDM=m
-CONFIG_USB_TMC=m
-
-#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
-#
-
-#
-# also be needed; see USB_STORAGE Help for more info
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_REALTEK=m
-CONFIG_REALTEK_AUTOPM=y
-CONFIG_USB_STORAGE_DATAFAB=m
-CONFIG_USB_STORAGE_FREECOM=m
-CONFIG_USB_STORAGE_ISD200=m
-CONFIG_USB_STORAGE_USBAT=m
-CONFIG_USB_STORAGE_SDDR09=m
-CONFIG_USB_STORAGE_SDDR55=m
-CONFIG_USB_STORAGE_JUMPSHOT=m
-CONFIG_USB_STORAGE_ALAUDA=m
-CONFIG_USB_STORAGE_ONETOUCH=m
-CONFIG_USB_STORAGE_KARMA=m
-CONFIG_USB_STORAGE_CYPRESS_ATACB=m
-CONFIG_USB_STORAGE_ENE_UB6250=m
-CONFIG_USB_UAS=m
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_VHCI_HC_PORTS=8
-CONFIG_USBIP_VHCI_NR_HCS=1
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_USB_MUSB_HOST=y
-
-#
-# Platform Glue Layer
-#
-
-#
-# MUSB DMA mode
-#
-CONFIG_MUSB_PIO_ONLY=y
-# CONFIG_USB_DWC3 is not set
-# CONFIG_USB_DWC2 is not set
-# CONFIG_USB_CHIPIDEA is not set
-# CONFIG_USB_ISP1760 is not set
-
-#
-# USB port drivers
-#
-CONFIG_USB_USS720=m
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_SIMPLE=m
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP210X=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_F81232=m
-CONFIG_USB_SERIAL_F8153X=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_IUU=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_METRO=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7715_PARPORT=y
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MXUPORT=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_QUALCOMM=m
-CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SYMBOL=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_WWAN=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_XSENS_MT=m
-CONFIG_USB_SERIAL_WISHBONE=m
-CONFIG_USB_SERIAL_SSU100=m
-CONFIG_USB_SERIAL_QT2=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_SEVSEG=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-# CONFIG_USB_SISUSBVGA_CON is not set
-CONFIG_USB_LD=m
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_IOWARRIOR=m
-CONFIG_USB_TEST=m
-# CONFIG_USB_EHSET_TEST_FIXTURE is not set
-CONFIG_USB_ISIGHTFW=m
-CONFIG_USB_YUREX=m
-CONFIG_USB_EZUSB_FX2=m
-CONFIG_USB_HSIC_USB3503=m
-CONFIG_USB_HSIC_USB4604=m
-CONFIG_USB_LINK_LAYER_TEST=m
-CONFIG_USB_CHAOSKEY=m
-CONFIG_UCSI=m
-CONFIG_USB_ATM=m
-CONFIG_USB_SPEEDTOUCH=m
-CONFIG_USB_CXACRU=m
-CONFIG_USB_UEAGLEATM=m
-CONFIG_USB_XUSBATM=m
-
-#
-# USB Physical Layer drivers
-#
-CONFIG_USB_PHY=y
-CONFIG_NOP_USB_XCEIV=m
-# CONFIG_USB_GPIO_VBUS is not set
-CONFIG_TAHVO_USB=m
-# CONFIG_TAHVO_USB_HOST_BY_DEFAULT is not set
-CONFIG_USB_ISP1301=m
-# CONFIG_USB_GADGET is not set
-CONFIG_USB_LED_TRIG=y
-# CONFIG_USB_ULPI_BUS is not set
-CONFIG_UWB=m
-CONFIG_UWB_HWA=m
-CONFIG_UWB_WHCI=m
-CONFIG_UWB_I1480U=m
-CONFIG_MMC=m
-# CONFIG_MMC_DEBUG is not set
-CONFIG_PWRSEQ_EMMC=m
-CONFIG_PWRSEQ_SIMPLE=m
-CONFIG_MMC_BLOCK=m
-CONFIG_MMC_BLOCK_MINORS=8
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=m
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-CONFIG_MMC_SDHCI=m
-CONFIG_MMC_SDHCI_PCI=m
-CONFIG_MMC_RICOH_MMC=y
-CONFIG_MMC_SDHCI_ACPI=m
-CONFIG_MMC_SDHCI_PLTFM=m
-CONFIG_MMC_SDHCI_OF_ARASAN=m
-# CONFIG_MMC_SDHCI_OF_AT91 is not set
-CONFIG_MMC_SDHCI_CADENCE=m
-# CONFIG_MMC_SDHCI_F_SDH30 is not set
-CONFIG_MMC_WBSD=m
-CONFIG_MMC_TIFM_SD=m
-CONFIG_MMC_SDRICOH_CS=m
-CONFIG_MMC_CB710=m
-CONFIG_MMC_VIA_SDMMC=m
-CONFIG_MMC_VUB300=m
-CONFIG_MMC_USHC=m
-CONFIG_MMC_USDHI6ROL0=m
-CONFIG_MMC_REALTEK_PCI=m
-CONFIG_MMC_REALTEK_USB=m
-CONFIG_MMC_TOSHIBA_PCI=m
-CONFIG_MMC_MTK=m
-CONFIG_MEMSTICK=m
-# CONFIG_MEMSTICK_DEBUG is not set
-
-#
-# MemoryStick drivers
-#
-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
-CONFIG_MSPRO_BLOCK=m
-CONFIG_MS_BLOCK=m
-
-#
-# MemoryStick Host Controller Drivers
-#
-CONFIG_MEMSTICK_TIFM_MS=m
-CONFIG_MEMSTICK_JMICRON_38X=m
-CONFIG_MEMSTICK_R592=m
-CONFIG_MEMSTICK_REALTEK_PCI=m
-CONFIG_MEMSTICK_REALTEK_USB=m
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-CONFIG_LEDS_CLASS_FLASH=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_AAT1290=m
-CONFIG_LEDS_BCM6328=m
-CONFIG_LEDS_BCM6358=m
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3533=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-# CONFIG_LEDS_PCA9532_GPIO is not set
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP3952=m
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_LP5523 is not set
-# CONFIG_LEDS_LP5562 is not set
-# CONFIG_LEDS_LP8501 is not set
-CONFIG_LEDS_LP8860=m
-CONFIG_LEDS_CLEVO_MAIL=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_PWM=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_INTEL_SS4200=m
-CONFIG_LEDS_LT3593=m
-CONFIG_LEDS_DELL_NETBOOKS=m
-CONFIG_LEDS_MC13783=m
-CONFIG_LEDS_TCA6507=m
-CONFIG_LEDS_TLC591XX=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_OT200=m
-CONFIG_LEDS_KTD2692=m
-# CONFIG_LEDS_IS31FL319X is not set
-# CONFIG_LEDS_IS31FL32XX is not set
-
-#
-# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
-#
-CONFIG_LEDS_BLINKM=m
-CONFIG_LEDS_USER=m
-CONFIG_LEDS_NIC78BX=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_DISK=y
-CONFIG_LEDS_TRIGGER_MTD=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-
-#
-# iptables trigger is under Netfilter config (LED target)
-#
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
-CONFIG_LEDS_TRIGGER_PANIC=y
-CONFIG_ACCESSIBILITY=y
-CONFIG_A11Y_BRAILLE_CONSOLE=y
-CONFIG_INFINIBAND=m
-CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_USER_ACCESS=m
-CONFIG_INFINIBAND_USER_MEM=y
-CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
-CONFIG_INFINIBAND_ADDR_TRANS=y
-CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
-CONFIG_INFINIBAND_MTHCA=m
-CONFIG_INFINIBAND_MTHCA_DEBUG=y
-CONFIG_INFINIBAND_CXGB3=m
-# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
-CONFIG_INFINIBAND_CXGB4=m
-CONFIG_INFINIBAND_I40IW=m
-CONFIG_MLX4_INFINIBAND=m
-CONFIG_MLX5_INFINIBAND=m
-CONFIG_INFINIBAND_NES=m
-# CONFIG_INFINIBAND_NES_DEBUG is not set
-CONFIG_INFINIBAND_OCRDMA=m
-CONFIG_INFINIBAND_VMWARE_PVRDMA=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_IPOIB=m
-CONFIG_INFINIBAND_IPOIB_CM=y
-CONFIG_INFINIBAND_IPOIB_DEBUG=y
-# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
-CONFIG_INFINIBAND_SRP=m
-CONFIG_INFINIBAND_SRPT=m
-CONFIG_INFINIBAND_ISER=m
-CONFIG_INFINIBAND_ISERT=m
-CONFIG_RDMA_RXE=m
-CONFIG_EDAC_ATOMIC_SCRUB=y
-CONFIG_EDAC_SUPPORT=y
-CONFIG_EDAC=y
-CONFIG_EDAC_LEGACY_SYSFS=y
-# CONFIG_EDAC_DEBUG is not set
-CONFIG_EDAC_DECODE_MCE=m
-CONFIG_EDAC_MM_EDAC=m
-CONFIG_EDAC_AMD64=m
-CONFIG_EDAC_AMD64_ERROR_INJECTION=y
-CONFIG_EDAC_AMD76X=m
-CONFIG_EDAC_E7XXX=m
-CONFIG_EDAC_E752X=m
-CONFIG_EDAC_I82875P=m
-CONFIG_EDAC_I82975X=m
-CONFIG_EDAC_I3000=m
-CONFIG_EDAC_I3200=m
-CONFIG_EDAC_IE31200=m
-CONFIG_EDAC_X38=m
-CONFIG_EDAC_I5400=m
-CONFIG_EDAC_I7CORE=m
-CONFIG_EDAC_I82860=m
-CONFIG_EDAC_R82600=m
-CONFIG_EDAC_I5000=m
-CONFIG_EDAC_I5100=m
-CONFIG_EDAC_I7300=m
-CONFIG_RTC_LIB=y
-CONFIG_RTC_MC146818_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_SYSTOHC=y
-CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-CONFIG_RTC_DRV_TEST=m
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_ABB5ZES3 is not set
-CONFIG_RTC_DRV_ABX80X=m
-CONFIG_RTC_DRV_DS1307=m
-CONFIG_RTC_DRV_DS1307_HWMON=y
-# CONFIG_RTC_DRV_DS1307_CENTURY is not set
-CONFIG_RTC_DRV_DS1374=m
-CONFIG_RTC_DRV_DS1374_WDT=y
-CONFIG_RTC_DRV_DS1672=m
-CONFIG_RTC_DRV_HYM8563=m
-CONFIG_RTC_DRV_MAX6900=m
-CONFIG_RTC_DRV_RK808=m
-CONFIG_RTC_DRV_RS5C372=m
-CONFIG_RTC_DRV_ISL1208=m
-CONFIG_RTC_DRV_ISL12022=m
-CONFIG_RTC_DRV_X1205=m
-CONFIG_RTC_DRV_PCF8523=m
-CONFIG_RTC_DRV_PCF85063=m
-CONFIG_RTC_DRV_PCF8563=m
-CONFIG_RTC_DRV_PCF8583=m
-CONFIG_RTC_DRV_M41T80=m
-CONFIG_RTC_DRV_M41T80_WDT=y
-CONFIG_RTC_DRV_BQ32K=m
-CONFIG_RTC_DRV_S35390A=m
-CONFIG_RTC_DRV_FM3130=m
-CONFIG_RTC_DRV_RX8010=m
-CONFIG_RTC_DRV_RX8581=m
-CONFIG_RTC_DRV_RX8025=m
-CONFIG_RTC_DRV_EM3027=m
-# CONFIG_RTC_DRV_RV8803 is not set
-
-#
-# SPI RTC drivers
-#
-# CONFIG_RTC_DRV_M41T93 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_DS1302 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1343 is not set
-# CONFIG_RTC_DRV_DS1347 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-CONFIG_RTC_DRV_MAX6916=m
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RX4581 is not set
-# CONFIG_RTC_DRV_RX6110 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_PCF2123 is not set
-# CONFIG_RTC_DRV_MCP795 is not set
-CONFIG_RTC_I2C_AND_SPI=y
-
-#
-# SPI and I2C RTC drivers
-#
-CONFIG_RTC_DRV_DS3232=m
-CONFIG_RTC_DRV_PCF2127=m
-CONFIG_RTC_DRV_RV3029C2=m
-CONFIG_RTC_DRV_RV3029_HWMON=y
-
-#
-# Platform RTC drivers
-#
-CONFIG_RTC_DRV_CMOS=y
-CONFIG_RTC_DRV_DS1286=m
-CONFIG_RTC_DRV_DS1511=m
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1685_FAMILY=m
-CONFIG_RTC_DRV_DS1685=y
-# CONFIG_RTC_DRV_DS1689 is not set
-# CONFIG_RTC_DRV_DS17285 is not set
-# CONFIG_RTC_DRV_DS17485 is not set
-# CONFIG_RTC_DRV_DS17885 is not set
-# CONFIG_RTC_DS1685_PROC_REGS is not set
-CONFIG_RTC_DS1685_SYSFS_REGS=y
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_DS2404=m
-CONFIG_RTC_DRV_STK17TA8=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_M48T35=m
-CONFIG_RTC_DRV_M48T59=m
-CONFIG_RTC_DRV_MSM6242=m
-CONFIG_RTC_DRV_BQ4802=m
-CONFIG_RTC_DRV_RP5C01=m
-CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_ZYNQMP=m
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_SNVS=m
-CONFIG_RTC_DRV_R7301=m
-
-#
-# HID Sensor RTC drivers
-#
-# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
-CONFIG_DMADEVICES=y
-# CONFIG_DMADEVICES_DEBUG is not set
-
-#
-# DMA Devices
-#
-CONFIG_DMA_ENGINE=y
-CONFIG_DMA_VIRTUAL_CHANNELS=y
-CONFIG_DMA_ACPI=y
-CONFIG_DMA_OF=y
-CONFIG_FSL_EDMA=m
-CONFIG_INTEL_IDMA64=m
-CONFIG_PCH_DMA=m
-# CONFIG_QCOM_HIDMA_MGMT is not set
-# CONFIG_QCOM_HIDMA is not set
-CONFIG_DW_DMAC_CORE=y
-CONFIG_DW_DMAC=y
-CONFIG_DW_DMAC_PCI=y
-CONFIG_HSU_DMA=y
-
-#
-# DMA Clients
-#
-CONFIG_ASYNC_TX_DMA=y
-# CONFIG_DMATEST is not set
-
-#
-# DMABUF options
-#
-CONFIG_SYNC_FILE=y
-# CONFIG_SW_SYNC is not set
-CONFIG_AUXDISPLAY=y
-CONFIG_KS0108=m
-CONFIG_KS0108_PORT=0x378
-CONFIG_KS0108_DELAY=2
-CONFIG_CFAG12864B=m
-CONFIG_CFAG12864B_RATE=20
-# CONFIG_IMG_ASCII_LCD is not set
-# CONFIG_HT16K33 is not set
-CONFIG_UIO=m
-CONFIG_UIO_CIF=m
-CONFIG_UIO_PDRV_GENIRQ=m
-# CONFIG_UIO_DMEM_GENIRQ is not set
-CONFIG_UIO_AEC=m
-CONFIG_UIO_SERCOS3=m
-CONFIG_UIO_PCI_GENERIC=m
-CONFIG_UIO_NETX=m
-CONFIG_UIO_PRUSS=m
-# CONFIG_UIO_MF624 is not set
-CONFIG_UIO_HV_GENERIC=m
-CONFIG_VFIO_IOMMU_TYPE1=m
-CONFIG_VFIO_VIRQFD=m
-CONFIG_VFIO=m
-# CONFIG_VFIO_NOIOMMU is not set
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
-CONFIG_VFIO_PCI_MMAP=y
-CONFIG_VFIO_PCI_INTX=y
-CONFIG_VFIO_PCI_IGD=y
-CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
-CONFIG_IRQ_BYPASS_MANAGER=m
-CONFIG_VIRT_DRIVERS=y
-CONFIG_VIRTIO=m
-
-#
-# Virtio drivers
-#
-CONFIG_VIRTIO_PCI=m
-CONFIG_VIRTIO_PCI_LEGACY=y
-CONFIG_VIRTIO_BALLOON=m
-CONFIG_VIRTIO_INPUT=m
-CONFIG_VIRTIO_MMIO=m
-CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
-
-#
-# Microsoft Hyper-V guest support
-#
-CONFIG_HYPERV=m
-CONFIG_HYPERV_UTILS=m
-CONFIG_HYPERV_BALLOON=m
-CONFIG_STAGING=y
-CONFIG_PRISM2_USB=m
-CONFIG_COMEDI=m
-# CONFIG_COMEDI_DEBUG is not set
-CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
-CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
-CONFIG_COMEDI_MISC_DRIVERS=y
-CONFIG_COMEDI_BOND=m
-CONFIG_COMEDI_TEST=m
-CONFIG_COMEDI_PARPORT=m
-CONFIG_COMEDI_SERIAL2002=m
-CONFIG_COMEDI_SSV_DNP=m
-CONFIG_COMEDI_ISA_DRIVERS=y
-CONFIG_COMEDI_PCL711=m
-CONFIG_COMEDI_PCL724=m
-CONFIG_COMEDI_PCL726=m
-CONFIG_COMEDI_PCL730=m
-CONFIG_COMEDI_PCL812=m
-CONFIG_COMEDI_PCL816=m
-CONFIG_COMEDI_PCL818=m
-CONFIG_COMEDI_PCM3724=m
-CONFIG_COMEDI_AMPLC_DIO200_ISA=m
-CONFIG_COMEDI_AMPLC_PC236_ISA=m
-CONFIG_COMEDI_AMPLC_PC263_ISA=m
-CONFIG_COMEDI_RTI800=m
-CONFIG_COMEDI_RTI802=m
-CONFIG_COMEDI_DAC02=m
-CONFIG_COMEDI_DAS16M1=m
-CONFIG_COMEDI_DAS08_ISA=m
-CONFIG_COMEDI_DAS16=m
-CONFIG_COMEDI_DAS800=m
-CONFIG_COMEDI_DAS1800=m
-CONFIG_COMEDI_DAS6402=m
-CONFIG_COMEDI_DT2801=m
-CONFIG_COMEDI_DT2811=m
-CONFIG_COMEDI_DT2814=m
-CONFIG_COMEDI_DT2815=m
-CONFIG_COMEDI_DT2817=m
-CONFIG_COMEDI_DT282X=m
-CONFIG_COMEDI_DMM32AT=m
-CONFIG_COMEDI_FL512=m
-CONFIG_COMEDI_AIO_AIO12_8=m
-CONFIG_COMEDI_AIO_IIRO_16=m
-CONFIG_COMEDI_II_PCI20KC=m
-CONFIG_COMEDI_C6XDIGIO=m
-CONFIG_COMEDI_MPC624=m
-CONFIG_COMEDI_ADQ12B=m
-CONFIG_COMEDI_NI_AT_A2150=m
-CONFIG_COMEDI_NI_AT_AO=m
-CONFIG_COMEDI_NI_ATMIO=m
-CONFIG_COMEDI_NI_ATMIO16D=m
-CONFIG_COMEDI_NI_LABPC_ISA=m
-CONFIG_COMEDI_PCMAD=m
-CONFIG_COMEDI_PCMDA12=m
-CONFIG_COMEDI_PCMMIO=m
-CONFIG_COMEDI_PCMUIO=m
-CONFIG_COMEDI_MULTIQ3=m
-CONFIG_COMEDI_S526=m
-CONFIG_COMEDI_PCI_DRIVERS=m
-CONFIG_COMEDI_8255_PCI=m
-CONFIG_COMEDI_ADDI_WATCHDOG=m
-CONFIG_COMEDI_ADDI_APCI_1032=m
-CONFIG_COMEDI_ADDI_APCI_1500=m
-CONFIG_COMEDI_ADDI_APCI_1516=m
-CONFIG_COMEDI_ADDI_APCI_1564=m
-CONFIG_COMEDI_ADDI_APCI_16XX=m
-CONFIG_COMEDI_ADDI_APCI_2032=m
-CONFIG_COMEDI_ADDI_APCI_2200=m
-CONFIG_COMEDI_ADDI_APCI_3120=m
-CONFIG_COMEDI_ADDI_APCI_3501=m
-CONFIG_COMEDI_ADDI_APCI_3XXX=m
-CONFIG_COMEDI_ADL_PCI6208=m
-CONFIG_COMEDI_ADL_PCI7X3X=m
-CONFIG_COMEDI_ADL_PCI8164=m
-CONFIG_COMEDI_ADL_PCI9111=m
-CONFIG_COMEDI_ADL_PCI9118=m
-CONFIG_COMEDI_ADV_PCI1710=m
-CONFIG_COMEDI_ADV_PCI1720=m
-CONFIG_COMEDI_ADV_PCI1723=m
-CONFIG_COMEDI_ADV_PCI1724=m
-CONFIG_COMEDI_ADV_PCI1760=m
-CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200_PCI=m
-CONFIG_COMEDI_AMPLC_PC236_PCI=m
-CONFIG_COMEDI_AMPLC_PC263_PCI=m
-CONFIG_COMEDI_AMPLC_PCI224=m
-CONFIG_COMEDI_AMPLC_PCI230=m
-CONFIG_COMEDI_CONTEC_PCI_DIO=m
-CONFIG_COMEDI_DAS08_PCI=m
-CONFIG_COMEDI_DT3000=m
-CONFIG_COMEDI_DYNA_PCI10XX=m
-CONFIG_COMEDI_GSC_HPDI=m
-CONFIG_COMEDI_MF6X4=m
-CONFIG_COMEDI_ICP_MULTI=m
-CONFIG_COMEDI_DAQBOARD2000=m
-CONFIG_COMEDI_JR3_PCI=m
-CONFIG_COMEDI_KE_COUNTER=m
-CONFIG_COMEDI_CB_PCIDAS64=m
-CONFIG_COMEDI_CB_PCIDAS=m
-CONFIG_COMEDI_CB_PCIDDA=m
-# CONFIG_COMEDI_CB_PCIMDAS is not set
-CONFIG_COMEDI_CB_PCIMDDA=m
-CONFIG_COMEDI_ME4000=m
-CONFIG_COMEDI_ME_DAQ=m
-CONFIG_COMEDI_NI_6527=m
-CONFIG_COMEDI_NI_65XX=m
-CONFIG_COMEDI_NI_660X=m
-CONFIG_COMEDI_NI_670X=m
-CONFIG_COMEDI_NI_LABPC_PCI=m
-CONFIG_COMEDI_NI_PCIDIO=m
-CONFIG_COMEDI_NI_PCIMIO=m
-CONFIG_COMEDI_RTD520=m
-CONFIG_COMEDI_S626=m
-CONFIG_COMEDI_MITE=m
-CONFIG_COMEDI_NI_TIOCMD=m
-CONFIG_COMEDI_PCMCIA_DRIVERS=m
-CONFIG_COMEDI_CB_DAS16_CS=m
-CONFIG_COMEDI_DAS08_CS=m
-CONFIG_COMEDI_NI_DAQ_700_CS=m
-CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
-CONFIG_COMEDI_NI_LABPC_CS=m
-CONFIG_COMEDI_NI_MIO_CS=m
-CONFIG_COMEDI_QUATECH_DAQP_CS=m
-CONFIG_COMEDI_USB_DRIVERS=m
-CONFIG_COMEDI_DT9812=m
-CONFIG_COMEDI_NI_USB6501=m
-CONFIG_COMEDI_USBDUX=m
-CONFIG_COMEDI_USBDUXFAST=m
-CONFIG_COMEDI_USBDUXSIGMA=m
-CONFIG_COMEDI_VMK80XX=m
-CONFIG_COMEDI_8254=m
-CONFIG_COMEDI_8255=m
-CONFIG_COMEDI_8255_SA=m
-CONFIG_COMEDI_KCOMEDILIB=m
-CONFIG_COMEDI_AMPLC_DIO200=m
-CONFIG_COMEDI_AMPLC_PC236=m
-CONFIG_COMEDI_DAS08=m
-CONFIG_COMEDI_ISADMA=m
-CONFIG_COMEDI_NI_LABPC=m
-CONFIG_COMEDI_NI_LABPC_ISADMA=m
-CONFIG_COMEDI_NI_TIO=m
-CONFIG_FB_OLPC_DCON=m
-CONFIG_FB_OLPC_DCON_1=y
-CONFIG_FB_OLPC_DCON_1_5=y
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTLLIB_CRYPTO_CCMP=m
-CONFIG_RTLLIB_CRYPTO_TKIP=m
-CONFIG_RTLLIB_CRYPTO_WEP=m
-CONFIG_RTL8192E=m
-CONFIG_R8712U=m
-CONFIG_R8188EU=m
-CONFIG_88EU_AP_MODE=y
-CONFIG_RTS5208=m
-CONFIG_VT6655=m
-CONFIG_VT6656=m
-
-#
-# IIO staging drivers
-#
-
-#
-# Accelerometers
-#
-# CONFIG_ADIS16201 is not set
-# CONFIG_ADIS16203 is not set
-# CONFIG_ADIS16209 is not set
-# CONFIG_ADIS16240 is not set
-
-#
-# Analog to digital converters
-#
-# CONFIG_AD7606 is not set
-# CONFIG_AD7780 is not set
-# CONFIG_AD7816 is not set
-# CONFIG_AD7192 is not set
-# CONFIG_AD7280 is not set
-
-#
-# Analog digital bi-direction converters
-#
-# CONFIG_ADT7316 is not set
-
-#
-# Capacitance to digital converters
-#
-# CONFIG_AD7150 is not set
-# CONFIG_AD7152 is not set
-# CONFIG_AD7746 is not set
-
-#
-# Direct Digital Synthesis
-#
-# CONFIG_AD9832 is not set
-# CONFIG_AD9834 is not set
-
-#
-# Digital gyroscope sensors
-#
-# CONFIG_ADIS16060 is not set
-
-#
-# Network Analyzer, Impedance Converters
-#
-# CONFIG_AD5933 is not set
-
-#
-# Light sensors
-#
-# CONFIG_SENSORS_ISL29028 is not set
-# CONFIG_TSL2x7x is not set
-
-#
-# Active energy metering IC
-#
-# CONFIG_ADE7753 is not set
-# CONFIG_ADE7754 is not set
-# CONFIG_ADE7758 is not set
-# CONFIG_ADE7759 is not set
-# CONFIG_ADE7854 is not set
-
-#
-# Resolver to digital converters
-#
-# CONFIG_AD2S90 is not set
-# CONFIG_AD2S1200 is not set
-# CONFIG_AD2S1210 is not set
-
-#
-# Triggers - standalone
-#
-# CONFIG_FB_SM750 is not set
-CONFIG_FB_XGI=m
-
-#
-# Speakup console speech
-#
-CONFIG_SPEAKUP=m
-CONFIG_SPEAKUP_SYNTH_ACNTSA=m
-CONFIG_SPEAKUP_SYNTH_ACNTPC=m
-CONFIG_SPEAKUP_SYNTH_APOLLO=m
-CONFIG_SPEAKUP_SYNTH_AUDPTR=m
-CONFIG_SPEAKUP_SYNTH_BNS=m
-CONFIG_SPEAKUP_SYNTH_DECTLK=m
-CONFIG_SPEAKUP_SYNTH_DECEXT=m
-CONFIG_SPEAKUP_SYNTH_DECPC=m
-CONFIG_SPEAKUP_SYNTH_DTLK=m
-CONFIG_SPEAKUP_SYNTH_KEYPC=m
-CONFIG_SPEAKUP_SYNTH_LTLK=m
-CONFIG_SPEAKUP_SYNTH_SOFT=m
-CONFIG_SPEAKUP_SYNTH_SPKOUT=m
-CONFIG_SPEAKUP_SYNTH_TXPRT=m
-CONFIG_SPEAKUP_SYNTH_DUMMY=m
-CONFIG_STAGING_MEDIA=y
-CONFIG_I2C_BCM2048=m
-CONFIG_DVB_CXD2099=m
-CONFIG_LIRC_STAGING=y
-CONFIG_LIRC_BT829=m
-CONFIG_LIRC_IMON=m
-CONFIG_LIRC_PARALLEL=m
-CONFIG_LIRC_SASEM=m
-CONFIG_LIRC_SIR=m
-CONFIG_LIRC_ZILOG=m
-
-#
-# Android
-#
-# CONFIG_STAGING_BOARD is not set
-CONFIG_LTE_GDM724X=m
-CONFIG_FIREWIRE_SERIAL=m
-CONFIG_FWTTY_MAX_TOTAL_PORTS=64
-CONFIG_FWTTY_MAX_CARD_PORTS=32
-CONFIG_LNET=m
-CONFIG_LNET_MAX_PAYLOAD=1048576
-CONFIG_LNET_SELFTEST=m
-CONFIG_LUSTRE_FS=m
-CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER=8192
-# CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK is not set
-CONFIG_DGNC=m
-CONFIG_GS_FPGABOOT=m
-CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
-# CONFIG_FB_TFT is not set
-# CONFIG_WILC1000_SDIO is not set
-# CONFIG_WILC1000_SPI is not set
-# CONFIG_MOST is not set
-
-#
-# Old ISDN4Linux (deprecated)
-#
-CONFIG_ISDN_DRV_ICN=m
-CONFIG_ISDN_DRV_PCBIT=m
-CONFIG_ISDN_DRV_ACT2000=m
-# CONFIG_KS7010 is not set
-# CONFIG_GREYBUS is not set
-CONFIG_X86_PLATFORM_DEVICES=y
-CONFIG_ACER_WMI=m
-CONFIG_ACERHDF=m
-CONFIG_ALIENWARE_WMI=m
-CONFIG_ASUS_LAPTOP=m
-CONFIG_DELL_SMBIOS=m
-CONFIG_DELL_LAPTOP=m
-CONFIG_DELL_WMI=m
-CONFIG_DELL_WMI_AIO=m
-CONFIG_DELL_SMO8800=m
-CONFIG_DELL_RBTN=m
-CONFIG_FUJITSU_LAPTOP=m
-# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
-CONFIG_FUJITSU_TABLET=m
-CONFIG_AMILO_RFKILL=m
-CONFIG_TC1100_WMI=m
-CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
-CONFIG_HP_WMI=m
-CONFIG_MSI_LAPTOP=m
-CONFIG_PANASONIC_LAPTOP=m
-CONFIG_COMPAL_LAPTOP=m
-CONFIG_SONY_LAPTOP=m
-# CONFIG_SONYPI_COMPAT is not set
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_SURFACE3_WMI=m
-CONFIG_THINKPAD_ACPI=m
-CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
-# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
-# CONFIG_THINKPAD_ACPI_DEBUG is not set
-# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
-CONFIG_THINKPAD_ACPI_VIDEO=y
-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_SENSORS_HDAPS=m
-CONFIG_INTEL_MENLOW=m
-CONFIG_EEEPC_LAPTOP=m
-CONFIG_ASUS_WMI=m
-CONFIG_ASUS_NB_WMI=m
-CONFIG_EEEPC_WMI=m
-CONFIG_ASUS_WIRELESS=m
-CONFIG_ACPI_WMI=m
-CONFIG_MSI_WMI=m
-CONFIG_TOPSTAR_LAPTOP=m
-CONFIG_ACPI_TOSHIBA=m
-CONFIG_TOSHIBA_BT_RFKILL=m
-CONFIG_TOSHIBA_HAPS=m
-CONFIG_TOSHIBA_WMI=m
-CONFIG_ACPI_CMPC=m
-CONFIG_INTEL_HID_EVENT=m
-CONFIG_INTEL_VBTN=m
-CONFIG_INTEL_IPS=m
-CONFIG_INTEL_PMC_CORE=y
-CONFIG_IBM_RTL=m
-CONFIG_XO1_RFKILL=m
-CONFIG_XO15_EBOOK=m
-CONFIG_SAMSUNG_LAPTOP=m
-CONFIG_MXM_WMI=m
-CONFIG_INTEL_OAKTRAIL=m
-CONFIG_SAMSUNG_Q10=m
-CONFIG_APPLE_GMUX=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-CONFIG_PVPANIC=m
-CONFIG_INTEL_PMC_IPC=m
-CONFIG_INTEL_BXTWC_PMIC_TMU=m
-CONFIG_SURFACE_PRO3_BUTTON=m
-CONFIG_SURFACE_3_BUTTON=m
-CONFIG_INTEL_PUNIT_IPC=m
-# CONFIG_MLX_CPLD_PLATFORM is not set
-CONFIG_CHROME_PLATFORMS=y
-CONFIG_CHROMEOS_LAPTOP=m
-CONFIG_CHROMEOS_PSTORE=m
-CONFIG_CROS_EC_CHARDEV=m
-CONFIG_CROS_EC_LPC=m
-CONFIG_CROS_EC_PROTO=y
-CONFIG_CROS_KBD_LED_BACKLIGHT=m
-CONFIG_CLKDEV_LOOKUP=y
-CONFIG_HAVE_CLK_PREPARE=y
-CONFIG_COMMON_CLK=y
-
-#
-# Common Clock Framework
-#
-CONFIG_COMMON_CLK_RK808=m
-# CONFIG_COMMON_CLK_SI5351 is not set
-# CONFIG_COMMON_CLK_SI514 is not set
-# CONFIG_COMMON_CLK_SI570 is not set
-# CONFIG_COMMON_CLK_CDCE706 is not set
-# CONFIG_COMMON_CLK_CDCE925 is not set
-# CONFIG_COMMON_CLK_CS2000_CP is not set
-# CONFIG_COMMON_CLK_NXP is not set
-# CONFIG_COMMON_CLK_PWM is not set
-# CONFIG_COMMON_CLK_PXA is not set
-# CONFIG_COMMON_CLK_PIC32 is not set
-# CONFIG_COMMON_CLK_MT2701 is not set
-# CONFIG_COMMON_CLK_MT2701_MMSYS is not set
-# CONFIG_COMMON_CLK_MT2701_IMGSYS is not set
-# CONFIG_COMMON_CLK_MT2701_VDECSYS is not set
-# CONFIG_COMMON_CLK_MT2701_HIFSYS is not set
-# CONFIG_COMMON_CLK_MT2701_ETHSYS is not set
-# CONFIG_COMMON_CLK_MT2701_BDPSYS is not set
-
-#
-# Hardware Spinlock drivers
-#
-
-#
-# Clock Source drivers
-#
-CONFIG_CLKSRC_I8253=y
-CONFIG_CLKEVT_I8253=y
-CONFIG_I8253_LOCK=y
-CONFIG_CLKBLD_I8253=y
-# CONFIG_ATMEL_PIT is not set
-# CONFIG_SH_TIMER_CMT is not set
-# CONFIG_SH_TIMER_MTU2 is not set
-# CONFIG_SH_TIMER_TMU is not set
-# CONFIG_EM_TIMER_STI is not set
-CONFIG_MAILBOX=y
-# CONFIG_PLATFORM_MHU is not set
-CONFIG_PCC=y
-# CONFIG_ALTERA_MBOX is not set
-# CONFIG_MAILBOX_TEST is not set
-CONFIG_IOMMU_API=y
-CONFIG_IOMMU_SUPPORT=y
-
-#
-# Generic IOMMU Pagetable Support
-#
-CONFIG_IOMMU_IOVA=y
-CONFIG_OF_IOMMU=y
-CONFIG_DMAR_TABLE=y
-CONFIG_INTEL_IOMMU=y
-CONFIG_INTEL_IOMMU_SVM=y
-# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
-CONFIG_INTEL_IOMMU_FLOPPY_WA=y
-
-#
-# Remoteproc drivers
-#
-CONFIG_REMOTEPROC=m
-
-#
-# Rpmsg drivers
-#
-
-#
-# SOC (System On Chip) specific Drivers
-#
-
-#
-# Broadcom SoC drivers
-#
-# CONFIG_SUNXI_SRAM is not set
-# CONFIG_SOC_TI is not set
-CONFIG_PM_DEVFREQ=y
-
-#
-# DEVFREQ Governors
-#
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
-CONFIG_DEVFREQ_GOV_PERFORMANCE=m
-CONFIG_DEVFREQ_GOV_POWERSAVE=m
-CONFIG_DEVFREQ_GOV_USERSPACE=m
-CONFIG_DEVFREQ_GOV_PASSIVE=m
-
-#
-# DEVFREQ Drivers
-#
-# CONFIG_PM_DEVFREQ_EVENT is not set
-CONFIG_EXTCON=m
-
-#
-# Extcon Device Drivers
-#
-# CONFIG_EXTCON_ADC_JACK is not set
-# CONFIG_EXTCON_ARIZONA is not set
-CONFIG_EXTCON_GPIO=m
-# CONFIG_EXTCON_MAX3355 is not set
-# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
-# CONFIG_EXTCON_RT8973A is not set
-CONFIG_EXTCON_SM5502=m
-# CONFIG_EXTCON_USB_GPIO is not set
-CONFIG_MEMORY=y
-CONFIG_IIO=m
-CONFIG_IIO_BUFFER=y
-CONFIG_IIO_BUFFER_CB=m
-CONFIG_IIO_KFIFO_BUF=m
-CONFIG_IIO_TRIGGERED_BUFFER=m
-CONFIG_IIO_CONFIGFS=m
-CONFIG_IIO_TRIGGER=y
-CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
-CONFIG_IIO_SW_DEVICE=m
-CONFIG_IIO_SW_TRIGGER=m
-
-#
-# Accelerometers
-#
-# CONFIG_BMA180 is not set
-# CONFIG_BMA220 is not set
-# CONFIG_BMC150_ACCEL is not set
-# CONFIG_DA280 is not set
-# CONFIG_DA311 is not set
-# CONFIG_DMARD06 is not set
-# CONFIG_DMARD09 is not set
-# CONFIG_DMARD10 is not set
-CONFIG_HID_SENSOR_ACCEL_3D=m
-CONFIG_IIO_ST_ACCEL_3AXIS=m
-CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
-CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
-# CONFIG_KXSD9 is not set
-CONFIG_KXCJK1013=m
-# CONFIG_MC3230 is not set
-# CONFIG_MMA7455_I2C is not set
-# CONFIG_MMA7455_SPI is not set
-CONFIG_MMA7660=m
-# CONFIG_MMA8452 is not set
-# CONFIG_MMA9551 is not set
-# CONFIG_MMA9553 is not set
-# CONFIG_MXC4005 is not set
-# CONFIG_MXC6255 is not set
-# CONFIG_SCA3000 is not set
-# CONFIG_STK8312 is not set
-# CONFIG_STK8BA50 is not set
-
-#
-# Analog to digital converters
-#
-# CONFIG_AD7266 is not set
-# CONFIG_AD7291 is not set
-# CONFIG_AD7298 is not set
-# CONFIG_AD7476 is not set
-# CONFIG_AD7766 is not set
-# CONFIG_AD7791 is not set
-# CONFIG_AD7793 is not set
-# CONFIG_AD7887 is not set
-# CONFIG_AD7923 is not set
-# CONFIG_AD799X is not set
-# CONFIG_ENVELOPE_DETECTOR is not set
-# CONFIG_HI8435 is not set
-# CONFIG_INA2XX_ADC is not set
-# CONFIG_LTC2485 is not set
-# CONFIG_MAX1027 is not set
-# CONFIG_MAX1363 is not set
-# CONFIG_MCP320X is not set
-# CONFIG_MCP3422 is not set
-# CONFIG_NAU7802 is not set
-# CONFIG_QCOM_SPMI_IADC is not set
-# CONFIG_QCOM_SPMI_VADC is not set
-# CONFIG_STX104 is not set
-# CONFIG_TI_ADC081C is not set
-# CONFIG_TI_ADC0832 is not set
-# CONFIG_TI_ADC12138 is not set
-# CONFIG_TI_ADC128S052 is not set
-# CONFIG_TI_ADC161S626 is not set
-# CONFIG_TI_ADS1015 is not set
-# CONFIG_TI_ADS8688 is not set
-# CONFIG_TI_AM335X_ADC is not set
-# CONFIG_VF610_ADC is not set
-# CONFIG_VIPERBOARD_ADC is not set
-
-#
-# Amplifiers
-#
-# CONFIG_AD8366 is not set
-
-#
-# Chemical Sensors
-#
-# CONFIG_ATLAS_PH_SENSOR is not set
-# CONFIG_IAQCORE is not set
-# CONFIG_VZ89X is not set
-CONFIG_IIO_CROS_EC_SENSORS_CORE=m
-CONFIG_IIO_CROS_EC_SENSORS=m
-
-#
-# Hid Sensor IIO Common
-#
-CONFIG_HID_SENSOR_IIO_COMMON=m
-CONFIG_HID_SENSOR_IIO_TRIGGER=m
-
-#
-# SSP Sensor Common
-#
-# CONFIG_IIO_SSP_SENSORHUB is not set
-CONFIG_IIO_ST_SENSORS_I2C=m
-CONFIG_IIO_ST_SENSORS_SPI=m
-CONFIG_IIO_ST_SENSORS_CORE=m
-
-#
-# Counters
-#
-# CONFIG_104_QUAD_8 is not set
-
-#
-# Digital to analog converters
-#
-# CONFIG_AD5064 is not set
-# CONFIG_AD5360 is not set
-# CONFIG_AD5380 is not set
-# CONFIG_AD5421 is not set
-# CONFIG_AD5446 is not set
-# CONFIG_AD5449 is not set
-# CONFIG_AD5592R is not set
-# CONFIG_AD5593R is not set
-# CONFIG_AD5504 is not set
-# CONFIG_AD5624R_SPI is not set
-# CONFIG_AD5686 is not set
-# CONFIG_AD5755 is not set
-# CONFIG_AD5761 is not set
-# CONFIG_AD5764 is not set
-# CONFIG_AD5791 is not set
-# CONFIG_AD7303 is not set
-# CONFIG_CIO_DAC is not set
-# CONFIG_AD8801 is not set
-# CONFIG_DPOT_DAC is not set
-# CONFIG_M62332 is not set
-# CONFIG_MAX517 is not set
-# CONFIG_MAX5821 is not set
-# CONFIG_MCP4725 is not set
-# CONFIG_MCP4922 is not set
-# CONFIG_VF610_DAC is not set
-
-#
-# IIO dummy driver
-#
-# CONFIG_IIO_SIMPLE_DUMMY is not set
-
-#
-# Frequency Synthesizers DDS/PLL
-#
-
-#
-# Clock Generator/Distribution
-#
-# CONFIG_AD9523 is not set
-
-#
-# Phase-Locked Loop (PLL) frequency synthesizers
-#
-# CONFIG_ADF4350 is not set
-
-#
-# Digital gyroscope sensors
-#
-# CONFIG_ADIS16080 is not set
-# CONFIG_ADIS16130 is not set
-# CONFIG_ADIS16136 is not set
-# CONFIG_ADIS16260 is not set
-# CONFIG_ADXRS450 is not set
-# CONFIG_BMG160 is not set
-CONFIG_HID_SENSOR_GYRO_3D=m
-CONFIG_IIO_ST_GYRO_3AXIS=m
-CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
-CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
-# CONFIG_ITG3200 is not set
-
-#
-# Health Sensors
-#
-
-#
-# Heart Rate Monitors
-#
-# CONFIG_AFE4403 is not set
-# CONFIG_AFE4404 is not set
-CONFIG_MAX30100=m
-
-#
-# Humidity sensors
-#
-# CONFIG_AM2315 is not set
-# CONFIG_DHT11 is not set
-# CONFIG_HDC100X is not set
-# CONFIG_HTS221 is not set
-# CONFIG_HTU21 is not set
-# CONFIG_SI7005 is not set
-# CONFIG_SI7020 is not set
-
-#
-# Inertial measurement units
-#
-# CONFIG_ADIS16400 is not set
-# CONFIG_ADIS16480 is not set
-# CONFIG_BMI160_I2C is not set
-# CONFIG_BMI160_SPI is not set
-# CONFIG_KMX61 is not set
-CONFIG_INV_MPU6050_IIO=m
-# CONFIG_INV_MPU6050_I2C is not set
-CONFIG_INV_MPU6050_SPI=m
-
-#
-# Light sensors
-#
-CONFIG_ACPI_ALS=m
-# CONFIG_ADJD_S311 is not set
-# CONFIG_AL3320A is not set
-# CONFIG_APDS9300 is not set
-# CONFIG_APDS9960 is not set
-CONFIG_BH1750=m
-CONFIG_BH1780=m
-# CONFIG_CM32181 is not set
-# CONFIG_CM3232 is not set
-# CONFIG_CM3323 is not set
-# CONFIG_CM36651 is not set
-# CONFIG_GP2AP020A00F is not set
-# CONFIG_SENSORS_ISL29018 is not set
-# CONFIG_ISL29125 is not set
-CONFIG_HID_SENSOR_ALS=m
-# CONFIG_HID_SENSOR_PROX is not set
-# CONFIG_JSA1212 is not set
-CONFIG_RPR0521=m
-# CONFIG_SENSORS_LM3533 is not set
-# CONFIG_LTR501 is not set
-# CONFIG_MAX44000 is not set
-CONFIG_OPT3001=m
-CONFIG_PA12203001=m
-# CONFIG_SI1145 is not set
-CONFIG_STK3310=m
-# CONFIG_TCS3414 is not set
-# CONFIG_TCS3472 is not set
-# CONFIG_SENSORS_TSL2563 is not set
-# CONFIG_TSL2583 is not set
-# CONFIG_TSL4531 is not set
-# CONFIG_US5182D is not set
-# CONFIG_VCNL4000 is not set
-# CONFIG_VEML6070 is not set
-
-#
-# Magnetometer sensors
-#
-# CONFIG_AK8974 is not set
-# CONFIG_AK8975 is not set
-# CONFIG_AK09911 is not set
-# CONFIG_BMC150_MAGN_I2C is not set
-# CONFIG_BMC150_MAGN_SPI is not set
-# CONFIG_MAG3110 is not set
-CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
-# CONFIG_MMC35240 is not set
-CONFIG_IIO_ST_MAGN_3AXIS=m
-CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
-CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
-CONFIG_SENSORS_HMC5843=m
-CONFIG_SENSORS_HMC5843_I2C=m
-CONFIG_SENSORS_HMC5843_SPI=m
-
-#
-# Inclinometer sensors
-#
-CONFIG_HID_SENSOR_INCLINOMETER_3D=m
-CONFIG_HID_SENSOR_DEVICE_ROTATION=m
-
-#
-# Triggers - standalone
-#
-# CONFIG_IIO_HRTIMER_TRIGGER is not set
-CONFIG_IIO_INTERRUPT_TRIGGER=m
-CONFIG_IIO_TIGHTLOOP_TRIGGER=m
-# CONFIG_IIO_SYSFS_TRIGGER is not set
-
-#
-# Digital potentiometers
-#
-# CONFIG_DS1803 is not set
-# CONFIG_MAX5487 is not set
-# CONFIG_MCP4131 is not set
-# CONFIG_MCP4531 is not set
-# CONFIG_TPL0102 is not set
-
-#
-# Digital potentiostats
-#
-# CONFIG_LMP91000 is not set
-
-#
-# Pressure sensors
-#
-# CONFIG_ABP060MG is not set
-# CONFIG_BMP280 is not set
-# CONFIG_HID_SENSOR_PRESS is not set
-# CONFIG_HP03 is not set
-# CONFIG_MPL115_I2C is not set
-# CONFIG_MPL115_SPI is not set
-# CONFIG_MPL3115 is not set
-# CONFIG_MS5611 is not set
-# CONFIG_MS5637 is not set
-# CONFIG_IIO_ST_PRESS is not set
-# CONFIG_T5403 is not set
-# CONFIG_HP206C is not set
-# CONFIG_ZPA2326 is not set
-
-#
-# Lightning sensors
-#
-# CONFIG_AS3935 is not set
-
-#
-# Proximity sensors
-#
-# CONFIG_LIDAR_LITE_V2 is not set
-# CONFIG_SX9500 is not set
-
-#
-# Temperature sensors
-#
-# CONFIG_MAXIM_THERMOCOUPLE is not set
-# CONFIG_MLX90614 is not set
-# CONFIG_TMP006 is not set
-# CONFIG_TSYS01 is not set
-# CONFIG_TSYS02D is not set
-# CONFIG_NTB is not set
-# CONFIG_VME_BUS is not set
-CONFIG_PWM=y
-CONFIG_PWM_SYSFS=y
-# CONFIG_PWM_CRC is not set
-# CONFIG_PWM_CROS_EC is not set
-CONFIG_PWM_FSL_FTM=m
-# CONFIG_PWM_LP3943 is not set
-CONFIG_PWM_LPSS=m
-CONFIG_PWM_LPSS_PCI=m
-CONFIG_PWM_LPSS_PLATFORM=m
-# CONFIG_PWM_PCA9685 is not set
-CONFIG_IRQCHIP=y
-CONFIG_ARM_GIC_MAX_NR=1
-CONFIG_IPACK_BUS=m
-CONFIG_BOARD_TPCI200=m
-CONFIG_SERIAL_IPOCTAL=m
-CONFIG_RESET_CONTROLLER=y
-# CONFIG_RESET_ATH79 is not set
-# CONFIG_RESET_BERLIN is not set
-# CONFIG_RESET_LPC18XX is not set
-# CONFIG_RESET_MESON is not set
-# CONFIG_RESET_PISTACHIO is not set
-# CONFIG_RESET_SOCFPGA is not set
-# CONFIG_RESET_STM32 is not set
-# CONFIG_RESET_SUNXI is not set
-# CONFIG_TI_SYSCON_RESET is not set
-# CONFIG_RESET_ZYNQ is not set
-# CONFIG_RESET_TEGRA_BPMP is not set
-CONFIG_FMC=m
-CONFIG_FMC_FAKEDEV=m
-CONFIG_FMC_TRIVIAL=m
-CONFIG_FMC_WRITE_EEPROM=m
-CONFIG_FMC_CHARDEV=m
-
-#
-# PHY Subsystem
-#
-CONFIG_GENERIC_PHY=y
-# CONFIG_PHY_PXA_28NM_HSIC is not set
-# CONFIG_PHY_PXA_28NM_USB2 is not set
-CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_POWERCAP=y
-CONFIG_INTEL_RAPL=m
-# CONFIG_MCB is not set
-
-#
-# Performance monitor support
-#
-CONFIG_RAS=y
-# CONFIG_MCE_AMD_INJ is not set
-CONFIG_THUNDERBOLT=m
-
-#
-# Android
-#
-# CONFIG_ANDROID is not set
-CONFIG_DEV_DAX=m
-CONFIG_NR_DEV_DAX=32768
-CONFIG_NVMEM=m
-CONFIG_STM=m
-# CONFIG_STM_DUMMY is not set
-CONFIG_STM_SOURCE_CONSOLE=m
-CONFIG_STM_SOURCE_HEARTBEAT=m
-CONFIG_STM_SOURCE_FTRACE=m
-CONFIG_INTEL_TH=m
-CONFIG_INTEL_TH_PCI=m
-CONFIG_INTEL_TH_GTH=m
-CONFIG_INTEL_TH_STH=m
-CONFIG_INTEL_TH_MSU=m
-CONFIG_INTEL_TH_PTI=m
-# CONFIG_INTEL_TH_DEBUG is not set
-
-#
-# FPGA Configuration Support
-#
-# CONFIG_FPGA is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_ARM_SCPI_PROTOCOL is not set
-CONFIG_EDD=m
-# CONFIG_EDD_OFF is not set
-CONFIG_FIRMWARE_MEMMAP=y
-CONFIG_DELL_RBU=m
-CONFIG_DCDBAS=m
-CONFIG_DMIID=y
-CONFIG_DMI_SYSFS=m
-CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
-CONFIG_ISCSI_IBFT_FIND=y
-CONFIG_ISCSI_IBFT=m
-CONFIG_FW_CFG_SYSFS=m
-# CONFIG_FW_CFG_SYSFS_CMDLINE is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
-
-#
-# EFI (Extensible Firmware Interface) Support
-#
-# CONFIG_EFI_VARS is not set
-CONFIG_EFI_ESRT=y
-CONFIG_EFI_RUNTIME_MAP=y
-# CONFIG_EFI_FAKE_MEMMAP is not set
-CONFIG_EFI_RUNTIME_WRAPPERS=y
-CONFIG_EFI_CAPSULE_LOADER=m
-# CONFIG_EFI_TEST is not set
-CONFIG_APPLE_PROPERTIES=y
-CONFIG_UEFI_CPER=y
-CONFIG_EFI_DEV_PATH_PARSER=y
-
-#
-# Tegra firmware driver
-#
-
-#
-# File systems
-#
-CONFIG_DCACHE_WORD_ACCESS=y
-CONFIG_FS_IOMAP=y
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT3_FS is not set
-CONFIG_EXT4_FS=m
-CONFIG_EXT4_USE_FOR_EXT2=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_EXT4_ENCRYPTION=y
-CONFIG_EXT4_FS_ENCRYPTION=y
-# CONFIG_EXT4_DEBUG is not set
-CONFIG_JBD2=m
-# CONFIG_JBD2_DEBUG is not set
-CONFIG_FS_MBCACHE=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-CONFIG_REISERFS_PROC_INFO=y
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
-CONFIG_JFS_FS=m
-CONFIG_JFS_POSIX_ACL=y
-CONFIG_JFS_SECURITY=y
-# CONFIG_JFS_DEBUG is not set
-CONFIG_JFS_STATISTICS=y
-CONFIG_XFS_FS=m
-CONFIG_XFS_QUOTA=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_XFS_RT=y
-# CONFIG_XFS_WARN is not set
-# CONFIG_XFS_DEBUG is not set
-CONFIG_GFS2_FS=m
-CONFIG_GFS2_FS_LOCKING_DLM=y
-CONFIG_OCFS2_FS=m
-CONFIG_OCFS2_FS_O2CB=m
-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
-CONFIG_OCFS2_FS_STATS=y
-# CONFIG_OCFS2_DEBUG_MASKLOG is not set
-# CONFIG_OCFS2_DEBUG_FS is not set
-CONFIG_BTRFS_FS=m
-CONFIG_BTRFS_FS_POSIX_ACL=y
-# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
-# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
-# CONFIG_BTRFS_DEBUG is not set
-# CONFIG_BTRFS_ASSERT is not set
-CONFIG_NILFS2_FS=m
-CONFIG_F2FS_FS=m
-CONFIG_F2FS_STAT_FS=y
-CONFIG_F2FS_FS_XATTR=y
-CONFIG_F2FS_FS_POSIX_ACL=y
-CONFIG_F2FS_FS_SECURITY=y
-CONFIG_F2FS_CHECK_FS=y
-CONFIG_F2FS_FS_ENCRYPTION=y
-# CONFIG_F2FS_IO_TRACE is not set
-# CONFIG_F2FS_FAULT_INJECTION is not set
-# CONFIG_FS_DAX is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_EXPORTFS=y
-CONFIG_EXPORTFS_BLOCK_OPS=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_MANDATORY_FILE_LOCKING is not set
-CONFIG_FS_ENCRYPTION=m
-CONFIG_FSNOTIFY=y
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY_USER=y
-CONFIG_FANOTIFY=y
-CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-CONFIG_QUOTA=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-# CONFIG_QUOTA_DEBUG is not set
-CONFIG_QUOTA_TREE=m
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_QUOTACTL=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=m
-CONFIG_CUSE=m
-CONFIG_OVERLAY_FS=m
-CONFIG_OVERLAY_FS_REDIRECT_DIR=y
-
-#
-# Caches
-#
-CONFIG_FSCACHE=m
-CONFIG_FSCACHE_STATS=y
-CONFIG_FSCACHE_HISTOGRAM=y
-# CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
-CONFIG_CACHEFILES=m
-# CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_DEFAULT_UTF8 is not set
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-CONFIG_NTFS_RW=y
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_VMCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_PROC_CHILDREN=y
-CONFIG_KERNFS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_TMPFS_XATTR=y
-CONFIG_HUGETLBFS=y
-CONFIG_HUGETLB_PAGE=y
-CONFIG_CONFIGFS_FS=y
-CONFIG_EFIVAR_FS=y
-CONFIG_MISC_FILESYSTEMS=y
-CONFIG_ORANGEFS_FS=m
-# CONFIG_ADFS_FS is not set
-CONFIG_AFFS_FS=m
-CONFIG_ECRYPT_FS=m
-# CONFIG_ECRYPT_FS_MESSAGING is not set
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_HFSPLUS_FS_POSIX_ACL=y
-CONFIG_BEFS_FS=m
-# CONFIG_BEFS_DEBUG is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_UBIFS_FS=m
-# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
-CONFIG_UBIFS_FS_LZO=y
-CONFIG_UBIFS_FS_ZLIB=y
-CONFIG_UBIFS_ATIME_SUPPORT=y
-CONFIG_UBIFS_FS_ENCRYPTION=y
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_FILE_CACHE is not set
-CONFIG_SQUASHFS_FILE_DIRECT=y
-# CONFIG_SQUASHFS_DECOMP_SINGLE is not set
-# CONFIG_SQUASHFS_DECOMP_MULTI is not set
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
-CONFIG_SQUASHFS_ZLIB=y
-CONFIG_SQUASHFS_LZ4=y
-CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_VXFS_FS is not set
-CONFIG_MINIX_FS=m
-CONFIG_OMFS_FS=m
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX6FS_FS is not set
-CONFIG_ROMFS_FS=m
-CONFIG_ROMFS_BACKED_BY_BLOCK=y
-# CONFIG_ROMFS_BACKED_BY_MTD is not set
-# CONFIG_ROMFS_BACKED_BY_BOTH is not set
-CONFIG_ROMFS_ON_BLOCK=y
-CONFIG_PSTORE=y
-CONFIG_PSTORE_ZLIB_COMPRESS=y
-# CONFIG_PSTORE_LZO_COMPRESS is not set
-# CONFIG_PSTORE_LZ4_COMPRESS is not set
-# CONFIG_PSTORE_CONSOLE is not set
-# CONFIG_PSTORE_PMSG is not set
-# CONFIG_PSTORE_FTRACE is not set
-CONFIG_PSTORE_RAM=y
-# CONFIG_SYSV_FS is not set
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-# CONFIG_UFS_DEBUG is not set
-CONFIG_EXOFS_FS=m
-# CONFIG_EXOFS_DEBUG is not set
-CONFIG_ORE=m
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=m
-CONFIG_NFS_V2=m
-CONFIG_NFS_V3=m
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=m
-CONFIG_NFS_SWAP=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_PNFS_FILE_LAYOUT=m
-CONFIG_PNFS_BLOCK=m
-CONFIG_PNFS_OBJLAYOUT=m
-CONFIG_PNFS_FLEXFILE_LAYOUT=m
-CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
-CONFIG_NFS_V4_1_MIGRATION=y
-CONFIG_NFS_V4_SECURITY_LABEL=y
-CONFIG_NFS_FSCACHE=y
-# CONFIG_NFS_USE_LEGACY_DNS is not set
-CONFIG_NFS_USE_KERNEL_DNS=y
-CONFIG_NFS_DEBUG=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_PNFS=y
-CONFIG_NFSD_BLOCKLAYOUT=y
-CONFIG_NFSD_SCSILAYOUT=y
-# CONFIG_NFSD_FLEXFILELAYOUT is not set
-CONFIG_NFSD_V4_SECURITY_LABEL=y
-# CONFIG_NFSD_FAULT_INJECTION is not set
-CONFIG_GRACE_PERIOD=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_ACL_SUPPORT=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_SUNRPC_BACKCHANNEL=y
-CONFIG_SUNRPC_SWAP=y
-CONFIG_RPCSEC_GSS_KRB5=m
-CONFIG_SUNRPC_DEBUG=y
-CONFIG_SUNRPC_XPRT_RDMA=m
-CONFIG_CEPH_FS=m
-CONFIG_CEPH_FSCACHE=y
-CONFIG_CEPH_FS_POSIX_ACL=y
-CONFIG_CIFS=m
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_STATS2 is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-CONFIG_CIFS_UPCALL=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_ACL=y
-# CONFIG_CIFS_DEBUG is not set
-CONFIG_CIFS_DFS_UPCALL=y
-CONFIG_CIFS_SMB2=y
-CONFIG_CIFS_SMB311=y
-CONFIG_CIFS_FSCACHE=y
-# CONFIG_NCP_FS is not set
-CONFIG_CODA_FS=m
-CONFIG_AFS_FS=m
-# CONFIG_AFS_DEBUG is not set
-CONFIG_AFS_FSCACHE=y
-CONFIG_9P_FS=m
-CONFIG_9P_FSCACHE=y
-CONFIG_9P_FS_POSIX_ACL=y
-CONFIG_9P_FS_SECURITY=y
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_MAC_ROMAN=m
-CONFIG_NLS_MAC_CELTIC=m
-CONFIG_NLS_MAC_CENTEURO=m
-CONFIG_NLS_MAC_CROATIAN=m
-CONFIG_NLS_MAC_CYRILLIC=m
-CONFIG_NLS_MAC_GAELIC=m
-CONFIG_NLS_MAC_GREEK=m
-CONFIG_NLS_MAC_ICELAND=m
-CONFIG_NLS_MAC_INUIT=m
-CONFIG_NLS_MAC_ROMANIAN=m
-CONFIG_NLS_MAC_TURKISH=m
-CONFIG_NLS_UTF8=m
-CONFIG_DLM=m
-# CONFIG_DLM_DEBUG is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-
-#
-# printk and dmesg options
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
-CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
-# CONFIG_BOOT_PRINTK_DELAY is not set
-CONFIG_DYNAMIC_DEBUG=y
-
-#
-# Compile-time checks and compiler options
-#
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-CONFIG_STRIP_ASM_SYMS=y
-# CONFIG_READABLE_ASM is not set
-CONFIG_UNUSED_SYMBOLS=y
-# CONFIG_PAGE_OWNER is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_SECTION_MISMATCH is not set
-CONFIG_SECTION_MISMATCH_WARN_ONLY=y
-CONFIG_ARCH_WANT_FRAME_POINTERS=y
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0
-CONFIG_DEBUG_KERNEL=y
-
-#
-# Memory Debugging
-#
-# CONFIG_PAGE_EXTENSION is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_PAGE_POISONING is not set
-# CONFIG_DEBUG_PAGE_REF is not set
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_VIRTUAL is not set
-CONFIG_DEBUG_MEMORY_INIT=y
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
-# CONFIG_DEBUG_STACKOVERFLOW is not set
-CONFIG_HAVE_ARCH_KMEMCHECK=y
-# CONFIG_DEBUG_SHIRQ is not set
-
-#
-# Debug Lockups and Hangs
-#
-CONFIG_LOCKUP_DETECTOR=y
-CONFIG_HARDLOCKUP_DETECTOR=y
-# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
-CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0
-# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
-CONFIG_DETECT_HUNG_TASK=y
-CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
-# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
-CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
-# CONFIG_WQ_WATCHDOG is not set
-# CONFIG_PANIC_ON_OOPS is not set
-CONFIG_PANIC_ON_OOPS_VALUE=0
-CONFIG_PANIC_TIMEOUT=0
-CONFIG_SCHED_DEBUG=y
-CONFIG_SCHED_INFO=y
-CONFIG_SCHEDSTATS=y
-# CONFIG_SCHED_STACK_END_CHECK is not set
-# CONFIG_DEBUG_TIMEKEEPING is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_PREEMPT is not set
-
-#
-# Lock Debugging (spinlocks, mutexes, etc...)
-#
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_ATOMIC_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_LOCK_TORTURE_TEST is not set
-CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_PI_LIST is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_DEBUG_NOTIFIERS is not set
-# CONFIG_DEBUG_CREDENTIALS is not set
-
-#
-# RCU Debugging
-#
-# CONFIG_PROVE_RCU is not set
-# CONFIG_SPARSE_RCU_POINTER is not set
-# CONFIG_TORTURE_TEST is not set
-# CONFIG_RCU_PERF_TEST is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_TRACE is not set
-# CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-# CONFIG_NOTIFIER_ERROR_INJECTION is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_USER_STACKTRACE_SUPPORT=y
-CONFIG_NOP_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
-CONFIG_HAVE_C_RECORDMCOUNT=y
-CONFIG_TRACER_MAX_TRACE=y
-CONFIG_TRACE_CLOCK=y
-CONFIG_RING_BUFFER=y
-CONFIG_EVENT_TRACING=y
-CONFIG_CONTEXT_SWITCH_TRACER=y
-CONFIG_RING_BUFFER_ALLOW_SWAP=y
-CONFIG_TRACING=y
-CONFIG_GENERIC_TRACER=y
-CONFIG_TRACING_SUPPORT=y
-CONFIG_FTRACE=y
-CONFIG_FUNCTION_TRACER=y
-CONFIG_FUNCTION_GRAPH_TRACER=y
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-CONFIG_SCHED_TRACER=y
-CONFIG_HWLAT_TRACER=y
-CONFIG_FTRACE_SYSCALLS=y
-CONFIG_TRACER_SNAPSHOT=y
-# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set
-CONFIG_BRANCH_PROFILE_NONE=y
-# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
-# CONFIG_PROFILE_ALL_BRANCHES is not set
-CONFIG_STACK_TRACER=y
-CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_KPROBE_EVENT=y
-CONFIG_UPROBE_EVENT=y
-CONFIG_BPF_EVENTS=y
-CONFIG_PROBE_EVENTS=y
-CONFIG_DYNAMIC_FTRACE=y
-CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
-CONFIG_FUNCTION_PROFILER=y
-CONFIG_FTRACE_MCOUNT_RECORD=y
-# CONFIG_FTRACE_STARTUP_TEST is not set
-CONFIG_MMIOTRACE=y
-# CONFIG_HIST_TRIGGERS is not set
-# CONFIG_MMIOTRACE_TEST is not set
-# CONFIG_TRACEPOINT_BENCHMARK is not set
-CONFIG_RING_BUFFER_BENCHMARK=m
-# CONFIG_RING_BUFFER_STARTUP_TEST is not set
-# CONFIG_TRACE_ENUM_MAP_FILE is not set
-# CONFIG_TRACING_EVENTS_GPIO is not set
-
-#
-# Runtime Testing
-#
-CONFIG_LKDTM=m
-# CONFIG_TEST_LIST_SORT is not set
-# CONFIG_KPROBES_SANITY_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_RBTREE_TEST is not set
-# CONFIG_INTERVAL_TREE_TEST is not set
-CONFIG_PERCPU_TEST=m
-# CONFIG_ATOMIC64_SELFTEST is not set
-CONFIG_ASYNC_RAID6_TEST=m
-# CONFIG_TEST_HEXDUMP is not set
-# CONFIG_TEST_STRING_HELPERS is not set
-CONFIG_TEST_KSTRTOX=m
-# CONFIG_TEST_PRINTF is not set
-# CONFIG_TEST_BITMAP is not set
-# CONFIG_TEST_UUID is not set
-# CONFIG_TEST_RHASHTABLE is not set
-# CONFIG_TEST_HASH is not set
-# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
-# CONFIG_DMA_API_DEBUG is not set
-# CONFIG_TEST_LKM is not set
-# CONFIG_TEST_USER_COPY is not set
-# CONFIG_TEST_BPF is not set
-# CONFIG_TEST_FIRMWARE is not set
-# CONFIG_TEST_UDELAY is not set
-# CONFIG_MEMTEST is not set
-# CONFIG_TEST_STATIC_KEYS is not set
-# CONFIG_BUG_ON_DATA_CORRUPTION is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
-# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set
-# CONFIG_UBSAN is not set
-CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
-CONFIG_STRICT_DEVMEM=y
-CONFIG_IO_STRICT_DEVMEM=y
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-CONFIG_EARLY_PRINTK=y
-# CONFIG_EARLY_PRINTK_DBGP is not set
-CONFIG_EARLY_PRINTK_EFI=y
-# CONFIG_X86_PTDUMP_CORE is not set
-# CONFIG_X86_PTDUMP is not set
-# CONFIG_EFI_PGT_DUMP is not set
-# CONFIG_DEBUG_RODATA_TEST is not set
-# CONFIG_DEBUG_WX is not set
-CONFIG_DEBUG_SET_MODULE_RONX=y
-# CONFIG_DEBUG_NX_TEST is not set
-CONFIG_DOUBLEFAULT=y
-# CONFIG_DEBUG_TLBFLUSH is not set
-# CONFIG_IOMMU_STRESS is not set
-CONFIG_HAVE_MMIOTRACE_SUPPORT=y
-# CONFIG_X86_DECODER_SELFTEST is not set
-CONFIG_IO_DELAY_TYPE_0X80=0
-CONFIG_IO_DELAY_TYPE_0XED=1
-CONFIG_IO_DELAY_TYPE_UDELAY=2
-CONFIG_IO_DELAY_TYPE_NONE=3
-CONFIG_IO_DELAY_0X80=y
-# CONFIG_IO_DELAY_0XED is not set
-# CONFIG_IO_DELAY_UDELAY is not set
-# CONFIG_IO_DELAY_NONE is not set
-CONFIG_DEFAULT_IO_DELAY_TYPE=0
-# CONFIG_DEBUG_BOOT_PARAMS is not set
-# CONFIG_CPA_DEBUG is not set
-# CONFIG_OPTIMIZE_INLINING is not set
-# CONFIG_DEBUG_ENTRY is not set
-# CONFIG_DEBUG_NMI_SELFTEST is not set
-# CONFIG_X86_DEBUG_FPU is not set
-# CONFIG_PUNIT_ATOM_DEBUG is not set
-
-#
-# Security options
-#
-CONFIG_KEYS=y
-CONFIG_PERSISTENT_KEYRINGS=y
-CONFIG_TRUSTED_KEYS=m
-CONFIG_ENCRYPTED_KEYS=m
-CONFIG_KEY_DH_OPERATIONS=y
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
-CONFIG_SECURITY=y
-CONFIG_SECURITYFS=y
-# CONFIG_SECURITY_NETWORK is not set
-CONFIG_SECURITY_PATH=y
-# CONFIG_INTEL_TXT is not set
-CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
-CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
-CONFIG_HARDENED_USERCOPY=y
-# CONFIG_SECURITY_SMACK is not set
-# CONFIG_SECURITY_TOMOYO is not set
-# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_LOADPIN is not set
-CONFIG_SECURITY_YAMA=y
-CONFIG_INTEGRITY=y
-# CONFIG_INTEGRITY_SIGNATURE is not set
-# CONFIG_IMA is not set
-# CONFIG_EVM is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_XOR_BLOCKS=m
-CONFIG_ASYNC_CORE=m
-CONFIG_ASYNC_MEMCPY=m
-CONFIG_ASYNC_XOR=m
-CONFIG_ASYNC_PQ=m
-CONFIG_ASYNC_RAID6_RECOV=m
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD=m
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_RNG=m
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=m
-CONFIG_CRYPTO_AKCIPHER2=y
-CONFIG_CRYPTO_AKCIPHER=m
-CONFIG_CRYPTO_KPP2=y
-CONFIG_CRYPTO_KPP=m
-CONFIG_CRYPTO_ACOMP2=y
-CONFIG_CRYPTO_RSA=m
-CONFIG_CRYPTO_DH=m
-CONFIG_CRYPTO_ECDH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-CONFIG_CRYPTO_USER=m
-CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
-CONFIG_CRYPTO_GF128MUL=m
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_NULL2=y
-CONFIG_CRYPTO_PCRYPT=m
-CONFIG_CRYPTO_WORKQUEUE=y
-CONFIG_CRYPTO_CRYPTD=m
-CONFIG_CRYPTO_MCRYPTD=m
-CONFIG_CRYPTO_AUTHENC=m
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_ABLK_HELPER=m
-CONFIG_CRYPTO_SIMD=m
-CONFIG_CRYPTO_GLUE_HELPER_X86=m
-
-#
-# Authenticated Encryption with Associated Data
-#
-CONFIG_CRYPTO_CCM=m
-CONFIG_CRYPTO_GCM=m
-CONFIG_CRYPTO_CHACHA20POLY1305=m
-CONFIG_CRYPTO_SEQIV=m
-CONFIG_CRYPTO_ECHAINIV=m
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_CTR=m
-CONFIG_CRYPTO_CTS=m
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_PCBC=m
-CONFIG_CRYPTO_XTS=m
-CONFIG_CRYPTO_KEYWRAP=m
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_CMAC=m
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_VMAC=m
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_CRC32C_INTEL=m
-CONFIG_CRYPTO_CRC32=m
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF=y
-CONFIG_CRYPTO_GHASH=m
-CONFIG_CRYPTO_POLY1305=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_SHA3=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_WP512=m
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_AES_586=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_BLOWFISH_COMMON=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAST_COMMON=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_FCRYPT=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_SALSA20=m
-CONFIG_CRYPTO_SALSA20_586=m
-CONFIG_CRYPTO_CHACHA20=m
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_SERPENT_SSE2_586=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_TWOFISH_586=m
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-
-#
-# Random Number Generation
-#
-CONFIG_CRYPTO_ANSI_CPRNG=m
-CONFIG_CRYPTO_DRBG_MENU=m
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_HASH=y
-CONFIG_CRYPTO_DRBG_CTR=y
-CONFIG_CRYPTO_DRBG=m
-CONFIG_CRYPTO_JITTERENTROPY=m
-CONFIG_CRYPTO_USER_API=m
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_CRYPTO_USER_API_RNG=m
-CONFIG_CRYPTO_USER_API_AEAD=m
-CONFIG_CRYPTO_HASH_INFO=y
-CONFIG_CRYPTO_HW=y
-CONFIG_CRYPTO_DEV_PADLOCK=m
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_GEODE=m
-CONFIG_CRYPTO_DEV_HIFN_795X=m
-CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
-# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set
-CONFIG_CRYPTO_DEV_CCP=y
-CONFIG_CRYPTO_DEV_CCP_DD=m
-CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
-CONFIG_CRYPTO_DEV_QAT=m
-CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
-CONFIG_CRYPTO_DEV_QAT_C3XXX=m
-CONFIG_CRYPTO_DEV_QAT_C62X=m
-CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
-CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
-CONFIG_CRYPTO_DEV_QAT_C62XVF=m
-CONFIG_CRYPTO_DEV_CHELSIO=m
-CONFIG_CRYPTO_DEV_VIRTIO=m
-CONFIG_ASYMMETRIC_KEY_TYPE=y
-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
-CONFIG_X509_CERTIFICATE_PARSER=m
-CONFIG_PKCS7_MESSAGE_PARSER=m
-
-#
-# Certificates for signature checking
-#
-CONFIG_SYSTEM_TRUSTED_KEYRING=y
-CONFIG_SYSTEM_TRUSTED_KEYS=""
-# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
-CONFIG_SECONDARY_TRUSTED_KEYRING=y
-CONFIG_HAVE_KVM=y
-CONFIG_HAVE_KVM_IRQCHIP=y
-CONFIG_HAVE_KVM_IRQFD=y
-CONFIG_HAVE_KVM_IRQ_ROUTING=y
-CONFIG_HAVE_KVM_EVENTFD=y
-CONFIG_KVM_MMIO=y
-CONFIG_KVM_ASYNC_PF=y
-CONFIG_HAVE_KVM_MSI=y
-CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
-CONFIG_KVM_VFIO=y
-CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
-CONFIG_HAVE_KVM_IRQ_BYPASS=y
-CONFIG_VIRTUALIZATION=y
-CONFIG_KVM=m
-CONFIG_KVM_INTEL=m
-CONFIG_KVM_AMD=m
-CONFIG_KVM_MMU_AUDIT=y
-CONFIG_KVM_DEVICE_ASSIGNMENT=y
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_SCSI=m
-CONFIG_VHOST_VSOCK=m
-CONFIG_VHOST=m
-# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
-# CONFIG_LGUEST is not set
-CONFIG_BINARY_PRINTF=y
-
-#
-# Library routines
-#
-CONFIG_RAID6_PQ=m
-CONFIG_BITREVERSE=y
-# CONFIG_HAVE_ARCH_BITREVERSE is not set
-CONFIG_RATIONAL=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-CONFIG_GENERIC_NET_UTILS=y
-CONFIG_GENERIC_FIND_FIRST_BIT=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_IO=y
-CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=m
-CONFIG_CRC_T10DIF=y
-CONFIG_CRC_ITU_T=m
-CONFIG_CRC32=y
-# CONFIG_CRC32_SELFTEST is not set
-CONFIG_CRC32_SLICEBY8=y
-# CONFIG_CRC32_SLICEBY4 is not set
-# CONFIG_CRC32_SARWATE is not set
-# CONFIG_CRC32_BIT is not set
-CONFIG_CRC7=m
-CONFIG_LIBCRC32C=m
-CONFIG_CRC8=m
-# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
-# CONFIG_RANDOM32_SELFTEST is not set
-CONFIG_842_COMPRESS=m
-CONFIG_842_DECOMPRESS=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_LZ4_COMPRESS=m
-CONFIG_LZ4HC_COMPRESS=m
-CONFIG_LZ4_DECOMPRESS=y
-CONFIG_XZ_DEC=y
-CONFIG_XZ_DEC_X86=y
-CONFIG_XZ_DEC_POWERPC=y
-CONFIG_XZ_DEC_IA64=y
-CONFIG_XZ_DEC_ARM=y
-CONFIG_XZ_DEC_ARMTHUMB=y
-CONFIG_XZ_DEC_SPARC=y
-CONFIG_XZ_DEC_BCJ=y
-# CONFIG_XZ_DEC_TEST is not set
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_DECOMPRESS_BZIP2=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_DECOMPRESS_XZ=y
-CONFIG_DECOMPRESS_LZO=y
-CONFIG_DECOMPRESS_LZ4=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_ENC8=y
-CONFIG_REED_SOLOMON_DEC8=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-CONFIG_BTREE=y
-CONFIG_INTERVAL_TREE=y
-CONFIG_RADIX_TREE_MULTIORDER=y
-CONFIG_ASSOCIATIVE_ARRAY=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT_MAP=y
-CONFIG_HAS_DMA=y
-CONFIG_CHECK_SIGNATURE=y
-CONFIG_CPU_RMAP=y
-CONFIG_DQL=y
-CONFIG_GLOB=y
-# CONFIG_GLOB_SELFTEST is not set
-CONFIG_NLATTR=y
-CONFIG_LRU_CACHE=m
-CONFIG_CLZ_TAB=y
-CONFIG_CORDIC=m
-CONFIG_DDR=y
-CONFIG_IRQ_POLL=y
-CONFIG_MPILIB=y
-CONFIG_OID_REGISTRY=m
-CONFIG_UCS2_STRING=y
-CONFIG_FONT_SUPPORT=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_6x10 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_FONT_AUTOSELECT=y
-# CONFIG_SG_SPLIT is not set
-CONFIG_SG_POOL=y
-CONFIG_ARCH_HAS_SG_CHAIN=y
-CONFIG_ARCH_HAS_MMIO_FLUSH=y
-CONFIG_SBITMAP=y
diff --git a/config.x86_64 b/config.x86_64
index 32c284d8d701..329777758477 100644
--- a/config.x86_64
+++ b/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.10.0-1 Kernel Configuration
+# Linux/x86 4.12.0-1 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
@@ -41,7 +41,6 @@ CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_64_SMP=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_DEBUG_RODATA=y
CONFIG_PGTABLE_LEVELS=4
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_IRQ_WORK=y
@@ -132,16 +131,17 @@ CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
-# CONFIG_TASKS_RCU is not set
+CONFIG_TREE_SRCU=y
+CONFIG_TASKS_RCU=y
CONFIG_RCU_STALL_COMMON=y
+CONFIG_RCU_NEED_SEGCBLIST=y
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_EXPEDITE_BOOT is not set
CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
-CONFIG_NMI_LOG_BUF_SHIFT=13
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=12
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
@@ -161,6 +161,7 @@ CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_CGROUP_PIDS=y
+# CONFIG_CGROUP_RDMA is not set
CONFIG_CGROUP_FREEZER=y
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_CPUSETS=y
@@ -189,7 +190,6 @@ CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
-CONFIG_INITRAMFS_COMPRESSION=".gz"
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
@@ -229,6 +229,7 @@ CONFIG_PCI_QUIRKS=y
CONFIG_MEMBARRIER=y
# CONFIG_EMBEDDED is not set
CONFIG_HAVE_PERF_EVENTS=y
+# CONFIG_PC104 is not set
#
# Kernel Performance Events And Counters
@@ -237,6 +238,7 @@ CONFIG_PERF_EVENTS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
+# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
@@ -245,6 +247,7 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SYSTEM_DATA_VERIFICATION is not set
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
+CONFIG_CRASH_CORE=y
CONFIG_KEXEC_CORE=y
CONFIG_OPROFILE=m
# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
@@ -269,6 +272,7 @@ CONFIG_HAVE_NMI=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_CLK=y
@@ -300,6 +304,7 @@ CONFIG_HAVE_CONTEXT_TRACKING=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_MODULES_USE_ELF_RELA=y
@@ -310,8 +315,10 @@ CONFIG_HAVE_EXIT_THREAD=y
CONFIG_ARCH_MMAP_RND_BITS=28
CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8
+CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
CONFIG_HAVE_COPY_THREAD_TLS=y
CONFIG_HAVE_STACK_VALIDATION=y
+CONFIG_HAVE_RELIABLE_STACKTRACE=y
# CONFIG_HAVE_ARCH_HASH is not set
# CONFIG_ISA_BUS_API is not set
CONFIG_OLD_SIGSUSPEND3=y
@@ -319,6 +326,12 @@ CONFIG_COMPAT_OLD_SIGACTION=y
# CONFIG_CPU_NO_EFFICIENT_FFS is not set
CONFIG_HAVE_ARCH_VMAP_STACK=y
CONFIG_VMAP_STACK=y
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_STRICT_MODULE_RWX=y
#
# GCOV-based kernel profiling
@@ -341,15 +354,19 @@ CONFIG_MODULE_COMPRESS_GZIP=y
# CONFIG_MODULE_COMPRESS_XZ is not set
CONFIG_MODULES_TREE_LOOKUP=y
CONFIG_BLOCK=y
+CONFIG_BLK_SCSI_REQUEST=y
CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
+CONFIG_BLK_DEV_THROTTLING_LOW=y
# CONFIG_BLK_CMDLINE_PARSER is not set
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_SQ=y
CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_DEBUG_FS=y
+CONFIG_BLK_SED_OPAL=y
#
# Partition Types
@@ -377,6 +394,7 @@ CONFIG_EFI_PARTITION=y
# CONFIG_CMDLINE_PARTITION is not set
CONFIG_BLOCK_COMPAT=y
CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_MQ_VIRTIO=y
#
# IO Schedulers
@@ -389,6 +407,10 @@ CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_MQ_IOSCHED_DEADLINE=y
+CONFIG_MQ_IOSCHED_KYBER=y
+CONFIG_IOSCHED_BFQ=y
+CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_PADATA=y
CONFIG_ASN1=m
@@ -427,8 +449,11 @@ CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_SPINLOCKS=y
# CONFIG_QUEUED_LOCK_STAT is not set
CONFIG_XEN=y
+CONFIG_XEN_PV=y
+CONFIG_XEN_PV_SMP=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PVHVM=y
+CONFIG_XEN_PVHVM_SMP=y
CONFIG_XEN_512GB=y
CONFIG_XEN_SAVE_RESTORE=y
# CONFIG_XEN_DEBUG_FS is not set
@@ -474,10 +499,10 @@ CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
+# CONFIG_X86_MCELOG_LEGACY is not set
CONFIG_X86_MCE_INTEL=y
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
-# CONFIG_X86_MCE_INJECT is not set
CONFIG_X86_THERMAL_VECTOR=y
#
@@ -602,8 +627,11 @@ CONFIG_CRASH_DUMP=y
CONFIG_KEXEC_JUMP=y
CONFIG_PHYSICAL_START=0x1000000
CONFIG_RELOCATABLE=y
-# CONFIG_RANDOMIZE_BASE is not set
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_X86_NEED_RELOCS=y
CONFIG_PHYSICAL_ALIGN=0x1000000
+CONFIG_RANDOMIZE_MEMORY=y
+CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
CONFIG_HOTPLUG_CPU=y
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
@@ -651,7 +679,7 @@ CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
# CONFIG_ACPI_DEBUGGER is not set
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS_POWER is not set
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_EC_DEBUGFS=m
CONFIG_ACPI_AC=m
CONFIG_ACPI_BATTERY=m
@@ -684,7 +712,6 @@ CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_NFIT=m
-# CONFIG_ACPI_NFIT_DEBUG is not set
CONFIG_HAVE_ACPI_APEI=y
CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
@@ -698,6 +725,7 @@ CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI_EXTLOG=m
CONFIG_PMIC_OPREGION=y
CONFIG_CRC_PMIC_OPREGION=y
+CONFIG_XPOWER_PMIC_OPREGION=y
CONFIG_BXT_WC_PMIC_OPREGION=y
CONFIG_ACPI_CONFIGFS=m
CONFIG_SFI=y
@@ -709,7 +737,6 @@ CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
@@ -766,6 +793,7 @@ CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
CONFIG_PCIE_PME=y
CONFIG_PCIE_DPC=y
@@ -793,10 +821,24 @@ CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
CONFIG_HOTPLUG_PCI_SHPC=m
#
-# PCI host controller drivers
+# DesignWare PCI Core Support
#
# CONFIG_PCIE_DW_PLAT is not set
+
+#
+# PCI host controller drivers
+#
CONFIG_VMD=m
+
+#
+# PCI Endpoint
+#
+# CONFIG_PCI_ENDPOINT is not set
+
+#
+# PCI switch controller drivers
+#
+CONFIG_PCI_SW_SWITCHTEC=m
CONFIG_ISA_DMA_API=y
CONFIG_AMD_NB=y
CONFIG_PCCARD=m
@@ -837,9 +879,7 @@ CONFIG_COMPAT_32=y
CONFIG_COMPAT=y
CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
CONFIG_SYSVIPC_COMPAT=y
-CONFIG_KEYS_COMPAT=y
CONFIG_X86_DEV_DMA_OPS=y
-CONFIG_PMC_ATOM=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
CONFIG_NET_INGRESS=y
@@ -853,6 +893,7 @@ CONFIG_PACKET_DIAG=m
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM=y
+CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
@@ -861,6 +902,7 @@ CONFIG_XFRM_USER=m
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not set
+# CONFIG_SMC is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
@@ -886,6 +928,7 @@ CONFIG_NET_FOU=m
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
+CONFIG_INET_ESP_OFFLOAD=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=m
@@ -924,6 +967,7 @@ CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
+CONFIG_INET6_ESP_OFFLOAD=m
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_IPV6_ILA=m
@@ -1018,6 +1062,7 @@ CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_SET_RBTREE=m
CONFIG_NFT_SET_HASH=m
+CONFIG_NFT_SET_BITMAP=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
@@ -1341,12 +1386,12 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_HAVE_NET_DSA=y
CONFIG_NET_DSA=m
-CONFIG_NET_DSA_HWMON=y
-CONFIG_NET_DSA_TAG_BRCM=y
CONFIG_NET_DSA_TAG_DSA=y
CONFIG_NET_DSA_TAG_EDSA=y
CONFIG_NET_DSA_TAG_TRAILER=y
CONFIG_NET_DSA_TAG_QCA=y
+CONFIG_NET_DSA_TAG_MTK=y
+CONFIG_NET_DSA_TAG_LAN9303=y
CONFIG_VLAN_8021Q=m
# CONFIG_VLAN_8021Q_GVRP is not set
CONFIG_VLAN_8021Q_MVRP=y
@@ -1409,6 +1454,13 @@ CONFIG_NET_SCH_HHF=m
CONFIG_NET_SCH_PIE=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m
+CONFIG_NET_SCH_DEFAULT=y
+CONFIG_DEFAULT_FQ=y
+# CONFIG_DEFAULT_CODEL is not set
+# CONFIG_DEFAULT_FQ_CODEL is not set
+# CONFIG_DEFAULT_SFQ is not set
+# CONFIG_DEFAULT_PFIFO_FAST is not set
+CONFIG_DEFAULT_NET_SCH="fq"
#
# Classification
@@ -1442,6 +1494,7 @@ CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_SAMPLE=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
@@ -1489,7 +1542,7 @@ CONFIG_NET_NCSI=y
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_XPS=y
-# CONFIG_CGROUP_NET_PRIO is not set
+CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
@@ -1531,6 +1584,7 @@ CONFIG_CAN_GW=m
# CAN Device Drivers
#
CONFIG_CAN_VCAN=m
+CONFIG_CAN_VXCAN=m
CONFIG_CAN_SLCAN=m
CONFIG_CAN_DEV=m
CONFIG_CAN_CALC_BITTIMING=y
@@ -1543,12 +1597,13 @@ CONFIG_CAN_CC770=m
CONFIG_CAN_CC770_PLATFORM=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_M_CAN=m
+CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_SJA1000=m
# CONFIG_CAN_SJA1000_ISA is not set
CONFIG_CAN_SJA1000_PLATFORM=m
# CONFIG_CAN_EMS_PCMCIA is not set
CONFIG_CAN_EMS_PCI=m
-# CONFIG_CAN_PEAK_PCMCIA is not set
+CONFIG_CAN_PEAK_PCMCIA=m
CONFIG_CAN_PEAK_PCI=m
CONFIG_CAN_PEAK_PCIEC=y
CONFIG_CAN_KVASER_PCI=m
@@ -1559,6 +1614,7 @@ CONFIG_CAN_SOFTING=m
#
# CAN SPI interfaces
#
+# CONFIG_CAN_HI311X is not set
# CONFIG_CAN_MCP251X is not set
#
@@ -1570,6 +1626,7 @@ CONFIG_CAN_GS_USB=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_8DEV_USB=m
+CONFIG_CAN_MCBA_USB=m
# CONFIG_CAN_DEBUG_DEVICES is not set
CONFIG_IRDA=m
@@ -1655,7 +1712,9 @@ CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_NOKIA=m
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
@@ -1726,6 +1785,7 @@ CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=m
CONFIG_NET_9P=m
CONFIG_NET_9P_VIRTIO=m
+CONFIG_NET_9P_XEN=m
# CONFIG_NET_9P_RDMA is not set
# CONFIG_NET_9P_DEBUG is not set
CONFIG_CAIF=m
@@ -1746,7 +1806,6 @@ CONFIG_NFC_HCI=m
#
# Near Field Communication (NFC) devices
#
-CONFIG_NFC_WILINK=m
CONFIG_NFC_TRF7970A=m
CONFIG_NFC_MEI_PHY=m
CONFIG_NFC_SIM=m
@@ -1769,9 +1828,12 @@ CONFIG_NFC_ST_NCI_I2C=m
# CONFIG_NFC_NXP_NCI is not set
# CONFIG_NFC_S3FWRN5_I2C is not set
# CONFIG_NFC_ST95HF is not set
+CONFIG_PSAMPLE=m
+CONFIG_NET_IFE=m
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
+CONFIG_GRO_CELLS=y
CONFIG_NET_DEVLINK=m
CONFIG_MAY_USE_DEVLINK=m
CONFIG_HAVE_EBPF_JIT=y
@@ -1948,7 +2010,7 @@ CONFIG_BLK_DEV_FD=m
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
CONFIG_ZRAM=m
CONFIG_BLK_CPQ_CISS_DA=m
-# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_CISS_SCSI_TAPE=y
CONFIG_BLK_DEV_DAC960=m
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -1959,7 +2021,6 @@ CONFIG_BLK_DEV_DRBD=m
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_SKD=m
-CONFIG_BLK_DEV_OSD=m
CONFIG_BLK_DEV_SX8=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
@@ -1971,7 +2032,7 @@ CONFIG_ATA_OVER_ETH=m
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_VIRTIO_BLK=m
-# CONFIG_BLK_DEV_HD is not set
+# CONFIG_VIRTIO_BLK_SCSI is not set
CONFIG_BLK_DEV_RBD=m
CONFIG_BLK_DEV_RSXX=m
CONFIG_NVME_CORE=m
@@ -2015,7 +2076,7 @@ CONFIG_VMWARE_BALLOON=m
CONFIG_USB_SWITCH_FSA9480=m
# CONFIG_LATTICE_ECP3_CONFIG is not set
# CONFIG_SRAM is not set
-# CONFIG_PANEL is not set
+CONFIG_PCI_ENDPOINT_TEST=m
CONFIG_C2PORT=m
CONFIG_C2PORT_DURAMAR_2150=m
@@ -2028,6 +2089,7 @@ CONFIG_EEPROM_LEGACY=m
CONFIG_EEPROM_MAX6875=m
CONFIG_EEPROM_93CX6=m
# CONFIG_EEPROM_93XX46 is not set
+CONFIG_EEPROM_IDT_89HPESX=m
CONFIG_CB710_CORE=m
# CONFIG_CB710_DEBUG is not set
CONFIG_CB710_DEBUG_ASSUMPTIONS=y
@@ -2045,6 +2107,7 @@ CONFIG_ALTERA_STAPL=m
CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
CONFIG_INTEL_MEI_TXE=m
+CONFIG_INTEL_IPTS=y
CONFIG_VMWARE_VMCI=m
#
@@ -2225,6 +2288,7 @@ CONFIG_TCM_QLA2XXX=m
# CONFIG_TCM_QLA2XXX_DEBUG is not set
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_QEDI=m
+CONFIG_QEDF=m
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
CONFIG_SCSI_DC395x=m
@@ -2372,7 +2436,6 @@ CONFIG_DM_SNAPSHOT=m
CONFIG_DM_THIN_PROVISIONING=m
CONFIG_DM_CACHE=m
CONFIG_DM_CACHE_SMQ=m
-CONFIG_DM_CACHE_CLEANER=m
CONFIG_DM_ERA=m
CONFIG_DM_MIRROR=m
CONFIG_DM_LOG_USERSPACE=m
@@ -2388,6 +2451,7 @@ CONFIG_DM_VERITY=m
CONFIG_DM_VERITY_FEC=y
CONFIG_DM_SWITCH=m
CONFIG_DM_LOG_WRITES=m
+CONFIG_DM_INTEGRITY=m
CONFIG_TARGET_CORE=m
CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
@@ -2433,6 +2497,7 @@ CONFIG_NET_TEAM_MODE_LOADBALANCE=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_IPVLAN=m
+CONFIG_IPVTAP=m
CONFIG_VXLAN=m
CONFIG_GENEVE=m
CONFIG_GTP=m
@@ -2442,11 +2507,13 @@ CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_TUN=m
+CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
CONFIG_NLMON=m
CONFIG_NET_VRF=m
+CONFIG_VSOCKMON=m
CONFIG_SUNGEM_PHY=m
# CONFIG_ARCNET is not set
CONFIG_ATM_DRIVERS=y
@@ -2493,7 +2560,6 @@ CONFIG_CAIF_VIRTIO=m
# Distributed Switch Architecture drivers
#
CONFIG_NET_DSA_MV88E6060=m
-CONFIG_NET_DSA_BCM_SF2=m
CONFIG_B53=m
CONFIG_B53_SPI_DRIVER=m
CONFIG_B53_MDIO_DRIVER=m
@@ -2502,6 +2568,11 @@ CONFIG_B53_SRAB_DRIVER=m
CONFIG_NET_DSA_MV88E6XXX=m
CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
CONFIG_NET_DSA_QCA8K=m
+# CONFIG_NET_DSA_LOOP is not set
+CONFIG_NET_DSA_MT7530=m
+CONFIG_NET_DSA_SMSC_LAN9303=m
+CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
+CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m
CONFIG_ETHERNET=y
CONFIG_MDIO=m
CONFIG_NET_VENDOR_3COM=y
@@ -2527,6 +2598,7 @@ CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_AMD_XGBE=m
CONFIG_AMD_XGBE_HAVE_ECC=y
+# CONFIG_NET_VENDOR_AQUANTIA is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=m
@@ -2548,6 +2620,7 @@ CONFIG_BCMGENET=m
CONFIG_BNX2=m
CONFIG_CNIC=m
CONFIG_TIGON3=m
+CONFIG_TIGON3_HWMON=y
CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_BNXT=m
@@ -2627,6 +2700,7 @@ CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
CONFIG_MLX5_CORE=m
CONFIG_MLX5_CORE_EN=y
+CONFIG_MLX5_CORE_IPOIB=y
CONFIG_MLXSW_CORE=m
CONFIG_MLXSW_CORE_HWMON=y
CONFIG_MLXSW_CORE_THERMAL=y
@@ -2653,8 +2727,8 @@ CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NATSEMI=m
CONFIG_NS83820=m
CONFIG_NET_VENDOR_NETRONOME=y
-CONFIG_NFP_NETVF=m
-# CONFIG_NFP_NET_DEBUG is not set
+CONFIG_NFP=m
+# CONFIG_NFP_DEBUG is not set
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=m
CONFIG_NE2K_PCI=m
@@ -2678,6 +2752,7 @@ CONFIG_QED_LL2=y
CONFIG_QED_SRIOV=y
CONFIG_QEDE=m
CONFIG_QED_ISCSI=y
+CONFIG_QED_FCOE=y
CONFIG_NET_VENDOR_QUALCOMM=y
CONFIG_QCOM_EMAC=m
CONFIG_NET_VENDOR_REALTEK=y
@@ -2725,7 +2800,6 @@ CONFIG_HAPPYMEAL=m
CONFIG_SUNGEM=m
CONFIG_CASSINI=m
CONFIG_NIU=m
-CONFIG_NET_VENDOR_SYNOPSYS=y
CONFIG_NET_VENDOR_TEHUTI=y
CONFIG_TEHUTI=m
CONFIG_NET_VENDOR_TI=y
@@ -2744,22 +2818,19 @@ CONFIG_WIZNET_BUS_ANY=y
CONFIG_WIZNET_W5100_SPI=m
CONFIG_NET_VENDOR_XIRCOM=y
CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_NET_VENDOR_SYNOPSYS=y
+CONFIG_DWC_XLGMAC=m
+CONFIG_DWC_XLGMAC_PCI=m
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_NET_SB1000=m
-CONFIG_PHYLIB=m
-CONFIG_SWPHY=y
-CONFIG_LED_TRIGGER_PHY=y
-
-#
-# MDIO bus device drivers
-#
-CONFIG_MDIO_BCM_UNIMAC=m
+CONFIG_MDIO_DEVICE=m
CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_CAVIUM=m
# CONFIG_MDIO_GPIO is not set
-CONFIG_MDIO_OCTEON=m
# CONFIG_MDIO_THUNDER is not set
+CONFIG_PHYLIB=m
+CONFIG_SWPHY=y
+CONFIG_LED_TRIGGER_PHY=y
#
# MII PHY device drivers
@@ -2871,6 +2942,7 @@ CONFIG_ATH5K=m
CONFIG_ATH5K_PCI=y
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
@@ -2981,7 +3053,6 @@ CONFIG_IWLDVM=m
CONFIG_IWLMVM=m
CONFIG_IWLWIFI_OPMODE_MODULAR=y
# CONFIG_IWLWIFI_BCAST_FILTERING is not set
-# CONFIG_IWLWIFI_PCIE_RTPM is not set
#
# Debugging Options
@@ -3120,12 +3191,12 @@ CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
# CONFIG_WAN is not set
CONFIG_IEEE802154_DRIVERS=m
CONFIG_IEEE802154_FAKELB=m
-CONFIG_IEEE802154_AT86RF230=m
-# CONFIG_IEEE802154_AT86RF230_DEBUGFS is not set
+# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_MRF24J40 is not set
# CONFIG_IEEE802154_CC2520 is not set
CONFIG_IEEE802154_ATUSB=m
# CONFIG_IEEE802154_ADF7242 is not set
+# CONFIG_IEEE802154_CA8210 is not set
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_VMXNET3=m
@@ -3306,6 +3377,7 @@ CONFIG_KEYBOARD_MPR121=m
# CONFIG_KEYBOARD_SAMSUNG is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
+CONFIG_KEYBOARD_TM2_TOUCHKEY=m
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CROS_EC is not set
CONFIG_INPUT_MOUSE=y
@@ -3314,6 +3386,7 @@ CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_BYD=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
CONFIG_MOUSE_PS2_CYPRESS=y
CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
@@ -3322,6 +3395,7 @@ CONFIG_MOUSE_PS2_SENTELIC=y
CONFIG_MOUSE_PS2_TOUCHKIT=y
CONFIG_MOUSE_PS2_FOCALTECH=y
CONFIG_MOUSE_PS2_VMMOUSE=y
+CONFIG_MOUSE_PS2_SMBUS=y
CONFIG_MOUSE_SERIAL=m
CONFIG_MOUSE_APPLETOUCH=m
CONFIG_MOUSE_BCM5974=m
@@ -3364,6 +3438,8 @@ CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_WALKERA0701=m
+CONFIG_JOYSTICK_PSXPAD_SPI=m
+CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
CONFIG_TABLET_USB_AIPTEK=m
@@ -3448,6 +3524,7 @@ CONFIG_TOUCHSCREEN_TSC200X_CORE=m
CONFIG_TOUCHSCREEN_TSC2004=m
# CONFIG_TOUCHSCREEN_TSC2005 is not set
CONFIG_TOUCHSCREEN_TSC2007=m
+CONFIG_TOUCHSCREEN_TSC2007_IIO=y
CONFIG_TOUCHSCREEN_RM_TS=m
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
@@ -3456,6 +3533,7 @@ CONFIG_TOUCHSCREEN_SUR40=m
CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
# CONFIG_TOUCHSCREEN_SX8654 is not set
CONFIG_TOUCHSCREEN_TPS6507X=m
+CONFIG_TOUCHSCREEN_ZET6223=m
CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_TOUCHSCREEN_ROHM_BU21023=m
CONFIG_INPUT_MISC=y
@@ -3468,7 +3546,6 @@ CONFIG_INPUT_E3X0_BUTTON=m
CONFIG_INPUT_PCSPKR=m
CONFIG_INPUT_MC13783_PWRBUTTON=m
CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
CONFIG_INPUT_APANEL=m
CONFIG_INPUT_GP2A=m
# CONFIG_INPUT_GPIO_BEEPER is not set
@@ -3484,6 +3561,7 @@ CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_TPS65218_PWRBUTTON=m
+CONFIG_INPUT_AXP20X_PEK=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_PCF8574=m
@@ -3578,6 +3656,7 @@ CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_EXAR=m
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
@@ -3617,6 +3696,8 @@ CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_RP2=m
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
CONFIG_PPDEV=m
@@ -3691,6 +3772,7 @@ CONFIG_I2C_MUX=m
# Multiplexer I2C Chip support
#
# CONFIG_I2C_MUX_GPIO is not set
+CONFIG_I2C_MUX_LTC4306=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
# CONFIG_I2C_MUX_PINCTRL is not set
@@ -3828,6 +3910,7 @@ CONFIG_PPS_CLIENT_GPIO=m
#
CONFIG_PTP_1588_CLOCK=m
CONFIG_DP83640_PHY=m
+CONFIG_PTP_1588_CLOCK_KVM=m
CONFIG_PINCTRL=y
#
@@ -3843,6 +3926,7 @@ CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_INTEL=y
CONFIG_PINCTRL_BROXTON=y
+# CONFIG_PINCTRL_GEMINILAKE is not set
CONFIG_PINCTRL_SUNRISEPOINT=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_ACPI=y
@@ -3854,7 +3938,9 @@ CONFIG_GPIO_SYSFS=y
# Memory mapped GPIO drivers
#
# CONFIG_GPIO_AMDPT is not set
+CONFIG_GPIO_AXP209=m
# CONFIG_GPIO_DWAPB is not set
+CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GENERIC_PLATFORM is not set
CONFIG_GPIO_ICH=m
CONFIG_GPIO_LYNXPOINT=y
@@ -3888,13 +3974,14 @@ CONFIG_GPIO_CRYSTAL_COVE=y
# CONFIG_GPIO_LP3943 is not set
# CONFIG_GPIO_TPS65218 is not set
# CONFIG_GPIO_UCB1400 is not set
-CONFIG_GPIO_WHISKEY_COVE=y
+CONFIG_GPIO_WHISKEY_COVE=m
#
# PCI GPIO expanders
#
CONFIG_GPIO_AMD8111=m
# CONFIG_GPIO_ML_IOH is not set
+CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_RDC321X is not set
#
@@ -3919,24 +4006,30 @@ CONFIG_POWER_RESET=y
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
-# CONFIG_GENERIC_ADC_BATTERY is not set
+CONFIG_GENERIC_ADC_BATTERY=m
CONFIG_TEST_POWER=m
# CONFIG_BATTERY_DS2780 is not set
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_SBS is not set
+CONFIG_BATTERY_SBS=m
+CONFIG_CHARGER_SBS=m
# CONFIG_BATTERY_BQ27XXX is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BATTERY_MAX17042 is not set
+CONFIG_CHARGER_AXP20X=m
+CONFIG_BATTERY_AXP20X=m
+CONFIG_AXP20X_POWER=m
+CONFIG_AXP288_CHARGER=m
+CONFIG_AXP288_FUEL_GAUGE=m
+CONFIG_BATTERY_MAX17040=m
+CONFIG_BATTERY_MAX17042=m
# CONFIG_CHARGER_PCF50633 is not set
# CONFIG_CHARGER_ISP1704 is not set
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_LP8727 is not set
-# CONFIG_CHARGER_GPIO is not set
+CONFIG_CHARGER_GPIO=m
# CONFIG_CHARGER_BQ2415X is not set
# CONFIG_CHARGER_BQ24190 is not set
# CONFIG_CHARGER_BQ24257 is not set
-CONFIG_CHARGER_BQ24735=m
+# CONFIG_CHARGER_BQ24735 is not set
# CONFIG_CHARGER_BQ25890 is not set
# CONFIG_CHARGER_SMB347 is not set
# CONFIG_CHARGER_TPS65217 is not set
@@ -3974,6 +4067,7 @@ CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_FAM15H_POWER=m
CONFIG_SENSORS_APPLESMC=m
CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ASPEED=m
CONFIG_SENSORS_ATXP1=m
CONFIG_SENSORS_DS620=m
CONFIG_SENSORS_DS1621=m
@@ -4075,6 +4169,7 @@ CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_SCH56XX_COMMON=m
CONFIG_SENSORS_SCH5627=m
CONFIG_SENSORS_SCH5636=m
+CONFIG_SENSORS_STTS751=m
CONFIG_SENSORS_SMM665=m
CONFIG_SENSORS_ADC128D818=m
CONFIG_SENSORS_ADS1015=m
@@ -4113,6 +4208,7 @@ CONFIG_SENSORS_XGENE=m
CONFIG_SENSORS_ACPI_POWER=m
CONFIG_SENSORS_ATK0110=m
CONFIG_THERMAL=y
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_HWMON=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
@@ -4148,6 +4244,7 @@ CONFIG_WATCHDOG_SYSFS=y
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
+# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set
CONFIG_WDAT_WDT=m
CONFIG_XILINX_WATCHDOG=m
CONFIG_ZIIRAVE_WATCHDOG=m
@@ -4189,6 +4286,7 @@ CONFIG_MACHZ_WDT=m
CONFIG_SBC_EPX_C3_WATCHDOG=m
CONFIG_INTEL_MEI_WDT=m
CONFIG_NI903X_WDT=m
+CONFIG_NIC7018_WDT=m
CONFIG_MEN_A21_WDT=m
CONFIG_XEN_WDT=m
@@ -4253,10 +4351,11 @@ CONFIG_MFD_CORE=y
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_AAT2870_CORE is not set
CONFIG_MFD_BCM590XX=m
-# CONFIG_MFD_AXP20X_I2C is not set
+CONFIG_MFD_AXP20X=m
+CONFIG_MFD_AXP20X_I2C=m
CONFIG_MFD_CROS_EC=m
CONFIG_MFD_CROS_EC_I2C=m
-# CONFIG_MFD_CROS_EC_SPI is not set
+CONFIG_MFD_CROS_EC_SPI=m
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_DA9052_SPI is not set
# CONFIG_MFD_DA9052_I2C is not set
@@ -4270,10 +4369,11 @@ CONFIG_MFD_MC13XXX=m
CONFIG_MFD_MC13XXX_I2C=m
CONFIG_HTC_PASIC3=m
# CONFIG_HTC_I2CPLD is not set
-# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
+CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
CONFIG_LPC_ICH=m
CONFIG_LPC_SCH=m
CONFIG_INTEL_SOC_PMIC=y
+CONFIG_INTEL_SOC_PMIC_BXTWC=m
CONFIG_MFD_INTEL_LPSS=m
CONFIG_MFD_INTEL_LPSS_ACPI=m
CONFIG_MFD_INTEL_LPSS_PCI=m
@@ -4315,6 +4415,7 @@ CONFIG_MFD_SYSCON=y
CONFIG_MFD_TI_AM335X_TSCADC=m
CONFIG_MFD_LP3943=m
# CONFIG_MFD_LP8788 is not set
+CONFIG_MFD_TI_LMU=m
# CONFIG_MFD_PALMAS is not set
# CONFIG_TPS6105X is not set
CONFIG_TPS65010=m
@@ -4349,6 +4450,7 @@ CONFIG_MFD_WM5110=y
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_REGULATOR is not set
+CONFIG_CEC_CORE=m
CONFIG_MEDIA_SUPPORT=m
#
@@ -4361,8 +4463,7 @@ CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CEC_SUPPORT=y
-CONFIG_MEDIA_CEC_DEBUG=y
-CONFIG_MEDIA_CEC_EDID=y
+CONFIG_MEDIA_CEC_RC=y
CONFIG_MEDIA_CONTROLLER=y
# CONFIG_MEDIA_CONTROLLER_DVB is not set
CONFIG_VIDEO_DEV=m
@@ -4387,7 +4488,7 @@ CONFIG_VIDEOBUF2_DVB=m
CONFIG_DVB_CORE=m
CONFIG_DVB_NET=y
CONFIG_TTPCI_EEPROM=m
-CONFIG_DVB_MAX_ADAPTERS=8
+CONFIG_DVB_MAX_ADAPTERS=16
# CONFIG_DVB_DYNAMIC_MINORS is not set
# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set
@@ -4418,6 +4519,7 @@ CONFIG_IR_ITE_CIR=m
CONFIG_IR_FINTEK=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_REDRAT3=m
+CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_IGORPLUGUSB=m
@@ -4427,6 +4529,7 @@ CONFIG_RC_LOOPBACK=m
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
+CONFIG_IR_SIR=m
CONFIG_MEDIA_USB_SUPPORT=y
#
@@ -4503,7 +4606,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@@ -4568,6 +4670,7 @@ CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_DVBSKY=m
+CONFIG_DVB_USB_ZD1301=m
CONFIG_DVB_TTUSB_BUDGET=m
CONFIG_DVB_TTUSB_DEC=m
CONFIG_SMS_USB_DRV=m
@@ -4595,6 +4698,7 @@ CONFIG_USB_MSI2500=m
# USB HDMI CEC adapters
#
CONFIG_USB_PULSE8_CEC=m
+CONFIG_USB_RAINSHADOW_CEC=m
CONFIG_MEDIA_PCI_SUPPORT=y
#
@@ -4618,6 +4722,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
# Media capture/analog TV support
#
CONFIG_VIDEO_IVTV=m
+# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
CONFIG_VIDEO_IVTV_ALSA=m
CONFIG_VIDEO_FB_IVTV=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
@@ -4675,14 +4780,19 @@ CONFIG_DVB_NGENE=m
CONFIG_DVB_DDBRIDGE=m
CONFIG_DVB_SMIPCIE=m
CONFIG_DVB_NETUP_UNIDVB=m
-# CONFIG_V4L_PLATFORM_DRIVERS is not set
+CONFIG_V4L_PLATFORM_DRIVERS=y
+# CONFIG_VIDEO_CAFE_CCIC is not set
+# CONFIG_VIDEO_VIA_CAMERA is not set
+# CONFIG_SOC_CAMERA is not set
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
CONFIG_VIDEO_SH_VEU=m
CONFIG_V4L_TEST_DRIVERS=y
+CONFIG_VIDEO_VIMC=m
# CONFIG_VIDEO_VIVID is not set
# CONFIG_VIDEO_VIM2M is not set
-# CONFIG_DVB_PLATFORM_DRIVERS is not set
+CONFIG_DVB_PLATFORM_DRIVERS=y
+CONFIG_CEC_PLATFORM_DRIVERS=y
#
# Supported MMC/SDIO adapters
@@ -4801,6 +4911,7 @@ CONFIG_VIDEO_ADV7511=m
#
# Camera sensor devices
#
+CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV7640=m
CONFIG_VIDEO_MT9V011=m
@@ -4941,6 +5052,7 @@ CONFIG_DVB_RTL2832=m
CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_AS102_FE=m
+CONFIG_DVB_ZD1301_DEMOD=m
CONFIG_DVB_GP8PSK_FE=m
#
@@ -5029,11 +5141,14 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_DRM=m
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DEBUG_MM_SELFTEST is not set
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_DRM_FBDEV_EMULATION=y
+CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_TTM=m
+CONFIG_DRM_VM=y
#
# I2C encoder or helper chips
@@ -5058,7 +5173,7 @@ CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_I915=m
-# CONFIG_DRM_I915_ALPHA_SUPPORT is not set
+CONFIG_DRM_I915_ALPHA_SUPPORT=y
CONFIG_DRM_I915_CAPTURE_ERROR=y
CONFIG_DRM_I915_COMPRESS_ERROR=y
CONFIG_DRM_I915_USERPTR=y
@@ -5087,10 +5202,12 @@ CONFIG_DRM_BRIDGE=y
#
# Display Interface Bridges
#
-CONFIG_DRM_ANALOGIX_ANX78XX=m
+# CONFIG_DRM_ANALOGIX_ANX78XX is not set
CONFIG_HSA_AMD=m
CONFIG_DRM_HISI_HIBMC=m
+# CONFIG_DRM_TINYDRM is not set
# CONFIG_DRM_LEGACY is not set
+# CONFIG_DRM_LIB_RANDOM is not set
#
# Frame buffer Devices
@@ -5108,6 +5225,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SYS_FILLRECT=m
CONFIG_FB_SYS_COPYAREA=m
CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set
# CONFIG_FB_FOREIGN_ENDIAN is not set
CONFIG_FB_SYS_FOPS=m
CONFIG_FB_DEFERRED_IO=y
@@ -5199,6 +5317,7 @@ CONFIG_BACKLIGHT_PCF50633=m
# CONFIG_BACKLIGHT_GPIO is not set
# CONFIG_BACKLIGHT_LV5207LP is not set
# CONFIG_BACKLIGHT_BD6107 is not set
+# CONFIG_BACKLIGHT_ARCXCNN is not set
CONFIG_VGASTATE=m
CONFIG_HDMI=y
@@ -5208,6 +5327,7 @@ CONFIG_HDMI=y
CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+# CONFIG_VGACON_SOFT_SCROLLBACK_PERSISTENT_ENABLE_BY_DEFAULT is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -5397,6 +5517,8 @@ CONFIG_SND_FIREWORKS=m
CONFIG_SND_BEBOB=m
CONFIG_SND_FIREWIRE_DIGI00X=m
CONFIG_SND_FIREWIRE_TASCAM=m
+CONFIG_SND_FIREWIRE_MOTU=m
+CONFIG_SND_FIREFACE=m
CONFIG_SND_PCMCIA=y
CONFIG_SND_VXPOCKET=m
CONFIG_SND_PDAUDIOCF=m
@@ -5406,9 +5528,9 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
CONFIG_SND_SOC_AMD_ACP=m
-# CONFIG_SND_ATMEL_SOC is not set
+CONFIG_SND_ATMEL_SOC=m
CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_DESIGNWARE_PCM=m
+CONFIG_SND_DESIGNWARE_PCM=y
#
# SoC Audio for Freescale CPUs
@@ -5423,8 +5545,15 @@ CONFIG_SND_DESIGNWARE_PCM=m
# CONFIG_SND_SOC_FSL_SPDIF is not set
# CONFIG_SND_SOC_FSL_ESAI is not set
# CONFIG_SND_SOC_IMX_AUDMUX is not set
-# CONFIG_SND_SOC_IMG is not set
-CONFIG_SND_SST_MFLD_PLATFORM=m
+CONFIG_SND_I2S_HI6210_I2S=m
+CONFIG_SND_SOC_IMG=y
+CONFIG_SND_SOC_IMG_I2S_IN=m
+CONFIG_SND_SOC_IMG_I2S_OUT=m
+CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
+CONFIG_SND_SOC_IMG_SPDIF_IN=m
+CONFIG_SND_SOC_IMG_SPDIF_OUT=m
+CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
CONFIG_SND_SST_IPC=m
CONFIG_SND_SST_IPC_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
@@ -5442,119 +5571,149 @@ CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=m
CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
-# CONFIG_SND_SOC_XTFPGA_I2S is not set
+CONFIG_SND_SOC_XTFPGA_I2S=m
+CONFIG_ZX_TDM=m
CONFIG_SND_SOC_I2C_AND_SPI=m
#
# CODEC drivers
#
CONFIG_SND_SOC_AC97_CODEC=m
-# CONFIG_SND_SOC_ADAU1701 is not set
-# CONFIG_SND_SOC_ADAU7002 is not set
-# CONFIG_SND_SOC_AK4104 is not set
-# CONFIG_SND_SOC_AK4554 is not set
-# CONFIG_SND_SOC_AK4613 is not set
-# CONFIG_SND_SOC_AK4642 is not set
-# CONFIG_SND_SOC_AK5386 is not set
-# CONFIG_SND_SOC_ALC5623 is not set
+CONFIG_SND_SOC_ADAU_UTILS=m
+CONFIG_SND_SOC_ADAU1701=m
+CONFIG_SND_SOC_ADAU17X1=m
+CONFIG_SND_SOC_ADAU1761=m
+CONFIG_SND_SOC_ADAU1761_I2C=m
+CONFIG_SND_SOC_ADAU1761_SPI=m
+CONFIG_SND_SOC_ADAU7002=m
+CONFIG_SND_SOC_AK4104=m
+CONFIG_SND_SOC_AK4554=m
+CONFIG_SND_SOC_AK4613=m
+CONFIG_SND_SOC_AK4642=m
+CONFIG_SND_SOC_AK5386=m
+CONFIG_SND_SOC_ALC5623=m
# CONFIG_SND_SOC_BT_SCO is not set
-# CONFIG_SND_SOC_CS35L32 is not set
-# CONFIG_SND_SOC_CS35L33 is not set
-# CONFIG_SND_SOC_CS35L34 is not set
-# CONFIG_SND_SOC_CS42L42 is not set
-# CONFIG_SND_SOC_CS42L51_I2C is not set
-# CONFIG_SND_SOC_CS42L52 is not set
-# CONFIG_SND_SOC_CS42L56 is not set
-# CONFIG_SND_SOC_CS42L73 is not set
-# CONFIG_SND_SOC_CS4265 is not set
-# CONFIG_SND_SOC_CS4270 is not set
-# CONFIG_SND_SOC_CS4271_I2C is not set
-# CONFIG_SND_SOC_CS4271_SPI is not set
-# CONFIG_SND_SOC_CS42XX8_I2C is not set
-# CONFIG_SND_SOC_CS4349 is not set
-# CONFIG_SND_SOC_CS53L30 is not set
+CONFIG_SND_SOC_CS35L32=m
+CONFIG_SND_SOC_CS35L33=m
+CONFIG_SND_SOC_CS35L34=m
+CONFIG_SND_SOC_CS35L35=m
+CONFIG_SND_SOC_CS42L42=m
+CONFIG_SND_SOC_CS42L51=m
+CONFIG_SND_SOC_CS42L51_I2C=m
+CONFIG_SND_SOC_CS42L52=m
+CONFIG_SND_SOC_CS42L56=m
+CONFIG_SND_SOC_CS42L73=m
+CONFIG_SND_SOC_CS4265=m
+CONFIG_SND_SOC_CS4270=m
+CONFIG_SND_SOC_CS4271=m
+CONFIG_SND_SOC_CS4271_I2C=m
+CONFIG_SND_SOC_CS4271_SPI=m
+CONFIG_SND_SOC_CS42XX8=m
+CONFIG_SND_SOC_CS42XX8_I2C=m
+CONFIG_SND_SOC_CS4349=m
+CONFIG_SND_SOC_CS53L30=m
+CONFIG_SND_SOC_DA7213=m
CONFIG_SND_SOC_DA7219=m
+CONFIG_SND_SOC_DIO2125=m
CONFIG_SND_SOC_DMIC=m
CONFIG_SND_SOC_HDMI_CODEC=m
-# CONFIG_SND_SOC_ES8328 is not set
-# CONFIG_SND_SOC_GTM601 is not set
+CONFIG_SND_SOC_ES7134=m
+CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
+CONFIG_SND_SOC_ES8328_SPI=m
+CONFIG_SND_SOC_GTM601=m
CONFIG_SND_SOC_HDAC_HDMI=m
-# CONFIG_SND_SOC_INNO_RK3036 is not set
+CONFIG_SND_SOC_INNO_RK3036=m
CONFIG_SND_SOC_MAX98090=m
CONFIG_SND_SOC_MAX98357A=m
-# CONFIG_SND_SOC_MAX98504 is not set
-# CONFIG_SND_SOC_MAX9860 is not set
-# CONFIG_SND_SOC_MSM8916_WCD_ANALOG is not set
-# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
-# CONFIG_SND_SOC_PCM1681 is not set
-# CONFIG_SND_SOC_PCM179X_I2C is not set
-# CONFIG_SND_SOC_PCM179X_SPI is not set
-# CONFIG_SND_SOC_PCM3168A_I2C is not set
-# CONFIG_SND_SOC_PCM3168A_SPI is not set
-# CONFIG_SND_SOC_PCM512x_I2C is not set
-# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_MAX98504=m
+CONFIG_SND_SOC_MAX98927=m
+CONFIG_SND_SOC_MAX9860=m
+CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
+CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
+CONFIG_SND_SOC_PCM1681=m
+CONFIG_SND_SOC_PCM179X=m
+CONFIG_SND_SOC_PCM179X_I2C=m
+CONFIG_SND_SOC_PCM179X_SPI=m
+CONFIG_SND_SOC_PCM3168A=m
+CONFIG_SND_SOC_PCM3168A_I2C=m
+CONFIG_SND_SOC_PCM3168A_SPI=m
+CONFIG_SND_SOC_PCM512x=m
+CONFIG_SND_SOC_PCM512x_I2C=m
+CONFIG_SND_SOC_PCM512x_SPI=m
CONFIG_SND_SOC_RL6231=m
CONFIG_SND_SOC_RL6347A=m
CONFIG_SND_SOC_RT286=m
CONFIG_SND_SOC_RT298=m
-# CONFIG_SND_SOC_RT5616 is not set
-# CONFIG_SND_SOC_RT5631 is not set
+CONFIG_SND_SOC_RT5616=m
+CONFIG_SND_SOC_RT5631=m
CONFIG_SND_SOC_RT5640=m
CONFIG_SND_SOC_RT5645=m
CONFIG_SND_SOC_RT5651=m
CONFIG_SND_SOC_RT5670=m
CONFIG_SND_SOC_RT5677=m
CONFIG_SND_SOC_RT5677_SPI=m
-# CONFIG_SND_SOC_SGTL5000 is not set
+CONFIG_SND_SOC_SGTL5000=m
CONFIG_SND_SOC_SI476X=m
-# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
+CONFIG_SND_SOC_SIGMADSP=m
+CONFIG_SND_SOC_SIGMADSP_I2C=m
+CONFIG_SND_SOC_SIGMADSP_REGMAP=m
+CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m
CONFIG_SND_SOC_SPDIF=m
-# CONFIG_SND_SOC_SSM2602_SPI is not set
-# CONFIG_SND_SOC_SSM2602_I2C is not set
+CONFIG_SND_SOC_SSM2602=m
+CONFIG_SND_SOC_SSM2602_SPI=m
+CONFIG_SND_SOC_SSM2602_I2C=m
CONFIG_SND_SOC_SSM4567=m
-# CONFIG_SND_SOC_STA32X is not set
-# CONFIG_SND_SOC_STA350 is not set
-# CONFIG_SND_SOC_STI_SAS is not set
-# CONFIG_SND_SOC_TAS2552 is not set
-# CONFIG_SND_SOC_TAS5086 is not set
-# CONFIG_SND_SOC_TAS571X is not set
-# CONFIG_SND_SOC_TAS5720 is not set
-# CONFIG_SND_SOC_TFA9879 is not set
-# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
-# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
-# CONFIG_SND_SOC_TLV320AIC31XX is not set
-# CONFIG_SND_SOC_TLV320AIC3X is not set
+CONFIG_SND_SOC_STA32X=m
+CONFIG_SND_SOC_STA350=m
+CONFIG_SND_SOC_STI_SAS=m
+CONFIG_SND_SOC_TAS2552=m
+CONFIG_SND_SOC_TAS5086=m
+CONFIG_SND_SOC_TAS571X=m
+CONFIG_SND_SOC_TAS5720=m
+CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TLV320AIC23=m
+CONFIG_SND_SOC_TLV320AIC23_I2C=m
+CONFIG_SND_SOC_TLV320AIC23_SPI=m
+CONFIG_SND_SOC_TLV320AIC31XX=m
+CONFIG_SND_SOC_TLV320AIC3X=m
CONFIG_SND_SOC_TS3A227E=m
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8523 is not set
-# CONFIG_SND_SOC_WM8580 is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8728 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8737 is not set
-# CONFIG_SND_SOC_WM8741 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8770 is not set
-# CONFIG_SND_SOC_WM8776 is not set
-# CONFIG_SND_SOC_WM8804_I2C is not set
-# CONFIG_SND_SOC_WM8804_SPI is not set
-# CONFIG_SND_SOC_WM8903 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8962 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8978 is not set
-# CONFIG_SND_SOC_WM8985 is not set
-# CONFIG_SND_SOC_NAU8810 is not set
+CONFIG_SND_SOC_WM8510=m
+CONFIG_SND_SOC_WM8523=m
+CONFIG_SND_SOC_WM8580=m
+CONFIG_SND_SOC_WM8711=m
+CONFIG_SND_SOC_WM8728=m
+CONFIG_SND_SOC_WM8731=m
+CONFIG_SND_SOC_WM8737=m
+CONFIG_SND_SOC_WM8741=m
+CONFIG_SND_SOC_WM8750=m
+CONFIG_SND_SOC_WM8753=m
+CONFIG_SND_SOC_WM8770=m
+CONFIG_SND_SOC_WM8776=m
+CONFIG_SND_SOC_WM8804=m
+CONFIG_SND_SOC_WM8804_I2C=m
+CONFIG_SND_SOC_WM8804_SPI=m
+CONFIG_SND_SOC_WM8903=m
+CONFIG_SND_SOC_WM8960=m
+CONFIG_SND_SOC_WM8962=m
+CONFIG_SND_SOC_WM8974=m
+CONFIG_SND_SOC_WM8978=m
+CONFIG_SND_SOC_WM8985=m
+CONFIG_SND_SOC_NAU8540=m
+CONFIG_SND_SOC_NAU8810=m
+CONFIG_SND_SOC_NAU8824=m
CONFIG_SND_SOC_NAU8825=m
-# CONFIG_SND_SOC_TPA6130A2 is not set
+CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SIMPLE_CARD_UTILS=m
CONFIG_SND_SIMPLE_CARD=m
-# CONFIG_SOUND_PRIME is not set
+CONFIG_SND_X86=y
+CONFIG_HDMI_LPE_AUDIO=m
CONFIG_AC97_BUS=m
#
@@ -5570,6 +5729,7 @@ CONFIG_HID_GENERIC=m
# Special HID drivers
#
CONFIG_HID_A4TECH=m
+CONFIG_HID_ACCUTOUCH=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=m
@@ -5619,6 +5779,7 @@ CONFIG_HID_MAYFLASH=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NTI=m
CONFIG_HID_NTRIG=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -5684,6 +5845,7 @@ CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=m
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=m
+CONFIG_USB_PCI=y
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
#
@@ -5850,6 +6012,7 @@ CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_WISHBONE=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
+CONFIG_USB_SERIAL_UPD78F0730=m
# CONFIG_USB_SERIAL_DEBUG is not set
#
@@ -5877,6 +6040,7 @@ CONFIG_USB_TEST=m
CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
+CONFIG_USB_HUB_USB251XB=m
CONFIG_USB_HSIC_USB3503=m
CONFIG_USB_HSIC_USB4604=m
CONFIG_USB_LINK_LAYER_TEST=m
@@ -5898,6 +6062,12 @@ CONFIG_TAHVO_USB=m
# CONFIG_TAHVO_USB_HOST_BY_DEFAULT is not set
CONFIG_USB_ISP1301=m
# CONFIG_USB_GADGET is not set
+
+#
+# USB Power Delivery and Type-C drivers
+#
+CONFIG_TYPEC=m
+CONFIG_TYPEC_WCOVE=m
CONFIG_USB_LED_TRIG=y
# CONFIG_USB_ULPI_BUS is not set
CONFIG_UWB=m
@@ -5933,6 +6103,7 @@ CONFIG_MMC_REALTEK_PCI=m
CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_TOSHIBA_PCI=m
CONFIG_MMC_MTK=m
+CONFIG_MMC_SDHCI_XENON=m
CONFIG_MEMSTICK=m
# CONFIG_MEMSTICK_DEBUG is not set
@@ -5954,6 +6125,7 @@ CONFIG_MEMSTICK_REALTEK_USB=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=m
CONFIG_LEDS_CLASS_FLASH=m
+CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y
#
# LED drivers
@@ -5978,7 +6150,6 @@ CONFIG_LEDS_DAC124S085=m
CONFIG_LEDS_BD2802=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LT3593=m
-CONFIG_LEDS_DELL_NETBOOKS=m
CONFIG_LEDS_MC13783=m
CONFIG_LEDS_TCA6507=m
CONFIG_LEDS_TLC591XX=m
@@ -6044,6 +6215,7 @@ CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_ISER=m
CONFIG_INFINIBAND_ISERT=m
+CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_RDMAVT=m
CONFIG_RDMA_RXE=m
CONFIG_INFINIBAND_HFI1=m
@@ -6057,7 +6229,7 @@ CONFIG_EDAC=y
CONFIG_EDAC_LEGACY_SYSFS=y
# CONFIG_EDAC_DEBUG is not set
CONFIG_EDAC_DECODE_MCE=m
-CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_GHES=y
CONFIG_EDAC_AMD64=m
# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
CONFIG_EDAC_E752X=m
@@ -6073,6 +6245,7 @@ CONFIG_EDAC_I5100=m
CONFIG_EDAC_I7300=m
CONFIG_EDAC_SBRIDGE=m
CONFIG_EDAC_SKX=m
+# CONFIG_EDAC_PND2 is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
CONFIG_RTC_CLASS=y
@@ -6185,7 +6358,7 @@ CONFIG_RTC_DRV_MC13XXX=m
#
# HID Sensor RTC drivers
#
-# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
+CONFIG_RTC_DRV_HID_SENSOR_TIME=m
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
@@ -6219,12 +6392,14 @@ CONFIG_SYNC_FILE=y
# CONFIG_SW_SYNC is not set
CONFIG_DCA=m
CONFIG_AUXDISPLAY=y
+# CONFIG_HD44780 is not set
CONFIG_KS0108=m
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_CFAG12864B=m
CONFIG_CFAG12864B_RATE=20
# CONFIG_IMG_ASCII_LCD is not set
+# CONFIG_PANEL is not set
CONFIG_UIO=m
CONFIG_UIO_CIF=m
CONFIG_UIO_PDRV_GENIRQ=m
@@ -6265,6 +6440,7 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
# Microsoft Hyper-V guest support
#
CONFIG_HYPERV=m
+CONFIG_HYPERV_TSCPAGE=y
CONFIG_HYPERV_UTILS=m
CONFIG_HYPERV_BALLOON=m
@@ -6396,6 +6572,7 @@ CONFIG_RTLLIB_CRYPTO_CCMP=m
CONFIG_RTLLIB_CRYPTO_TKIP=m
CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8192E=m
+CONFIG_RTL8723BS=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
@@ -6496,14 +6673,22 @@ CONFIG_SPEAKUP_SYNTH_SPKOUT=m
CONFIG_SPEAKUP_SYNTH_TXPRT=m
CONFIG_SPEAKUP_SYNTH_DUMMY=m
CONFIG_STAGING_MEDIA=y
+# CONFIG_INTEL_ATOMISP is not set
+CONFIG_VIDEO_ATOMISP=m
+CONFIG_VIDEO_OV5693=m
+CONFIG_VIDEO_IMX=m
+CONFIG_VIDEO_OV2722=m
+CONFIG_VIDEO_GC2235=m
+CONFIG_VIDEO_OV8858=m
+CONFIG_VIDEO_MSRLIST_HELPER=m
+CONFIG_VIDEO_MT9M114=m
+CONFIG_VIDEO_AP1302=m
+CONFIG_VIDEO_GC0310=m
+CONFIG_VIDEO_OV2680=m
+CONFIG_VIDEO_LM3554=m
CONFIG_I2C_BCM2048=m
CONFIG_DVB_CXD2099=m
CONFIG_LIRC_STAGING=y
-CONFIG_LIRC_BT829=m
-CONFIG_LIRC_IMON=m
-CONFIG_LIRC_PARALLEL=m
-CONFIG_LIRC_SASEM=m
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_ZILOG=m
#
@@ -6516,6 +6701,7 @@ CONFIG_FWTTY_MAX_CARD_PORTS=32
CONFIG_LNET=m
CONFIG_LNET_MAX_PAYLOAD=1048576
CONFIG_LNET_SELFTEST=m
+CONFIG_LNET_XPRT_IB=m
CONFIG_LUSTRE_FS=m
CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER=8192
# CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK is not set
@@ -6527,12 +6713,15 @@ CONFIG_GS_FPGABOOT=m
# CONFIG_WILC1000_SDIO is not set
# CONFIG_WILC1000_SPI is not set
# CONFIG_MOST is not set
+# CONFIG_KS7010 is not set
+# CONFIG_GREYBUS is not set
#
-# Old ISDN4Linux (deprecated)
+# USB Power Delivery and Type-C drivers
#
-# CONFIG_KS7010 is not set
-# CONFIG_GREYBUS is not set
+CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TCPCI=m
+CONFIG_TYPEC_FUSB302=m
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
CONFIG_ACERHDF=m
@@ -6542,6 +6731,7 @@ CONFIG_DELL_SMBIOS=m
CONFIG_DELL_LAPTOP=m
CONFIG_DELL_WMI=m
CONFIG_DELL_WMI_AIO=m
+CONFIG_DELL_WMI_LED=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_RBTN=m
CONFIG_FUJITSU_LAPTOP=m
@@ -6580,6 +6770,7 @@ CONFIG_TOSHIBA_BT_RFKILL=m
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA_WMI=m
CONFIG_ACPI_CMPC=m
+CONFIG_INTEL_CHT_INT33FE=m
CONFIG_INTEL_HID_EVENT=m
CONFIG_INTEL_VBTN=m
CONFIG_INTEL_IPS=m
@@ -6601,6 +6792,9 @@ CONFIG_INTEL_PUNIT_IPC=m
CONFIG_INTEL_TELEMETRY=m
# CONFIG_MLX_PLATFORM is not set
# CONFIG_MLX_CPLD_PLATFORM is not set
+CONFIG_INTEL_TURBO_MAX_3=y
+# CONFIG_SILEAD_DMI is not set
+CONFIG_PMC_ATOM=y
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
@@ -6621,13 +6815,6 @@ CONFIG_COMMON_CLK=y
# CONFIG_COMMON_CLK_NXP is not set
# CONFIG_COMMON_CLK_PXA is not set
# CONFIG_COMMON_CLK_PIC32 is not set
-# CONFIG_COMMON_CLK_MT2701 is not set
-# CONFIG_COMMON_CLK_MT2701_MMSYS is not set
-# CONFIG_COMMON_CLK_MT2701_IMGSYS is not set
-# CONFIG_COMMON_CLK_MT2701_VDECSYS is not set
-# CONFIG_COMMON_CLK_MT2701_HIFSYS is not set
-# CONFIG_COMMON_CLK_MT2701_ETHSYS is not set
-# CONFIG_COMMON_CLK_MT2701_BDPSYS is not set
#
# Hardware Spinlock drivers
@@ -6679,8 +6866,13 @@ CONFIG_REMOTEPROC=m
#
# Broadcom SoC drivers
#
+
+#
+# i.MX SoC drivers
+#
# CONFIG_SUNXI_SRAM is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOC_ZTE is not set
CONFIG_PM_DEVFREQ=y
#
@@ -6701,14 +6893,16 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-# CONFIG_EXTCON_ADC_JACK is not set
-# CONFIG_EXTCON_ARIZONA is not set
+CONFIG_EXTCON_ADC_JACK=m
+CONFIG_EXTCON_ARIZONA=m
+CONFIG_EXTCON_AXP288=m
CONFIG_EXTCON_GPIO=m
-# CONFIG_EXTCON_MAX3355 is not set
-# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
-# CONFIG_EXTCON_RT8973A is not set
+CONFIG_EXTCON_INTEL_INT3496=m
+CONFIG_EXTCON_MAX3355=m
+CONFIG_EXTCON_QCOM_SPMI_MISC=m
+CONFIG_EXTCON_RT8973A=m
CONFIG_EXTCON_SM5502=m
-# CONFIG_EXTCON_USB_GPIO is not set
+CONFIG_EXTCON_USB_GPIO=m
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -6763,11 +6957,18 @@ CONFIG_MMA7660=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+CONFIG_AXP20X_ADC=m
+CONFIG_AXP288_ADC=m
# CONFIG_HI8435 is not set
+# CONFIG_HX711 is not set
# CONFIG_INA2XX_ADC is not set
# CONFIG_LTC2485 is not set
+# CONFIG_LTC2497 is not set
# CONFIG_MAX1027 is not set
+# CONFIG_MAX11100 is not set
+# CONFIG_MAX1118 is not set
# CONFIG_MAX1363 is not set
+# CONFIG_MAX9611 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_NAU7802 is not set
@@ -6779,7 +6980,9 @@ CONFIG_MMA7660=m
# CONFIG_TI_ADC128S052 is not set
# CONFIG_TI_ADC161S626 is not set
# CONFIG_TI_ADS1015 is not set
+# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_AM335X_ADC is not set
+# CONFIG_TI_TLC4541 is not set
# CONFIG_VIPERBOARD_ADC is not set
#
@@ -6827,6 +7030,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD5593R is not set
# CONFIG_AD5504 is not set
# CONFIG_AD5624R_SPI is not set
+# CONFIG_LTC2632 is not set
# CONFIG_AD5686 is not set
# CONFIG_AD5755 is not set
# CONFIG_AD5761 is not set
@@ -6868,9 +7072,8 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_ADXRS450 is not set
# CONFIG_BMG160 is not set
CONFIG_HID_SENSOR_GYRO_3D=m
-CONFIG_IIO_ST_GYRO_3AXIS=m
-CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
-CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
+# CONFIG_MPU3050_I2C is not set
+# CONFIG_IIO_ST_GYRO_3AXIS is not set
# CONFIG_ITG3200 is not set
#
@@ -6882,7 +7085,8 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
#
# CONFIG_AFE4403 is not set
# CONFIG_AFE4404 is not set
-CONFIG_MAX30100=m
+# CONFIG_MAX30100 is not set
+# CONFIG_MAX30102 is not set
#
# Humidity sensors
@@ -6890,6 +7094,7 @@ CONFIG_MAX30100=m
# CONFIG_AM2315 is not set
# CONFIG_DHT11 is not set
# CONFIG_HDC100X is not set
+CONFIG_HID_SENSOR_HUMIDITY=m
# CONFIG_HTS221 is not set
# CONFIG_HTU21 is not set
# CONFIG_SI7005 is not set
@@ -6905,6 +7110,7 @@ CONFIG_MAX30100=m
# CONFIG_KMX61 is not set
# CONFIG_INV_MPU6050_I2C is not set
# CONFIG_INV_MPU6050_SPI is not set
+# CONFIG_IIO_ST_LSM6DSX is not set
#
# Light sensors
@@ -6914,26 +7120,27 @@ CONFIG_ACPI_ALS=m
# CONFIG_AL3320A is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9960 is not set
-CONFIG_BH1750=m
-CONFIG_BH1780=m
+# CONFIG_BH1750 is not set
+# CONFIG_BH1780 is not set
# CONFIG_CM32181 is not set
# CONFIG_CM3232 is not set
# CONFIG_CM3323 is not set
# CONFIG_CM36651 is not set
+# CONFIG_IIO_CROS_EC_LIGHT_PROX is not set
# CONFIG_GP2AP020A00F is not set
# CONFIG_SENSORS_ISL29018 is not set
# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
-# CONFIG_HID_SENSOR_PROX is not set
+CONFIG_HID_SENSOR_PROX=m
# CONFIG_JSA1212 is not set
-CONFIG_RPR0521=m
+# CONFIG_RPR0521 is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
# CONFIG_MAX44000 is not set
-CONFIG_OPT3001=m
-CONFIG_PA12203001=m
+# CONFIG_OPT3001 is not set
+# CONFIG_PA12203001 is not set
# CONFIG_SI1145 is not set
-CONFIG_STK3310=m
+# CONFIG_STK3310 is not set
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
@@ -6942,6 +7149,7 @@ CONFIG_STK3310=m
# CONFIG_US5182D is not set
# CONFIG_VCNL4000 is not set
# CONFIG_VEML6070 is not set
+# CONFIG_VL6180 is not set
#
# Magnetometer sensors
@@ -6953,12 +7161,9 @@ CONFIG_STK3310=m
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
# CONFIG_MMC35240 is not set
-CONFIG_IIO_ST_MAGN_3AXIS=m
-CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
-CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
-CONFIG_SENSORS_HMC5843=m
-CONFIG_SENSORS_HMC5843_I2C=m
-CONFIG_SENSORS_HMC5843_SPI=m
+# CONFIG_IIO_ST_MAGN_3AXIS is not set
+# CONFIG_SENSORS_HMC5843_I2C is not set
+# CONFIG_SENSORS_HMC5843_SPI is not set
#
# Inclinometer sensors
@@ -6969,15 +7174,16 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
#
# Triggers - standalone
#
-# CONFIG_IIO_HRTIMER_TRIGGER is not set
+CONFIG_IIO_HRTIMER_TRIGGER=m
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_TIGHTLOOP_TRIGGER=m
-# CONFIG_IIO_SYSFS_TRIGGER is not set
+CONFIG_IIO_SYSFS_TRIGGER=m
#
# Digital potentiometers
#
# CONFIG_DS1803 is not set
+# CONFIG_MAX5481 is not set
# CONFIG_MAX5487 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
@@ -6993,7 +7199,8 @@ CONFIG_IIO_TIGHTLOOP_TRIGGER=m
#
# CONFIG_ABP060MG is not set
# CONFIG_BMP280 is not set
-# CONFIG_HID_SENSOR_PRESS is not set
+# CONFIG_IIO_CROS_EC_BARO is not set
+CONFIG_HID_SENSOR_PRESS=m
# CONFIG_HP03 is not set
# CONFIG_MPL115_I2C is not set
# CONFIG_MPL115_SPI is not set
@@ -7011,29 +7218,32 @@ CONFIG_IIO_TIGHTLOOP_TRIGGER=m
# CONFIG_AS3935 is not set
#
-# Proximity sensors
+# Proximity and distance sensors
#
# CONFIG_LIDAR_LITE_V2 is not set
+# CONFIG_SRF04 is not set
# CONFIG_SX9500 is not set
+# CONFIG_SRF08 is not set
#
# Temperature sensors
#
# CONFIG_MAXIM_THERMOCOUPLE is not set
+CONFIG_HID_SENSOR_TEMP=m
# CONFIG_MLX90614 is not set
# CONFIG_TMP006 is not set
+# CONFIG_TMP007 is not set
# CONFIG_TSYS01 is not set
# CONFIG_TSYS02D is not set
# CONFIG_NTB is not set
# CONFIG_VME_BUS is not set
# CONFIG_PWM is not set
CONFIG_ARM_GIC_MAX_NR=1
-CONFIG_IPACK_BUS=m
-CONFIG_BOARD_TPCI200=m
-CONFIG_SERIAL_IPOCTAL=m
+# CONFIG_IPACK_BUS is not set
CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_ATH79 is not set
# CONFIG_RESET_BERLIN is not set
+# CONFIG_RESET_IMX7 is not set
# CONFIG_RESET_LPC18XX is not set
# CONFIG_RESET_MESON is not set
# CONFIG_RESET_PISTACHIO is not set
@@ -7065,6 +7275,7 @@ CONFIG_INTEL_RAPL=m
#
CONFIG_RAS=y
# CONFIG_MCE_AMD_INJ is not set
+CONFIG_RAS_CEC=y
CONFIG_THUNDERBOLT=m
#
@@ -7080,9 +7291,9 @@ CONFIG_BTT=y
CONFIG_ND_PFN=m
CONFIG_NVDIMM_PFN=y
CONFIG_NVDIMM_DAX=y
+CONFIG_DAX=m
CONFIG_DEV_DAX=m
CONFIG_DEV_DAX_PMEM=m
-CONFIG_NR_DEV_DAX=32768
CONFIG_NVMEM=m
CONFIG_STM=m
# CONFIG_STM_DUMMY is not set
@@ -7103,9 +7314,13 @@ CONFIG_INTEL_TH_PTI=m
# CONFIG_FPGA is not set
#
+# FSI support
+#
+CONFIG_FSI=m
+
+#
# Firmware Drivers
#
-# CONFIG_ARM_SCPI_PROTOCOL is not set
CONFIG_EDD=m
# CONFIG_EDD_OFF is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -7306,6 +7521,7 @@ CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_ATIME_SUPPORT=y
CONFIG_UBIFS_FS_ENCRYPTION=y
+CONFIG_UBIFS_FS_SECURITY=y
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_FILE_CACHE is not set
@@ -7358,7 +7574,6 @@ CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=m
CONFIG_PNFS_BLOCK=m
-CONFIG_PNFS_OBJLAYOUT=m
CONFIG_PNFS_FLEXFILE_LAYOUT=m
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
CONFIG_NFS_V4_1_MIGRATION=y
@@ -7504,6 +7719,7 @@ CONFIG_STACK_VALIDATION=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0
+CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_DEBUG_KERNEL=y
#
@@ -7513,6 +7729,7 @@ CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_PAGE_POISONING is not set
# CONFIG_DEBUG_PAGE_REF is not set
+# CONFIG_DEBUG_RODATA_TEST is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
@@ -7520,6 +7737,7 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_VM is not set
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_VIRTUAL is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_PER_CPU_MAPS is not set
@@ -7554,7 +7772,6 @@ CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# CONFIG_SCHED_STACK_END_CHECK is not set
# CONFIG_DEBUG_TIMEKEEPING is not set
-CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_PREEMPT is not set
#
@@ -7570,6 +7787,7 @@ CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_LOCK_TORTURE_TEST is not set
+# CONFIG_WW_MUTEX_SELFTEST is not set
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
@@ -7630,8 +7848,8 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_KPROBE_EVENT=y
-CONFIG_UPROBE_EVENT=y
+CONFIG_KPROBE_EVENTS=y
+CONFIG_UPROBE_EVENTS=y
CONFIG_BPF_EVENTS=y
CONFIG_PROBE_EVENTS=y
CONFIG_DYNAMIC_FTRACE=y
@@ -7653,6 +7871,7 @@ CONFIG_RING_BUFFER_BENCHMARK=m
#
CONFIG_LKDTM=m
# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_TEST_SORT is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_RBTREE_TEST is not set
@@ -7668,6 +7887,7 @@ CONFIG_TEST_KSTRTOX=m
# CONFIG_TEST_UUID is not set
# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_TEST_HASH is not set
+# CONFIG_TEST_PARMAN is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_LKM is not set
@@ -7691,13 +7911,11 @@ CONFIG_IO_STRICT_DEVMEM=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EARLY_PRINTK_DBGP is not set
CONFIG_EARLY_PRINTK_EFI=y
+# CONFIG_EARLY_PRINTK_USB_XDBC is not set
# CONFIG_X86_PTDUMP_CORE is not set
# CONFIG_X86_PTDUMP is not set
# CONFIG_EFI_PGT_DUMP is not set
-# CONFIG_DEBUG_RODATA_TEST is not set
# CONFIG_DEBUG_WX is not set
-CONFIG_DEBUG_SET_MODULE_RONX=y
-# CONFIG_DEBUG_NX_TEST is not set
CONFIG_DOUBLEFAULT=y
# CONFIG_DEBUG_TLBFLUSH is not set
# CONFIG_IOMMU_DEBUG is not set
@@ -7715,7 +7933,7 @@ CONFIG_IO_DELAY_0X80=y
CONFIG_DEFAULT_IO_DELAY_TYPE=0
# CONFIG_DEBUG_BOOT_PARAMS is not set
# CONFIG_CPA_DEBUG is not set
-# CONFIG_OPTIMIZE_INLINING is not set
+CONFIG_OPTIMIZE_INLINING=y
# CONFIG_DEBUG_ENTRY is not set
# CONFIG_DEBUG_NMI_SELFTEST is not set
# CONFIG_X86_DEBUG_FPU is not set
@@ -7725,19 +7943,21 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=0
# Security options
#
CONFIG_KEYS=y
+CONFIG_KEYS_COMPAT=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_TRUSTED_KEYS=m
CONFIG_ENCRYPTED_KEYS=m
CONFIG_KEY_DH_OPERATIONS=y
# CONFIG_SECURITY_DMESG_RESTRICT is not set
CONFIG_SECURITY=y
+# CONFIG_SECURITY_WRITABLE_HOOKS is not set
CONFIG_SECURITYFS=y
# CONFIG_SECURITY_NETWORK is not set
CONFIG_SECURITY_PATH=y
# CONFIG_INTEL_TXT is not set
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
-CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
CONFIG_HARDENED_USERCOPY=y
+# CONFIG_STATIC_USERMODEHELPER is not set
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
@@ -7774,10 +7994,10 @@ CONFIG_CRYPTO_RNG_DEFAULT=m
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=m
CONFIG_CRYPTO_KPP2=y
-CONFIG_CRYPTO_KPP=m
+CONFIG_CRYPTO_KPP=y
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_RSA=m
-CONFIG_CRYPTO_DH=m
+CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_ECDH=m
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
@@ -7795,6 +8015,7 @@ CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_ABLK_HELPER=m
CONFIG_CRYPTO_SIMD=m
CONFIG_CRYPTO_GLUE_HELPER_X86=m
+CONFIG_CRYPTO_ENGINE=m
#
# Authenticated Encryption with Associated Data
@@ -7862,6 +8083,7 @@ CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
# Ciphers
#
CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_AES_TI=m
CONFIG_CRYPTO_AES_X86_64=m
CONFIG_CRYPTO_AES_NI_INTEL=m
CONFIG_CRYPTO_ANUBIS=m
@@ -7952,6 +8174,8 @@ CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS=""
# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
CONFIG_SECONDARY_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_BLACKLIST_KEYRING=y
+CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
@@ -7970,7 +8194,6 @@ CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_MMU_AUDIT=y
-CONFIG_KVM_DEVICE_ASSIGNMENT=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
@@ -8048,6 +8271,8 @@ CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
+# CONFIG_DMA_NOOP_OPS is not set
+CONFIG_DMA_VIRT_OPS=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
@@ -8072,9 +8297,9 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_6x10 is not set
+# CONFIG_FONT_10x18 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
# CONFIG_SG_SPLIT is not set
CONFIG_SG_POOL=y
@@ -8082,3 +8307,4 @@ CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_ARCH_HAS_MMIO_FLUSH=y
CONFIG_SBITMAP=y
+CONFIG_PARMAN=m
diff --git a/ipts_fw_config.bin b/ipts_fw_config.bin
new file mode 100644
index 000000000000..2522e8f97bcf
--- /dev/null
+++ b/ipts_fw_config.bin
Binary files differ
diff --git a/mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch b/mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch
new file mode 100644
index 000000000000..bf089e08adc6
--- /dev/null
+++ b/mm-Revert-x86_64-and-arm64-ELF_ET_DYN_BASE-base.patch
@@ -0,0 +1,35 @@
+diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
+index acae781f7359..3288c2b36731 100644
+--- a/arch/arm64/include/asm/elf.h
++++ b/arch/arm64/include/asm/elf.h
+@@ -114,10 +114,10 @@
+
+ /*
+ * This is the base location for PIE (ET_DYN with INTERP) loads. On
+- * 64-bit, this is raised to 4GB to leave the entire 32-bit address
++ * 64-bit, this is above 4GB to leave the entire 32-bit address
+ * space open for things that want to use the area for 32-bit pointers.
+ */
+-#define ELF_ET_DYN_BASE 0x100000000UL
++#define ELF_ET_DYN_BASE (2 * TASK_SIZE_64 / 3)
+
+ #ifndef __ASSEMBLY__
+
+diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
+index 1c18d83d3f09..9aeb91935ce0 100644
+--- a/arch/x86/include/asm/elf.h
++++ b/arch/x86/include/asm/elf.h
+@@ -247,11 +247,11 @@ extern int force_personality32;
+
+ /*
+ * This is the base location for PIE (ET_DYN with INTERP) loads. On
+- * 64-bit, this is raised to 4GB to leave the entire 32-bit address
++ * 64-bit, this is above 4GB to leave the entire 32-bit address
+ * space open for things that want to use the area for 32-bit pointers.
+ */
+ #define ELF_ET_DYN_BASE (mmap_is_ia32() ? 0x000400000UL : \
+- 0x100000000UL)
++ (TASK_SIZE / 3 * 2))
+
+ /* This yields a mask that user programs can use to figure out what
+ instruction set this CPU supports. This could be done in user space,