Improve Bay and Cherry Trail device support
- Enable AXP288 PMIC support on x86_64 for battery charging and monitoring support on Bay and Cherry Trail tablets and laptops - Enable various drivers for peripherals found on Bay and Cherry Trail tablets - Add some small patches fixing suspend/resume touchscreen and accelerometer issues on various Bay and Cherry Trail tablets
This commit is contained in:
parent
6b98e5e530
commit
88f3771491
546
0001-Enable-AXP288-PMIC-support-on-x86_64-for-battery-cha.patch
Normal file
546
0001-Enable-AXP288-PMIC-support-on-x86_64-for-battery-cha.patch
Normal file
@ -0,0 +1,546 @@
|
||||
From 7a434df40dcabc68902502994faf652936493e51 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 14 Jun 2017 17:30:36 +0200
|
||||
Subject: [RFC PATCH] Enable AXP288 PMIC support on x86_64 for battery charging
|
||||
and monitoring support on Bay and Cherry Trail tablets and laptops Enable
|
||||
various drivers for peripherals found on Bay and Cherry Trail tablets
|
||||
|
||||
---
|
||||
baseconfig/x86/x86_64/CONFIG_AK8975 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_AXP20X_ADC | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_AXP20X_POWER | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_AXP288_ADC | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_GPIO_AXP209 | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI | 1 +
|
||||
.../x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_SILEAD_DMI | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM | 1 +
|
||||
baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION | 1 +
|
||||
kernel-x86_64-debug.config | 39 ++++++++++++++--------
|
||||
kernel-x86_64.config | 39 ++++++++++++++--------
|
||||
kernel.spec | 5 +++
|
||||
31 files changed, 85 insertions(+), 26 deletions(-)
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AK8975
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AXP20X_ADC
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AXP20X_POWER
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AXP288_ADC
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_GPIO_AXP209
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_MFD_AXP20X
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_SILEAD_DMI
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM
|
||||
create mode 100644 baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION
|
||||
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AK8975 b/baseconfig/x86/x86_64/CONFIG_AK8975
|
||||
new file mode 100644
|
||||
index 00000000..547c21a9
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AK8975
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_AK8975=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AXP20X_ADC b/baseconfig/x86/x86_64/CONFIG_AXP20X_ADC
|
||||
new file mode 100644
|
||||
index 00000000..0960ee66
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AXP20X_ADC
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_AXP20X_ADC is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AXP20X_POWER b/baseconfig/x86/x86_64/CONFIG_AXP20X_POWER
|
||||
new file mode 100644
|
||||
index 00000000..e02cee70
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AXP20X_POWER
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_AXP20X_POWER is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AXP288_ADC b/baseconfig/x86/x86_64/CONFIG_AXP288_ADC
|
||||
new file mode 100644
|
||||
index 00000000..e138f36a
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AXP288_ADC
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_AXP288_ADC=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER b/baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER
|
||||
new file mode 100644
|
||||
index 00000000..0418f962
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_AXP288_CHARGER=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE b/baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE
|
||||
new file mode 100644
|
||||
index 00000000..e171b954
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_AXP288_FUEL_GAUGE=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042 b/baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042
|
||||
new file mode 100644
|
||||
index 00000000..669e6ac2
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_BATTERY_MAX17042=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190 b/baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190
|
||||
new file mode 100644
|
||||
index 00000000..3128bb67
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_CHARGER_BQ24190=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON b/baseconfig/x86/x86_64/CONFIG_EXTCON
|
||||
new file mode 100644
|
||||
index 00000000..0a7190c0
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_EXTCON=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288 b/baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288
|
||||
new file mode 100644
|
||||
index 00000000..7fadeb58
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_EXTCON_AXP288=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO b/baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO
|
||||
new file mode 100644
|
||||
index 00000000..87ca2bd0
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_EXTCON_GPIO is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496 b/baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496
|
||||
new file mode 100644
|
||||
index 00000000..3f6c5d6f
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_EXTCON_INTEL_INT3496=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355 b/baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355
|
||||
new file mode 100644
|
||||
index 00000000..680b5a77
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_EXTCON_MAX3355 is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A b/baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A
|
||||
new file mode 100644
|
||||
index 00000000..e5f7236c
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_EXTCON_RT8973A is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502 b/baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502
|
||||
new file mode 100644
|
||||
index 00000000..916994aa
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_EXTCON_SM5502 is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO b/baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO
|
||||
new file mode 100644
|
||||
index 00000000..7a0c9af3
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO
|
||||
@@ -0,0 +1 @@
|
||||
+# CONFIG_EXTCON_USB_GPIO is not set
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_GPIO_AXP209 b/baseconfig/x86/x86_64/CONFIG_GPIO_AXP209
|
||||
new file mode 100644
|
||||
index 00000000..2365ae70
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_GPIO_AXP209
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_GPIO_AXP209=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE
|
||||
new file mode 100644
|
||||
index 00000000..f9cdc633
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI
|
||||
new file mode 100644
|
||||
index 00000000..6103f947
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_I2C_DESIGNWARE_PCI=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM
|
||||
new file mode 100644
|
||||
index 00000000..3d50a3e8
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK b/baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK
|
||||
new file mode 100644
|
||||
index 00000000..e2fbdf90
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_INPUT_AXP20X_PEK=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C b/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C
|
||||
new file mode 100644
|
||||
index 00000000..8ec049b0
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_INV_MPU6050_I2C=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO b/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO
|
||||
new file mode 100644
|
||||
index 00000000..ae4889d9
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_INV_MPU6050_IIO=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X b/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X
|
||||
new file mode 100644
|
||||
index 00000000..ada79c0d
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_MFD_AXP20X=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C b/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C
|
||||
new file mode 100644
|
||||
index 00000000..22c60295
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_MFD_AXP20X_I2C=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_SILEAD_DMI b/baseconfig/x86/x86_64/CONFIG_SILEAD_DMI
|
||||
new file mode 100644
|
||||
index 00000000..25b01735
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_SILEAD_DMI
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_SILEAD_DMI=y
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM b/baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM
|
||||
new file mode 100644
|
||||
index 00000000..060ebfc9
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_USB_XHCI_PLATFORM=m
|
||||
diff --git a/baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION b/baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION
|
||||
new file mode 100644
|
||||
index 00000000..8c98df14
|
||||
--- /dev/null
|
||||
+++ b/baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION
|
||||
@@ -0,0 +1 @@
|
||||
+CONFIG_XPOWER_PMIC_OPREGION=y
|
||||
diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config
|
||||
index 08b52a89..d8d38c8e 100644
|
||||
--- a/kernel-x86_64-debug.config
|
||||
+++ b/kernel-x86_64-debug.config
|
||||
@@ -192,7 +192,7 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=15000
|
||||
CONFIG_AIX_PARTITION=y
|
||||
# CONFIG_AK09911 is not set
|
||||
# CONFIG_AK8974 is not set
|
||||
-# CONFIG_AK8975 is not set
|
||||
+CONFIG_AK8975=m
|
||||
# CONFIG_AL3320A is not set
|
||||
CONFIG_ALIENWARE_WMI=m
|
||||
CONFIG_ALI_FIR=m
|
||||
@@ -326,6 +326,11 @@ CONFIG_AUXDISPLAY=y
|
||||
# CONFIG_AVERAGE is not set
|
||||
CONFIG_AX25_DAMA_SLAVE=y
|
||||
CONFIG_AX25=m
|
||||
+# CONFIG_AXP20X_ADC is not set
|
||||
+# CONFIG_AXP20X_POWER is not set
|
||||
+CONFIG_AXP288_ADC=m
|
||||
+CONFIG_AXP288_CHARGER=m
|
||||
+CONFIG_AXP288_FUEL_GAUGE=m
|
||||
CONFIG_B43_BCMA_PIO=y
|
||||
CONFIG_B43_BCMA=y
|
||||
CONFIG_B43_DEBUG=y
|
||||
@@ -385,7 +390,7 @@ CONFIG_BATMAN_ADV_NC=y
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_BATTERY_LEGO_EV3 is not set
|
||||
# CONFIG_BATTERY_MAX17040 is not set
|
||||
-# CONFIG_BATTERY_MAX17042 is not set
|
||||
+CONFIG_BATTERY_MAX17042=m
|
||||
# CONFIG_BATTERY_SBS is not set
|
||||
CONFIG_BAYCOM_EPP=m
|
||||
CONFIG_BAYCOM_PAR=m
|
||||
@@ -699,7 +704,7 @@ CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CGROUPS=y
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
-# CONFIG_CHARGER_BQ24190 is not set
|
||||
+CONFIG_CHARGER_BQ24190=m
|
||||
# CONFIG_CHARGER_BQ24257 is not set
|
||||
# CONFIG_CHARGER_BQ24735 is not set
|
||||
# CONFIG_CHARGER_BQ25890 is not set
|
||||
@@ -1397,10 +1402,16 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
+CONFIG_EXTCON_AXP288=m
|
||||
+# CONFIG_EXTCON_GPIO is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
-# CONFIG_EXTCON is not set
|
||||
+CONFIG_EXTCON=m
|
||||
+# CONFIG_EXTCON_MAX3355 is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
+# CONFIG_EXTCON_RT8973A is not set
|
||||
+# CONFIG_EXTCON_SM5502 is not set
|
||||
+# CONFIG_EXTCON_USB_GPIO is not set
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_EZNPS_GIC is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
@@ -1617,6 +1628,7 @@ CONFIG_GIRBIL_DONGLE=m
|
||||
# CONFIG_GPIO_ALTERA is not set
|
||||
# CONFIG_GPIO_AMD8111 is not set
|
||||
# CONFIG_GPIO_AMDPT is not set
|
||||
+CONFIG_GPIO_AXP209=m
|
||||
# CONFIG_GPIO_BT8XX is not set
|
||||
CONFIG_GPIO_CRYSTAL_COVE=y
|
||||
# CONFIG_GPIO_CS5535 is not set
|
||||
@@ -1903,10 +1915,10 @@ CONFIG_I2C_COMPAT=y
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEMUX_PINCTRL is not set
|
||||
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
|
||||
-CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
+CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
-CONFIG_I2C_DESIGNWARE_PCI=m
|
||||
-CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
+CONFIG_I2C_DESIGNWARE_PCI=y
|
||||
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
# CONFIG_I2C_EG20T is not set
|
||||
# CONFIG_I2C_EMEV2 is not set
|
||||
@@ -2086,6 +2098,7 @@ CONFIG_INPUT_APANEL=m
|
||||
CONFIG_INPUT_ATI_REMOTE2=m
|
||||
CONFIG_INPUT_ATLAS_BTNS=m
|
||||
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
|
||||
+CONFIG_INPUT_AXP20X_PEK=m
|
||||
# CONFIG_INPUT_BMA150 is not set
|
||||
CONFIG_INPUT_CM109=m
|
||||
CONFIG_INPUT_CMA3000_I2C=m
|
||||
@@ -2184,8 +2197,8 @@ CONFIG_INTEL_TXT=y
|
||||
CONFIG_INTEL_VBTN=m
|
||||
CONFIG_INTEL_XWAY_PHY=m
|
||||
# CONFIG_INTERVAL_TREE_TEST is not set
|
||||
-# CONFIG_INV_MPU6050_I2C is not set
|
||||
-# CONFIG_INV_MPU6050_IIO is not set
|
||||
+CONFIG_INV_MPU6050_I2C=m
|
||||
+CONFIG_INV_MPU6050_IIO=m
|
||||
# CONFIG_INV_MPU6050_SPI is not set
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
@@ -2864,8 +2877,8 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_MFD_ATMEL_FLEXCOM is not set
|
||||
# CONFIG_MFD_ATMEL_HLCDC is not set
|
||||
-# CONFIG_MFD_AXP20X_I2C is not set
|
||||
-# CONFIG_MFD_AXP20X is not set
|
||||
+CONFIG_MFD_AXP20X_I2C=y
|
||||
+CONFIG_MFD_AXP20X=y
|
||||
# CONFIG_MFD_BCM590XX is not set
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_CPCAP is not set
|
||||
@@ -4695,7 +4708,7 @@ CONFIG_SH_ETH=m
|
||||
# CONFIG_SIGMA is not set
|
||||
CONFIG_SIGMATEL_FIR=m
|
||||
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
|
||||
-# CONFIG_SILEAD_DMI is not set
|
||||
+CONFIG_SILEAD_DMI=y
|
||||
CONFIG_SIS190=m
|
||||
CONFIG_SIS900=m
|
||||
# CONFIG_SKFP is not set
|
||||
@@ -5731,7 +5744,7 @@ CONFIG_USB_WDM=m
|
||||
CONFIG_USB_WUSB_CBAF=m
|
||||
CONFIG_USB_WUSB=m
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
-# CONFIG_USB_XHCI_PLATFORM is not set
|
||||
+CONFIG_USB_XHCI_PLATFORM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_YUREX=m
|
||||
diff --git a/kernel-x86_64.config b/kernel-x86_64.config
|
||||
index 9fedd204..abcc8bb4 100644
|
||||
--- a/kernel-x86_64.config
|
||||
+++ b/kernel-x86_64.config
|
||||
@@ -192,7 +192,7 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=15000
|
||||
CONFIG_AIX_PARTITION=y
|
||||
# CONFIG_AK09911 is not set
|
||||
# CONFIG_AK8974 is not set
|
||||
-# CONFIG_AK8975 is not set
|
||||
+CONFIG_AK8975=m
|
||||
# CONFIG_AL3320A is not set
|
||||
CONFIG_ALIENWARE_WMI=m
|
||||
CONFIG_ALI_FIR=m
|
||||
@@ -325,6 +325,11 @@ CONFIG_AUXDISPLAY=y
|
||||
# CONFIG_AVERAGE is not set
|
||||
CONFIG_AX25_DAMA_SLAVE=y
|
||||
CONFIG_AX25=m
|
||||
+# CONFIG_AXP20X_ADC is not set
|
||||
+# CONFIG_AXP20X_POWER is not set
|
||||
+CONFIG_AXP288_ADC=m
|
||||
+CONFIG_AXP288_CHARGER=m
|
||||
+CONFIG_AXP288_FUEL_GAUGE=m
|
||||
CONFIG_B43_BCMA_PIO=y
|
||||
CONFIG_B43_BCMA=y
|
||||
CONFIG_B43_DEBUG=y
|
||||
@@ -384,7 +389,7 @@ CONFIG_BATMAN_ADV_NC=y
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_BATTERY_LEGO_EV3 is not set
|
||||
# CONFIG_BATTERY_MAX17040 is not set
|
||||
-# CONFIG_BATTERY_MAX17042 is not set
|
||||
+CONFIG_BATTERY_MAX17042=m
|
||||
# CONFIG_BATTERY_SBS is not set
|
||||
CONFIG_BAYCOM_EPP=m
|
||||
CONFIG_BAYCOM_PAR=m
|
||||
@@ -698,7 +703,7 @@ CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CGROUPS=y
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
-# CONFIG_CHARGER_BQ24190 is not set
|
||||
+CONFIG_CHARGER_BQ24190=m
|
||||
# CONFIG_CHARGER_BQ24257 is not set
|
||||
# CONFIG_CHARGER_BQ24735 is not set
|
||||
# CONFIG_CHARGER_BQ25890 is not set
|
||||
@@ -1386,10 +1391,16 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
+CONFIG_EXTCON_AXP288=m
|
||||
+# CONFIG_EXTCON_GPIO is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
-# CONFIG_EXTCON is not set
|
||||
+CONFIG_EXTCON=m
|
||||
+# CONFIG_EXTCON_MAX3355 is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
+# CONFIG_EXTCON_RT8973A is not set
|
||||
+# CONFIG_EXTCON_SM5502 is not set
|
||||
+# CONFIG_EXTCON_USB_GPIO is not set
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_EZNPS_GIC is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
@@ -1599,6 +1610,7 @@ CONFIG_GIRBIL_DONGLE=m
|
||||
# CONFIG_GPIO_ALTERA is not set
|
||||
# CONFIG_GPIO_AMD8111 is not set
|
||||
# CONFIG_GPIO_AMDPT is not set
|
||||
+CONFIG_GPIO_AXP209=m
|
||||
# CONFIG_GPIO_BT8XX is not set
|
||||
CONFIG_GPIO_CRYSTAL_COVE=y
|
||||
# CONFIG_GPIO_CS5535 is not set
|
||||
@@ -1885,10 +1897,10 @@ CONFIG_I2C_COMPAT=y
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEMUX_PINCTRL is not set
|
||||
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
|
||||
-CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
+CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
-CONFIG_I2C_DESIGNWARE_PCI=m
|
||||
-CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
+CONFIG_I2C_DESIGNWARE_PCI=y
|
||||
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
# CONFIG_I2C_EG20T is not set
|
||||
# CONFIG_I2C_EMEV2 is not set
|
||||
@@ -2068,6 +2080,7 @@ CONFIG_INPUT_APANEL=m
|
||||
CONFIG_INPUT_ATI_REMOTE2=m
|
||||
CONFIG_INPUT_ATLAS_BTNS=m
|
||||
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
|
||||
+CONFIG_INPUT_AXP20X_PEK=m
|
||||
# CONFIG_INPUT_BMA150 is not set
|
||||
CONFIG_INPUT_CM109=m
|
||||
CONFIG_INPUT_CMA3000_I2C=m
|
||||
@@ -2166,8 +2179,8 @@ CONFIG_INTEL_TXT=y
|
||||
CONFIG_INTEL_VBTN=m
|
||||
CONFIG_INTEL_XWAY_PHY=m
|
||||
# CONFIG_INTERVAL_TREE_TEST is not set
|
||||
-# CONFIG_INV_MPU6050_I2C is not set
|
||||
-# CONFIG_INV_MPU6050_IIO is not set
|
||||
+CONFIG_INV_MPU6050_I2C=m
|
||||
+CONFIG_INV_MPU6050_IIO=m
|
||||
# CONFIG_INV_MPU6050_SPI is not set
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
@@ -2844,8 +2857,8 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_MFD_ATMEL_FLEXCOM is not set
|
||||
# CONFIG_MFD_ATMEL_HLCDC is not set
|
||||
-# CONFIG_MFD_AXP20X_I2C is not set
|
||||
-# CONFIG_MFD_AXP20X is not set
|
||||
+CONFIG_MFD_AXP20X_I2C=y
|
||||
+CONFIG_MFD_AXP20X=y
|
||||
# CONFIG_MFD_BCM590XX is not set
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_CPCAP is not set
|
||||
@@ -4674,7 +4687,7 @@ CONFIG_SH_ETH=m
|
||||
# CONFIG_SIGMA is not set
|
||||
CONFIG_SIGMATEL_FIR=m
|
||||
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
|
||||
-# CONFIG_SILEAD_DMI is not set
|
||||
+CONFIG_SILEAD_DMI=y
|
||||
CONFIG_SIS190=m
|
||||
CONFIG_SIS900=m
|
||||
# CONFIG_SKFP is not set
|
||||
@@ -5709,7 +5722,7 @@ CONFIG_USB_WDM=m
|
||||
CONFIG_USB_WUSB_CBAF=m
|
||||
CONFIG_USB_WUSB=m
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
-# CONFIG_USB_XHCI_PLATFORM is not set
|
||||
+CONFIG_USB_XHCI_PLATFORM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_YUREX=m
|
||||
diff --git a/kernel.spec b/kernel.spec
|
||||
index 3cb67fd1..6d93d2a7 100644
|
||||
--- a/kernel.spec
|
||||
+++ b/kernel.spec
|
||||
@@ -2165,6 +2165,11 @@ fi
|
||||
#
|
||||
#
|
||||
%changelog
|
||||
+* Wed Jun 14 2017 Hans de Goede <jwrdegoede@fedoraproject.org>
|
||||
+- Enable AXP288 PMIC support on x86_64 for battery charging and monitoring
|
||||
+ support on Bay and Cherry Trail tablets and laptops
|
||||
+- Enable various drivers for peripherals found on Bay and Cherry Trail tablets
|
||||
+
|
||||
* Mon Jun 12 2017 Justin M. Forbes <jforbes@fedoraproject.org> - 4.12.0-0.rc5.git0.1
|
||||
- Linux v4.12-rc5
|
||||
- Disable debugging options.
|
||||
--
|
||||
2.13.0
|
||||
|
339
0001-platform-x86-Add-driver-for-ACPI-INT0002-Virtual-GPI.patch
Normal file
339
0001-platform-x86-Add-driver-for-ACPI-INT0002-Virtual-GPI.patch
Normal file
@ -0,0 +1,339 @@
|
||||
From 3bbfe49a1d965b951527cde0da48f5d7677db264 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 21 May 2017 13:15:11 +0200
|
||||
Subject: [PATCH 01/16] platform/x86: Add driver for ACPI INT0002 Virtual GPIO
|
||||
device
|
||||
|
||||
Some peripherals on Bay Trail and Cherry Trail platforms signal a
|
||||
Power Management Event (PME) to the Power Management Controller (PMC)
|
||||
to wakeup the system. When this happens software needs to explicitly
|
||||
clear the PME bus 0 status bit in the GPE0a_STS register to avoid an
|
||||
IRQ storm on IRQ 9.
|
||||
|
||||
This is modelled in ACPI through the INT0002 ACPI device, which is
|
||||
called a "Virtual GPIO controller" in ACPI because it defines the
|
||||
event handler to call when the PME triggers through _AEI and _L02
|
||||
methods as would be done for a real GPIO interrupt in ACPI.
|
||||
|
||||
This commit adds a driver which registers the Virtual GPIOs expected
|
||||
by the DSDT on these devices, letting gpiolib-acpi claim the
|
||||
virtual GPIO and install a GPIO-interrupt handler which call the _L02
|
||||
handler as it would for a real GPIO controller.
|
||||
|
||||
Cc: joeyli <jlee@suse.com>
|
||||
Cc: Takashi Iwai <tiwai@suse.de>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
Changes in v2:
|
||||
-Remove dev_err after malloc failure
|
||||
-Remove unused empty runtime pm callbacks
|
||||
-s/GPE0A_PME_/GPE0A_PME_B0_/
|
||||
-Fixed some checkpatch warnings (I forgot to run checkpatch on v1)
|
||||
|
||||
Changes in v3:
|
||||
-Rewrite as gpiochip driver letting gpiolib-acpi deal with claiming the pin
|
||||
0x0002 and calling the _L02 event handler when the virtual gpio-irq triggers
|
||||
-Rebase on 4.12-rc1
|
||||
|
||||
Changes in v4:
|
||||
-Drop device_init_wakeup() from _probe(), use pm_system_wakeup() instead
|
||||
of pm_wakeup_hard_event(chip->parent)
|
||||
-Improve commit message
|
||||
|
||||
Changes in v5:
|
||||
-Use BIT() macro for FOO_BIT defines
|
||||
-Drop unneeded ACPI_PTR macro usage
|
||||
|
||||
Changes in v6:
|
||||
-Move back to drivers/platform/x86
|
||||
-Expand certain acronyms (PME, PMC)
|
||||
-Use linux/gpio/driver.h include instead of linux/gpio.h
|
||||
-Document why the get / set / direction_output functions are dummys
|
||||
-No functional changes
|
||||
|
||||
Changes in v7:
|
||||
-Some minor cleanups from Andy:
|
||||
-Move asm/ includes below linux/ includes
|
||||
-s/APCI/ACPI/
|
||||
-Use bitmap_clear on chip->irq_valid_mask
|
||||
-Add Linus Walleij's Reviewed-by
|
||||
---
|
||||
drivers/platform/x86/Kconfig | 19 +++
|
||||
drivers/platform/x86/Makefile | 1 +
|
||||
drivers/platform/x86/intel_int0002_vgpio.c | 219 +++++++++++++++++++++++++++++
|
||||
3 files changed, 239 insertions(+)
|
||||
create mode 100644 drivers/platform/x86/intel_int0002_vgpio.c
|
||||
|
||||
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
|
||||
index 8489020ecf44..a3ccc3c795a5 100644
|
||||
--- a/drivers/platform/x86/Kconfig
|
||||
+++ b/drivers/platform/x86/Kconfig
|
||||
@@ -794,6 +794,25 @@ config INTEL_CHT_INT33FE
|
||||
This driver instantiates i2c-clients for these, so that standard
|
||||
i2c drivers for these chips can bind to the them.
|
||||
|
||||
+config INTEL_INT0002_VGPIO
|
||||
+ tristate "Intel ACPI INT0002 Virtual GPIO driver"
|
||||
+ depends on GPIOLIB && ACPI
|
||||
+ select GPIOLIB_IRQCHIP
|
||||
+ ---help---
|
||||
+ Some peripherals on Bay Trail and Cherry Trail platforms signal a
|
||||
+ Power Management Event (PME) to the Power Management Controller (PMC)
|
||||
+ to wakeup the system. When this happens software needs to explicitly
|
||||
+ clear the PME bus 0 status bit in the GPE0a_STS register to avoid an
|
||||
+ IRQ storm on IRQ 9.
|
||||
+
|
||||
+ This is modelled in ACPI through the INT0002 ACPI device, which is
|
||||
+ called a "Virtual GPIO controller" in ACPI because it defines the
|
||||
+ event handler to call when the PME triggers through _AEI and _L02
|
||||
+ methods as would be done for a real GPIO interrupt in ACPI.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the module will
|
||||
+ be called intel_int0002_vgpio.
|
||||
+
|
||||
config INTEL_HID_EVENT
|
||||
tristate "INTEL HID Event"
|
||||
depends on ACPI
|
||||
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
|
||||
index 182a3ed6605a..ab22ce77fb66 100644
|
||||
--- a/drivers/platform/x86/Makefile
|
||||
+++ b/drivers/platform/x86/Makefile
|
||||
@@ -46,6 +46,7 @@ obj-$(CONFIG_TOSHIBA_BT_RFKILL) += toshiba_bluetooth.o
|
||||
obj-$(CONFIG_TOSHIBA_HAPS) += toshiba_haps.o
|
||||
obj-$(CONFIG_TOSHIBA_WMI) += toshiba-wmi.o
|
||||
obj-$(CONFIG_INTEL_CHT_INT33FE) += intel_cht_int33fe.o
|
||||
+obj-$(CONFIG_INTEL_INT0002_VGPIO) += intel_int0002_vgpio.o
|
||||
obj-$(CONFIG_INTEL_HID_EVENT) += intel-hid.o
|
||||
obj-$(CONFIG_INTEL_VBTN) += intel-vbtn.o
|
||||
obj-$(CONFIG_INTEL_SCU_IPC) += intel_scu_ipc.o
|
||||
diff --git a/drivers/platform/x86/intel_int0002_vgpio.c b/drivers/platform/x86/intel_int0002_vgpio.c
|
||||
new file mode 100644
|
||||
index 000000000000..92dc230ef5b2
|
||||
--- /dev/null
|
||||
+++ b/drivers/platform/x86/intel_int0002_vgpio.c
|
||||
@@ -0,0 +1,219 @@
|
||||
+/*
|
||||
+ * Intel INT0002 "Virtual GPIO" driver
|
||||
+ *
|
||||
+ * Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com>
|
||||
+ *
|
||||
+ * Loosely based on android x86 kernel code which is:
|
||||
+ *
|
||||
+ * Copyright (c) 2014, Intel Corporation.
|
||||
+ *
|
||||
+ * Author: Dyut Kumar Sil <dyut.k.sil@intel.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * Some peripherals on Bay Trail and Cherry Trail platforms signal a Power
|
||||
+ * Management Event (PME) to the Power Management Controller (PMC) to wakeup
|
||||
+ * the system. When this happens software needs to clear the PME bus 0 status
|
||||
+ * bit in the GPE0a_STS register to avoid an IRQ storm on IRQ 9.
|
||||
+ *
|
||||
+ * This is modelled in ACPI through the INT0002 ACPI device, which is
|
||||
+ * called a "Virtual GPIO controller" in ACPI because it defines the event
|
||||
+ * handler to call when the PME triggers through _AEI and _L02 / _E02
|
||||
+ * methods as would be done for a real GPIO interrupt in ACPI. Note this
|
||||
+ * is a hack to define an AML event handler for the PME while using existing
|
||||
+ * ACPI mechanisms, this is not a real GPIO at all.
|
||||
+ *
|
||||
+ * This driver will bind to the INT0002 device, and register as a GPIO
|
||||
+ * controller, letting gpiolib-acpi.c call the _L02 handler as it would
|
||||
+ * for a real GPIO controller.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/bitmap.h>
|
||||
+#include <linux/gpio/driver.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/suspend.h>
|
||||
+
|
||||
+#include <asm/cpu_device_id.h>
|
||||
+#include <asm/intel-family.h>
|
||||
+
|
||||
+#define DRV_NAME "INT0002 Virtual GPIO"
|
||||
+
|
||||
+/* For some reason the virtual GPIO pin tied to the GPE is numbered pin 2 */
|
||||
+#define GPE0A_PME_B0_VIRT_GPIO_PIN 2
|
||||
+
|
||||
+#define GPE0A_PME_B0_STS_BIT BIT(13)
|
||||
+#define GPE0A_PME_B0_EN_BIT BIT(13)
|
||||
+#define GPE0A_STS_PORT 0x420
|
||||
+#define GPE0A_EN_PORT 0x428
|
||||
+
|
||||
+#define ICPU(model) { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, }
|
||||
+
|
||||
+static const struct x86_cpu_id int0002_cpu_ids[] = {
|
||||
+/*
|
||||
+ * Limit ourselves to Cherry Trail for now, until testing shows we
|
||||
+ * need to handle the INT0002 device on Baytrail too.
|
||||
+ * ICPU(INTEL_FAM6_ATOM_SILVERMONT1), * Valleyview, Bay Trail *
|
||||
+ */
|
||||
+ ICPU(INTEL_FAM6_ATOM_AIRMONT), /* Braswell, Cherry Trail */
|
||||
+ {}
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * As this is not a real GPIO at all, but just a hack to model an event in
|
||||
+ * ACPI the get / set functions are dummy functions.
|
||||
+ */
|
||||
+
|
||||
+static int int0002_gpio_get(struct gpio_chip *chip, unsigned int offset)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void int0002_gpio_set(struct gpio_chip *chip, unsigned int offset,
|
||||
+ int value)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static int int0002_gpio_direction_output(struct gpio_chip *chip,
|
||||
+ unsigned int offset, int value)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void int0002_irq_ack(struct irq_data *data)
|
||||
+{
|
||||
+ outl(GPE0A_PME_B0_STS_BIT, GPE0A_STS_PORT);
|
||||
+}
|
||||
+
|
||||
+static void int0002_irq_unmask(struct irq_data *data)
|
||||
+{
|
||||
+ u32 gpe_en_reg;
|
||||
+
|
||||
+ gpe_en_reg = inl(GPE0A_EN_PORT);
|
||||
+ gpe_en_reg |= GPE0A_PME_B0_EN_BIT;
|
||||
+ outl(gpe_en_reg, GPE0A_EN_PORT);
|
||||
+}
|
||||
+
|
||||
+static void int0002_irq_mask(struct irq_data *data)
|
||||
+{
|
||||
+ u32 gpe_en_reg;
|
||||
+
|
||||
+ gpe_en_reg = inl(GPE0A_EN_PORT);
|
||||
+ gpe_en_reg &= ~GPE0A_PME_B0_EN_BIT;
|
||||
+ outl(gpe_en_reg, GPE0A_EN_PORT);
|
||||
+}
|
||||
+
|
||||
+static irqreturn_t int0002_irq(int irq, void *data)
|
||||
+{
|
||||
+ struct gpio_chip *chip = data;
|
||||
+ u32 gpe_sts_reg;
|
||||
+
|
||||
+ gpe_sts_reg = inl(GPE0A_STS_PORT);
|
||||
+ if (!(gpe_sts_reg & GPE0A_PME_B0_STS_BIT))
|
||||
+ return IRQ_NONE;
|
||||
+
|
||||
+ generic_handle_irq(irq_find_mapping(chip->irqdomain,
|
||||
+ GPE0A_PME_B0_VIRT_GPIO_PIN));
|
||||
+
|
||||
+ pm_system_wakeup();
|
||||
+
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+static struct irq_chip int0002_irqchip = {
|
||||
+ .name = DRV_NAME,
|
||||
+ .irq_ack = int0002_irq_ack,
|
||||
+ .irq_mask = int0002_irq_mask,
|
||||
+ .irq_unmask = int0002_irq_unmask,
|
||||
+};
|
||||
+
|
||||
+static int int0002_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ const struct x86_cpu_id *cpu_id;
|
||||
+ struct gpio_chip *chip;
|
||||
+ int irq, ret;
|
||||
+
|
||||
+ /* Menlow has a different INT0002 device? <sigh> */
|
||||
+ cpu_id = x86_match_cpu(int0002_cpu_ids);
|
||||
+ if (!cpu_id)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ irq = platform_get_irq(pdev, 0);
|
||||
+ if (irq < 0) {
|
||||
+ dev_err(dev, "Error getting IRQ: %d\n", irq);
|
||||
+ return irq;
|
||||
+ }
|
||||
+
|
||||
+ chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
|
||||
+ if (!chip)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ chip->label = DRV_NAME;
|
||||
+ chip->parent = dev;
|
||||
+ chip->owner = THIS_MODULE;
|
||||
+ chip->get = int0002_gpio_get;
|
||||
+ chip->set = int0002_gpio_set;
|
||||
+ chip->direction_input = int0002_gpio_get;
|
||||
+ chip->direction_output = int0002_gpio_direction_output;
|
||||
+ chip->base = -1;
|
||||
+ chip->ngpio = GPE0A_PME_B0_VIRT_GPIO_PIN + 1;
|
||||
+ chip->irq_need_valid_mask = true;
|
||||
+
|
||||
+ ret = devm_gpiochip_add_data(&pdev->dev, chip, NULL);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Error adding gpio chip: %d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ bitmap_clear(chip->irq_valid_mask, 0, GPE0A_PME_B0_VIRT_GPIO_PIN);
|
||||
+
|
||||
+ /*
|
||||
+ * We manually request the irq here instead of passing a flow-handler
|
||||
+ * to gpiochip_set_chained_irqchip, because the irq is shared.
|
||||
+ */
|
||||
+ ret = devm_request_irq(dev, irq, int0002_irq,
|
||||
+ IRQF_SHARED | IRQF_NO_THREAD, "INT0002", chip);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Error requesting IRQ %d: %d\n", irq, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = gpiochip_irqchip_add(chip, &int0002_irqchip, 0, handle_edge_irq,
|
||||
+ IRQ_TYPE_NONE);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Error adding irqchip: %d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ gpiochip_set_chained_irqchip(chip, &int0002_irqchip, irq, NULL);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct acpi_device_id int0002_acpi_ids[] = {
|
||||
+ { "INT0002", 0 },
|
||||
+ { },
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(acpi, int0002_acpi_ids);
|
||||
+
|
||||
+static struct platform_driver int0002_driver = {
|
||||
+ .driver = {
|
||||
+ .name = DRV_NAME,
|
||||
+ .acpi_match_table = int0002_acpi_ids,
|
||||
+ },
|
||||
+ .probe = int0002_probe,
|
||||
+};
|
||||
+
|
||||
+module_platform_driver(int0002_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
|
||||
+MODULE_DESCRIPTION("Intel INT0002 Virtual GPIO driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
2.13.0
|
||||
|
355
0002-mfd-Add-Cherry-Trail-Whiskey-Cove-PMIC-driver.patch
Normal file
355
0002-mfd-Add-Cherry-Trail-Whiskey-Cove-PMIC-driver.patch
Normal file
@ -0,0 +1,355 @@
|
||||
From c0f9254fdd0703ade018b2ff3a8cca433f781a11 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 26 Feb 2017 21:07:29 +0100
|
||||
Subject: [PATCH 02/16] mfd: Add Cherry Trail Whiskey Cove PMIC driver
|
||||
|
||||
Add mfd driver for Intel CHT Whiskey Cove PMIC, based on various non
|
||||
upstreamed CHT Whiskey Cove PMIC patches.
|
||||
|
||||
This is a somewhat minimal version which adds irqchip support and cells
|
||||
for: ACPI PMIC opregion support, the i2c-controller driving the external
|
||||
charger irc and the pwrsrc/extcon block.
|
||||
|
||||
Further cells can be added in the future if/when drivers are upstreamed
|
||||
for them.
|
||||
|
||||
Cc: Bin Gao <bin.gao@intel.com>
|
||||
Cc: Felipe Balbi <felipe.balbi@linux.intel.com>
|
||||
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
---
|
||||
Changes in v2:
|
||||
-Since this uses plain mfd and not the intel_soc_pmic stuff give it
|
||||
its own Kconfig and allow this to be built as a module
|
||||
-Add missing #include <acpi/acpi_bus.h>
|
||||
|
||||
Changes in v3:
|
||||
-Drop #include <acpi/acpi_bus.h> again, not the right fix for the build errors
|
||||
-Error out when the upper byte of the register-address passed to the regmap
|
||||
functions is 0 rather then hardcoding an address in that case
|
||||
-Various minor style tweaks / cleanups
|
||||
-Move defines of regulator register addresses to intel_pmic_chtwc.c,
|
||||
it is the only place where they are used
|
||||
-Drop now empty include/linux/mfd/intel_chtwc.h
|
||||
-Rename intel_soc_pmic_chtwc.c to intel_cht_wc.c to match Kconfig option name
|
||||
-Add irqchip support
|
||||
-Add external charger cell
|
||||
-Add pwrsrc cell
|
||||
|
||||
Changes in v4:
|
||||
-Use PLATFORM_DEVID_NONE
|
||||
|
||||
Changes in v5:
|
||||
-Change Kconfig option from tristate to boolean and add a select for the
|
||||
i2c-bus driver, this is necessary because the chtwc PMIC provides an ACPI
|
||||
OPRegion handler, which must be available before other drivers using it
|
||||
are loaded, which can only be ensured if the mfd, opregion and i2c-bus
|
||||
drivers are built in. This fixes errors like these during boot:
|
||||
mmc0: SDHCI controller on ACPI [80860F14:00] using ADMA
|
||||
ACPI Error: No handler for Region [REGS] (ffff93543b0cc3a8) [UserDefinedRegion] (20170119/evregion-166)
|
||||
ACPI Error: Region UserDefinedRegion (ID=143) has no handler (20170119/exfldio-299)
|
||||
ACPI Error: Method parse/execution failed [\_SB.PCI0.I2C7.PMI5.GET] (Node ffff93543b0cde10), AE_NOT_EXIST (20170119/psparse-543)
|
||||
ACPI Error: Method parse/execution failed [\_SB.PCI0.SHC1._PS0] (Node ffff93543b0b5cd0), AE_NOT_EXIST (20170119/psparse-543)
|
||||
acpi 80860F14:02: Failed to change power state to D0
|
||||
-Some minor style and capitalization fixes from review by Lee Jones
|
||||
|
||||
Changes in v6:
|
||||
-Fix Kconfig depends and selects to fix warning reported by kbuild test robot
|
||||
|
||||
Changes in v7:
|
||||
-Add explanation why this is a bool and why it selects i2c-designwaree
|
||||
to the help text rather then as comments in the Kconfig
|
||||
|
||||
Changes in v8:
|
||||
-Remove MODULE macros, etc. now that this driver is a bool in Kconfig
|
||||
|
||||
Changes in v9:
|
||||
-Some whitespace tweaks
|
||||
-Return -EINVAL from probe on invalid irq
|
||||
-Use probe_new i2c_driver callback
|
||||
---
|
||||
drivers/mfd/Kconfig | 16 +++
|
||||
drivers/mfd/Makefile | 1 +
|
||||
drivers/mfd/intel_soc_pmic_chtwc.c | 230 +++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 247 insertions(+)
|
||||
create mode 100644 drivers/mfd/intel_soc_pmic_chtwc.c
|
||||
|
||||
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
|
||||
index 3eb5c93595f6..5203a86b8f6c 100644
|
||||
--- a/drivers/mfd/Kconfig
|
||||
+++ b/drivers/mfd/Kconfig
|
||||
@@ -470,6 +470,22 @@ config INTEL_SOC_PMIC_BXTWC
|
||||
thermal, charger and related power management functions
|
||||
on these systems.
|
||||
|
||||
+config INTEL_SOC_PMIC_CHTWC
|
||||
+ bool "Support for Intel Cherry Trail Whiskey Cove PMIC"
|
||||
+ depends on ACPI && HAS_IOMEM && I2C=y && COMMON_CLK
|
||||
+ depends on X86 || COMPILE_TEST
|
||||
+ select MFD_CORE
|
||||
+ select REGMAP_I2C
|
||||
+ select REGMAP_IRQ
|
||||
+ select I2C_DESIGNWARE_PLATFORM
|
||||
+ help
|
||||
+ Select this option to enable support for the Intel Cherry Trail
|
||||
+ Whiskey Cove PMIC found on some Intel Cherry Trail systems.
|
||||
+
|
||||
+ This option is a bool as it provides an ACPI OpRegion which must be
|
||||
+ available before any devices using it are probed. This option also
|
||||
+ causes the designware-i2c driver to be builtin for the same reason.
|
||||
+
|
||||
config MFD_INTEL_LPSS
|
||||
tristate
|
||||
select COMMON_CLK
|
||||
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
|
||||
index c16bf1ea0ea9..6f6aed8cfccc 100644
|
||||
--- a/drivers/mfd/Makefile
|
||||
+++ b/drivers/mfd/Makefile
|
||||
@@ -214,6 +214,7 @@ obj-$(CONFIG_MFD_SKY81452) += sky81452.o
|
||||
intel-soc-pmic-objs := intel_soc_pmic_core.o intel_soc_pmic_crc.o
|
||||
obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.o
|
||||
obj-$(CONFIG_INTEL_SOC_PMIC_BXTWC) += intel_soc_pmic_bxtwc.o
|
||||
+obj-$(CONFIG_INTEL_SOC_PMIC_CHTWC) += intel_soc_pmic_chtwc.o
|
||||
obj-$(CONFIG_MFD_MT6397) += mt6397-core.o
|
||||
|
||||
obj-$(CONFIG_MFD_ALTERA_A10SR) += altera-a10sr.o
|
||||
diff --git a/drivers/mfd/intel_soc_pmic_chtwc.c b/drivers/mfd/intel_soc_pmic_chtwc.c
|
||||
new file mode 100644
|
||||
index 000000000000..b35da01d5bcf
|
||||
--- /dev/null
|
||||
+++ b/drivers/mfd/intel_soc_pmic_chtwc.c
|
||||
@@ -0,0 +1,230 @@
|
||||
+/*
|
||||
+ * MFD core driver for Intel Cherrytrail Whiskey Cove PMIC
|
||||
+ *
|
||||
+ * Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com>
|
||||
+ *
|
||||
+ * Based on various non upstream patches to support the CHT Whiskey Cove PMIC:
|
||||
+ * Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License version 2 as
|
||||
+ * published by the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/mfd/core.h>
|
||||
+#include <linux/mfd/intel_soc_pmic.h>
|
||||
+#include <linux/regmap.h>
|
||||
+
|
||||
+/* PMIC device registers */
|
||||
+#define REG_OFFSET_MASK GENMASK(7, 0)
|
||||
+#define REG_ADDR_MASK GENMASK(15, 8)
|
||||
+#define REG_ADDR_SHIFT 8
|
||||
+
|
||||
+#define CHT_WC_IRQLVL1 0x6e02
|
||||
+#define CHT_WC_IRQLVL1_MASK 0x6e0e
|
||||
+
|
||||
+/* Whiskey Cove PMIC share same ACPI ID between different platforms */
|
||||
+#define CHT_WC_HRV 3
|
||||
+
|
||||
+/* Level 1 IRQs (level 2 IRQs are handled in the child device drivers) */
|
||||
+enum {
|
||||
+ CHT_WC_PWRSRC_IRQ = 0,
|
||||
+ CHT_WC_THRM_IRQ,
|
||||
+ CHT_WC_BCU_IRQ,
|
||||
+ CHT_WC_ADC_IRQ,
|
||||
+ CHT_WC_EXT_CHGR_IRQ,
|
||||
+ CHT_WC_GPIO_IRQ,
|
||||
+ /* There is no irq 6 */
|
||||
+ CHT_WC_CRIT_IRQ = 7,
|
||||
+};
|
||||
+
|
||||
+static struct resource cht_wc_pwrsrc_resources[] = {
|
||||
+ DEFINE_RES_IRQ(CHT_WC_PWRSRC_IRQ),
|
||||
+};
|
||||
+
|
||||
+static struct resource cht_wc_ext_charger_resources[] = {
|
||||
+ DEFINE_RES_IRQ(CHT_WC_EXT_CHGR_IRQ),
|
||||
+};
|
||||
+
|
||||
+static struct mfd_cell cht_wc_dev[] = {
|
||||
+ {
|
||||
+ .name = "cht_wcove_pwrsrc",
|
||||
+ .num_resources = ARRAY_SIZE(cht_wc_pwrsrc_resources),
|
||||
+ .resources = cht_wc_pwrsrc_resources,
|
||||
+ }, {
|
||||
+ .name = "cht_wcove_ext_chgr",
|
||||
+ .num_resources = ARRAY_SIZE(cht_wc_ext_charger_resources),
|
||||
+ .resources = cht_wc_ext_charger_resources,
|
||||
+ },
|
||||
+ { .name = "cht_wcove_region", },
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * The CHT Whiskey Cove covers multiple I2C addresses, with a 1 Byte
|
||||
+ * register address space per I2C address, so we use 16 bit register
|
||||
+ * addresses where the high 8 bits contain the I2C client address.
|
||||
+ */
|
||||
+static int cht_wc_byte_reg_read(void *context, unsigned int reg,
|
||||
+ unsigned int *val)
|
||||
+{
|
||||
+ struct i2c_client *client = context;
|
||||
+ int ret, orig_addr = client->addr;
|
||||
+
|
||||
+ if (!(reg & REG_ADDR_MASK)) {
|
||||
+ dev_err(&client->dev, "Error I2C address not specified\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ client->addr = (reg & REG_ADDR_MASK) >> REG_ADDR_SHIFT;
|
||||
+ ret = i2c_smbus_read_byte_data(client, reg & REG_OFFSET_MASK);
|
||||
+ client->addr = orig_addr;
|
||||
+
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ *val = ret;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int cht_wc_byte_reg_write(void *context, unsigned int reg,
|
||||
+ unsigned int val)
|
||||
+{
|
||||
+ struct i2c_client *client = context;
|
||||
+ int ret, orig_addr = client->addr;
|
||||
+
|
||||
+ if (!(reg & REG_ADDR_MASK)) {
|
||||
+ dev_err(&client->dev, "Error I2C address not specified\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ client->addr = (reg & REG_ADDR_MASK) >> REG_ADDR_SHIFT;
|
||||
+ ret = i2c_smbus_write_byte_data(client, reg & REG_OFFSET_MASK, val);
|
||||
+ client->addr = orig_addr;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct regmap_config cht_wc_regmap_cfg = {
|
||||
+ .reg_bits = 16,
|
||||
+ .val_bits = 8,
|
||||
+ .reg_write = cht_wc_byte_reg_write,
|
||||
+ .reg_read = cht_wc_byte_reg_read,
|
||||
+};
|
||||
+
|
||||
+static const struct regmap_irq cht_wc_regmap_irqs[] = {
|
||||
+ REGMAP_IRQ_REG(CHT_WC_PWRSRC_IRQ, 0, BIT(CHT_WC_PWRSRC_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_THRM_IRQ, 0, BIT(CHT_WC_THRM_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_BCU_IRQ, 0, BIT(CHT_WC_BCU_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_ADC_IRQ, 0, BIT(CHT_WC_ADC_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_EXT_CHGR_IRQ, 0, BIT(CHT_WC_EXT_CHGR_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_GPIO_IRQ, 0, BIT(CHT_WC_GPIO_IRQ)),
|
||||
+ REGMAP_IRQ_REG(CHT_WC_CRIT_IRQ, 0, BIT(CHT_WC_CRIT_IRQ)),
|
||||
+};
|
||||
+
|
||||
+static const struct regmap_irq_chip cht_wc_regmap_irq_chip = {
|
||||
+ .name = "cht_wc_irq_chip",
|
||||
+ .status_base = CHT_WC_IRQLVL1,
|
||||
+ .mask_base = CHT_WC_IRQLVL1_MASK,
|
||||
+ .irqs = cht_wc_regmap_irqs,
|
||||
+ .num_irqs = ARRAY_SIZE(cht_wc_regmap_irqs),
|
||||
+ .num_regs = 1,
|
||||
+};
|
||||
+
|
||||
+static int cht_wc_probe(struct i2c_client *client)
|
||||
+{
|
||||
+ struct device *dev = &client->dev;
|
||||
+ struct intel_soc_pmic *pmic;
|
||||
+ acpi_status status;
|
||||
+ unsigned long long hrv;
|
||||
+ int ret;
|
||||
+
|
||||
+ status = acpi_evaluate_integer(ACPI_HANDLE(dev), "_HRV", NULL, &hrv);
|
||||
+ if (ACPI_FAILURE(status)) {
|
||||
+ dev_err(dev, "Failed to get PMIC hardware revision\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+ if (hrv != CHT_WC_HRV) {
|
||||
+ dev_err(dev, "Invalid PMIC hardware revision: %llu\n", hrv);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+ if (client->irq < 0) {
|
||||
+ dev_err(dev, "Invalid IRQ\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL);
|
||||
+ if (!pmic)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ pmic->irq = client->irq;
|
||||
+ pmic->dev = dev;
|
||||
+ i2c_set_clientdata(client, pmic);
|
||||
+
|
||||
+ pmic->regmap = devm_regmap_init(dev, NULL, client, &cht_wc_regmap_cfg);
|
||||
+ if (IS_ERR(pmic->regmap))
|
||||
+ return PTR_ERR(pmic->regmap);
|
||||
+
|
||||
+ ret = devm_regmap_add_irq_chip(dev, pmic->regmap, pmic->irq,
|
||||
+ IRQF_ONESHOT | IRQF_SHARED, 0,
|
||||
+ &cht_wc_regmap_irq_chip,
|
||||
+ &pmic->irq_chip_data);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ return devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,
|
||||
+ cht_wc_dev, ARRAY_SIZE(cht_wc_dev), NULL, 0,
|
||||
+ regmap_irq_get_domain(pmic->irq_chip_data));
|
||||
+}
|
||||
+
|
||||
+static void cht_wc_shutdown(struct i2c_client *client)
|
||||
+{
|
||||
+ struct intel_soc_pmic *pmic = i2c_get_clientdata(client);
|
||||
+
|
||||
+ disable_irq(pmic->irq);
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused cht_wc_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct intel_soc_pmic *pmic = dev_get_drvdata(dev);
|
||||
+
|
||||
+ disable_irq(pmic->irq);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused cht_wc_resume(struct device *dev)
|
||||
+{
|
||||
+ struct intel_soc_pmic *pmic = dev_get_drvdata(dev);
|
||||
+
|
||||
+ enable_irq(pmic->irq);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+static SIMPLE_DEV_PM_OPS(cht_wc_pm_ops, cht_wc_suspend, cht_wc_resume);
|
||||
+
|
||||
+static const struct i2c_device_id cht_wc_i2c_id[] = {
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct acpi_device_id cht_wc_acpi_ids[] = {
|
||||
+ { "INT34D3", },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static struct i2c_driver cht_wc_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "CHT Whiskey Cove PMIC",
|
||||
+ .pm = &cht_wc_pm_ops,
|
||||
+ .acpi_match_table = cht_wc_acpi_ids,
|
||||
+ },
|
||||
+ .probe_new = cht_wc_probe,
|
||||
+ .shutdown = cht_wc_shutdown,
|
||||
+ .id_table = cht_wc_i2c_id,
|
||||
+};
|
||||
+builtin_i2c_driver(cht_wc_driver);
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,57 @@
|
||||
From 69dd0606a0d8680fe0a5e9b959f6662e582e1674 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 2 May 2017 13:43:34 +0200
|
||||
Subject: [PATCH 03/16] power: supply: core: Add support for supplied-from
|
||||
device-property
|
||||
|
||||
On devicetree using platforms the devicetree can provide info on which
|
||||
power-supplies supply another power-supply through phandles.
|
||||
|
||||
This commit adds support for providing this info on non devicetree
|
||||
platforms through the platform code setting a supplied-from
|
||||
device-property on the power-supplies parent device.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/power/supply/power_supply_core.c | 24 +++++++++++++++++++++++-
|
||||
1 file changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
|
||||
index 7ec7c7c202bd..0c09144193a6 100644
|
||||
--- a/drivers/power/supply/power_supply_core.c
|
||||
+++ b/drivers/power/supply/power_supply_core.c
|
||||
@@ -274,8 +274,30 @@ static int power_supply_check_supplies(struct power_supply *psy)
|
||||
return power_supply_populate_supplied_from(psy);
|
||||
}
|
||||
#else
|
||||
-static inline int power_supply_check_supplies(struct power_supply *psy)
|
||||
+static int power_supply_check_supplies(struct power_supply *psy)
|
||||
{
|
||||
+ int nval, ret;
|
||||
+
|
||||
+ if (!psy->dev.parent)
|
||||
+ return 0;
|
||||
+
|
||||
+ nval = device_property_read_string_array(psy->dev.parent,
|
||||
+ "supplied-from", NULL, 0);
|
||||
+ if (nval <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ psy->supplied_from = devm_kmalloc_array(&psy->dev, nval,
|
||||
+ sizeof(char *), GFP_KERNEL);
|
||||
+ if (!psy->supplied_from)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ ret = device_property_read_string_array(psy->dev.parent,
|
||||
+ "supplied-from", (const char **)psy->supplied_from, nval);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ psy->num_supplies = nval;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,48 @@
|
||||
From 99c44df299d96db6a170ccce9b8108fc2e7f8bae Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 2 May 2017 13:40:44 +0200
|
||||
Subject: [PATCH 04/16] platform/x86: intel_cht_int33fe: Set supplied-from
|
||||
property on max17047 dev
|
||||
|
||||
Devices with the intel_cht_int33fe ACPI device use a max17047 fuel-gauge
|
||||
combined with a bq24272i charger, in order for the fuel-gauge driver to
|
||||
correctly display charging / discharging status it needs to know which
|
||||
charger is supplying the battery.
|
||||
|
||||
This commit sets the supplied-from device property to the name of the
|
||||
bq24272i charger for this.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/intel_cht_int33fe.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/intel_cht_int33fe.c b/drivers/platform/x86/intel_cht_int33fe.c
|
||||
index 6a1b2ca5b6fe..da706e2c4232 100644
|
||||
--- a/drivers/platform/x86/intel_cht_int33fe.c
|
||||
+++ b/drivers/platform/x86/intel_cht_int33fe.c
|
||||
@@ -34,6 +34,13 @@ struct cht_int33fe_data {
|
||||
struct i2c_client *pi3usb30532;
|
||||
};
|
||||
|
||||
+static const char * const max17047_suppliers[] = { "bq24190-charger" };
|
||||
+
|
||||
+static const struct property_entry max17047_props[] = {
|
||||
+ PROPERTY_ENTRY_STRING_ARRAY("supplied-from", max17047_suppliers),
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
static int cht_int33fe_probe(struct i2c_client *client)
|
||||
{
|
||||
struct device *dev = &client->dev;
|
||||
@@ -70,6 +77,7 @@ static int cht_int33fe_probe(struct i2c_client *client)
|
||||
|
||||
memset(&board_info, 0, sizeof(board_info));
|
||||
strlcpy(board_info.type, "max17047", I2C_NAME_SIZE);
|
||||
+ board_info.properties = max17047_props;
|
||||
|
||||
data->max17047 = i2c_acpi_new_device(dev, 1, &board_info);
|
||||
if (!data->max17047)
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,80 @@
|
||||
From cc2b0e2c164d02ab42efa736f91f53baf8d8bc36 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Thu, 20 Apr 2017 22:41:20 +0200
|
||||
Subject: [PATCH 05/16] ACPI / PMIC: xpower: Add support for the GPI1 regulator
|
||||
to the OpRegion handler
|
||||
|
||||
Some Bay Trail devices use a GPI1 regulator field (address 0x4c) in
|
||||
their 0x8d power OpRegion, add support for this.
|
||||
|
||||
This fixes AE_BAD_PARAMETER errors getting thrown on these devices and
|
||||
fixes these errors causing these devices to not suspend.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
---
|
||||
Changes in v2:
|
||||
-Simplify reg == 0x92 handling (suggested by Andy Shevchenko)
|
||||
-Add special handling for reg == 0x92 to intel_xpower_pmic_get_power() too
|
||||
Changes in v3:
|
||||
-Use defines for GPI1 reg and bits, rather then hardcoded hex values
|
||||
---
|
||||
drivers/acpi/pmic/intel_pmic_xpower.c | 21 ++++++++++++++++++++-
|
||||
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/acpi/pmic/intel_pmic_xpower.c b/drivers/acpi/pmic/intel_pmic_xpower.c
|
||||
index 1a76c784cd4c..3b7d5be5b7ed 100644
|
||||
--- a/drivers/acpi/pmic/intel_pmic_xpower.c
|
||||
+++ b/drivers/acpi/pmic/intel_pmic_xpower.c
|
||||
@@ -21,6 +21,11 @@
|
||||
#include "intel_pmic.h"
|
||||
|
||||
#define XPOWER_GPADC_LOW 0x5b
|
||||
+#define XPOWER_GPI1_CTRL 0x92
|
||||
+
|
||||
+#define GPI1_LDO_MASK GENMASK(2, 0)
|
||||
+#define GPI1_LDO_ON (3 << 0)
|
||||
+#define GPI1_LDO_OFF (4 << 0)
|
||||
|
||||
static struct pmic_table power_table[] = {
|
||||
{
|
||||
@@ -118,6 +123,10 @@ static struct pmic_table power_table[] = {
|
||||
.reg = 0x10,
|
||||
.bit = 0x00
|
||||
}, /* BUC6 */
|
||||
+ {
|
||||
+ .address = 0x4c,
|
||||
+ .reg = 0x92,
|
||||
+ }, /* GPI1 */
|
||||
};
|
||||
|
||||
/* TMP0 - TMP5 are the same, all from GPADC */
|
||||
@@ -156,7 +165,12 @@ static int intel_xpower_pmic_get_power(struct regmap *regmap, int reg,
|
||||
if (regmap_read(regmap, reg, &data))
|
||||
return -EIO;
|
||||
|
||||
- *value = (data & BIT(bit)) ? 1 : 0;
|
||||
+ /* GPIO1 LDO regulator needs special handling */
|
||||
+ if (reg == XPOWER_GPI1_CTRL)
|
||||
+ *value = ((data & GPI1_LDO_MASK) == GPI1_LDO_ON);
|
||||
+ else
|
||||
+ *value = (data & BIT(bit)) ? 1 : 0;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -165,6 +179,11 @@ static int intel_xpower_pmic_update_power(struct regmap *regmap, int reg,
|
||||
{
|
||||
int data;
|
||||
|
||||
+ /* GPIO1 LDO regulator needs special handling */
|
||||
+ if (reg == XPOWER_GPI1_CTRL)
|
||||
+ return regmap_update_bits(regmap, reg, GPI1_LDO_MASK,
|
||||
+ on ? GPI1_LDO_ON : GPI1_LDO_OFF);
|
||||
+
|
||||
if (regmap_read(regmap, reg, &data))
|
||||
return -EIO;
|
||||
|
||||
--
|
||||
2.13.0
|
||||
|
67
0006-Input-axp20x-pek-Add-wakeup-support.patch
Normal file
67
0006-Input-axp20x-pek-Add-wakeup-support.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From fbac4c05ec1d7c2d949f50baf1e934cbfbb6a494 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 17 Apr 2017 22:06:25 +0200
|
||||
Subject: [PATCH 06/16] Input: axp20x-pek - Add wakeup support
|
||||
|
||||
At least on devices with the AXP288 PMIC the device is expected to
|
||||
wakeup from suspend when the power-button gets pressed, add support
|
||||
for this.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/input/misc/axp20x-pek.c | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/misc/axp20x-pek.c b/drivers/input/misc/axp20x-pek.c
|
||||
index 400869e61a06..5f16fceaae83 100644
|
||||
--- a/drivers/input/misc/axp20x-pek.c
|
||||
+++ b/drivers/input/misc/axp20x-pek.c
|
||||
@@ -253,6 +253,9 @@ static int axp20x_pek_probe_input_device(struct axp20x_pek *axp20x_pek,
|
||||
return error;
|
||||
}
|
||||
|
||||
+ if (axp20x_pek->axp20x->variant == AXP288_ID)
|
||||
+ enable_irq_wake(axp20x_pek->irq_dbr);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -331,10 +334,35 @@ static int axp20x_pek_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int __maybe_unused axp20x_pek_resume_noirq(struct device *dev)
|
||||
+{
|
||||
+ struct axp20x_pek *axp20x_pek = dev_get_drvdata(dev);
|
||||
+
|
||||
+ if (axp20x_pek->axp20x->variant != AXP288_ID)
|
||||
+ return 0;
|
||||
+
|
||||
+ /*
|
||||
+ * Clear interrupts from button presses during suspend, to avoid
|
||||
+ * a wakeup power-button press getting reported to userspace.
|
||||
+ */
|
||||
+ regmap_write(axp20x_pek->axp20x->regmap,
|
||||
+ AXP20X_IRQ1_STATE + AXP288_IRQ_POKN / 8,
|
||||
+ BIT(AXP288_IRQ_POKN % 8));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+const struct dev_pm_ops axp20x_pek_pm_ops = {
|
||||
+#ifdef CONFIG_PM_SLEEP
|
||||
+ .resume_noirq = axp20x_pek_resume_noirq,
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
static struct platform_driver axp20x_pek_driver = {
|
||||
.probe = axp20x_pek_probe,
|
||||
.driver = {
|
||||
.name = "axp20x-pek",
|
||||
+ .pm = &axp20x_pek_pm_ops,
|
||||
},
|
||||
};
|
||||
module_platform_driver(axp20x_pek_driver);
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,56 @@
|
||||
From d95c127c48ef784214671359a41ac505ac30098a Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 7 May 2017 12:32:11 +0200
|
||||
Subject: [PATCH 07/16] platform/x86: silead_dmi: Add touchscreen info for
|
||||
GP-electronic T701
|
||||
|
||||
Add touchscreen info for the GP-electronic T701 tablet.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/silead_dmi.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/silead_dmi.c b/drivers/platform/x86/silead_dmi.c
|
||||
index a3a57d93cf06..db3a877d2160 100644
|
||||
--- a/drivers/platform/x86/silead_dmi.c
|
||||
+++ b/drivers/platform/x86/silead_dmi.c
|
||||
@@ -80,6 +80,19 @@ static const struct silead_ts_dmi_data surftab_wintron70_st70416_6_data = {
|
||||
.properties = surftab_wintron70_st70416_6_props,
|
||||
};
|
||||
|
||||
+static const struct property_entry gp_electronic_t701_props[] = {
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
|
||||
+ PROPERTY_ENTRY_STRING("firmware-name",
|
||||
+ "gsl1680-gp-electronic-t701.fw"),
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct silead_ts_dmi_data gp_electronic_t701_data = {
|
||||
+ .acpi_name = "MSSL1680:00",
|
||||
+ .properties = gp_electronic_t701_props,
|
||||
+};
|
||||
+
|
||||
static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
{
|
||||
/* CUBE iwork8 Air */
|
||||
@@ -117,6 +130,15 @@ static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA04"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ /* GP-electronic T701 */
|
||||
+ .driver_data = (void *)&gp_electronic_t701_data,
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "T701"),
|
||||
+ DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"),
|
||||
+ },
|
||||
+ },
|
||||
{ },
|
||||
};
|
||||
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 55b347c61b2850d1e11e159ab02dc71f13b06481 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 11 Jun 2017 17:42:31 +0200
|
||||
Subject: [PATCH 08/16] platform/x86: silead_dmi: Add touchscreen info for PoV
|
||||
mobii wintab p800w
|
||||
|
||||
Add touchscreen info for the Point of View mobii wintab p800w tablet.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/silead_dmi.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/silead_dmi.c b/drivers/platform/x86/silead_dmi.c
|
||||
index db3a877d2160..46c5e1ebfb53 100644
|
||||
--- a/drivers/platform/x86/silead_dmi.c
|
||||
+++ b/drivers/platform/x86/silead_dmi.c
|
||||
@@ -93,6 +93,20 @@ static const struct silead_ts_dmi_data gp_electronic_t701_data = {
|
||||
.properties = gp_electronic_t701_props,
|
||||
};
|
||||
|
||||
+static const struct property_entry pov_mobii_wintab_p800w_props[] = {
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-x", 1800),
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-y", 1150),
|
||||
+ PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
|
||||
+ PROPERTY_ENTRY_STRING("firmware-name",
|
||||
+ "gsl3692-pov-mobii-wintab-p800w.fw"),
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct silead_ts_dmi_data pov_mobii_wintab_p800w_data = {
|
||||
+ .acpi_name = "MSSL1680:00",
|
||||
+ .properties = pov_mobii_wintab_p800w_props,
|
||||
+};
|
||||
+
|
||||
static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
{
|
||||
/* CUBE iwork8 Air */
|
||||
@@ -139,6 +153,17 @@ static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ /* Point of View mobii wintab p800w */
|
||||
+ .driver_data = (void *)&pov_mobii_wintab_p800w_data,
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
|
||||
+ DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
|
||||
+ /* Above matches are too generic, add bios-date match */
|
||||
+ DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
|
||||
+ },
|
||||
+ },
|
||||
{ },
|
||||
};
|
||||
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,57 @@
|
||||
From b239a7a0c2a1435aa5cbab3f233e0c37e82943dd Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 13 Jun 2017 18:17:07 +0200
|
||||
Subject: [PATCH 09/16] platform/x86: silead_dmi: Add touchscreen info for Pipo
|
||||
W2S tablet
|
||||
|
||||
Add touchscreen info for Pipo W2S tablet.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/platform/x86/silead_dmi.c | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/silead_dmi.c b/drivers/platform/x86/silead_dmi.c
|
||||
index 46c5e1ebfb53..25cbea307a5e 100644
|
||||
--- a/drivers/platform/x86/silead_dmi.c
|
||||
+++ b/drivers/platform/x86/silead_dmi.c
|
||||
@@ -107,6 +107,21 @@ static const struct silead_ts_dmi_data pov_mobii_wintab_p800w_data = {
|
||||
.properties = pov_mobii_wintab_p800w_props,
|
||||
};
|
||||
|
||||
+static const struct property_entry pipo_w2s_props[] = {
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-x", 1660),
|
||||
+ PROPERTY_ENTRY_U32("touchscreen-size-y", 880),
|
||||
+ PROPERTY_ENTRY_BOOL("touchscreen-inverted-x"),
|
||||
+ PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
|
||||
+ PROPERTY_ENTRY_STRING("firmware-name",
|
||||
+ "gsl1680-pipo-w2s.fw"),
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct silead_ts_dmi_data pipo_w2s_data = {
|
||||
+ .acpi_name = "MSSL1680:00",
|
||||
+ .properties = pipo_w2s_props,
|
||||
+};
|
||||
+
|
||||
static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
{
|
||||
/* CUBE iwork8 Air */
|
||||
@@ -164,6 +179,14 @@ static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ /* Pipo W2S */
|
||||
+ .driver_data = (void *)&pipo_w2s_data,
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "PIPO"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "W2S"),
|
||||
+ },
|
||||
+ },
|
||||
{ },
|
||||
};
|
||||
|
||||
--
|
||||
2.13.0
|
||||
|
114
0010-Input-silead-Add-support-for-capactive-home-button-f.patch
Normal file
114
0010-Input-silead-Add-support-for-capactive-home-button-f.patch
Normal file
@ -0,0 +1,114 @@
|
||||
From 33fc16fd8aa3684e19b1d1f0a712593e2e570ab1 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 11 Jun 2017 21:24:50 +0200
|
||||
Subject: [PATCH 10/16] Input: silead: Add support for capactive home button
|
||||
found on some x86 tablets
|
||||
|
||||
On some x86 tablets with a silead touchscreen the windows logo on the
|
||||
front is a capacitive home button. Touching this button results in a touch
|
||||
with bits 12-15 of the Y coordinates set, while normally only the lower 12
|
||||
are used.
|
||||
|
||||
Detect this and report a KEY_LEFTMETA press when this happens. Note for
|
||||
now we only respond to the Y coordinate bits 12-15 containing 0x01, on some
|
||||
tablets *without* a capacative button I've noticed these bits containing
|
||||
0x04 when crossing the edges of the screen.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/input/touchscreen/silead.c | 45 ++++++++++++++++++++++++++++----------
|
||||
1 file changed, 34 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
|
||||
index 0dbcf105f7db..c0ba40c09699 100644
|
||||
--- a/drivers/input/touchscreen/silead.c
|
||||
+++ b/drivers/input/touchscreen/silead.c
|
||||
@@ -56,7 +56,7 @@
|
||||
#define SILEAD_POINT_Y_MSB_OFF 0x01
|
||||
#define SILEAD_POINT_X_OFF 0x02
|
||||
#define SILEAD_POINT_X_MSB_OFF 0x03
|
||||
-#define SILEAD_TOUCH_ID_MASK 0xF0
|
||||
+#define SILEAD_EXTRA_DATA_MASK 0xF0
|
||||
|
||||
#define SILEAD_CMD_SLEEP_MIN 10000
|
||||
#define SILEAD_CMD_SLEEP_MAX 20000
|
||||
@@ -109,6 +109,8 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data)
|
||||
INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED |
|
||||
INPUT_MT_TRACK);
|
||||
|
||||
+ input_set_capability(data->input, EV_KEY, KEY_LEFTMETA);
|
||||
+
|
||||
data->input->name = SILEAD_TS_NAME;
|
||||
data->input->phys = "input/ts";
|
||||
data->input->id.bustype = BUS_I2C;
|
||||
@@ -139,7 +141,8 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
struct input_dev *input = data->input;
|
||||
struct device *dev = &client->dev;
|
||||
u8 *bufp, buf[SILEAD_TS_DATA_LEN];
|
||||
- int touch_nr, error, i;
|
||||
+ int touch_nr, softbutton, error, i;
|
||||
+ bool softbutton_pressed = false;
|
||||
|
||||
error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_DATA,
|
||||
SILEAD_TS_DATA_LEN, buf);
|
||||
@@ -148,21 +151,40 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
return;
|
||||
}
|
||||
|
||||
- touch_nr = buf[0];
|
||||
- if (touch_nr > data->max_fingers) {
|
||||
+ if (buf[0] > data->max_fingers) {
|
||||
dev_warn(dev, "More touches reported then supported %d > %d\n",
|
||||
- touch_nr, data->max_fingers);
|
||||
- touch_nr = data->max_fingers;
|
||||
+ buf[0], data->max_fingers);
|
||||
+ buf[0] = data->max_fingers;
|
||||
}
|
||||
|
||||
+ touch_nr = 0;
|
||||
bufp = buf + SILEAD_POINT_DATA_LEN;
|
||||
- for (i = 0; i < touch_nr; i++, bufp += SILEAD_POINT_DATA_LEN) {
|
||||
- /* Bits 4-7 are the touch id */
|
||||
- data->id[i] = (bufp[SILEAD_POINT_X_MSB_OFF] &
|
||||
- SILEAD_TOUCH_ID_MASK) >> 4;
|
||||
- touchscreen_set_mt_pos(&data->pos[i], &data->prop,
|
||||
+ for (i = 0; i < buf[0]; i++, bufp += SILEAD_POINT_DATA_LEN) {
|
||||
+ softbutton = (bufp[SILEAD_POINT_Y_MSB_OFF] &
|
||||
+ SILEAD_EXTRA_DATA_MASK) >> 4;
|
||||
+
|
||||
+ if (softbutton) {
|
||||
+ /*
|
||||
+ * For now only respond to softbutton == 0x01, some
|
||||
+ * tablets *without* a capacative button send 0x04
|
||||
+ * when crossing the edges of the screen.
|
||||
+ */
|
||||
+ if (softbutton == 0x01)
|
||||
+ softbutton_pressed = true;
|
||||
+
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Bits 4-7 are the touch id, note not all models have
|
||||
+ * hardware touch ids so atm we don't use these.
|
||||
+ */
|
||||
+ data->id[touch_nr] = (bufp[SILEAD_POINT_X_MSB_OFF] &
|
||||
+ SILEAD_EXTRA_DATA_MASK) >> 4;
|
||||
+ touchscreen_set_mt_pos(&data->pos[touch_nr], &data->prop,
|
||||
get_unaligned_le16(&bufp[SILEAD_POINT_X_OFF]) & 0xfff,
|
||||
get_unaligned_le16(&bufp[SILEAD_POINT_Y_OFF]) & 0xfff);
|
||||
+ touch_nr++;
|
||||
}
|
||||
|
||||
input_mt_assign_slots(input, data->slots, data->pos, touch_nr, 0);
|
||||
@@ -178,6 +200,7 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
}
|
||||
|
||||
input_mt_sync_frame(input);
|
||||
+ input_report_key(input, KEY_LEFTMETA, softbutton_pressed);
|
||||
input_sync(input);
|
||||
}
|
||||
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,53 @@
|
||||
From 2a99775c336303d2efc43eab4f24b34722a28faa Mon Sep 17 00:00:00 2001
|
||||
From: "Sergei A. Trusov" <sergei.a.trusov@ya.ru>
|
||||
Date: Tue, 20 Jun 2017 18:08:35 +0200
|
||||
Subject: [PATCH 11/16] Input: goodix: Add support for capacitive home button
|
||||
|
||||
On some x86 tablets with a Goodix touchscreen, the Windows logo on the
|
||||
front is a capacitive home button. Touching this button results in a touch
|
||||
with bit 4 of the first byte set, while only the lower 4 bits (0-3) are
|
||||
used to indicate the number of touches.
|
||||
|
||||
Report a KEY_LEFTMETA press when this happens.
|
||||
|
||||
Note that the hardware might support more than one button, in which
|
||||
case the "id" byte of coor_data would identify the button in question.
|
||||
This is not implemented as we don't have access to hardware with
|
||||
multiple buttons.
|
||||
|
||||
Signed-off-by: Sergei A. Trusov <sergei.a.trusov@ya.ru>
|
||||
Acked-by: Bastien Nocera <hadess@hadess.net>
|
||||
---
|
||||
drivers/input/touchscreen/goodix.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
|
||||
index 240b16f3ee97..903137d9cf7d 100644
|
||||
--- a/drivers/input/touchscreen/goodix.c
|
||||
+++ b/drivers/input/touchscreen/goodix.c
|
||||
@@ -267,6 +267,12 @@ static void goodix_process_events(struct goodix_ts_data *ts)
|
||||
if (touch_num < 0)
|
||||
return;
|
||||
|
||||
+ /*
|
||||
+ * Bit 4 of the first byte reports the status of the capacitive
|
||||
+ * Windows/Home button.
|
||||
+ */
|
||||
+ input_report_key(ts->input_dev, KEY_LEFTMETA, !!(point_data[0] & BIT(4)));
|
||||
+
|
||||
for (i = 0; i < touch_num; i++)
|
||||
goodix_ts_report_touch(ts,
|
||||
&point_data[1 + GOODIX_CONTACT_SIZE * i]);
|
||||
@@ -612,6 +618,9 @@ static int goodix_request_input_dev(struct goodix_ts_data *ts)
|
||||
ts->input_dev->id.product = ts->id;
|
||||
ts->input_dev->id.version = ts->version;
|
||||
|
||||
+ /* Capacitive Windows/Home button on some devices */
|
||||
+ input_set_capability(ts->input_dev, EV_KEY, KEY_LEFTMETA);
|
||||
+
|
||||
error = input_register_device(ts->input_dev);
|
||||
if (error) {
|
||||
dev_err(&ts->client->dev,
|
||||
--
|
||||
2.13.0
|
||||
|
150
0012-Input-gpio_keys-Do-not-report-wake-button-presses-as.patch
Normal file
150
0012-Input-gpio_keys-Do-not-report-wake-button-presses-as.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From 02b823a4d28ffb5fde5192799abd934d9de95630 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 6 Jan 2017 20:08:11 +0100
|
||||
Subject: [PATCH 12/16] Input: gpio_keys - Do not report wake button presses as
|
||||
evdev events
|
||||
|
||||
If a button is a wake button, it may still be bouncing from the press
|
||||
to wakeup the device by the time the gpio interrupts get enabled again
|
||||
and / or the gpio_keys_report_state call from gpio_keys_resume may
|
||||
find the button still pressed and report this as a new press.
|
||||
|
||||
This is undesirable, esp. since the powerbutton on tablets is typically
|
||||
a wakeup source and uses the gpio_keys driver on some tablets, leading
|
||||
to userspace immediately re-suspending the tablet after the powerbutton
|
||||
is pressed, due to it seeing a powerbutton press.
|
||||
|
||||
This commit ignores wakeup button presses for the first 1 second after
|
||||
resume (and while resumed, as the workqueue may run before the resume
|
||||
function runs), avoiding this problem.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
Note: maybe we should make WAKE_DEBOUNCE part of gpio_keys_button and
|
||||
only do this when drivers / platform-data set this to a non-zero value ?
|
||||
---
|
||||
drivers/input/keyboard/gpio_keys.c | 49 ++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 47 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
|
||||
index da3d362f21b1..e1488b534e7d 100644
|
||||
--- a/drivers/input/keyboard/gpio_keys.c
|
||||
+++ b/drivers/input/keyboard/gpio_keys.c
|
||||
@@ -31,6 +31,8 @@
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
+#define WAKE_DEBOUNCE msecs_to_jiffies(1000)
|
||||
+
|
||||
struct gpio_button_data {
|
||||
const struct gpio_keys_button *button;
|
||||
struct input_dev *input;
|
||||
@@ -44,10 +46,14 @@ struct gpio_button_data {
|
||||
struct delayed_work work;
|
||||
unsigned int software_debounce; /* in msecs, for GPIO-driven buttons */
|
||||
|
||||
+ unsigned long resume_time; /* in jiffies, for wakeup buttons */
|
||||
+
|
||||
unsigned int irq;
|
||||
spinlock_t lock;
|
||||
bool disabled;
|
||||
bool key_pressed;
|
||||
+ bool suspended;
|
||||
+ bool resume_time_valid;
|
||||
};
|
||||
|
||||
struct gpio_keys_drvdata {
|
||||
@@ -356,6 +362,27 @@ static struct attribute_group gpio_keys_attr_group = {
|
||||
.attrs = gpio_keys_attrs,
|
||||
};
|
||||
|
||||
+static bool gpio_keys_ignore_wakeup_button_press(struct gpio_button_data *bdata)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+ bool ret = false;
|
||||
+
|
||||
+ if (!bdata->button->wakeup)
|
||||
+ return ret;
|
||||
+
|
||||
+ spin_lock_irqsave(&bdata->lock, flags);
|
||||
+
|
||||
+ if (bdata->suspended)
|
||||
+ ret = true; /* Our resume method did not run yet */
|
||||
+ else if (bdata->resume_time_valid &&
|
||||
+ time_before(jiffies, bdata->resume_time + WAKE_DEBOUNCE))
|
||||
+ ret = true; /* Assume this is a wakeup press and ignore */
|
||||
+
|
||||
+ spin_unlock_irqrestore(&bdata->lock, flags);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
|
||||
{
|
||||
const struct gpio_keys_button *button = bdata->button;
|
||||
@@ -370,6 +397,9 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (state && gpio_keys_ignore_wakeup_button_press(bdata))
|
||||
+ return;
|
||||
+
|
||||
if (type == EV_ABS) {
|
||||
if (state)
|
||||
input_event(input, type, button->code, button->value);
|
||||
@@ -429,6 +459,9 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
|
||||
|
||||
BUG_ON(irq != bdata->irq);
|
||||
|
||||
+ if (gpio_keys_ignore_wakeup_button_press(bdata))
|
||||
+ return IRQ_HANDLED;
|
||||
+
|
||||
spin_lock_irqsave(&bdata->lock, flags);
|
||||
|
||||
if (!bdata->key_pressed) {
|
||||
@@ -848,13 +881,18 @@ static int __maybe_unused gpio_keys_suspend(struct device *dev)
|
||||
{
|
||||
struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
|
||||
struct input_dev *input = ddata->input;
|
||||
+ unsigned long flags;
|
||||
int i;
|
||||
|
||||
if (device_may_wakeup(dev)) {
|
||||
for (i = 0; i < ddata->pdata->nbuttons; i++) {
|
||||
struct gpio_button_data *bdata = &ddata->data[i];
|
||||
- if (bdata->button->wakeup)
|
||||
+ if (bdata->button->wakeup) {
|
||||
+ spin_lock_irqsave(&bdata->lock, flags);
|
||||
+ bdata->suspended = true;
|
||||
+ spin_unlock_irqrestore(&bdata->lock, flags);
|
||||
enable_irq_wake(bdata->irq);
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&input->mutex);
|
||||
@@ -870,14 +908,21 @@ static int __maybe_unused gpio_keys_resume(struct device *dev)
|
||||
{
|
||||
struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
|
||||
struct input_dev *input = ddata->input;
|
||||
+ unsigned long flags;
|
||||
int error = 0;
|
||||
int i;
|
||||
|
||||
if (device_may_wakeup(dev)) {
|
||||
for (i = 0; i < ddata->pdata->nbuttons; i++) {
|
||||
struct gpio_button_data *bdata = &ddata->data[i];
|
||||
- if (bdata->button->wakeup)
|
||||
+ if (bdata->button->wakeup) {
|
||||
disable_irq_wake(bdata->irq);
|
||||
+ spin_lock_irqsave(&bdata->lock, flags);
|
||||
+ bdata->resume_time = jiffies;
|
||||
+ bdata->resume_time_valid = true;
|
||||
+ bdata->suspended = false;
|
||||
+ spin_unlock_irqrestore(&bdata->lock, flags);
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&input->mutex);
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,32 @@
|
||||
From bf3e9581e10a19b2ce77a45fe001116d269b4c7f Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 18 Jun 2017 12:47:38 +0200
|
||||
Subject: [PATCH 13/16] iio: accel: bmc150: Add support for BOSC0200 ACPI
|
||||
device id
|
||||
|
||||
Add support for the BOSC0200 ACPI device id used on some x86 tablets.
|
||||
note driver_data is not set to a specific model, driver_data is not
|
||||
used anyways (instead detection is done on the chip_id reg) and the
|
||||
2 tablets with a BOSC0200 ACPI device id I've have 2 different chips,
|
||||
one has a BMA250E, the other a BMA222E.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/iio/accel/bmc150-accel-i2c.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/iio/accel/bmc150-accel-i2c.c b/drivers/iio/accel/bmc150-accel-i2c.c
|
||||
index 8ca8041267ef..f85014fbaa12 100644
|
||||
--- a/drivers/iio/accel/bmc150-accel-i2c.c
|
||||
+++ b/drivers/iio/accel/bmc150-accel-i2c.c
|
||||
@@ -64,6 +64,7 @@ static const struct acpi_device_id bmc150_accel_acpi_match[] = {
|
||||
{"BMA250E", bma250e},
|
||||
{"BMA222E", bma222e},
|
||||
{"BMA0280", bma280},
|
||||
+ {"BOSC0200"},
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, bmc150_accel_acpi_match);
|
||||
--
|
||||
2.13.0
|
||||
|
143
0014-mmc-sdhci-acpi-Workaround-conflict-with-PCI-wifi-on-.patch
Normal file
143
0014-mmc-sdhci-acpi-Workaround-conflict-with-PCI-wifi-on-.patch
Normal file
@ -0,0 +1,143 @@
|
||||
From 51eb7454942c68c84b82782e47637de3ba37f113 Mon Sep 17 00:00:00 2001
|
||||
From: Adrian Hunter <adrian.hunter@intel.com>
|
||||
Date: Wed, 21 Jun 2017 15:08:39 +0300
|
||||
Subject: [PATCH 14/16] mmc: sdhci-acpi: Workaround conflict with PCI wifi on
|
||||
GPD Win handheld
|
||||
|
||||
GPDwin uses PCI wifi which conflicts with SDIO's use of
|
||||
acpi_device_fix_up_power() on child device nodes. Specifically
|
||||
acpi_device_fix_up_power() causes the wifi module to get turned off.
|
||||
Identifying GPDwin is problematic, but since SDIO is only used for wifi,
|
||||
the presence of the PCI wifi card in the expected slot with an ACPI
|
||||
companion node, is used to indicate that acpi_device_fix_up_power() should
|
||||
be avoided.
|
||||
|
||||
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Tested-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/mmc/host/sdhci-acpi.c | 70 +++++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 64 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
|
||||
index c6a9a1bfaa22..b3fb155f50e4 100644
|
||||
--- a/drivers/mmc/host/sdhci-acpi.c
|
||||
+++ b/drivers/mmc/host/sdhci-acpi.c
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/iosf_mbi.h>
|
||||
+#include <linux/pci.h>
|
||||
#endif
|
||||
|
||||
#include "sdhci.h"
|
||||
@@ -134,6 +135,16 @@ static bool sdhci_acpi_byt(void)
|
||||
return x86_match_cpu(byt);
|
||||
}
|
||||
|
||||
+static bool sdhci_acpi_cht(void)
|
||||
+{
|
||||
+ static const struct x86_cpu_id cht[] = {
|
||||
+ { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_AIRMONT },
|
||||
+ {}
|
||||
+ };
|
||||
+
|
||||
+ return x86_match_cpu(cht);
|
||||
+}
|
||||
+
|
||||
#define BYT_IOSF_SCCEP 0x63
|
||||
#define BYT_IOSF_OCP_NETCTRL0 0x1078
|
||||
#define BYT_IOSF_OCP_TIMEOUT_BASE GENMASK(10, 8)
|
||||
@@ -178,6 +189,45 @@ static bool sdhci_acpi_byt_defer(struct device *dev)
|
||||
return false;
|
||||
}
|
||||
|
||||
+static bool sdhci_acpi_cht_pci_wifi(unsigned int vendor, unsigned int device,
|
||||
+ unsigned int slot, unsigned int parent_slot)
|
||||
+{
|
||||
+ struct pci_dev *dev, *parent, *from = NULL;
|
||||
+
|
||||
+ while (1) {
|
||||
+ dev = pci_get_device(vendor, device, from);
|
||||
+ pci_dev_put(from);
|
||||
+ if (!dev)
|
||||
+ break;
|
||||
+ parent = pci_upstream_bridge(dev);
|
||||
+ if (ACPI_COMPANION(&dev->dev) && PCI_SLOT(dev->devfn) == slot &&
|
||||
+ parent && PCI_SLOT(parent->devfn) == parent_slot &&
|
||||
+ !pci_upstream_bridge(parent)) {
|
||||
+ pci_dev_put(dev);
|
||||
+ return true;
|
||||
+ }
|
||||
+ from = dev;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * GPDwin uses PCI wifi which conflicts with SDIO's use of
|
||||
+ * acpi_device_fix_up_power() on child device nodes. Identifying GPDwin is
|
||||
+ * problematic, but since SDIO is only used for wifi, the presence of the PCI
|
||||
+ * wifi card in the expected slot with an ACPI companion node, is used to
|
||||
+ * indicate that acpi_device_fix_up_power() should be avoided.
|
||||
+ */
|
||||
+static inline bool sdhci_acpi_no_fixup_child_power(const char *hid,
|
||||
+ const char *uid)
|
||||
+{
|
||||
+ return sdhci_acpi_cht() &&
|
||||
+ !strcmp(hid, "80860F14") &&
|
||||
+ !strcmp(uid, "2") &&
|
||||
+ sdhci_acpi_cht_pci_wifi(0x14e4, 0x43ec, 0, 28);
|
||||
+}
|
||||
+
|
||||
#else
|
||||
|
||||
static inline void sdhci_acpi_byt_setting(struct device *dev)
|
||||
@@ -189,6 +239,12 @@ static inline bool sdhci_acpi_byt_defer(struct device *dev)
|
||||
return false;
|
||||
}
|
||||
|
||||
+static inline bool sdhci_acpi_no_fixup_child_power(const char *hid,
|
||||
+ const char *uid)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
|
||||
static int bxt_get_cd(struct mmc_host *mmc)
|
||||
@@ -390,11 +446,16 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
|
||||
if (acpi_bus_get_device(handle, &device))
|
||||
return -ENODEV;
|
||||
|
||||
+ hid = acpi_device_hid(device);
|
||||
+ uid = device->pnp.unique_id;
|
||||
+
|
||||
/* Power on the SDHCI controller and its children */
|
||||
acpi_device_fix_up_power(device);
|
||||
- list_for_each_entry(child, &device->children, node)
|
||||
- if (child->status.present && child->status.enabled)
|
||||
- acpi_device_fix_up_power(child);
|
||||
+ if (!sdhci_acpi_no_fixup_child_power(hid, uid)) {
|
||||
+ list_for_each_entry(child, &device->children, node)
|
||||
+ if (child->status.present && child->status.enabled)
|
||||
+ acpi_device_fix_up_power(child);
|
||||
+ }
|
||||
|
||||
if (acpi_bus_get_status(device) || !device->status.present)
|
||||
return -ENODEV;
|
||||
@@ -402,9 +463,6 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
|
||||
if (sdhci_acpi_byt_defer(dev))
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
- hid = acpi_device_hid(device);
|
||||
- uid = device->pnp.unique_id;
|
||||
-
|
||||
iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!iomem)
|
||||
return -ENOMEM;
|
||||
--
|
||||
2.13.0
|
||||
|
410
0015-i2c-cht-wc-Add-Intel-Cherry-Trail-Whiskey-Cove-SMBUS.patch
Normal file
410
0015-i2c-cht-wc-Add-Intel-Cherry-Trail-Whiskey-Cove-SMBUS.patch
Normal file
@ -0,0 +1,410 @@
|
||||
From bd0d7169342e47919f68e75d659968f02b62f84b Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 3 Mar 2017 23:48:50 +0100
|
||||
Subject: [PATCH 15/16] i2c-cht-wc: Add Intel Cherry Trail Whiskey Cove SMBUS
|
||||
controller driver
|
||||
|
||||
The Intel Cherry Trail Whiskey Cove PMIC does not contain a builtin
|
||||
battery charger, instead boards with this PMIC use an external TI
|
||||
bq24292i charger IC, which is connected to a SMBUS controller built into
|
||||
the PMIC.
|
||||
|
||||
This commit adds an i2c-bus driver for the PMIC's builtin SMBUS
|
||||
controller. The probe function for this i2c-bus will also register an
|
||||
i2c-client for the TI bq24292i charger after the i2c-bus has been
|
||||
registered.
|
||||
|
||||
Note that several device-properties are set on the client-device to
|
||||
tell the bq24190 power-supply driver to integrate the Whiskey Cove PMIC
|
||||
and e.g. use the PMIC's BC1.2 detection (through extcon) to determine
|
||||
the maximum input current.
|
||||
|
||||
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
Changes in v2:
|
||||
-Various style (mostly captialization and variable name) fixes
|
||||
-Use device-properties instead of platform_data for the i2c_board_info
|
||||
---
|
||||
drivers/i2c/busses/Kconfig | 8 +
|
||||
drivers/i2c/busses/Makefile | 1 +
|
||||
drivers/i2c/busses/i2c-cht-wc.c | 336 ++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 345 insertions(+)
|
||||
create mode 100644 drivers/i2c/busses/i2c-cht-wc.c
|
||||
|
||||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
||||
index 144cbadc7c72..18c96178b177 100644
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -187,6 +187,14 @@ config I2C_PIIX4
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called i2c-piix4.
|
||||
|
||||
+config I2C_CHT_WC
|
||||
+ tristate "Intel Cherry Trail Whiskey Cove PMIC smbus controller"
|
||||
+ depends on INTEL_SOC_PMIC_CHTWC
|
||||
+ help
|
||||
+ If you say yes to this option, support will be included for the
|
||||
+ SMBus controller found in the Intel Cherry Trail Whiskey Cove PMIC
|
||||
+ found on some Intel Cherry Trail systems.
|
||||
+
|
||||
config I2C_NFORCE2
|
||||
tristate "Nvidia nForce2, nForce3 and nForce4"
|
||||
depends on PCI
|
||||
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
|
||||
index 30b60855fbcd..f6443fa44f61 100644
|
||||
--- a/drivers/i2c/busses/Makefile
|
||||
+++ b/drivers/i2c/busses/Makefile
|
||||
@@ -12,6 +12,7 @@ obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o
|
||||
obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o
|
||||
obj-$(CONFIG_I2C_AMD756_S4882) += i2c-amd756-s4882.o
|
||||
obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o
|
||||
+obj-$(CONFIG_I2C_CHT_WC) += i2c-cht-wc.o
|
||||
obj-$(CONFIG_I2C_I801) += i2c-i801.o
|
||||
obj-$(CONFIG_I2C_ISCH) += i2c-isch.o
|
||||
obj-$(CONFIG_I2C_ISMT) += i2c-ismt.o
|
||||
diff --git a/drivers/i2c/busses/i2c-cht-wc.c b/drivers/i2c/busses/i2c-cht-wc.c
|
||||
new file mode 100644
|
||||
index 000000000000..ccf0785bcb75
|
||||
--- /dev/null
|
||||
+++ b/drivers/i2c/busses/i2c-cht-wc.c
|
||||
@@ -0,0 +1,336 @@
|
||||
+/*
|
||||
+ * Intel CHT Whiskey Cove PMIC I2C Master driver
|
||||
+ * Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com>
|
||||
+ *
|
||||
+ * Based on various non upstream patches to support the CHT Whiskey Cove PMIC:
|
||||
+ * Copyright (C) 2011 - 2014 Intel Corporation. All rights reserved.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License version
|
||||
+ * 2 as published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that 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/completion.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/irq.h>
|
||||
+#include <linux/irqdomain.h>
|
||||
+#include <linux/mfd/intel_soc_pmic.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+
|
||||
+#define CHT_WC_I2C_CTRL 0x5e24
|
||||
+#define CHT_WC_I2C_CTRL_WR BIT(0)
|
||||
+#define CHT_WC_I2C_CTRL_RD BIT(1)
|
||||
+#define CHT_WC_I2C_CLIENT_ADDR 0x5e25
|
||||
+#define CHT_WC_I2C_REG_OFFSET 0x5e26
|
||||
+#define CHT_WC_I2C_WRDATA 0x5e27
|
||||
+#define CHT_WC_I2C_RDDATA 0x5e28
|
||||
+
|
||||
+#define CHT_WC_EXTCHGRIRQ 0x6e0a
|
||||
+#define CHT_WC_EXTCHGRIRQ_CLIENT_IRQ BIT(0)
|
||||
+#define CHT_WC_EXTCHGRIRQ_WRITE_IRQ BIT(1)
|
||||
+#define CHT_WC_EXTCHGRIRQ_READ_IRQ BIT(2)
|
||||
+#define CHT_WC_EXTCHGRIRQ_NACK_IRQ BIT(3)
|
||||
+#define CHT_WC_EXTCHGRIRQ_ADAP_IRQMASK ((u8)GENMASK(3, 1))
|
||||
+#define CHT_WC_EXTCHGRIRQ_MSK 0x6e17
|
||||
+
|
||||
+struct cht_wc_i2c_adap {
|
||||
+ struct i2c_adapter adapter;
|
||||
+ wait_queue_head_t wait;
|
||||
+ struct irq_chip irqchip;
|
||||
+ struct mutex irqchip_lock;
|
||||
+ struct regmap *regmap;
|
||||
+ struct irq_domain *irq_domain;
|
||||
+ struct i2c_client *client;
|
||||
+ int client_irq;
|
||||
+ u8 irq_mask;
|
||||
+ u8 old_irq_mask;
|
||||
+ bool nack;
|
||||
+ bool done;
|
||||
+};
|
||||
+
|
||||
+static irqreturn_t cht_wc_i2c_adap_thread_handler(int id, void *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = data;
|
||||
+ int ret, reg;
|
||||
+
|
||||
+ /* Read IRQs */
|
||||
+ ret = regmap_read(adap->regmap, CHT_WC_EXTCHGRIRQ, ®);
|
||||
+ if (ret) {
|
||||
+ dev_err(&adap->adapter.dev, "Error reading extchgrirq reg\n");
|
||||
+ return IRQ_NONE;
|
||||
+ }
|
||||
+
|
||||
+ reg &= ~adap->irq_mask;
|
||||
+
|
||||
+ /*
|
||||
+ * Immediately ack IRQs, so that if new IRQs arrives while we're
|
||||
+ * handling the previous ones our irq will re-trigger when we're done.
|
||||
+ */
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ, reg);
|
||||
+ if (ret)
|
||||
+ dev_err(&adap->adapter.dev, "Error writing extchgrirq reg\n");
|
||||
+
|
||||
+ /*
|
||||
+ * Do NOT use handle_nested_irq here, the client irq handler will
|
||||
+ * likely want to do i2c transfers and the i2c controller uses this
|
||||
+ * interrupt handler as well, so running the client irq handler from
|
||||
+ * this thread will cause things to lock up.
|
||||
+ */
|
||||
+ if (reg & CHT_WC_EXTCHGRIRQ_CLIENT_IRQ) {
|
||||
+ /*
|
||||
+ * generic_handle_irq expects local IRQs to be disabled
|
||||
+ * as normally it is called from interrupt context.
|
||||
+ */
|
||||
+ local_irq_disable();
|
||||
+ generic_handle_irq(adap->client_irq);
|
||||
+ local_irq_enable();
|
||||
+ }
|
||||
+
|
||||
+ if (reg & CHT_WC_EXTCHGRIRQ_ADAP_IRQMASK) {
|
||||
+ adap->nack = !!(reg & CHT_WC_EXTCHGRIRQ_NACK_IRQ);
|
||||
+ adap->done = true;
|
||||
+ wake_up(&adap->wait);
|
||||
+ }
|
||||
+
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+static u32 cht_wc_i2c_adap_master_func(struct i2c_adapter *adap)
|
||||
+{
|
||||
+ /* This i2c adapter only supports SMBUS byte transfers */
|
||||
+ return I2C_FUNC_SMBUS_BYTE_DATA;
|
||||
+}
|
||||
+
|
||||
+static int cht_wc_i2c_adap_smbus_xfer(struct i2c_adapter *_adap, u16 addr,
|
||||
+ unsigned short flags, char read_write,
|
||||
+ u8 command, int size,
|
||||
+ union i2c_smbus_data *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = i2c_get_adapdata(_adap);
|
||||
+ int ret, reg;
|
||||
+
|
||||
+ adap->nack = false;
|
||||
+ adap->done = false;
|
||||
+
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_I2C_CLIENT_ADDR, addr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_I2C_WRDATA, data->byte);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_I2C_REG_OFFSET, command);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_I2C_CTRL,
|
||||
+ (read_write == I2C_SMBUS_WRITE) ?
|
||||
+ CHT_WC_I2C_CTRL_WR : CHT_WC_I2C_CTRL_RD);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* 3 second timeout, during cable plug the PMIC responds quite slow */
|
||||
+ ret = wait_event_timeout(adap->wait, adap->done, 3 * HZ);
|
||||
+ if (ret == 0)
|
||||
+ return -ETIMEDOUT;
|
||||
+ if (adap->nack)
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (read_write == I2C_SMBUS_READ) {
|
||||
+ ret = regmap_read(adap->regmap, CHT_WC_I2C_RDDATA, ®);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ data->byte = reg;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct i2c_algorithm cht_wc_i2c_adap_algo = {
|
||||
+ .functionality = cht_wc_i2c_adap_master_func,
|
||||
+ .smbus_xfer = cht_wc_i2c_adap_smbus_xfer,
|
||||
+};
|
||||
+
|
||||
+/**** irqchip for the client connected to the extchgr i2c adapter ****/
|
||||
+static void cht_wc_i2c_irq_lock(struct irq_data *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data);
|
||||
+
|
||||
+ mutex_lock(&adap->irqchip_lock);
|
||||
+}
|
||||
+
|
||||
+static void cht_wc_i2c_irq_sync_unlock(struct irq_data *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data);
|
||||
+ int ret;
|
||||
+
|
||||
+ if (adap->irq_mask != adap->old_irq_mask) {
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ_MSK,
|
||||
+ adap->irq_mask);
|
||||
+ if (ret == 0)
|
||||
+ adap->old_irq_mask = adap->irq_mask;
|
||||
+ else
|
||||
+ dev_err(&adap->adapter.dev, "Error writing EXTCHGRIRQ_MSK\n");
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&adap->irqchip_lock);
|
||||
+}
|
||||
+
|
||||
+static void cht_wc_i2c_irq_enable(struct irq_data *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data);
|
||||
+
|
||||
+ adap->irq_mask &= ~CHT_WC_EXTCHGRIRQ_CLIENT_IRQ;
|
||||
+}
|
||||
+
|
||||
+static void cht_wc_i2c_irq_disable(struct irq_data *data)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data);
|
||||
+
|
||||
+ adap->irq_mask |= CHT_WC_EXTCHGRIRQ_CLIENT_IRQ;
|
||||
+}
|
||||
+
|
||||
+static const struct irq_chip cht_wc_i2c_irq_chip = {
|
||||
+ .irq_bus_lock = cht_wc_i2c_irq_lock,
|
||||
+ .irq_bus_sync_unlock = cht_wc_i2c_irq_sync_unlock,
|
||||
+ .irq_disable = cht_wc_i2c_irq_disable,
|
||||
+ .irq_enable = cht_wc_i2c_irq_enable,
|
||||
+ .name = "cht_wc_ext_chrg_irq_chip",
|
||||
+};
|
||||
+
|
||||
+static const struct property_entry bq24190_props[] = {
|
||||
+ PROPERTY_ENTRY_STRING("extcon-name", "cht_wcove_pwrsrc"),
|
||||
+ PROPERTY_ENTRY_BOOL("omit-battery-class"),
|
||||
+ PROPERTY_ENTRY_BOOL("disable-reset"),
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static int cht_wc_i2c_adap_i2c_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent);
|
||||
+ struct cht_wc_i2c_adap *adap;
|
||||
+ struct i2c_board_info board_info = {
|
||||
+ .type = "bq24190",
|
||||
+ .addr = 0x6b,
|
||||
+ .properties = bq24190_props,
|
||||
+ };
|
||||
+ int ret, irq;
|
||||
+
|
||||
+ irq = platform_get_irq(pdev, 0);
|
||||
+ if (irq < 0) {
|
||||
+ dev_err(&pdev->dev, "Error missing irq resource\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ adap = devm_kzalloc(&pdev->dev, sizeof(*adap), GFP_KERNEL);
|
||||
+ if (!adap)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ init_waitqueue_head(&adap->wait);
|
||||
+ mutex_init(&adap->irqchip_lock);
|
||||
+ adap->irqchip = cht_wc_i2c_irq_chip;
|
||||
+ adap->regmap = pmic->regmap;
|
||||
+ adap->adapter.owner = THIS_MODULE;
|
||||
+ adap->adapter.class = I2C_CLASS_HWMON;
|
||||
+ adap->adapter.algo = &cht_wc_i2c_adap_algo;
|
||||
+ strlcpy(adap->adapter.name, "PMIC I2C Adapter",
|
||||
+ sizeof(adap->adapter.name));
|
||||
+ adap->adapter.dev.parent = &pdev->dev;
|
||||
+
|
||||
+ /* Clear and activate i2c-adapter interrupts, disable client IRQ */
|
||||
+ adap->old_irq_mask = adap->irq_mask = ~CHT_WC_EXTCHGRIRQ_ADAP_IRQMASK;
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ, ~adap->irq_mask);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ_MSK, adap->irq_mask);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Alloc and register client IRQ */
|
||||
+ adap->irq_domain = irq_domain_add_linear(pdev->dev.of_node, 1,
|
||||
+ &irq_domain_simple_ops, NULL);
|
||||
+ if (!adap->irq_domain)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ adap->client_irq = irq_create_mapping(adap->irq_domain, 0);
|
||||
+ if (!adap->client_irq) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto remove_irq_domain;
|
||||
+ }
|
||||
+
|
||||
+ irq_set_chip_data(adap->client_irq, adap);
|
||||
+ irq_set_chip_and_handler(adap->client_irq, &adap->irqchip,
|
||||
+ handle_simple_irq);
|
||||
+
|
||||
+ ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
|
||||
+ cht_wc_i2c_adap_thread_handler,
|
||||
+ IRQF_ONESHOT, "PMIC I2C Adapter", adap);
|
||||
+ if (ret)
|
||||
+ goto remove_irq_domain;
|
||||
+
|
||||
+ i2c_set_adapdata(&adap->adapter, adap);
|
||||
+ ret = i2c_add_adapter(&adap->adapter);
|
||||
+ if (ret)
|
||||
+ goto remove_irq_domain;
|
||||
+
|
||||
+ board_info.irq = adap->client_irq;
|
||||
+ adap->client = i2c_new_device(&adap->adapter, &board_info);
|
||||
+ if (!adap->client) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto del_adapter;
|
||||
+ }
|
||||
+
|
||||
+ platform_set_drvdata(pdev, adap);
|
||||
+ return 0;
|
||||
+
|
||||
+del_adapter:
|
||||
+ i2c_del_adapter(&adap->adapter);
|
||||
+remove_irq_domain:
|
||||
+ irq_domain_remove(adap->irq_domain);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int cht_wc_i2c_adap_i2c_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct cht_wc_i2c_adap *adap = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ i2c_unregister_device(adap->client);
|
||||
+ i2c_del_adapter(&adap->adapter);
|
||||
+ irq_domain_remove(adap->irq_domain);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct platform_device_id cht_wc_i2c_adap_id_table[] = {
|
||||
+ { .name = "cht_wcove_ext_chgr" },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(platform, cht_wc_i2c_adap_id_table);
|
||||
+
|
||||
+struct platform_driver cht_wc_i2c_adap_driver = {
|
||||
+ .probe = cht_wc_i2c_adap_i2c_probe,
|
||||
+ .remove = cht_wc_i2c_adap_i2c_remove,
|
||||
+ .driver = {
|
||||
+ .name = "cht_wcove_ext_chgr",
|
||||
+ },
|
||||
+ .id_table = cht_wc_i2c_adap_id_table,
|
||||
+};
|
||||
+module_platform_driver(cht_wc_i2c_adap_driver);
|
||||
+
|
||||
+MODULE_DESCRIPTION("Intel CHT Whiskey Cove PMIC I2C Master driver");
|
||||
+MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
2.13.0
|
||||
|
@ -0,0 +1,62 @@
|
||||
From fd4fb1f6633b21042ff084868323e15e708fe1cd Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 1 Jan 2017 22:11:20 +0100
|
||||
Subject: [PATCH 16/16] Input: silead: Do not try to directly access the GPIO
|
||||
when using ACPI pm
|
||||
|
||||
On some x86 tablets we cannot directly access the GPIOs as they are
|
||||
claimed by the ACPI tables, so check it the i2c client is not being
|
||||
power-managed by ACPI before trying to get the power pin GPIO.
|
||||
|
||||
Note this is a workaround patch to fix this until Andy' gpiolib-ACPI
|
||||
patches which make gpiolib more strict land, once those are landed this
|
||||
patch is no longer needed.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/input/touchscreen/silead.c | 22 ++++++++++++++++------
|
||||
1 file changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
|
||||
index c0ba40c09699..30fba3cbe277 100644
|
||||
--- a/drivers/input/touchscreen/silead.c
|
||||
+++ b/drivers/input/touchscreen/silead.c
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
+#include <acpi/acpi_bus.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define SILEAD_TS_NAME "silead_ts"
|
||||
@@ -517,12 +518,21 @@ static int silead_ts_probe(struct i2c_client *client,
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
- /* Power GPIO pin */
|
||||
- data->gpio_power = devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW);
|
||||
- if (IS_ERR(data->gpio_power)) {
|
||||
- if (PTR_ERR(data->gpio_power) != -EPROBE_DEFER)
|
||||
- dev_err(dev, "Shutdown GPIO request failed\n");
|
||||
- return PTR_ERR(data->gpio_power);
|
||||
+ /*
|
||||
+ * If device power is not managed by ACPI, get the power_gpio
|
||||
+ * and manage it ourselves.
|
||||
+ */
|
||||
+#ifdef CONFIG_ACPI
|
||||
+ if (!acpi_bus_power_manageable(ACPI_HANDLE(dev)))
|
||||
+#endif
|
||||
+ {
|
||||
+ data->gpio_power = devm_gpiod_get_optional(dev, "power",
|
||||
+ GPIOD_OUT_LOW);
|
||||
+ if (IS_ERR(data->gpio_power)) {
|
||||
+ if (PTR_ERR(data->gpio_power) != -EPROBE_DEFER)
|
||||
+ dev_err(dev, "Power GPIO request failed\n");
|
||||
+ return PTR_ERR(data->gpio_power);
|
||||
+ }
|
||||
}
|
||||
|
||||
error = silead_ts_setup(client);
|
||||
--
|
||||
2.13.0
|
||||
|
@ -1 +0,0 @@
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
1
baseconfig/x86/CONFIG_INTEL_INT0002_VGPIO
Normal file
1
baseconfig/x86/CONFIG_INTEL_INT0002_VGPIO
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_INTEL_INT0002_VGPIO is not set
|
1
baseconfig/x86/CONFIG_INTEL_SOC_PMIC_CHTWC
Normal file
1
baseconfig/x86/CONFIG_INTEL_SOC_PMIC_CHTWC
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
|
1
baseconfig/x86/x86_64/CONFIG_AK8975
Normal file
1
baseconfig/x86/x86_64/CONFIG_AK8975
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_AK8975=m
|
1
baseconfig/x86/x86_64/CONFIG_AXP20X_ADC
Normal file
1
baseconfig/x86/x86_64/CONFIG_AXP20X_ADC
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_AXP20X_ADC is not set
|
1
baseconfig/x86/x86_64/CONFIG_AXP20X_POWER
Normal file
1
baseconfig/x86/x86_64/CONFIG_AXP20X_POWER
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_AXP20X_POWER is not set
|
1
baseconfig/x86/x86_64/CONFIG_AXP288_ADC
Normal file
1
baseconfig/x86/x86_64/CONFIG_AXP288_ADC
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_AXP288_ADC=m
|
1
baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER
Normal file
1
baseconfig/x86/x86_64/CONFIG_AXP288_CHARGER
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_AXP288_CHARGER=m
|
1
baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE
Normal file
1
baseconfig/x86/x86_64/CONFIG_AXP288_FUEL_GAUGE
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_AXP288_FUEL_GAUGE=m
|
1
baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042
Normal file
1
baseconfig/x86/x86_64/CONFIG_BATTERY_MAX17042
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_BATTERY_MAX17042=m
|
1
baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190
Normal file
1
baseconfig/x86/x86_64/CONFIG_CHARGER_BQ24190
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_CHARGER_BQ24190=m
|
1
baseconfig/x86/x86_64/CONFIG_CHT_WC_PMIC_OPREGION
Normal file
1
baseconfig/x86/x86_64/CONFIG_CHT_WC_PMIC_OPREGION
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_CHT_WC_PMIC_OPREGION=y
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_EXTCON=m
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_AXP288
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_EXTCON_AXP288=m
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_GPIO
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_EXTCON_GPIO is not set
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_CHT_WC
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_CHT_WC
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=m
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_INTEL_INT3496
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_MAX3355
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_EXTCON_MAX3355 is not set
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_RT8973A
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_EXTCON_RT8973A is not set
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_SM5502
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_EXTCON_SM5502 is not set
|
1
baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO
Normal file
1
baseconfig/x86/x86_64/CONFIG_EXTCON_USB_GPIO
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_EXTCON_USB_GPIO is not set
|
1
baseconfig/x86/x86_64/CONFIG_GPIO_AXP209
Normal file
1
baseconfig/x86/x86_64/CONFIG_GPIO_AXP209
Normal file
@ -0,0 +1 @@
|
||||
# CONFIG_GPIO_AXP209 is not set
|
1
baseconfig/x86/x86_64/CONFIG_I2C_CHT_WC
Normal file
1
baseconfig/x86/x86_64/CONFIG_I2C_CHT_WC
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_I2C_CHT_WC=m
|
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE
Normal file
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_CORE
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI
Normal file
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PCI
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_I2C_DESIGNWARE_PCI=y
|
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM
Normal file
1
baseconfig/x86/x86_64/CONFIG_I2C_DESIGNWARE_PLATFORM
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
1
baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK
Normal file
1
baseconfig/x86/x86_64/CONFIG_INPUT_AXP20X_PEK
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_INPUT_AXP20X_PEK=m
|
1
baseconfig/x86/x86_64/CONFIG_INTEL_INT0002_VGPIO
Normal file
1
baseconfig/x86/x86_64/CONFIG_INTEL_INT0002_VGPIO
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_INTEL_INT0002_VGPIO=m
|
1
baseconfig/x86/x86_64/CONFIG_INTEL_SOC_PMIC_CHTWC
Normal file
1
baseconfig/x86/x86_64/CONFIG_INTEL_SOC_PMIC_CHTWC
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_INTEL_SOC_PMIC_CHTWC=y
|
1
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C
Normal file
1
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_I2C
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_INV_MPU6050_I2C=m
|
1
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO
Normal file
1
baseconfig/x86/x86_64/CONFIG_INV_MPU6050_IIO
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_INV_MPU6050_IIO=m
|
1
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X
Normal file
1
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_MFD_AXP20X=y
|
1
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C
Normal file
1
baseconfig/x86/x86_64/CONFIG_MFD_AXP20X_I2C
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_MFD_AXP20X_I2C=y
|
1
baseconfig/x86/x86_64/CONFIG_SILEAD_DMI
Normal file
1
baseconfig/x86/x86_64/CONFIG_SILEAD_DMI
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_SILEAD_DMI=y
|
1
baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM
Normal file
1
baseconfig/x86/x86_64/CONFIG_USB_XHCI_PLATFORM
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
1
baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION
Normal file
1
baseconfig/x86/x86_64/CONFIG_XPOWER_PMIC_OPREGION
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_XPOWER_PMIC_OPREGION=y
|
@ -1354,7 +1354,6 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
@ -2102,6 +2101,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
# CONFIG_INTEL_INT0002_VGPIO is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2125,6 +2125,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
@ -1365,7 +1365,6 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
@ -2120,6 +2119,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
# CONFIG_INTEL_INT0002_VGPIO is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2143,6 +2143,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
@ -1365,7 +1365,6 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
@ -2120,6 +2119,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
# CONFIG_INTEL_INT0002_VGPIO is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2143,6 +2143,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
@ -1354,7 +1354,6 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
@ -2102,6 +2101,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
# CONFIG_INTEL_INT0002_VGPIO is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2125,6 +2125,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
# CONFIG_INTEL_TXT is not set
|
||||
|
@ -192,7 +192,7 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=15000
|
||||
CONFIG_AIX_PARTITION=y
|
||||
# CONFIG_AK09911 is not set
|
||||
# CONFIG_AK8974 is not set
|
||||
# CONFIG_AK8975 is not set
|
||||
CONFIG_AK8975=m
|
||||
# CONFIG_AL3320A is not set
|
||||
CONFIG_ALIENWARE_WMI=m
|
||||
CONFIG_ALI_FIR=m
|
||||
@ -326,6 +326,11 @@ CONFIG_AUXDISPLAY=y
|
||||
# CONFIG_AVERAGE is not set
|
||||
CONFIG_AX25_DAMA_SLAVE=y
|
||||
CONFIG_AX25=m
|
||||
# CONFIG_AXP20X_ADC is not set
|
||||
# CONFIG_AXP20X_POWER is not set
|
||||
CONFIG_AXP288_ADC=m
|
||||
CONFIG_AXP288_CHARGER=m
|
||||
CONFIG_AXP288_FUEL_GAUGE=m
|
||||
CONFIG_B43_BCMA_PIO=y
|
||||
CONFIG_B43_BCMA=y
|
||||
CONFIG_B43_DEBUG=y
|
||||
@ -385,7 +390,7 @@ CONFIG_BATMAN_ADV_NC=y
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_BATTERY_LEGO_EV3 is not set
|
||||
# CONFIG_BATTERY_MAX17040 is not set
|
||||
# CONFIG_BATTERY_MAX17042 is not set
|
||||
CONFIG_BATTERY_MAX17042=m
|
||||
# CONFIG_BATTERY_SBS is not set
|
||||
CONFIG_BAYCOM_EPP=m
|
||||
CONFIG_BAYCOM_PAR=m
|
||||
@ -699,7 +704,7 @@ CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CGROUPS=y
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
# CONFIG_CHARGER_BQ24190 is not set
|
||||
CONFIG_CHARGER_BQ24190=m
|
||||
# CONFIG_CHARGER_BQ24257 is not set
|
||||
# CONFIG_CHARGER_BQ24735 is not set
|
||||
# CONFIG_CHARGER_BQ25890 is not set
|
||||
@ -728,6 +733,7 @@ CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHROMEOS_LAPTOP=m
|
||||
CONFIG_CHROMEOS_PSTORE=m
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CHT_WC_PMIC_OPREGION=y
|
||||
CONFIG_CICADA_PHY=m
|
||||
CONFIG_CIFS_ACL=y
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
@ -1397,10 +1403,16 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_AXP288=m
|
||||
# CONFIG_EXTCON_GPIO is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=m
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
CONFIG_EXTCON=m
|
||||
# CONFIG_EXTCON_MAX3355 is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
# CONFIG_EXTCON_RT8973A is not set
|
||||
# CONFIG_EXTCON_SM5502 is not set
|
||||
# CONFIG_EXTCON_USB_GPIO is not set
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_EZNPS_GIC is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
@ -1617,6 +1629,7 @@ CONFIG_GIRBIL_DONGLE=m
|
||||
# CONFIG_GPIO_ALTERA is not set
|
||||
# CONFIG_GPIO_AMD8111 is not set
|
||||
# CONFIG_GPIO_AMDPT is not set
|
||||
# CONFIG_GPIO_AXP209 is not set
|
||||
# CONFIG_GPIO_BT8XX is not set
|
||||
CONFIG_GPIO_CRYSTAL_COVE=y
|
||||
# CONFIG_GPIO_CS5535 is not set
|
||||
@ -1897,16 +1910,17 @@ CONFIG_I2C_AMD8111=m
|
||||
# CONFIG_I2C_CADENCE is not set
|
||||
# CONFIG_I2C_CBUS_GPIO is not set
|
||||
CONFIG_I2C_CHARDEV=m
|
||||
CONFIG_I2C_CHT_WC=m
|
||||
CONFIG_I2C_COMPAT=y
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEMUX_PINCTRL is not set
|
||||
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
|
||||
CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
CONFIG_I2C_DESIGNWARE_PCI=m
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
CONFIG_I2C_DESIGNWARE_PCI=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
# CONFIG_I2C_EG20T is not set
|
||||
# CONFIG_I2C_EMEV2 is not set
|
||||
@ -2086,6 +2100,7 @@ CONFIG_INPUT_APANEL=m
|
||||
CONFIG_INPUT_ATI_REMOTE2=m
|
||||
CONFIG_INPUT_ATLAS_BTNS=m
|
||||
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
|
||||
CONFIG_INPUT_AXP20X_PEK=m
|
||||
# CONFIG_INPUT_BMA150 is not set
|
||||
CONFIG_INPUT_CM109=m
|
||||
CONFIG_INPUT_CMA3000_I2C=m
|
||||
@ -2149,6 +2164,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
CONFIG_INTEL_INT0002_VGPIO=m
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2177,6 +2193,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
CONFIG_INTEL_SOC_PMIC_CHTWC=y
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
CONFIG_INTEL_TURBO_MAX_3=y
|
||||
@ -2184,8 +2201,8 @@ CONFIG_INTEL_TXT=y
|
||||
CONFIG_INTEL_VBTN=m
|
||||
CONFIG_INTEL_XWAY_PHY=m
|
||||
# CONFIG_INTERVAL_TREE_TEST is not set
|
||||
# CONFIG_INV_MPU6050_I2C is not set
|
||||
# CONFIG_INV_MPU6050_IIO is not set
|
||||
CONFIG_INV_MPU6050_I2C=m
|
||||
CONFIG_INV_MPU6050_IIO=m
|
||||
# CONFIG_INV_MPU6050_SPI is not set
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
@ -2864,8 +2881,8 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_MFD_ATMEL_FLEXCOM is not set
|
||||
# CONFIG_MFD_ATMEL_HLCDC is not set
|
||||
# CONFIG_MFD_AXP20X_I2C is not set
|
||||
# CONFIG_MFD_AXP20X is not set
|
||||
CONFIG_MFD_AXP20X_I2C=y
|
||||
CONFIG_MFD_AXP20X=y
|
||||
# CONFIG_MFD_BCM590XX is not set
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_CPCAP is not set
|
||||
@ -4695,7 +4712,7 @@ CONFIG_SH_ETH=m
|
||||
# CONFIG_SIGMA is not set
|
||||
CONFIG_SIGMATEL_FIR=m
|
||||
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
|
||||
# CONFIG_SILEAD_DMI is not set
|
||||
CONFIG_SILEAD_DMI=y
|
||||
CONFIG_SIS190=m
|
||||
CONFIG_SIS900=m
|
||||
# CONFIG_SKFP is not set
|
||||
@ -5731,7 +5748,7 @@ CONFIG_USB_WDM=m
|
||||
CONFIG_USB_WUSB_CBAF=m
|
||||
CONFIG_USB_WUSB=m
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
# CONFIG_USB_XHCI_PLATFORM is not set
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_YUREX=m
|
||||
|
@ -192,7 +192,7 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=15000
|
||||
CONFIG_AIX_PARTITION=y
|
||||
# CONFIG_AK09911 is not set
|
||||
# CONFIG_AK8974 is not set
|
||||
# CONFIG_AK8975 is not set
|
||||
CONFIG_AK8975=m
|
||||
# CONFIG_AL3320A is not set
|
||||
CONFIG_ALIENWARE_WMI=m
|
||||
CONFIG_ALI_FIR=m
|
||||
@ -325,6 +325,11 @@ CONFIG_AUXDISPLAY=y
|
||||
# CONFIG_AVERAGE is not set
|
||||
CONFIG_AX25_DAMA_SLAVE=y
|
||||
CONFIG_AX25=m
|
||||
# CONFIG_AXP20X_ADC is not set
|
||||
# CONFIG_AXP20X_POWER is not set
|
||||
CONFIG_AXP288_ADC=m
|
||||
CONFIG_AXP288_CHARGER=m
|
||||
CONFIG_AXP288_FUEL_GAUGE=m
|
||||
CONFIG_B43_BCMA_PIO=y
|
||||
CONFIG_B43_BCMA=y
|
||||
# CONFIG_B43_DEBUG is not set
|
||||
@ -384,7 +389,7 @@ CONFIG_BATMAN_ADV_NC=y
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_BATTERY_LEGO_EV3 is not set
|
||||
# CONFIG_BATTERY_MAX17040 is not set
|
||||
# CONFIG_BATTERY_MAX17042 is not set
|
||||
CONFIG_BATTERY_MAX17042=m
|
||||
# CONFIG_BATTERY_SBS is not set
|
||||
CONFIG_BAYCOM_EPP=m
|
||||
CONFIG_BAYCOM_PAR=m
|
||||
@ -698,7 +703,7 @@ CONFIG_CGROUP_PIDS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_CGROUPS=y
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
# CONFIG_CHARGER_BQ24190 is not set
|
||||
CONFIG_CHARGER_BQ24190=m
|
||||
# CONFIG_CHARGER_BQ24257 is not set
|
||||
# CONFIG_CHARGER_BQ24735 is not set
|
||||
# CONFIG_CHARGER_BQ25890 is not set
|
||||
@ -727,6 +732,7 @@ CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHROMEOS_LAPTOP=m
|
||||
CONFIG_CHROMEOS_PSTORE=m
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CHT_WC_PMIC_OPREGION=y
|
||||
CONFIG_CICADA_PHY=m
|
||||
CONFIG_CIFS_ACL=y
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
@ -1386,10 +1392,16 @@ CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_USE_FOR_EXT2=y
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=y
|
||||
CONFIG_EXTCON_AXP288=m
|
||||
# CONFIG_EXTCON_GPIO is not set
|
||||
CONFIG_EXTCON_INTEL_CHT_WC=m
|
||||
CONFIG_EXTCON_INTEL_INT3496=m
|
||||
# CONFIG_EXTCON is not set
|
||||
CONFIG_EXTCON=m
|
||||
# CONFIG_EXTCON_MAX3355 is not set
|
||||
# CONFIG_EXTCON_QCOM_SPMI_MISC is not set
|
||||
# CONFIG_EXTCON_RT8973A is not set
|
||||
# CONFIG_EXTCON_SM5502 is not set
|
||||
# CONFIG_EXTCON_USB_GPIO is not set
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_EZNPS_GIC is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
@ -1599,6 +1611,7 @@ CONFIG_GIRBIL_DONGLE=m
|
||||
# CONFIG_GPIO_ALTERA is not set
|
||||
# CONFIG_GPIO_AMD8111 is not set
|
||||
# CONFIG_GPIO_AMDPT is not set
|
||||
# CONFIG_GPIO_AXP209 is not set
|
||||
# CONFIG_GPIO_BT8XX is not set
|
||||
CONFIG_GPIO_CRYSTAL_COVE=y
|
||||
# CONFIG_GPIO_CS5535 is not set
|
||||
@ -1879,16 +1892,17 @@ CONFIG_I2C_AMD8111=m
|
||||
# CONFIG_I2C_CADENCE is not set
|
||||
# CONFIG_I2C_CBUS_GPIO is not set
|
||||
CONFIG_I2C_CHARDEV=m
|
||||
CONFIG_I2C_CHT_WC=m
|
||||
CONFIG_I2C_COMPAT=y
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEMUX_PINCTRL is not set
|
||||
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
|
||||
CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
CONFIG_I2C_DESIGNWARE_PCI=m
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
CONFIG_I2C_DESIGNWARE_PCI=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
# CONFIG_I2C_EG20T is not set
|
||||
# CONFIG_I2C_EMEV2 is not set
|
||||
@ -2068,6 +2082,7 @@ CONFIG_INPUT_APANEL=m
|
||||
CONFIG_INPUT_ATI_REMOTE2=m
|
||||
CONFIG_INPUT_ATLAS_BTNS=m
|
||||
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
|
||||
CONFIG_INPUT_AXP20X_PEK=m
|
||||
# CONFIG_INPUT_BMA150 is not set
|
||||
CONFIG_INPUT_CM109=m
|
||||
CONFIG_INPUT_CMA3000_I2C=m
|
||||
@ -2131,6 +2146,7 @@ CONFIG_INTEL_CHT_INT33FE=m
|
||||
CONFIG_INTEL_HID_EVENT=m
|
||||
CONFIG_INTEL_IDLE=y
|
||||
CONFIG_INTEL_IDMA64=m
|
||||
CONFIG_INTEL_INT0002_VGPIO=m
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
|
||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||
@ -2159,6 +2175,7 @@ CONFIG_INTEL_RST=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_INTEL_SMARTCONNECT=y
|
||||
CONFIG_INTEL_SOC_DTS_THERMAL=m
|
||||
CONFIG_INTEL_SOC_PMIC_CHTWC=y
|
||||
CONFIG_INTEL_SOC_PMIC=y
|
||||
# CONFIG_INTEL_TH is not set
|
||||
CONFIG_INTEL_TURBO_MAX_3=y
|
||||
@ -2166,8 +2183,8 @@ CONFIG_INTEL_TXT=y
|
||||
CONFIG_INTEL_VBTN=m
|
||||
CONFIG_INTEL_XWAY_PHY=m
|
||||
# CONFIG_INTERVAL_TREE_TEST is not set
|
||||
# CONFIG_INV_MPU6050_I2C is not set
|
||||
# CONFIG_INV_MPU6050_IIO is not set
|
||||
CONFIG_INV_MPU6050_I2C=m
|
||||
CONFIG_INV_MPU6050_IIO=m
|
||||
# CONFIG_INV_MPU6050_SPI is not set
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
# CONFIG_IOMMU_STRESS is not set
|
||||
@ -2844,8 +2861,8 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_MFD_ATMEL_FLEXCOM is not set
|
||||
# CONFIG_MFD_ATMEL_HLCDC is not set
|
||||
# CONFIG_MFD_AXP20X_I2C is not set
|
||||
# CONFIG_MFD_AXP20X is not set
|
||||
CONFIG_MFD_AXP20X_I2C=y
|
||||
CONFIG_MFD_AXP20X=y
|
||||
# CONFIG_MFD_BCM590XX is not set
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_CPCAP is not set
|
||||
@ -4674,7 +4691,7 @@ CONFIG_SH_ETH=m
|
||||
# CONFIG_SIGMA is not set
|
||||
CONFIG_SIGMATEL_FIR=m
|
||||
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
|
||||
# CONFIG_SILEAD_DMI is not set
|
||||
CONFIG_SILEAD_DMI=y
|
||||
CONFIG_SIS190=m
|
||||
CONFIG_SIS900=m
|
||||
# CONFIG_SKFP is not set
|
||||
@ -5709,7 +5726,7 @@ CONFIG_USB_WDM=m
|
||||
CONFIG_USB_WUSB_CBAF=m
|
||||
CONFIG_USB_WUSB=m
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
# CONFIG_USB_XHCI_PLATFORM is not set
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_YUREX=m
|
||||
|
28
kernel.spec
28
kernel.spec
@ -615,6 +615,27 @@ Patch502: CVE-2017-7477.patch
|
||||
# rhbz 1459326
|
||||
Patch504: RFC-audit-fix-a-race-condition-with-the-auditd-tracking-code.patch
|
||||
|
||||
# 600 - Patches for improved Bay and Cherry Trail device support
|
||||
# Below patches are pending in -next:
|
||||
Patch601: 0001-platform-x86-Add-driver-for-ACPI-INT0002-Virtual-GPI.patch
|
||||
Patch602: 0002-mfd-Add-Cherry-Trail-Whiskey-Cove-PMIC-driver.patch
|
||||
Patch603: 0003-power-supply-core-Add-support-for-supplied-from-devi.patch
|
||||
Patch604: 0004-platform-x86-intel_cht_int33fe-Set-supplied-from-pro.patch
|
||||
Patch605: 0005-ACPI-PMIC-xpower-Add-support-for-the-GPI1-regulator-.patch
|
||||
Patch606: 0006-Input-axp20x-pek-Add-wakeup-support.patch
|
||||
Patch607: 0007-platform-x86-silead_dmi-Add-touchscreen-info-for-GP-.patch
|
||||
Patch608: 0008-platform-x86-silead_dmi-Add-touchscreen-info-for-PoV.patch
|
||||
Patch609: 0009-platform-x86-silead_dmi-Add-touchscreen-info-for-Pip.patch
|
||||
# Below patches are submitted upstream, awaiting review / merging
|
||||
Patch610: 0010-Input-silead-Add-support-for-capactive-home-button-f.patch
|
||||
Patch611: 0011-Input-goodix-Add-support-for-capacitive-home-button.patch
|
||||
Patch612: 0012-Input-gpio_keys-Do-not-report-wake-button-presses-as.patch
|
||||
Patch613: 0013-iio-accel-bmc150-Add-support-for-BOSC0200-ACPI-devic.patch
|
||||
Patch614: 0014-mmc-sdhci-acpi-Workaround-conflict-with-PCI-wifi-on-.patch
|
||||
Patch615: 0015-i2c-cht-wc-Add-Intel-Cherry-Trail-Whiskey-Cove-SMBUS.patch
|
||||
# Small workaround patches for issues with a more comprehensive fix in -next
|
||||
Patch616: 0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
@ -2168,6 +2189,13 @@ fi
|
||||
#
|
||||
#
|
||||
%changelog
|
||||
* Fri Jun 23 2017 Hans de Goede <jwrdegoede@fedoraproject.org>
|
||||
- Enable AXP288 PMIC support on x86_64 for battery charging and monitoring
|
||||
support on Bay and Cherry Trail tablets and laptops
|
||||
- Enable various drivers for peripherals found on Bay and Cherry Trail tablets
|
||||
- Add some small patches fixing suspend/resume touchscreen and accelerometer
|
||||
issues on various Bay and Cherry Trail tablets
|
||||
|
||||
* Thu Jun 22 2017 Justin M. Forbes <jforbes@fedoraproject.org> - 4.12.0-0.rc6.git3.1
|
||||
- Linux v4.12-rc6-102-ga38371c
|
||||
- Reenable debugging options.
|
||||
|
Loading…
Reference in New Issue
Block a user