xiaomi-latte: new device (Xiaomi Mi Pad 2)

The kernel version has been updated to mainline 6.16.0 and successfully compiled and tested.

Due to the device's specific requirements, it enforces the use of Secure Boot.
Disabling Secure Boot will reset it back to enabled after several reboots or DNX Fastboot sessions.

I had to resort to using shim and a self-signed certificate.

https://wiki.postmarketos.org/wiki/Xiaomi_Pad_2_(xiaomi-latte)

Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/7286>
This commit is contained in:
Qs315490 2025-11-22 09:20:25 +08:00 committed by The Friendly Merge Bot
parent 19de3b02bf
commit 416017bd34
No known key found for this signature in database
14 changed files with 4033 additions and 0 deletions

View file

@ -0,0 +1,94 @@
# Reference: <https://postmarketos.org/devicepkg>
# bootx64.efi is shimx64.efi from fedora
pkgname=device-xiaomi-latte
pkgdesc="XiaoMi Pad2"
pkgver=1
pkgrel=0
url="https://github.com/Qs315490/linux_latte"
license="MIT"
arch="x86_64"
options="!check !archcheck"
depends="
linux-xiaomi-latte
linux-firmware-brcm
oem-intel
postmarketos-base
zstd
btrfs-progs
irqbalance
udisks2
"
makedepends="devicepkg-dev rpm2cpio"
_fedora_packages_url="https://dl.fedoraproject.org/pub/fedora/linux/releases/43/Everything/x86_64/os/Packages"
source="
deviceinfo
modules-initfs
alsa-ucm-conf/cht-bsw-rt5659.conf
alsa-ucm-conf/HiFi.conf
keyboard.hwdb
BCM4356A2.hcd::https://github.com/Qs315490/linux_latte/raw/refs/heads/main/fix_file/BCM4356A2.hcd
MOK.cer
shim-x64.x86_64.rpm::$_fedora_packages_url/s/shim-x64-15.8-3.x86_64.rpm
grub2-efi-x64.x86_64.rpm::$_fedora_packages_url/g/grub2-efi-x64-2.12-40.fc43.x86_64.rpm
grub.cfg
"
unpack() {
rpm2cpio "$SRCDEST/shim-x64.x86_64.rpm" | cpio -id
rpm2cpio "$SRCDEST/grub2-efi-x64.x86_64.rpm" | cpio -id
}
build() {
devicepkg_build $startdir $pkgname
}
package() {
devicepkg_package $startdir $pkgname
# If you change the all 'm' setting to 'y' in the kconfig, you need to uncomment this line.
# echo "/lib/firmware" >> "$pkgdir/usr/share/mkinitfs/files/00-$pkgname-modules.files"
# Firmware for Xiaomi Mi Pad 2
install -Dm755 "$SRCDEST/BCM4356A2.hcd" \
"$pkgdir/lib/firmware/brcm/BCM4356A2.hcd"
# ALSA Use Case Manager configuration for Xiaomi Mi Pad 2
install -Dm755 "alsa-ucm-conf/cht-bsw-rt5659.conf" \
"$pkgdir/usr/share/alsa/ucm2/Intel/cht-bsw-rt5659/cht-bsw-rt5659.conf"
install -Dm755 "alsa-ucm-conf/HiFi.conf" \
"$pkgdir/usr/share/alsa/ucm2/Intel/cht-bsw-rt5659/HiFi.conf"
install -dm755 "$pkgdir/usr/share/alsa/ucm2/conf.d/cht-bsw-rt5659"
ln -sf ../../Intel/cht-bsw-rt5659/cht-bsw-rt5659.conf \
"$pkgdir/usr/share/alsa/ucm2/conf.d/cht-bsw-rt5659/cht-bsw-rt5659.conf"
# on Screen Touch Keyboard configuration for Xiaomi Mi Pad 2
install -Dm755 "keyboard.hwdb" \
"$pkgdir/usr/lib/udev/hwdb.d/61-keyboard.hwdb"
# Shim Secure Boot loader
install -Dm755 "boot/efi/EFI/fedora/shimx64.efi" "$pkgdir/boot/efi/boot/bootx64.efi"
install -Dm755 "boot/efi/EFI/fedora/mmx64.efi" "$pkgdir/boot/efi/boot/mmx64.efi"
# GRUB Secure Boot loader
install -Dm755 "boot/efi/EFI/fedora/grubx64.efi" "$pkgdir/boot/efi/boot/grubx64.efi"
install -Dm755 "grub.cfg" "$pkgdir/boot/efi/boot/grub.cfg"
# Secure Boot certificate
install -Dm755 "MOK.cer" "$pkgdir/boot/MOK.cer"
}
sha512sums="
1e4b27713503a4e9425a43d5efc414fdf802c55d8ce1b444e89adacb91de092b6a33b6aab7915d8728f9431499a2768263c4a920e6a35500a282d41123bcfa39 deviceinfo
b6079f37aa1beea10f522f8bf94ad6040a0253393fb40b9ee09bb2a76b7f3eea9a424f3ec9f60206edeff8f24a38b0f0159b371c4cc28b7db738f475c4488576 modules-initfs
e8bf62d308049427a438e411f499cf554016170f91225ef7a5b7b02ab3b296fd3f603187b0a9e0cbed89ba80081a754a52e5af1333fa1d28ed296c513569b7ac cht-bsw-rt5659.conf
265b86a9f0fc377d1bf800be59a96704f8263b7b614df12d7f26fc8b9105c35060ac661d059a1348cbc2b0788ca8131c14aad3ab5038c0d7253d0daf7e0d75a2 HiFi.conf
9d0e4e17090739a11b9ddd336455343567d49665a5222b3fcfe4b8b73da7233ff13a5ca8aded44fc38345c0c8c4938dcd6b96528165fe8d47b30036dedf0ce7c keyboard.hwdb
fa34874f938d7532d80ee3395d93f1c957260c08f77671074266e3c3c3ca7190b8200668af96b0861ed5b961522d5088921cd3d4af236d287945a7527f75f916 BCM4356A2.hcd
5fdeb5fc0c7fdc61d1a948abc69168966c2c7893a18f54e7583a564555b4a8a360fc24999580d9498ba55d7db63493468c3f4f4690a0f40a7105bb408da6d305 MOK.cer
fa1b522380c81254fd4f356e411ad6b29b82307fc3d9da94f79fc12197a01c542f0646d90540427af786bb97a1baee74afd7c7d85245ad7b66a143571c9456f3 shim-x64.x86_64.rpm
f6de8a85db78db54065442356ffff07a4898c0d4397e24415f6fba2f937375a271d3134b8acb5f6295abdde3ec90c32e10d0552abcca6687240513303a06bdc8 grub2-efi-x64.x86_64.rpm
1d0c3bdf590ec870d026237697c7094098c526cf26eb465786e36490d591e0e05a62c3869fe8a14beec0511c57f0dad4fcde6cbcaa385a3461a0e7cadd26e097 grub.cfg
"

Binary file not shown.

View file

@ -0,0 +1,93 @@
SectionVerb {
If.Controls {
Condition {
Type ControlExists
Control "name='media0_in Gain 0 Switch'"
}
Before.EnableSequence "0"
True {
Include.pe.File "/platforms/bytcr/PlatformEnableSeq.conf"
Include.pd.File "/platforms/bytcr/PlatformDisableSeq.conf"
}
}
EnableSequence [
cset "name='codec_out0 Gain 0 Volume' 72%"
cset "name='IF2 ADC Mux' DAC_REF"
cset "name='IF3 ADC Mux' IF_ADC1"
# 音量50%
# cset "name='DAC1 Playback Volume' 50%"
# 设置右扬声器使用右声道
cset "name='Amp Input1' Right"
# Enable Boost
cset "name='STO1 ADC Capture Switch' on"
cset "name='IN3 Boost Volume' 45"
cset "name='IN4 Boost Volume' 45"
# Set ADC Source
cset "name='Stereo1 ADC Source' 'ADC1'"
cset "name='Stereo1 ADC1 Source' 'ADC'"
# Set recording mixer output to ADC
cset "name='Stereo1 ADC MIXL ADC1 Switch' on"
cset "name='Stereo1 ADC MIXR ADC1 Switch' on"
cset "name='DAC1 MIXL Stereo ADC Switch' off"
cset "name='DAC1 MIXR Stereo ADC Switch' off"
cset "name='media_loop2_out mix 0 codec_in0 Switch' on"
cset "name='pcm1_out mix 0 media_loop2_in Switch' on"
# Set ADC Volume
cset "name='IN Capture Volume' 23"
cset "name='STO1 ADC Capture Volume' 70"
]
DisableSequence []
Value {}
}
SectionDevice."Speaker" {
Comment "Stereo Speakers"
ConflictingDevice []
Value {
PlaybackPCM "hw:${CardId}"
# The speaker ampl. path on the 5659 has no speaker vol control
# Use the digital DAC1 master control as MixerElem
PlaybackMixerElem "DAC1"
}
EnableSequence [
cset "name='DAC1 Playback Switch' on"
]
DisableSequence [
cset "name='DAC1 Playback Switch' off"
]
}
SectionDevice."IntMic" {
Comment "Microphone"
ConflictingDevice []
EnableSequence [
# Enable Int Mic
cset "name='Int Mic Switch' on"
cset "name='RECMIX1L BST3 Switch' on"
cset "name='RECMIX1R BST4 Switch' on"
]
DisableSequence [
cset "name='Int Mic Switch' off"
cset "name='RECMIX1L BST3 Switch' off"
cset "name='RECMIX1R BST4 Switch' off"
]
Value {
CapturePCM "hw:${CardId}"
# CaptureMixerElem "Int Mic"
CaptureVolume "IN Capture Volume"
CaptureSwitch "Int Mic Switch"
}
}

View file

@ -0,0 +1,6 @@
Syntax 3
SectionUseCase."HiFi" {
File "/Intel/cht-bsw-rt5659/HiFi.conf"
Comment "Default"
}

View file

@ -0,0 +1,28 @@
# Reference: <https://postmarketos.org/deviceinfo>
# Please use double quotes only. You can source this file in shell
# scripts.
deviceinfo_format_version="0"
deviceinfo_name="XiaoMi Pad2"
deviceinfo_manufacturer="XiaoMi"
deviceinfo_codename="xiaomi-latte"
deviceinfo_year="2015"
deviceinfo_arch="x86_64"
# Device related
deviceinfo_chassis="tablet"
deviceinfo_external_storage="false"
deviceinfo_drm="true"
# Bootloader related
deviceinfo_initfs_compression="zstd:default"
deviceinfo_generate_grub_config="true"
# filesystem
deviceinfo_boot_filesystem="fat32"
# deviceinfo_swap_size_recommended="2048"
# USB
deviceinfo_usb_idVendor="0x18d1"
deviceinfo_usb_idProduct="0x2d00"
deviceinfo_usb_serialnumber="0"

View file

@ -0,0 +1,2 @@
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

View file

@ -0,0 +1,14 @@
###########################################################
# Xiaomi
###########################################################
# Fix mapping of menu / home / back capacitive buttons on bottom bezel
# Menu: LeftMeta + S -> menu (ignore LeftMeta, map S to menu)
# Home: LeftCtrl + Esc -> LeftMeta (ignore LeftCtrl, map Esc to LeftMeta)
# Back: Backspace -> back (map backspace to back)
evdev:name:FTSC1000:00 2808:509C Keyboard:dmi:*:svnXiaomiInc:pnMipad2:*
KEYBOARD_KEY_700e0=reserved # LeftCtrl -> ignore
KEYBOARD_KEY_700e3=reserved # LeftMeta -> ignore
KEYBOARD_KEY_70016=menu # S -> menu
KEYBOARD_KEY_70029=leftmeta # Esc -> LeftMeta (Windows key / Win8 tablets home)
KEYBOARD_KEY_7002a=back # Backspace -> back

View file

@ -0,0 +1,21 @@
# emmc module
sdhci-acpi
mmc_block
# USB
xhci_pci
xhci_hub
usbkbd
# Torch Screen
i2c-hid-acpi
hid-multitouch
# filesystem drivers
btrfs
# Debug shell Usage
dwc3
dwc3_pci
snd_soc_rt5659

View file

@ -0,0 +1,72 @@
# Reference: <https://postmarketos.org/vendorkernel>
# Kernel config based on: https://github.com/Qs315490/linux_latte/blob/main/arch/x86/configs/xiaomipad2_defconfig
pkgname=linux-xiaomi-latte
pkgver=6.16.0
pkgrel=0
pkgdesc="Upstream Kernel For XiaoMi Pad2"
arch="x86_64"
_carch="x86_64"
_flavor="xiaomi-latte"
url="https://github.com/torvalds/linux"
license="GPL-2.0-only"
options="!strip !check !tracedeps pmb:cross-native pmb:kconfigcheck-uefi"
makedepends="
bash
bc
bison
devicepkg-dev
flex
openssl-dev
perl
gcompat
linux-headers
elfutils-dev
gawk
sbsigntool
"
# Source
_config=xiaomipad2_defconfig
_commit="038d61fd642278bab63ee8ef722c50d10ab01e8f"
source="
$pkgname-$_commit.tar.gz::https://github.com/torvalds/linux/archive/$_commit.tar.gz
$_config
latte-audio-fix.patch
latte-i915-fix.patch
MOK.crt
MOK.key
"
builddir="$srcdir/linux-$_commit"
_outdir="out"
prepare() {
default_prepare
rm -rf ${builddir}/include/config
REPLACE_GCCH=0 . downstreamkernel_prepare
}
build() {
unset LDFLAGS
make O="$_outdir" ARCH="$_carch" CC="${CC:-gcc}" LOCALVERSION= \
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS"
}
package() {
downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor" "$_outdir"
# package kernel modules
make O="$_outdir" ARCH="$_carch" INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH="$pkgdir" modules_install
# self sign kernel for Secure Boot
sbsign --key ${startdir}/MOK.key --cert ${startdir}/MOK.crt --output $pkgdir/boot/vmlinuz $pkgdir/boot/vmlinuz
}
sha512sums="
9cfd1b774fce4237966f32c1880e087490885b8464cefb468c777b6ff022e9ec22a0ec0c051940fff86813c5f535e7c8e291f8998fd5ae8eaebcd546729b1ee6 linux-xiaomi-latte-038d61fd642278bab63ee8ef722c50d10ab01e8f.tar.gz
407913bf970ee0b2e8c53d94224765e3603f987859c67926987d6d39cb70b0cfd6d0ed0f07af1f91a7dcd1ed6baf804b6b4c067b9e15ac7b58e859b479db4b72 xiaomipad2_defconfig
7e3eeb8d54e2bf13bd9b126259daf2dd38cf698c3e66401a953d2ff235a87cfab33ea3f45575ec21cec3987f8cc0fd07f2aabc0c419753e215a851e219502025 latte-audio-fix.patch
7a311bb9ff309349fb5dc11a8a9b18f6595abb28108da60a67cd95dd9c713f150f29068c001400f47010fab1809f092ef2cc4393bab98a64592334ca8650519a latte-i915-fix.patch
fedc27118b43badbcd47f44ac127ff9f02ce4e53ba04350c5bd893d6f6f6ff687c73f8cc7b15e8c71bc0def1ec63247ab675e95b339402edbaa744a3d8acf39d MOK.crt
1b5d43a851e7dc4085e34368b145752d4f8d00671db097f09b85a0152e1427486e7887f9a7fd876b9f97ca4f22dcd584c496f2d8bd9a7d2e64cc1fecad8ce0f0 MOK.key
"

View file

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFHzCCAwegAwIBAgIUbBpddeRKJVk1Bi3NVQjrR3c80+IwDQYJKoZIhvcNAQEL
BQAwHzEdMBsGA1UEAwwUbXkgTWFjaGluZSBPd25lciBLZXkwHhcNMjUwMjA2MDQ0
NzA4WhcNMzUwMjA0MDQ0NzA4WjAfMR0wGwYDVQQDDBRteSBNYWNoaW5lIE93bmVy
IEtleTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAImHcg5tn/z+knqX
dEkib14K/0eeDcjnaW4LEmn1/JQvQvfHOYNXmWpb6Gq5ouK15CJKVnESpdH00ag3
j9Ctc3lWCl4uwRjyB3LRUeLvq801BjGS3pKsSFHEZiNXnF7Ry5Srxc9FZOveKC4y
u1ZEkFrbFl16WWeDgFZbFqKkxIPGH5lufZneaesgZK+jw+IOEqpJGilEU6QGo0r+
Qjk0sVm5NnU5wN+8uGAThOxN5RKwrOwi4yagdYyua0XujUHS9CFyA7MmFL1cF9z8
UCe+2aHBvvhD0YI5ES75EOYJQOZjbpLoSEa0zWQceF1Bbet7XpytMGMnwCe/+FgQ
vcfkdpy42jk74KYb12iX6NzNJkPsCjYLYDFB6FH/QKD8314PYnYcd6nvMqM9mOQq
Z0HbTPOYLykZzC8Y5nMIA46YCUxBCyI4Q3JqMfuaiPlPp9GpcOntVRuFP8yPnAoG
e7xcowo18AEtTOZIjrpjF/QobBX4I7Cdp0ExPa+3T5aqfeqsZaVBzdGYVkWXZpf/
VEWMmNfwC2fd1amdsf8hZLjaZSdkaQFSUbXdxsH8r2nqJo5Y9lCIt6jghWxCEdqJ
DmtjxEJ78jmVn3pSbNTwQr4fZvZruJTipmy2eNIHxR0L2xfg9hRbzLXdegdvwFwL
bo3LT6Lull8vxCqntmPumZmFRi6RAgMBAAGjUzBRMB0GA1UdDgQWBBTbyyTkMjE8
ugvjrCuHjHGYiXWyzjAfBgNVHSMEGDAWgBTbyyTkMjE8ugvjrCuHjHGYiXWyzjAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAPTMrgcOFprhoOkB52
Yv4AqP5VaotsRFEiEBwmLXO720owHTVvTYvBuCaGTXg+zlpN8lnCyKvX7MNYa72B
CdnM3fHN8NAyw0gtXPb+5jerDyf7bPUMPW9iQ9Y8xoiKi6YOrEWZWUPtbofeKoO9
tC1uAiVa/HGDlXFpvuAsmzGZc2cv2nXkjFERyXNAUvN8KNgV4lmLr3RLlU75wYDp
NYlLE5XTiSzHF/BtM1xyIF44WxDOyVFxSdq/X6UxcetMTqe7vmHf3X0XOpNtSLYm
rfjuvpBud1h7IbevU1vLYWphYh0SQ//nIVb8abG/zWRAp2VNzjW34CBVZA+Oo8GT
88p9XeCVbph/gQpilL0orEy3ZfCpPuL860mLwHCuyie4wLBshWUZrj9Xhr7FBaRq
x9XXoG58gl6IamAwy7CFPCqtRyEBqczAY2aWMJxGJXfiNbJn9LhO/l3hi6S5Zor3
Ie2kIOVtoQ/I0iAf/SWotgs9FT3MmmXs5JqErXx2SiRTIqP2r6W+oC6AX9ng4Z3j
+truzUIIq3FNnUQymjf84DYGb7QWGLSyf4516juEqcv0qr33U2wLxAXrXZ3tkBbg
gOLh9egMpLO3C1m5ly6vRH4XK1gjs9GPeH7JIw78DuJUKN/tJksw9OaEMZcE09xp
4VoF3RjK1M6035/ZgNOsrUC6kw==
-----END CERTIFICATE-----

View file

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
Rux2EhPI9A1Eqva+5t3PQnbfHK9EgA==
-----END PRIVATE KEY-----

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,121 @@
diff --color -u a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c 2025-04-27 15:25:09.834101149 +0800
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c 2025-04-27 15:33:23.685520296 +0800
@@ -226,6 +226,8 @@
if (ret)
goto cleanup_bios;
+ intel_init_quirks(display);
+
/* FIXME: completely on the wrong abstraction layer */
ret = intel_power_domains_init(display);
if (ret < 0)
@@ -267,8 +269,6 @@
if (ret)
goto cleanup_vga_client_pw_domain_dmc;
- intel_init_quirks(display);
-
intel_fbc_init(display);
return 0;
diff --color -u a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
--- a/drivers/gpu/drm/i915/display/intel_display_power.c 2025-04-27 15:25:09.834101149 +0800
+++ b/drivers/gpu/drm/i915/display/intel_display_power.c 2025-04-27 15:31:38.759355555 +0800
@@ -23,6 +23,7 @@
#include "intel_pcode.h"
#include "intel_pmdemand.h"
#include "intel_pps_regs.h"
+#include "intel_quirks.h"
#include "intel_snps_phy.h"
#include "skl_watermark.h"
#include "skl_watermark_regs.h"
@@ -492,8 +493,14 @@ __intel_display_power_get_domain(struct intel_display *display,
if (intel_display_power_grab_async_put_ref(display, domain))
return;
- for_each_power_domain_well(display, power_well, domain)
+ for_each_power_domain_well(display, power_well, domain) {
+ if (domain == POWER_DOMAIN_INIT &&
+ intel_has_quirk(display, QUIRK_NO_VLV_DISP_PW_DPIO_CMN_BC_INIT) &&
+ i915_power_well_instance(power_well)->id == VLV_DISP_PW_DPIO_CMN_BC)
+ continue;
+
intel_power_well_get(display, power_well);
+ }
power_domains->domain_use_count[domain]++;
}
@@ -589,7 +596,13 @@ __intel_display_power_put_domain(struct intel_display *display,
power_domains->domain_use_count[domain]--;
- for_each_power_domain_well_reverse(display, power_well, domain)
+ for_each_power_domain_well_reverse(display, power_well, domain) {
+ if (domain == POWER_DOMAIN_INIT &&
+ intel_has_quirk(display, QUIRK_NO_VLV_DISP_PW_DPIO_CMN_BC_INIT) &&
+ i915_power_well_instance(power_well)->id == VLV_DISP_PW_DPIO_CMN_BC)
+ continue;
+
intel_power_well_put(display, power_well);
+ }
}
static void __intel_display_power_put(struct intel_display *display,
diff --color -u a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c 2025-04-27 15:25:09.834101149 +0800
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c 2025-04-27 15:25:50.880302395 +0800
@@ -66,7 +66,7 @@
struct i915_power_well *power_well);
};
-static const struct i915_power_well_instance *
+const struct i915_power_well_instance *
i915_power_well_instance(const struct i915_power_well *power_well)
{
return &power_well->desc->instances->list[power_well->instance_idx];
diff --color -u a/drivers/gpu/drm/i915/display/intel_display_power_well.h b/drivers/gpu/drm/i915/display/intel_display_power_well.h
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.h 2025-04-27 15:25:09.834101149 +0800
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.h 2025-04-27 15:26:38.682005203 +0800
@@ -129,6 +129,7 @@
struct i915_power_well *lookup_power_well(struct intel_display *display,
enum i915_power_well_id id);
+const struct i915_power_well_instance *i915_power_well_instance(const struct i915_power_well *power_well);
void intel_power_well_enable(struct intel_display *display,
struct i915_power_well *power_well);
void intel_power_well_disable(struct intel_display *display,
diff --color -u a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c
--- a/drivers/gpu/drm/i915/display/intel_quirks.c 2025-04-27 15:25:09.834558483 +0800
+++ b/drivers/gpu/drm/i915/display/intel_quirks.c 2025-04-27 15:35:01.128380326 +0800
@@ -78,6 +78,12 @@
drm_info(display->drm, "Applying Fast Wake sync pulse count quirk\n");
}
+static void quirk_no_vlv_disp_pw_dpio_cmn_bc_init(struct intel_display *display)
+{
+ intel_set_quirk(display, QUIRK_NO_VLV_DISP_PW_DPIO_CMN_BC_INIT);
+ drm_info(display->drm, "Applying no dpio-common-bc powerwell init quirk\n");
+}
+
struct intel_quirk {
int device;
int subsystem_vendor;
@@ -253,5 +259,7 @@
/* HP Notebook - 14-r206nv */
{ 0x0f31, 0x103c, 0x220f, quirk_invert_brightness },
+ /* Xiaomi Mi Pad 2 */
+ { 0x22b0, 0x1d72, 0x1502, quirk_no_vlv_disp_pw_dpio_cmn_bc_init },
};
static const struct intel_dpcd_quirk intel_dpcd_quirks[] = {
diff --color -u a/drivers/gpu/drm/i915/display/intel_quirks.h b/drivers/gpu/drm/i915/display/intel_quirks.h
--- a/drivers/gpu/drm/i915/display/intel_quirks.h 2025-04-27 15:25:09.834558483 +0800
+++ b/drivers/gpu/drm/i915/display/intel_quirks.h 2025-04-27 15:33:54.634332191 +0800
@@ -20,6 +20,7 @@
QUIRK_INVERT_BRIGHTNESS,
QUIRK_LVDS_SSC_DISABLE,
QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK,
QUIRK_FW_SYNC_LEN,
+ QUIRK_NO_VLV_DISP_PW_DPIO_CMN_BC_INIT,
};

File diff suppressed because it is too large Load diff