diff options
Diffstat (limited to 'patch-5.12.0-redhat.patch')
-rw-r--r-- | patch-5.12.0-redhat.patch | 637 |
1 files changed, 66 insertions, 571 deletions
diff --git a/patch-5.12.0-redhat.patch b/patch-5.12.0-redhat.patch index 40de102c9..f586d9567 100644 --- a/patch-5.12.0-redhat.patch +++ b/patch-5.12.0-redhat.patch @@ -1,74 +1,69 @@ - Documentation/admin-guide/kdump/kdump.rst | 11 + - Documentation/admin-guide/kernel-parameters.txt | 8 + - .../bindings/display/panel/xingbangda,xbd599.yaml | 50 +++ - Kconfig | 2 + - Kconfig.redhat | 17 + - Makefile | 13 +- - arch/arm/Kconfig | 4 +- - arch/arm/include/asm/uaccess.h | 8 +- - arch/arm64/Kconfig | 3 +- - arch/arm64/kernel/acpi.c | 4 + - arch/s390/include/asm/ipl.h | 1 + - arch/s390/kernel/ipl.c | 5 + - arch/s390/kernel/setup.c | 4 + - arch/x86/kernel/cpu/common.c | 1 + - arch/x86/kernel/setup.c | 71 +++- - drivers/acpi/apei/hest.c | 8 + - drivers/acpi/irq.c | 17 +- - drivers/acpi/scan.c | 9 + - drivers/ata/libahci.c | 18 + - drivers/char/ipmi/ipmi_dmi.c | 15 + - drivers/char/ipmi/ipmi_msghandler.c | 16 +- - drivers/firmware/efi/Makefile | 1 + - drivers/firmware/efi/efi.c | 124 +++++-- - drivers/firmware/efi/secureboot.c | 38 +++ - drivers/gpu/drm/panel/Kconfig | 9 + - drivers/gpu/drm/panel/Makefile | 1 + - drivers/gpu/drm/panel/panel-xingbangda-xbd599.c | 366 +++++++++++++++++++++ - drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +- - drivers/hid/hid-rmi.c | 64 ---- - drivers/infiniband/sw/rxe/rxe.c | 2 + - drivers/input/rmi4/rmi_driver.c | 124 ++++--- - drivers/iommu/iommu.c | 22 ++ - drivers/message/fusion/mptsas.c | 10 + - drivers/message/fusion/mptspi.c | 11 + - drivers/net/ethernet/intel/ice/ice_main.c | 1 + - drivers/pci/pci-driver.c | 29 ++ - drivers/pci/quirks.c | 24 ++ - drivers/scsi/aacraid/linit.c | 2 + - drivers/scsi/be2iscsi/be_main.c | 2 + - drivers/scsi/hpsa.c | 4 + - drivers/scsi/lpfc/lpfc_ids.h | 14 + - drivers/scsi/megaraid/megaraid_sas_base.c | 2 + - drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 + - drivers/scsi/qla2xxx/qla_os.c | 6 + - drivers/scsi/qla4xxx/ql4_os.c | 2 + - drivers/scsi/smartpqi/smartpqi_init.c | 16 + - drivers/usb/core/hub.c | 7 + - include/linux/efi.h | 22 +- - include/linux/kernel.h | 34 +- - include/linux/lsm_hook_defs.h | 2 + - include/linux/lsm_hooks.h | 6 + - include/linux/module.h | 1 + - include/linux/pci.h | 4 + - include/linux/rh_kabi.h | 297 +++++++++++++++++ - include/linux/rmi.h | 1 + - include/linux/security.h | 5 + - kernel/Makefile | 1 + - kernel/bpf/syscall.c | 27 +- - kernel/crash_core.c | 28 +- - kernel/module.c | 2 + - kernel/module_signing.c | 9 +- - kernel/panic.c | 14 + - kernel/rh_taint.c | 93 ++++++ - mm/kmemleak.c | 5 + - scripts/mod/modpost.c | 8 + - scripts/tags.sh | 2 + - security/integrity/platform_certs/load_uefi.c | 6 +- - security/lockdown/Kconfig | 13 + - security/lockdown/lockdown.c | 1 + - security/security.c | 6 + - 70 files changed, 1579 insertions(+), 188 deletions(-) + Documentation/admin-guide/kdump/kdump.rst | 11 + + Documentation/admin-guide/kernel-parameters.txt | 8 + + Kconfig | 2 + + Kconfig.redhat | 17 ++ + Makefile | 13 +- + arch/arm/Kconfig | 4 +- + arch/arm/include/asm/uaccess.h | 8 +- + arch/arm64/Kconfig | 3 +- + arch/arm64/kernel/acpi.c | 4 + + arch/s390/include/asm/ipl.h | 1 + + arch/s390/kernel/ipl.c | 5 + + arch/s390/kernel/setup.c | 4 + + arch/x86/kernel/cpu/common.c | 1 + + arch/x86/kernel/setup.c | 71 ++++-- + drivers/acpi/apei/hest.c | 8 + + drivers/acpi/irq.c | 17 +- + drivers/acpi/scan.c | 9 + + drivers/ata/libahci.c | 18 ++ + drivers/char/ipmi/ipmi_dmi.c | 15 ++ + drivers/char/ipmi/ipmi_msghandler.c | 16 +- + drivers/firmware/efi/Makefile | 1 + + drivers/firmware/efi/efi.c | 124 +++++++--- + drivers/firmware/efi/secureboot.c | 38 +++ + drivers/hid/hid-rmi.c | 64 ----- + drivers/infiniband/sw/rxe/rxe.c | 2 + + drivers/input/rmi4/rmi_driver.c | 124 ++++++---- + drivers/iommu/iommu.c | 22 ++ + drivers/message/fusion/mptsas.c | 10 + + drivers/message/fusion/mptspi.c | 11 + + drivers/net/ethernet/intel/ice/ice_main.c | 1 + + drivers/pci/pci-driver.c | 29 +++ + drivers/pci/quirks.c | 24 ++ + drivers/scsi/aacraid/linit.c | 2 + + drivers/scsi/be2iscsi/be_main.c | 2 + + drivers/scsi/hpsa.c | 4 + + drivers/scsi/lpfc/lpfc_ids.h | 14 ++ + drivers/scsi/megaraid/megaraid_sas_base.c | 2 + + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 + + drivers/scsi/qla2xxx/qla_os.c | 6 + + drivers/scsi/qla4xxx/ql4_os.c | 2 + + drivers/scsi/smartpqi/smartpqi_init.c | 16 ++ + drivers/usb/core/hub.c | 7 + + include/linux/efi.h | 22 +- + include/linux/kernel.h | 34 ++- + include/linux/lsm_hook_defs.h | 2 + + include/linux/lsm_hooks.h | 6 + + include/linux/module.h | 1 + + include/linux/pci.h | 4 + + include/linux/rh_kabi.h | 297 ++++++++++++++++++++++++ + include/linux/rmi.h | 1 + + include/linux/security.h | 5 + + kernel/Makefile | 1 + + kernel/bpf/syscall.c | 27 ++- + kernel/crash_core.c | 28 ++- + kernel/module.c | 2 + + kernel/module_signing.c | 9 +- + kernel/panic.c | 14 ++ + kernel/rh_taint.c | 93 ++++++++ + mm/kmemleak.c | 5 + + scripts/mod/modpost.c | 8 + + scripts/tags.sh | 2 + + security/integrity/platform_certs/load_uefi.c | 6 +- + security/lockdown/Kconfig | 13 ++ + security/lockdown/lockdown.c | 1 + + security/security.c | 6 + + 65 files changed, 1148 insertions(+), 183 deletions(-) diff --git a/Documentation/admin-guide/kdump/kdump.rst b/Documentation/admin-guide/kdump/kdump.rst index 75a9dd98e76e..3ff3291551f9 100644 @@ -111,62 +106,6 @@ index 04545725f187..42ca35b0ee40 100644 usbcore.authorized_default= [USB] Default USB device authorization: (default -1 = authorized except for wireless USB, -diff --git a/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -new file mode 100644 -index 000000000000..b27bcf11198f ---- /dev/null -+++ b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -@@ -0,0 +1,50 @@ -+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) -+%YAML 1.2 -+--- -+$id: http://devicetree.org/schemas/display/panel/xingbangda,xbd599.yaml# -+$schema: http://devicetree.org/meta-schemas/core.yaml# -+ -+title: Xingbangda XBD599 5.99in MIPI-DSI LCD panel -+ -+maintainers: -+ - Icenowy Zheng <icenowy@aosc.io> -+ -+allOf: -+ - $ref: panel-common.yaml# -+ -+properties: -+ compatible: -+ const: xingbangda,xbd599 -+ reg: true -+ backlight: true -+ reset-gpios: true -+ vcc-supply: -+ description: regulator that supplies the VCC voltage -+ iovcc-supply: -+ description: regulator that supplies the IOVCC voltage -+ -+required: -+ - compatible -+ - reg -+ - backlight -+ - vcc-supply -+ - iovcc-supply -+ -+additionalProperties: false -+ -+examples: -+ - | -+ dsi { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ panel@0 { -+ compatible = "xingbangda,xbd599"; -+ reg = <0>; -+ backlight = <&backlight>; -+ iovcc-supply = <®_dldo2>; -+ vcc-supply = <®_ldo_io0>; -+ }; -+ }; -+ -+... diff --git a/Kconfig b/Kconfig index 745bc773f567..f57ff40109d7 100644 --- a/Kconfig @@ -871,450 +810,6 @@ index 000000000000..de0a3714a5d4 + } + } +} -diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 4894913936e9..5c0e75decf3a 100644 ---- a/drivers/gpu/drm/panel/Kconfig -+++ b/drivers/gpu/drm/panel/Kconfig -@@ -552,6 +552,15 @@ config DRM_PANEL_VISIONOX_RM69299 - Say Y here if you want to enable support for Visionox - RM69299 DSI Video Mode panel. - -+config DRM_PANEL_XINGBANGDA_XBD599 -+ tristate "Xingbangda XBD599 panel" -+ depends on OF -+ depends on DRM_MIPI_DSI -+ depends on BACKLIGHT_CLASS_DEVICE -+ help -+ Say Y here if you want to enable support for the Xingbangda XBD599 -+ MIPI DSI Video Mode panel. -+ - config DRM_PANEL_XINPENG_XPP055C272 - tristate "Xinpeng XPP055C272 panel driver" - depends on OF -diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile -index cae4d976c069..a85a9d9f6f5f 100644 ---- a/drivers/gpu/drm/panel/Makefile -+++ b/drivers/gpu/drm/panel/Makefile -@@ -58,4 +58,5 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o - obj-$(CONFIG_DRM_PANEL_TPO_TPG110) += panel-tpo-tpg110.o - obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o - obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) += panel-visionox-rm69299.o -+obj-$(CONFIG_DRM_PANEL_XINGBANGDA_XBD599) += panel-xingbangda-xbd599.o - obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o -diff --git a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -new file mode 100644 -index 000000000000..b483f96ee1db ---- /dev/null -+++ b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -@@ -0,0 +1,366 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Xingbangda XBD599 MIPI-DSI panel driver -+ * -+ * Copyright (C) 2019-2020 Icenowy Zheng <icenowy@aosc.io> -+ * -+ * Based on panel-rocktech-jh057n00900.c, which is: -+ * Copyright (C) Purism SPC 2019 -+ */ -+ -+#include <linux/delay.h> -+#include <linux/gpio/consumer.h> -+#include <linux/mod_devicetable.h> -+#include <linux/module.h> -+#include <linux/of_device.h> -+#include <linux/regulator/consumer.h> -+ -+#include <drm/drm_mipi_dsi.h> -+#include <drm/drm_modes.h> -+#include <drm/drm_panel.h> -+#include <drm/drm_print.h> -+ -+/* Manufacturer specific Commands send via DSI */ -+#define ST7703_CMD_ALL_PIXEL_OFF 0x22 -+#define ST7703_CMD_ALL_PIXEL_ON 0x23 -+#define ST7703_CMD_SETDISP 0xB2 -+#define ST7703_CMD_SETRGBIF 0xB3 -+#define ST7703_CMD_SETCYC 0xB4 -+#define ST7703_CMD_SETBGP 0xB5 -+#define ST7703_CMD_SETVCOM 0xB6 -+#define ST7703_CMD_SETOTP 0xB7 -+#define ST7703_CMD_SETPOWER_EXT 0xB8 -+#define ST7703_CMD_SETEXTC 0xB9 -+#define ST7703_CMD_SETMIPI 0xBA -+#define ST7703_CMD_SETVDC 0xBC -+#define ST7703_CMD_SETSCR 0xC0 -+#define ST7703_CMD_SETPOWER 0xC1 -+#define ST7703_CMD_UNK_C6 0xC6 -+#define ST7703_CMD_SETPANEL 0xCC -+#define ST7703_CMD_SETGAMMA 0xE0 -+#define ST7703_CMD_SETEQ 0xE3 -+#define ST7703_CMD_SETGIP1 0xE9 -+#define ST7703_CMD_SETGIP2 0xEA -+ -+static const char * const regulator_names[] = { -+ "iovcc", -+ "vcc", -+}; -+ -+struct xbd599 { -+ struct device *dev; -+ struct drm_panel panel; -+ struct gpio_desc *reset_gpio; -+ struct regulator_bulk_data supplies[ARRAY_SIZE(regulator_names)]; -+ bool prepared; -+}; -+ -+static inline struct xbd599 *panel_to_xbd599(struct drm_panel *panel) -+{ -+ return container_of(panel, struct xbd599, panel); -+} -+ -+#define dsi_dcs_write_seq(dsi, cmd, seq...) do { \ -+ static const u8 d[] = { seq }; \ -+ int ret; \ -+ ret = mipi_dsi_dcs_write(dsi, cmd, d, ARRAY_SIZE(d)); \ -+ if (ret < 0) \ -+ return ret; \ -+ } while (0) -+ -+static int xbd599_init_sequence(struct xbd599 *ctx) -+{ -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ struct device *dev = ctx->dev; -+ int ret; -+ -+ /* -+ * Init sequence was supplied by the panel vendor. -+ */ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, -+ 0xF1, 0x12, 0x83); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, -+ 0x33, 0x81, 0x05, 0xF9, 0x0E, 0x0E, 0x20, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, -+ 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, -+ 0x00, 0x00, 0x37); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, -+ 0x25, 0x22, 0x20, 0x03); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, -+ 0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00, -+ 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, -+ 0x73, 0x73, 0x50, 0x50, 0x00, 0xC0, 0x08, 0x70, -+ 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x4E); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0B); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xF0, 0x12, 0xF0); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, -+ 0x00, 0x00, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, -+ 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10); -+ dsi_dcs_write_seq(dsi, 0xC6, 0x01, 0x00, 0xFF, 0xFF, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, -+ 0x74, 0x00, 0x32, 0x32, 0x77, 0xF1, 0xFF, 0xFF, -+ 0xCC, 0xCC, 0x77, 0x77); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x07, 0x07); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x2C, 0x2C); -+ dsi_dcs_write_seq(dsi, 0xBF, 0x02, 0x11, 0x00); -+ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, -+ 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, -+ 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, -+ 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -+ 0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64, -+ 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, -+ 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -+ 0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, -+ 0xA5, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, -+ 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, -+ 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, -+ 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -+ 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, -+ 0x12, 0x18); -+ msleep(20); -+ -+ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "Failed to exit sleep mode\n"); -+ return ret; -+ } -+ msleep(250); -+ -+ ret = mipi_dsi_dcs_set_display_on(dsi); -+ if (ret) -+ return ret; -+ msleep(50); -+ -+ DRM_DEV_DEBUG_DRIVER(dev, "Panel init sequence done\n"); -+ return 0; -+} -+ -+static int xbd599_prepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ if (ctx->prepared) -+ return 0; -+ -+ ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ if (ret) -+ return ret; -+ -+ DRM_DEV_DEBUG_DRIVER(ctx->dev, "Resetting the panel\n"); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ usleep_range(20, 40); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 0); -+ msleep(20); -+ -+ ctx->prepared = true; -+ -+ return 0; -+} -+ -+static int xbd599_enable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ ret = xbd599_init_sequence(ctx); -+ if (ret < 0) { -+ DRM_DEV_ERROR(ctx->dev, "Panel init sequence failed: %d\n", -+ ret); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int xbd599_disable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ -+ return mipi_dsi_dcs_set_display_off(dsi); -+} -+ -+static int xbd599_unprepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ -+ if (!ctx->prepared) -+ return 0; -+ -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ ctx->prepared = false; -+ -+ return 0; -+} -+ -+static const struct drm_display_mode xbd599_default_mode = { -+ .hdisplay = 720, -+ .hsync_start = 720 + 40, -+ .hsync_end = 720 + 40 + 40, -+ .htotal = 720 + 40 + 40 + 40, -+ .vdisplay = 1440, -+ .vsync_start = 1440 + 18, -+ .vsync_end = 1440 + 18 + 10, -+ .vtotal = 1440 + 18 + 10 + 17, -+ .vrefresh = 60, -+ .clock = 69000, -+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, -+ -+ .width_mm = 68, -+ .height_mm = 136, -+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, -+}; -+ -+static int xbd599_get_modes(struct drm_panel *panel, -+ struct drm_connector *connector) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct drm_display_mode *mode; -+ -+ mode = drm_mode_duplicate(connector->dev, &xbd599_default_mode); -+ if (!mode) { -+ DRM_DEV_ERROR(ctx->dev, "Failed to add mode\n"); -+ return -ENOMEM; -+ } -+ -+ drm_mode_set_name(mode); -+ -+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; -+ connector->display_info.width_mm = mode->width_mm; -+ connector->display_info.height_mm = mode->height_mm; -+ drm_mode_probed_add(connector, mode); -+ -+ return 1; -+} -+ -+static const struct drm_panel_funcs xbd599_drm_funcs = { -+ .prepare = xbd599_prepare, -+ .enable = xbd599_enable, -+ .disable = xbd599_disable, -+ .unprepare = xbd599_unprepare, -+ .get_modes = xbd599_get_modes, -+}; -+ -+static int xbd599_probe(struct mipi_dsi_device *dsi) -+{ -+ struct device *dev = &dsi->dev; -+ struct xbd599 *ctx; -+ int i, ret; -+ -+ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); -+ if (!ctx) -+ return -ENOMEM; -+ -+ for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) -+ ctx->supplies[i].supply = regulator_names[i]; -+ -+ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), -+ ctx->supplies); -+ if (ret < 0) { -+ DRM_DEV_ERROR(&dsi->dev, "cannot get regulators\n"); -+ return ret; -+ } -+ -+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); -+ if (IS_ERR(ctx->reset_gpio)) { -+ DRM_DEV_ERROR(dev, "cannot get reset gpio\n"); -+ return PTR_ERR(ctx->reset_gpio); -+ } -+ -+ mipi_dsi_set_drvdata(dsi, ctx); -+ -+ ctx->dev = dev; -+ -+ dsi->lanes = 4; -+ dsi->format = MIPI_DSI_FMT_RGB888; -+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; -+ -+ drm_panel_init(&ctx->panel, &dsi->dev, &xbd599_drm_funcs, -+ DRM_MODE_CONNECTOR_DSI); -+ -+ ret = drm_panel_of_backlight(&ctx->panel); -+ if (ret) -+ return ret; -+ -+ drm_panel_add(&ctx->panel); -+ -+ ret = mipi_dsi_attach(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "mipi_dsi_attach failed. Is host ready?\n"); -+ drm_panel_remove(&ctx->panel); -+ return ret; -+ } -+ -+ DRM_DEV_INFO(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", -+ xbd599_default_mode.hdisplay, -+ xbd599_default_mode.vdisplay, -+ xbd599_default_mode.vrefresh, -+ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); -+ -+ return 0; -+} -+ -+static void xbd599_shutdown(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ ret = drm_panel_unprepare(&ctx->panel); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to unprepare panel: %d\n", -+ ret); -+} -+ -+static int xbd599_remove(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ xbd599_shutdown(dsi); -+ -+ ret = mipi_dsi_detach(dsi); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to detach from DSI host: %d\n", -+ ret); -+ -+ drm_panel_remove(&ctx->panel); -+ -+ return 0; -+} -+ -+static const struct of_device_id xbd599_of_match[] = { -+ { .compatible = "xingbangda,xbd599", }, -+ { /* sentinel */ } -+}; -+MODULE_DEVICE_TABLE(of, xbd599_of_match); -+ -+static struct mipi_dsi_driver xbd599_driver = { -+ .probe = xbd599_probe, -+ .remove = xbd599_remove, -+ .shutdown = xbd599_shutdown, -+ .driver = { -+ .name = "panel-xingbangda-xbd599", -+ .of_match_table = xbd599_of_match, -+ }, -+}; -+module_mipi_dsi_driver(xbd599_driver); -+ -+MODULE_AUTHOR("Icenowy Zheng <icenowy@aosc.io>"); -+MODULE_DESCRIPTION("DRM driver for Xingbangda XBD599 MIPI DSI panel"); -+MODULE_LICENSE("GPL v2"); -diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -index 4f5efcace68e..5af808078efd 100644 ---- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -@@ -556,7 +556,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HSA_PACKET_OVERHEAD 10 - hsa = max((unsigned int)HSA_PACKET_OVERHEAD, -- (mode->hsync_end - mode->hsync_start) * Bpp - HSA_PACKET_OVERHEAD); -+ (mode->hsync_end - mode->hsync_start) * Bpp) - HSA_PACKET_OVERHEAD; - - /* - * The backporch is set using a blanking packet (4 -@@ -565,7 +565,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBP_PACKET_OVERHEAD 6 - hbp = max((unsigned int)HBP_PACKET_OVERHEAD, -- (mode->htotal - mode->hsync_end) * Bpp - HBP_PACKET_OVERHEAD); -+ (mode->htotal - mode->hsync_end) * Bpp) - HBP_PACKET_OVERHEAD; - - /* - * The frontporch is set using a sync event (4 bytes) -@@ -575,7 +575,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HFP_PACKET_OVERHEAD 16 - hfp = max((unsigned int)HFP_PACKET_OVERHEAD, -- (mode->hsync_start - mode->hdisplay) * Bpp - HFP_PACKET_OVERHEAD); -+ (mode->hsync_start - mode->hdisplay) * Bpp) - HFP_PACKET_OVERHEAD; - - /* - * The blanking is set using a sync event (4 bytes) -@@ -584,8 +584,8 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBLK_PACKET_OVERHEAD 10 - hblk = max((unsigned int)HBLK_PACKET_OVERHEAD, -- (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp - -- HBLK_PACKET_OVERHEAD); -+ (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp) - -+ HBLK_PACKET_OVERHEAD; - - /* - * And I'm not entirely sure what vblk is about. The driver in diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c index 311eee599ce9..2460c6bd46f8 100644 --- a/drivers/hid/hid-rmi.c |