Linux v4.1.2 rebase
This commit is contained in:
parent
feac13ee0f
commit
925196e8fe
|
@ -1,125 +0,0 @@
|
|||
From e1e62b98ebddc3234f3259019d3236f66fc667f8 Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 16:01:22 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support Dell headset mode for ALC288
|
||||
|
||||
Dell create new platform with ALC288 codec.
|
||||
This patch will enable headset mode for Dino platform.
|
||||
|
||||
[slight code refactoring and compile fix by tiwai]
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 67 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 67 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index ceb599a..7b5c93e 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4121,6 +4121,29 @@ static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
|
||||
alc_fixup_headset_mode(codec, fix, action);
|
||||
}
|
||||
|
||||
+static void alc288_update_headset_jack_cb(struct hda_codec *codec,
|
||||
+ struct hda_jack_callback *jack)
|
||||
+{
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ int present;
|
||||
+
|
||||
+ alc_update_headset_jack_cb(codec, jack);
|
||||
+ /* Headset Mic enable or disable, only for Dell Dino */
|
||||
+ present = spec->gen.hp_jack_present ? 0x40 : 0;
|
||||
+ snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
|
||||
+ present);
|
||||
+}
|
||||
+
|
||||
+static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
|
||||
+ const struct hda_fixup *fix, int action)
|
||||
+{
|
||||
+ alc_fixup_headset_mode(codec, fix, action);
|
||||
+ if (action == HDA_FIXUP_ACT_PROBE) {
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -4460,6 +4483,9 @@ enum {
|
||||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
|
||||
ALC280_FIXUP_HP_DOCK_PINS,
|
||||
+ ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
+ ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@@ -4948,6 +4974,33 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC280_FIXUP_HP_GPIO4
|
||||
},
|
||||
+ [ALC288_FIXUP_DELL_HEADSET_MODE] = {
|
||||
+ .type = HDA_FIXUP_FUNC,
|
||||
+ .v.func = alc_fixup_headset_mode_dell_alc288,
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
||||
+ .type = HDA_FIXUP_PINS,
|
||||
+ .v.pins = (const struct hda_pintbl[]) {
|
||||
+ { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||
+ { 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL_XPS_13_GPIO6] = {
|
||||
+ .type = HDA_FIXUP_VERBS,
|
||||
+ .v.verbs = (const struct hda_verb[]) {
|
||||
+ {0x01, AC_VERB_SET_GPIO_MASK, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@@ -5174,6 +5227,13 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{0x1b, 0x411111f0}, \
|
||||
{0x1e, 0x411111f0}
|
||||
|
||||
+#define ALC288_STANDARD_PINS \
|
||||
+ {0x17, 0x411111f0}, \
|
||||
+ {0x18, 0x411111f0}, \
|
||||
+ {0x19, 0x411111f0}, \
|
||||
+ {0x1a, 0x411111f0}, \
|
||||
+ {0x1e, 0x411111f0}
|
||||
+
|
||||
#define ALC290_STANDARD_PINS \
|
||||
{0x12, 0x99a30130}, \
|
||||
{0x13, 0x40000000}, \
|
||||
@@ -5369,6 +5429,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x19, 0x03a11020},
|
||||
{0x1d, 0x40e00001},
|
||||
{0x21, 0x0321101f}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
+ ALC288_STANDARD_PINS,
|
||||
+ {0x12, 0x90a60120},
|
||||
+ {0x13, 0x40000000},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x1d, 0x4076832d},
|
||||
+ {0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x14, 0x411111f0},
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,181 +0,0 @@
|
|||
From f3b703326541d0c1ce85f5e570f6d2b6bd4296ec Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 15:01:17 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support headset mode for ALC286/288
|
||||
|
||||
Support headset mode for ALC286 and ALC288 platforms.
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 77 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 77 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 7f46d06..ceb599a 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3542,6 +3542,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x42a3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3573,6 +3581,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3602,6 +3614,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
WRITE_COEF(0x26, 0x008c),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0),
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0x0008),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0x2000),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x19, 0xa208),
|
||||
WRITE_COEF(0x2e, 0xacf0),
|
||||
@@ -3635,6 +3655,13 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
@@ -3670,6 +3697,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3699,6 +3734,11 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3727,6 +3767,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xd429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3754,6 +3801,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3782,6 +3835,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xe429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3809,6 +3869,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3833,6 +3899,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
conteol) */
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0293[] = {
|
||||
UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
|
||||
WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
|
||||
@@ -3861,6 +3931,13 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
is_ctia = (val & 0x0070) == 0x0070;
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ msleep(350);
|
||||
+ val = alc_read_coef_idx(codec, 0x50);
|
||||
+ is_ctia = (val & 0x0070) == 0x0070;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_write_coef_idx(codec, 0x6b, 0xd429);
|
||||
msleep(300);
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
From 25c1b8af5b11bd1dbd17d0c1212586bb56ec4efd Mon Sep 17 00:00:00 2001
|
||||
From: Laura Abbott <labbott@fedoraproject.org>
|
||||
Date: Fri, 8 May 2015 14:13:56 -0700
|
||||
Subject: [PATCH] HID: usbhid: Add HID_QUIRK_NOGET for Aten DVI KVM switch
|
||||
To: Jiri Kosina <jkosina@suse.cz>
|
||||
Cc: linux-input@vger.kernel.org
|
||||
Cc: linux-kernel@vger.kernel.org
|
||||
Cc: linux-usb@vger.kernel.org
|
||||
Cc: stephane.tranchemer@devinci.fr
|
||||
|
||||
Like other KVM switches, the Aten DVI KVM switch needs a
|
||||
quirk to avoid spewing errors:
|
||||
|
||||
[791759.606542] usb 1-5.4: input irq status -75 received
|
||||
[791759.614537] usb 1-5.4: input irq status -75 received
|
||||
[791759.622542] usb 1-5.4: input irq status -75 received
|
||||
|
||||
Add it.
|
||||
|
||||
Signed-off-by: Laura Abbott <labbott@fedoraproject.org>
|
||||
---
|
||||
drivers/hid/hid-ids.h | 1 +
|
||||
drivers/hid/usbhid/hid-quirks.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index 41f167e..7ce93d9 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -164,6 +164,7 @@
|
||||
#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204
|
||||
#define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205
|
||||
#define USB_DEVICE_ID_ATEN_4PORTKVMC 0x2208
|
||||
+#define USB_DEVICE_ID_ATEN_CS682 0x2213
|
||||
|
||||
#define USB_VENDOR_ID_ATMEL 0x03eb
|
||||
#define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c
|
||||
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
|
||||
index a775143..4696895e 100644
|
||||
--- a/drivers/hid/usbhid/hid-quirks.c
|
||||
+++ b/drivers/hid/usbhid/hid-quirks.c
|
||||
@@ -61,6 +61,7 @@ static const struct hid_blacklist {
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
|
||||
+ { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
From 0ce518efc8ddd9d2d45dcc2f14b20032d1e88946 Mon Sep 17 00:00:00 2001
|
||||
From: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
Date: Fri, 24 Apr 2015 08:55:07 +0200
|
||||
Subject: [PATCH] cx18: add missing caps for the PCM video device
|
||||
|
||||
The cx18 PCM video device didn't have any capabilities set, which caused a warnings
|
||||
in the v4l2 core:
|
||||
|
||||
[ 6.229393] ------------[ cut here ]------------
|
||||
[ 6.229414] WARNING: CPU: 1 PID: 593 at
|
||||
drivers/media/v4l2-core/v4l2-ioctl.c:1025 v4l_querycap+0x41/0x70
|
||||
[videodev]()
|
||||
[ 6.229415] Modules linked in: cx18_alsa mxl5005s s5h1409
|
||||
tuner_simple tuner_types cs5345 tuner intel_rapl iosf_mbi
|
||||
x86_pkg_temp_thermal coretemp raid1 snd_hda_codec_realtek kvm_intel
|
||||
snd_hda_codec_generic snd_hda_codec_hdmi kvm snd_oxygen(+) snd_hda_intel
|
||||
snd_oxygen_lib snd_hda_controller snd_hda_codec snd_mpu401_uart iTCO_wdt
|
||||
snd_rawmidi iTCO_vendor_support snd_hwdep crct10dif_pclmul crc32_pclmul
|
||||
crc32c_intel snd_seq cx18 snd_seq_device ghash_clmulni_intel
|
||||
videobuf_vmalloc tveeprom cx2341x snd_pcm serio_raw videobuf_core vfat
|
||||
dvb_core fat v4l2_common snd_timer videodev snd lpc_ich i2c_i801 joydev
|
||||
mfd_core mei_me media soundcore tpm_infineon soc_button_array tpm_tis
|
||||
mei shpchp tpm nfsd auth_rpcgss nfs_acl lockd grace sunrpc binfmt_misc
|
||||
i915 nouveau mxm_wmi wmi e1000e ttm i2c_algo_bit drm_kms_helper
|
||||
[ 6.229444] drm ptp pps_core video
|
||||
[ 6.229446] CPU: 1 PID: 593 Comm: v4l_id Not tainted
|
||||
3.19.3-200.fc21.x86_64 #1
|
||||
[ 6.229447] Hardware name: Gigabyte Technology Co., Ltd.
|
||||
Z87-D3HP/Z87-D3HP-CF, BIOS F6 01/20/2014
|
||||
[ 6.229448] 0000000000000000 00000000d12b1131 ffff88042dacfc28
|
||||
ffffffff8176e215
|
||||
[ 6.229449] 0000000000000000 0000000000000000 ffff88042dacfc68
|
||||
ffffffff8109bc1a
|
||||
[ 6.229451] ffffffffa0594000 ffff88042dacfd90 0000000000000000
|
||||
ffffffffa04e2140
|
||||
[ 6.229452] Call Trace:
|
||||
[ 6.229466] [<ffffffff8176e215>] dump_stack+0x45/0x57
|
||||
[ 6.229469] [<ffffffff8109bc1a>] warn_slowpath_common+0x8a/0xc0
|
||||
[ 6.229472] [<ffffffff8109bd4a>] warn_slowpath_null+0x1a/0x20
|
||||
[ 6.229474] [<ffffffffa04ca401>] v4l_querycap+0x41/0x70 [videodev]
|
||||
[ 6.229477] [<ffffffffa04ca6cc>] __video_do_ioctl+0x29c/0x320 [videodev]
|
||||
[ 6.229479] [<ffffffff81227131>] ? do_last+0x2f1/0x1210
|
||||
[ 6.229491] [<ffffffffa04cc776>] video_usercopy+0x366/0x5d0 [videodev]
|
||||
[ 6.229494] [<ffffffffa04ca430>] ? v4l_querycap+0x70/0x70 [videodev]
|
||||
[ 6.229497] [<ffffffffa04cc9f5>] video_ioctl2+0x15/0x20 [videodev]
|
||||
[ 6.229499] [<ffffffffa04c6794>] v4l2_ioctl+0x164/0x180 [videodev]
|
||||
[ 6.229501] [<ffffffff8122e298>] do_vfs_ioctl+0x2f8/0x500
|
||||
[ 6.229502] [<ffffffff8122e521>] SyS_ioctl+0x81/0xa0
|
||||
[ 6.229505] [<ffffffff81774a09>] system_call_fastpath+0x12/0x17
|
||||
[ 6.229506] ---[ end trace dacd80d4b19277ea ]---
|
||||
|
||||
Added the necessary capabilities to stop this warning.
|
||||
|
||||
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
|
||||
Reported-by: Laura Abbott <labbott@redhat.com>
|
||||
Cc: <stable@vger.kernel.org> # for v3.19 and up
|
||||
---
|
||||
drivers/media/pci/cx18/cx18-streams.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c
|
||||
index c82d25d..c986084 100644
|
||||
--- a/drivers/media/pci/cx18/cx18-streams.c
|
||||
+++ b/drivers/media/pci/cx18/cx18-streams.c
|
||||
@@ -90,6 +90,7 @@ static struct {
|
||||
"encoder PCM audio",
|
||||
VFL_TYPE_GRABBER, CX18_V4L2_ENC_PCM_OFFSET,
|
||||
PCI_DMA_FROMDEVICE,
|
||||
+ V4L2_CAP_TUNER | V4L2_CAP_AUDIO | V4L2_CAP_READWRITE,
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_IDX */
|
||||
"encoder IDX",
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From fc7789f5d8061c8d26f2e9be9ce5bd91f5033479 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Tue, 30 Dec 2014 07:32:03 +0000
|
||||
Subject: [PATCH] drivers/rtc/rtc-em3027.c: add device tree support
|
||||
|
||||
Set the of_match_table for this driver so that devices can be described
|
||||
in the device tree. This device is used in the Trimslice and is already
|
||||
defined in the Trimslice device tree.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
drivers/rtc/rtc-em3027.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-em3027.c b/drivers/rtc/rtc-em3027.c
|
||||
index fccf366..7fbb051 100644
|
||||
--- a/drivers/rtc/rtc-em3027.c
|
||||
+++ b/drivers/rtc/rtc-em3027.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
|
||||
/* Registers */
|
||||
#define EM3027_REG_ON_OFF_CTRL 0x00
|
||||
@@ -135,10 +136,21 @@ static struct i2c_device_id em3027_id[] = {
|
||||
{ "em3027", 0 },
|
||||
{ }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(i2c, em3027_id);
|
||||
+
|
||||
+#ifdef CONFIG_OF
|
||||
+static const struct of_device_id em3027_of_match[] = {
|
||||
+ { .compatible = "emmicro,em3027", },
|
||||
+ {}
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, em3027_of_match);
|
||||
+#endif
|
||||
|
||||
static struct i2c_driver em3027_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-em3027",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .of_match_table = of_match_ptr(em3027_of_match),
|
||||
},
|
||||
.probe = &em3027_probe,
|
||||
.id_table = em3027_id,
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
From 6e9344fd8e90ff0bd8e74c15ec7c21eae7d54bd3 Mon Sep 17 00:00:00 2001
|
||||
From: Amitkumar Karwar <akarwar@marvell.com>
|
||||
Date: Thu, 12 Mar 2015 00:38:40 -0700
|
||||
Subject: [PATCH] mwifiex: use del_timer variant in interrupt context
|
||||
|
||||
We might be in interrupt context at few places. So replace
|
||||
del_timer_sync() with del_timer(). This patch fixes a kernel
|
||||
trace problem seen occasionally during our testing.
|
||||
|
||||
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/mwifiex/main.c | 2 +-
|
||||
drivers/net/wireless/mwifiex/sta_event.c | 4 ++--
|
||||
drivers/net/wireless/mwifiex/usb.c | 2 +-
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
|
||||
index 74488ab..42bf884 100644
|
||||
--- a/drivers/net/wireless/mwifiex/main.c
|
||||
+++ b/drivers/net/wireless/mwifiex/main.c
|
||||
@@ -247,7 +247,7 @@ process_start:
|
||||
if (IS_CARD_RX_RCVD(adapter)) {
|
||||
adapter->data_received = false;
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
- del_timer_sync(&adapter->wakeup_timer);
|
||||
+ del_timer(&adapter->wakeup_timer);
|
||||
if (adapter->ps_state == PS_STATE_SLEEP)
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
} else {
|
||||
diff --git a/drivers/net/wireless/mwifiex/sta_event.c b/drivers/net/wireless/mwifiex/sta_event.c
|
||||
index 64c4223..0dc7a1d 100644
|
||||
--- a/drivers/net/wireless/mwifiex/sta_event.c
|
||||
+++ b/drivers/net/wireless/mwifiex/sta_event.c
|
||||
@@ -312,7 +312,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
adapter->pm_wakeup_card_req = false;
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
- del_timer_sync(&adapter->wakeup_timer);
|
||||
+ del_timer(&adapter->wakeup_timer);
|
||||
break;
|
||||
}
|
||||
if (!mwifiex_send_null_packet
|
||||
@@ -327,7 +327,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
adapter->pm_wakeup_card_req = false;
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
- del_timer_sync(&adapter->wakeup_timer);
|
||||
+ del_timer(&adapter->wakeup_timer);
|
||||
|
||||
break;
|
||||
|
||||
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c
|
||||
index 2238730..8beb38c 100644
|
||||
--- a/drivers/net/wireless/mwifiex/usb.c
|
||||
+++ b/drivers/net/wireless/mwifiex/usb.c
|
||||
@@ -1006,7 +1006,7 @@ static int mwifiex_pm_wakeup_card(struct mwifiex_adapter *adapter)
|
||||
{
|
||||
/* Simulation of HS_AWAKE event */
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
- del_timer_sync(&adapter->wakeup_timer);
|
||||
+ del_timer(&adapter->wakeup_timer);
|
||||
adapter->pm_wakeup_card_req = false;
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
|
||||
--
|
||||
2.4.1
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From 6b9a44d0939ca6235c72b811bd55b462d6a0a553 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Hellwig <hch@lst.de>
|
||||
Date: Sun, 22 Feb 2015 08:48:41 -0800
|
||||
Subject: [PATCH] target: use vfs_iter_read/write in fd_do_rw
|
||||
|
||||
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
|
||||
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
|
||||
---
|
||||
drivers/target/target_core_file.c | 31 ++++++++++++++-----------------
|
||||
1 file changed, 14 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
|
||||
index 44620fb..ea6e14e 100644
|
||||
--- a/drivers/target/target_core_file.c
|
||||
+++ b/drivers/target/target_core_file.c
|
||||
@@ -331,36 +331,33 @@ static int fd_do_rw(struct se_cmd *cmd, struct scatterlist *sgl,
|
||||
struct fd_dev *dev = FD_DEV(se_dev);
|
||||
struct file *fd = dev->fd_file;
|
||||
struct scatterlist *sg;
|
||||
- struct iovec *iov;
|
||||
- mm_segment_t old_fs;
|
||||
+ struct iov_iter iter;
|
||||
+ struct bio_vec *bvec;
|
||||
+ ssize_t len = 0;
|
||||
loff_t pos = (cmd->t_task_lba * se_dev->dev_attrib.block_size);
|
||||
int ret = 0, i;
|
||||
|
||||
- iov = kzalloc(sizeof(struct iovec) * sgl_nents, GFP_KERNEL);
|
||||
- if (!iov) {
|
||||
+ bvec = kcalloc(sgl_nents, sizeof(struct bio_vec), GFP_KERNEL);
|
||||
+ if (!bvec) {
|
||||
pr_err("Unable to allocate fd_do_readv iov[]\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for_each_sg(sgl, sg, sgl_nents, i) {
|
||||
- iov[i].iov_len = sg->length;
|
||||
- iov[i].iov_base = kmap(sg_page(sg)) + sg->offset;
|
||||
- }
|
||||
+ bvec[i].bv_page = sg_page(sg);
|
||||
+ bvec[i].bv_len = sg->length;
|
||||
+ bvec[i].bv_offset = sg->offset;
|
||||
|
||||
- old_fs = get_fs();
|
||||
- set_fs(get_ds());
|
||||
+ len += sg->length;
|
||||
+ }
|
||||
|
||||
+ iov_iter_bvec(&iter, ITER_BVEC, bvec, sgl_nents, len);
|
||||
if (is_write)
|
||||
- ret = vfs_writev(fd, &iov[0], sgl_nents, &pos);
|
||||
+ ret = vfs_iter_write(fd, &iter, &pos);
|
||||
else
|
||||
- ret = vfs_readv(fd, &iov[0], sgl_nents, &pos);
|
||||
-
|
||||
- set_fs(old_fs);
|
||||
-
|
||||
- for_each_sg(sgl, sg, sgl_nents, i)
|
||||
- kunmap(sg_page(sg));
|
||||
+ ret = vfs_iter_read(fd, &iter, &pos);
|
||||
|
||||
- kfree(iov);
|
||||
+ kfree(bvec);
|
||||
|
||||
if (is_write) {
|
||||
if (ret < 0 || ret != cmd->data_length) {
|
||||
--
|
||||
2.4.1
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Thu, 26 Mar 2015 12:41:57 -0400
|
||||
Subject: [PATCH] HID: logitech-hidpp: add a module parameter to keep firmware
|
||||
gestures
|
||||
|
||||
The Logitech T650 used to report 3 fingers swipes to the up as a press on the
|
||||
Super key. When we switched the touchpad to the raw mode, we also disable such
|
||||
firmware gesture and some users may rely on it.
|
||||
|
||||
Unfortunately, 3 finger swipes are still not supported in most of the Linux
|
||||
environments, which means that we disabled a feature of the touchpad.
|
||||
|
||||
Allow users to revert the raw reporting mode and keep going with the firmware
|
||||
gestures by providing a new module parameter.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
drivers/hid/hid-logitech-hidpp.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
|
||||
index 2caf5b2f3446..d8ecf20cc838 100644
|
||||
--- a/drivers/hid/hid-logitech-hidpp.c
|
||||
+++ b/drivers/hid/hid-logitech-hidpp.c
|
||||
@@ -28,6 +28,11 @@ MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
|
||||
MODULE_AUTHOR("Nestor Lopez Casado <nlopezcasad@logitech.com>");
|
||||
|
||||
+static bool disable_raw_mode;
|
||||
+module_param(disable_raw_mode, bool, 0644);
|
||||
+MODULE_PARM_DESC(disable_raw_mode,
|
||||
+ "Disable Raw mode reporting for touchpads and keep firmware gestures.");
|
||||
+
|
||||
#define REPORT_ID_HIDPP_SHORT 0x10
|
||||
#define REPORT_ID_HIDPP_LONG 0x11
|
||||
|
||||
@@ -1177,6 +1182,11 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
|
||||
hidpp->quirks = id->driver_data;
|
||||
|
||||
+ if (disable_raw_mode) {
|
||||
+ hidpp->quirks &= ~HIDPP_QUIRK_CLASS_WTP;
|
||||
+ hidpp->quirks &= ~HIDPP_QUIRK_DELAYED_INIT;
|
||||
+ }
|
||||
+
|
||||
if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
|
||||
ret = wtp_allocate(hdev, id);
|
||||
if (ret)
|
|
@ -1,47 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Fri, 6 Mar 2015 11:14:42 -0500
|
||||
Subject: [PATCH] HID: multitouch: add support of clickpads
|
||||
|
||||
Touchpads that have only one button are called clickpads and should
|
||||
be advertised as such by the kernel.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Tested-by: Jason Ekstrand <jason@jlekstrand.net>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index f65e78b46999..ef06dc30b9b1 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -116,6 +116,7 @@ struct mt_device {
|
||||
__u8 touches_by_report; /* how many touches are present in one report:
|
||||
* 1 means we should use a serial protocol
|
||||
* > 1 means hybrid (multitouch) protocol */
|
||||
+ __u8 buttons_count; /* number of physical buttons per touchpad */
|
||||
bool serial_maybe; /* need to check for serial protocol */
|
||||
bool curvalid; /* is the current contact valid? */
|
||||
unsigned mt_flags; /* flags to pass to input-mt */
|
||||
@@ -379,6 +380,10 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
|
||||
}
|
||||
|
||||
+ /* count the buttons on touchpads */
|
||||
+ if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
|
||||
+ td->buttons_count++;
|
||||
+
|
||||
if (usage->usage_index)
|
||||
prev_usage = &field->usage[usage->usage_index - 1];
|
||||
|
||||
@@ -728,6 +733,10 @@ static void mt_touch_input_configured(struct hid_device *hdev,
|
||||
if (cls->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
|
||||
td->mt_flags |= INPUT_MT_DROP_UNUSED;
|
||||
|
||||
+ /* check for clickpads */
|
||||
+ if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
|
||||
+ __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
|
||||
+
|
||||
input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
|
||||
|
||||
td->mt_flags = 0;
|
|
@ -1,43 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 5 Apr 2015 13:44:12 -0700
|
||||
Subject: [PATCH] Input: Revert "Revert "synaptics - use dmax in
|
||||
input_mt_assign_slots""
|
||||
|
||||
This reverts commit 09d042a2eb90 ("Revert "Input: synaptics - use dmax in
|
||||
input_mt_assign_slots"")
|
||||
|
||||
Now that balanced slots assignments seem to be fixed, let's re-enable the
|
||||
use in synaptics.c and wait for users to complain if there are still
|
||||
problems.
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Henrik Rydberg <rydberg@bitmath.org
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 907ac9bdd763..63f001530d4c 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -67,6 +67,9 @@
|
||||
#define X_MAX_POSITIVE 8176
|
||||
#define Y_MAX_POSITIVE 8176
|
||||
|
||||
+/* maximum ABS_MT_POSITION displacement (in mm) */
|
||||
+#define DMAX 10
|
||||
+
|
||||
/*****************************************************************************
|
||||
* Stuff we need even when we do not want native Synaptics support
|
||||
****************************************************************************/
|
||||
@@ -922,7 +925,7 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
|
||||
pos[i].y = synaptics_invert_y(hw[i]->y);
|
||||
}
|
||||
|
||||
- input_mt_assign_slots(dev, slot, pos, nsemi, 0);
|
||||
+ input_mt_assign_slots(dev, slot, pos, nsemi, DMAX * priv->x_res);
|
||||
|
||||
for (i = 0; i < nsemi; i++) {
|
||||
input_mt_slot(dev, slot[i]);
|
|
@ -1,685 +0,0 @@
|
|||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Date: Tue, 14 Apr 2015 10:06:38 -0700
|
||||
Subject: [PATCH] Input: add vmmouse driver
|
||||
|
||||
VMMouse enables low-latency mouse-cursor-movements for VMWare and QEMU
|
||||
guests. By removing the guest cursor and using the host as a guest cursor
|
||||
the cursor movement appears instant although in reality there is some lag.
|
||||
To be able to do this, the host's view of the cursor position must exactly
|
||||
match the guest's view and an absolute pointer device is needed. Enter the
|
||||
VMMouse. While the VMMouse driver has historically been an Xorg user-space
|
||||
driver, implementing it as a kernel imput driver enables rootless Xorg and
|
||||
new compositing display servers for VMware guests.
|
||||
|
||||
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
MAINTAINERS | 8 +
|
||||
drivers/input/mouse/Kconfig | 12 +
|
||||
drivers/input/mouse/Makefile | 1 +
|
||||
drivers/input/mouse/psmouse-base.c | 17 ++
|
||||
drivers/input/mouse/psmouse.h | 1 +
|
||||
drivers/input/mouse/vmmouse.c | 508 +++++++++++++++++++++++++++++++++++++
|
||||
drivers/input/mouse/vmmouse.h | 30 +++
|
||||
7 files changed, 577 insertions(+)
|
||||
create mode 100644 drivers/input/mouse/vmmouse.c
|
||||
create mode 100644 drivers/input/mouse/vmmouse.h
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index efbcb50e4969..a7905203974b 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -10523,6 +10523,14 @@ L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/misc/vmw_balloon.c
|
||||
|
||||
+VMWARE VMMOUSE SUBDRIVER
|
||||
+M: "VMware Graphics" <linux-graphics-maintainer@vmware.com>
|
||||
+M: "VMware, Inc." <pv-drivers@vmware.com>
|
||||
+L: linux-input@vger.kernel.org
|
||||
+S: Maintained
|
||||
+F: drivers/input/mouse/vmmouse.c
|
||||
+F: drivers/input/mouse/vmmouse.h
|
||||
+
|
||||
VMWARE VMXNET3 ETHERNET DRIVER
|
||||
M: Shreyas Bhatewara <sbhatewara@vmware.com>
|
||||
M: "VMware, Inc." <pv-drivers@vmware.com>
|
||||
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
|
||||
index 4658b5d41dd7..7462d2fc8cfe 100644
|
||||
--- a/drivers/input/mouse/Kconfig
|
||||
+++ b/drivers/input/mouse/Kconfig
|
||||
@@ -149,6 +149,18 @@ config MOUSE_PS2_FOCALTECH
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
+config MOUSE_PS2_VMMOUSE
|
||||
+ bool "Virtual mouse (vmmouse)"
|
||||
+ depends on MOUSE_PS2 && X86 && HYPERVISOR_GUEST
|
||||
+ help
|
||||
+ Say Y here if you are running under control of VMware hypervisor
|
||||
+ (ESXi, Workstation or Fusion). Also make sure that when you enable
|
||||
+ this option, you remove the xf86-input-vmmouse user-space driver
|
||||
+ or upgrade it to at least xf86-input-vmmouse 13.0.1, which doesn't
|
||||
+ load in the presence of an in-kernel vmmouse driver.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
config MOUSE_SERIAL
|
||||
tristate "Serial mouse"
|
||||
select SERIO
|
||||
diff --git a/drivers/input/mouse/Makefile b/drivers/input/mouse/Makefile
|
||||
index 8a9c98e76d9c..793300bfbddd 100644
|
||||
--- a/drivers/input/mouse/Makefile
|
||||
+++ b/drivers/input/mouse/Makefile
|
||||
@@ -36,6 +36,7 @@ psmouse-$(CONFIG_MOUSE_PS2_SENTELIC) += sentelic.o
|
||||
psmouse-$(CONFIG_MOUSE_PS2_TRACKPOINT) += trackpoint.o
|
||||
psmouse-$(CONFIG_MOUSE_PS2_TOUCHKIT) += touchkit_ps2.o
|
||||
psmouse-$(CONFIG_MOUSE_PS2_CYPRESS) += cypress_ps2.o
|
||||
+psmouse-$(CONFIG_MOUSE_PS2_VMMOUSE) += vmmouse.o
|
||||
|
||||
elan_i2c-objs := elan_i2c_core.o
|
||||
elan_i2c-$(CONFIG_MOUSE_ELAN_I2C_I2C) += elan_i2c_i2c.o
|
||||
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
|
||||
index 8bc61237bc1b..a279744b3183 100644
|
||||
--- a/drivers/input/mouse/psmouse-base.c
|
||||
+++ b/drivers/input/mouse/psmouse-base.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "sentelic.h"
|
||||
#include "cypress_ps2.h"
|
||||
#include "focaltech.h"
|
||||
+#include "vmmouse.h"
|
||||
|
||||
#define DRIVER_DESC "PS/2 mouse driver"
|
||||
|
||||
@@ -764,6 +765,13 @@ static int psmouse_extensions(struct psmouse *psmouse,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (psmouse_do_detect(vmmouse_detect, psmouse, set_properties) == 0) {
|
||||
+ if (max_proto > PSMOUSE_IMEX) {
|
||||
+ if (!set_properties || vmmouse_init(psmouse) == 0)
|
||||
+ return PSMOUSE_VMMOUSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Try Kensington ThinkingMouse (we try first, because synaptics probe
|
||||
* upsets the thinkingmouse).
|
||||
@@ -1087,6 +1095,15 @@ static const struct psmouse_protocol psmouse_protocols[] = {
|
||||
.init = focaltech_init,
|
||||
},
|
||||
#endif
|
||||
+#ifdef CONFIG_MOUSE_PS2_VMMOUSE
|
||||
+ {
|
||||
+ .type = PSMOUSE_VMMOUSE,
|
||||
+ .name = VMMOUSE_PSNAME,
|
||||
+ .alias = "vmmouse",
|
||||
+ .detect = vmmouse_detect,
|
||||
+ .init = vmmouse_init,
|
||||
+ },
|
||||
+#endif
|
||||
{
|
||||
.type = PSMOUSE_AUTO,
|
||||
.name = "auto",
|
||||
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
|
||||
index d02e1bdc9ae4..ad5a5a1ea872 100644
|
||||
--- a/drivers/input/mouse/psmouse.h
|
||||
+++ b/drivers/input/mouse/psmouse.h
|
||||
@@ -103,6 +103,7 @@ enum psmouse_type {
|
||||
PSMOUSE_SYNAPTICS_RELATIVE,
|
||||
PSMOUSE_CYPRESS,
|
||||
PSMOUSE_FOCALTECH,
|
||||
+ PSMOUSE_VMMOUSE,
|
||||
PSMOUSE_AUTO /* This one should always be last */
|
||||
};
|
||||
|
||||
diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
|
||||
new file mode 100644
|
||||
index 000000000000..e272f06258ce
|
||||
--- /dev/null
|
||||
+++ b/drivers/input/mouse/vmmouse.c
|
||||
@@ -0,0 +1,508 @@
|
||||
+/*
|
||||
+ * Driver for Virtual PS/2 Mouse on VMware and QEMU hypervisors.
|
||||
+ *
|
||||
+ * Copyright (C) 2014, VMware, Inc. 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.
|
||||
+ *
|
||||
+ * Twin device code is hugely inspired by the ALPS driver.
|
||||
+ * Authors:
|
||||
+ * Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
+ * Thomas Hellstrom <thellstrom@vmware.com>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/input.h>
|
||||
+#include <linux/serio.h>
|
||||
+#include <linux/libps2.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <asm/hypervisor.h>
|
||||
+
|
||||
+#include "psmouse.h"
|
||||
+#include "vmmouse.h"
|
||||
+
|
||||
+#define VMMOUSE_PROTO_MAGIC 0x564D5868U
|
||||
+#define VMMOUSE_PROTO_PORT 0x5658
|
||||
+
|
||||
+/*
|
||||
+ * Main commands supported by the vmmouse hypervisor port.
|
||||
+ */
|
||||
+#define VMMOUSE_PROTO_CMD_GETVERSION 10
|
||||
+#define VMMOUSE_PROTO_CMD_ABSPOINTER_DATA 39
|
||||
+#define VMMOUSE_PROTO_CMD_ABSPOINTER_STATUS 40
|
||||
+#define VMMOUSE_PROTO_CMD_ABSPOINTER_COMMAND 41
|
||||
+#define VMMOUSE_PROTO_CMD_ABSPOINTER_RESTRICT 86
|
||||
+
|
||||
+/*
|
||||
+ * Subcommands for VMMOUSE_PROTO_CMD_ABSPOINTER_COMMAND
|
||||
+ */
|
||||
+#define VMMOUSE_CMD_ENABLE 0x45414552U
|
||||
+#define VMMOUSE_CMD_DISABLE 0x000000f5U
|
||||
+#define VMMOUSE_CMD_REQUEST_RELATIVE 0x4c455252U
|
||||
+#define VMMOUSE_CMD_REQUEST_ABSOLUTE 0x53424152U
|
||||
+
|
||||
+#define VMMOUSE_ERROR 0xffff0000U
|
||||
+
|
||||
+#define VMMOUSE_VERSION_ID 0x3442554aU
|
||||
+
|
||||
+#define VMMOUSE_RELATIVE_PACKET 0x00010000U
|
||||
+
|
||||
+#define VMMOUSE_LEFT_BUTTON 0x20
|
||||
+#define VMMOUSE_RIGHT_BUTTON 0x10
|
||||
+#define VMMOUSE_MIDDLE_BUTTON 0x08
|
||||
+
|
||||
+/*
|
||||
+ * VMMouse Restrict command
|
||||
+ */
|
||||
+#define VMMOUSE_RESTRICT_ANY 0x00
|
||||
+#define VMMOUSE_RESTRICT_CPL0 0x01
|
||||
+#define VMMOUSE_RESTRICT_IOPL 0x02
|
||||
+
|
||||
+#define VMMOUSE_MAX_X 0xFFFF
|
||||
+#define VMMOUSE_MAX_Y 0xFFFF
|
||||
+
|
||||
+#define VMMOUSE_VENDOR "VMware"
|
||||
+#define VMMOUSE_NAME "VMMouse"
|
||||
+
|
||||
+/**
|
||||
+ * struct vmmouse_data - private data structure for the vmmouse driver
|
||||
+ *
|
||||
+ * @abs_dev: "Absolute" device used to report absolute mouse movement.
|
||||
+ * @phys: Physical path for the absolute device.
|
||||
+ * @dev_name: Name attribute name for the absolute device.
|
||||
+ */
|
||||
+struct vmmouse_data {
|
||||
+ struct input_dev *abs_dev;
|
||||
+ char phys[32];
|
||||
+ char dev_name[128];
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * Hypervisor-specific bi-directional communication channel
|
||||
+ * implementing the vmmouse protocol. Should never execute on
|
||||
+ * bare metal hardware.
|
||||
+ */
|
||||
+#define VMMOUSE_CMD(cmd, in1, out1, out2, out3, out4) \
|
||||
+({ \
|
||||
+ unsigned long __dummy1, __dummy2; \
|
||||
+ __asm__ __volatile__ ("inl %%dx" : \
|
||||
+ "=a"(out1), \
|
||||
+ "=b"(out2), \
|
||||
+ "=c"(out3), \
|
||||
+ "=d"(out4), \
|
||||
+ "=S"(__dummy1), \
|
||||
+ "=D"(__dummy2) : \
|
||||
+ "a"(VMMOUSE_PROTO_MAGIC), \
|
||||
+ "b"(in1), \
|
||||
+ "c"(VMMOUSE_PROTO_CMD_##cmd), \
|
||||
+ "d"(VMMOUSE_PROTO_PORT) : \
|
||||
+ "memory"); \
|
||||
+})
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_report_button - report button state on the correct input device
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ * @abs_dev: The absolute input device
|
||||
+ * @rel_dev: The relative input device
|
||||
+ * @pref_dev: The preferred device for reporting
|
||||
+ * @code: Button code
|
||||
+ * @value: Button value
|
||||
+ *
|
||||
+ * Report @value and @code on @pref_dev, unless the button is already
|
||||
+ * pressed on the other device, in which case the state is reported on that
|
||||
+ * device.
|
||||
+ */
|
||||
+static void vmmouse_report_button(struct psmouse *psmouse,
|
||||
+ struct input_dev *abs_dev,
|
||||
+ struct input_dev *rel_dev,
|
||||
+ struct input_dev *pref_dev,
|
||||
+ unsigned int code, int value)
|
||||
+{
|
||||
+ if (test_bit(code, abs_dev->key))
|
||||
+ pref_dev = abs_dev;
|
||||
+ else if (test_bit(code, rel_dev->key))
|
||||
+ pref_dev = rel_dev;
|
||||
+
|
||||
+ input_report_key(pref_dev, code, value);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_report_events - process events on the vmmouse communications channel
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * This function pulls events from the vmmouse communications channel and
|
||||
+ * reports them on the correct (absolute or relative) input device. When the
|
||||
+ * communications channel is drained, or if we've processed more than 255
|
||||
+ * psmouse commands, the function returns PSMOUSE_FULL_PACKET. If there is a
|
||||
+ * host- or synchronization error, the function returns PSMOUSE_BAD_DATA in
|
||||
+ * the hope that the caller will reset the communications channel.
|
||||
+ */
|
||||
+static psmouse_ret_t vmmouse_report_events(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct input_dev *rel_dev = psmouse->dev;
|
||||
+ struct vmmouse_data *priv = psmouse->private;
|
||||
+ struct input_dev *abs_dev = priv->abs_dev;
|
||||
+ struct input_dev *pref_dev;
|
||||
+ u32 status, x, y, z;
|
||||
+ u32 dummy1, dummy2, dummy3;
|
||||
+ unsigned int queue_length;
|
||||
+ unsigned int count = 255;
|
||||
+
|
||||
+ while (count--) {
|
||||
+ /* See if we have motion data. */
|
||||
+ VMMOUSE_CMD(ABSPOINTER_STATUS, 0,
|
||||
+ status, dummy1, dummy2, dummy3);
|
||||
+ if ((status & VMMOUSE_ERROR) == VMMOUSE_ERROR) {
|
||||
+ psmouse_err(psmouse, "failed to fetch status data\n");
|
||||
+ /*
|
||||
+ * After a few attempts this will result in
|
||||
+ * reconnect.
|
||||
+ */
|
||||
+ return PSMOUSE_BAD_DATA;
|
||||
+ }
|
||||
+
|
||||
+ queue_length = status & 0xffff;
|
||||
+ if (queue_length == 0)
|
||||
+ break;
|
||||
+
|
||||
+ if (queue_length % 4) {
|
||||
+ psmouse_err(psmouse, "invalid queue length\n");
|
||||
+ return PSMOUSE_BAD_DATA;
|
||||
+ }
|
||||
+
|
||||
+ /* Now get it */
|
||||
+ VMMOUSE_CMD(ABSPOINTER_DATA, 4, status, x, y, z);
|
||||
+
|
||||
+ /*
|
||||
+ * And report what we've got. Prefer to report button
|
||||
+ * events on the same device where we report motion events.
|
||||
+ * This doesn't work well with the mouse wheel, though. See
|
||||
+ * below. Ideally we would want to report that on the
|
||||
+ * preferred device as well.
|
||||
+ */
|
||||
+ if (status & VMMOUSE_RELATIVE_PACKET) {
|
||||
+ pref_dev = rel_dev;
|
||||
+ input_report_rel(rel_dev, REL_X, (s32)x);
|
||||
+ input_report_rel(rel_dev, REL_Y, -(s32)y);
|
||||
+ } else {
|
||||
+ pref_dev = abs_dev;
|
||||
+ input_report_abs(abs_dev, ABS_X, x);
|
||||
+ input_report_abs(abs_dev, ABS_Y, y);
|
||||
+ }
|
||||
+
|
||||
+ /* Xorg seems to ignore wheel events on absolute devices */
|
||||
+ input_report_rel(rel_dev, REL_WHEEL, -(s8)((u8) z));
|
||||
+
|
||||
+ vmmouse_report_button(psmouse, abs_dev, rel_dev,
|
||||
+ pref_dev, BTN_LEFT,
|
||||
+ status & VMMOUSE_LEFT_BUTTON);
|
||||
+ vmmouse_report_button(psmouse, abs_dev, rel_dev,
|
||||
+ pref_dev, BTN_RIGHT,
|
||||
+ status & VMMOUSE_RIGHT_BUTTON);
|
||||
+ vmmouse_report_button(psmouse, abs_dev, rel_dev,
|
||||
+ pref_dev, BTN_MIDDLE,
|
||||
+ status & VMMOUSE_MIDDLE_BUTTON);
|
||||
+ input_sync(abs_dev);
|
||||
+ input_sync(rel_dev);
|
||||
+ }
|
||||
+
|
||||
+ return PSMOUSE_FULL_PACKET;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_process_byte - process data on the ps/2 channel
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * When the ps/2 channel indicates that there is vmmouse data available,
|
||||
+ * call vmmouse channel processing. Otherwise, continue to accept bytes. If
|
||||
+ * there is a synchronization or communication data error, return
|
||||
+ * PSMOUSE_BAD_DATA in the hope that the caller will reset the mouse.
|
||||
+ */
|
||||
+static psmouse_ret_t vmmouse_process_byte(struct psmouse *psmouse)
|
||||
+{
|
||||
+ unsigned char *packet = psmouse->packet;
|
||||
+
|
||||
+ switch (psmouse->pktcnt) {
|
||||
+ case 1:
|
||||
+ return (packet[0] & 0x8) == 0x8 ?
|
||||
+ PSMOUSE_GOOD_DATA : PSMOUSE_BAD_DATA;
|
||||
+
|
||||
+ case 2:
|
||||
+ return PSMOUSE_GOOD_DATA;
|
||||
+
|
||||
+ default:
|
||||
+ return vmmouse_report_events(psmouse);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_disable - Disable vmmouse
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * Tries to disable vmmouse mode.
|
||||
+ */
|
||||
+static void vmmouse_disable(struct psmouse *psmouse)
|
||||
+{
|
||||
+ u32 status;
|
||||
+ u32 dummy1, dummy2, dummy3, dummy4;
|
||||
+
|
||||
+ VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_DISABLE,
|
||||
+ dummy1, dummy2, dummy3, dummy4);
|
||||
+
|
||||
+ VMMOUSE_CMD(ABSPOINTER_STATUS, 0,
|
||||
+ status, dummy1, dummy2, dummy3);
|
||||
+
|
||||
+ if ((status & VMMOUSE_ERROR) != VMMOUSE_ERROR)
|
||||
+ psmouse_warn(psmouse, "failed to disable vmmouse device\n");
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_enable - Enable vmmouse and request absolute mode.
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * Tries to enable vmmouse mode. Performs basic checks and requests
|
||||
+ * absolute vmmouse mode.
|
||||
+ * Returns 0 on success, -ENODEV on failure.
|
||||
+ */
|
||||
+static int vmmouse_enable(struct psmouse *psmouse)
|
||||
+{
|
||||
+ u32 status, version;
|
||||
+ u32 dummy1, dummy2, dummy3, dummy4;
|
||||
+
|
||||
+ /*
|
||||
+ * Try enabling the device. If successful, we should be able to
|
||||
+ * read valid version ID back from it.
|
||||
+ */
|
||||
+ VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_ENABLE,
|
||||
+ dummy1, dummy2, dummy3, dummy4);
|
||||
+
|
||||
+ /*
|
||||
+ * See if version ID can be retrieved.
|
||||
+ */
|
||||
+ VMMOUSE_CMD(ABSPOINTER_STATUS, 0, status, dummy1, dummy2, dummy3);
|
||||
+ if ((status & 0x0000ffff) == 0) {
|
||||
+ psmouse_dbg(psmouse, "empty flags - assuming no device\n");
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+
|
||||
+ VMMOUSE_CMD(ABSPOINTER_DATA, 1 /* single item */,
|
||||
+ version, dummy1, dummy2, dummy3);
|
||||
+ if (version != VMMOUSE_VERSION_ID) {
|
||||
+ psmouse_dbg(psmouse, "Unexpected version value: %u vs %u\n",
|
||||
+ (unsigned) version, VMMOUSE_VERSION_ID);
|
||||
+ vmmouse_disable(psmouse);
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Restrict ioport access, if possible.
|
||||
+ */
|
||||
+ VMMOUSE_CMD(ABSPOINTER_RESTRICT, VMMOUSE_RESTRICT_CPL0,
|
||||
+ dummy1, dummy2, dummy3, dummy4);
|
||||
+
|
||||
+ VMMOUSE_CMD(ABSPOINTER_COMMAND, VMMOUSE_CMD_REQUEST_ABSOLUTE,
|
||||
+ dummy1, dummy2, dummy3, dummy4);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Array of supported hypervisors.
|
||||
+ */
|
||||
+static const struct hypervisor_x86 *vmmouse_supported_hypervisors[] = {
|
||||
+ &x86_hyper_vmware,
|
||||
+#ifdef CONFIG_KVM_GUEST
|
||||
+ &x86_hyper_kvm,
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_check_hypervisor - Check if we're running on a supported hypervisor
|
||||
+ */
|
||||
+static bool vmmouse_check_hypervisor(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(vmmouse_supported_hypervisors); i++)
|
||||
+ if (vmmouse_supported_hypervisors[i] == x86_hyper)
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_detect - Probe whether vmmouse is available
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ * @set_properties: Whether to set psmouse name and vendor
|
||||
+ *
|
||||
+ * Returns 0 if vmmouse channel is available. Negative error code if not.
|
||||
+ */
|
||||
+int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
|
||||
+{
|
||||
+ u32 response, version, dummy1, dummy2;
|
||||
+
|
||||
+ if (!vmmouse_check_hypervisor()) {
|
||||
+ psmouse_dbg(psmouse,
|
||||
+ "VMMouse not running on supported hypervisor.\n");
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+
|
||||
+ if (!request_region(VMMOUSE_PROTO_PORT, 4, "vmmouse")) {
|
||||
+ psmouse_dbg(psmouse, "VMMouse port in use.\n");
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+
|
||||
+ /* Check if the device is present */
|
||||
+ response = ~VMMOUSE_PROTO_MAGIC;
|
||||
+ VMMOUSE_CMD(GETVERSION, 0, version, response, dummy1, dummy2);
|
||||
+ if (response != VMMOUSE_PROTO_MAGIC || version == 0xffffffffU) {
|
||||
+ release_region(VMMOUSE_PROTO_PORT, 4);
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+
|
||||
+ if (set_properties) {
|
||||
+ psmouse->vendor = VMMOUSE_VENDOR;
|
||||
+ psmouse->name = VMMOUSE_NAME;
|
||||
+ psmouse->model = version;
|
||||
+ }
|
||||
+
|
||||
+ release_region(VMMOUSE_PROTO_PORT, 4);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_disconnect - Take down vmmouse driver
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * Takes down vmmouse driver and frees resources set up in vmmouse_init().
|
||||
+ */
|
||||
+static void vmmouse_disconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct vmmouse_data *priv = psmouse->private;
|
||||
+
|
||||
+ vmmouse_disable(psmouse);
|
||||
+ psmouse_reset(psmouse);
|
||||
+ input_unregister_device(priv->abs_dev);
|
||||
+ kfree(priv);
|
||||
+ release_region(VMMOUSE_PROTO_PORT, 4);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_reconnect - Reset the ps/2 - and vmmouse connections
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * Attempts to reset the mouse connections. Returns 0 on success and
|
||||
+ * -1 on failure.
|
||||
+ */
|
||||
+static int vmmouse_reconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ psmouse_reset(psmouse);
|
||||
+ vmmouse_disable(psmouse);
|
||||
+ error = vmmouse_enable(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse,
|
||||
+ "Unable to re-enable mouse when reconnecting, err: %d\n",
|
||||
+ error);
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * vmmouse_init - Initialize the vmmouse driver
|
||||
+ *
|
||||
+ * @psmouse: Pointer to the psmouse struct
|
||||
+ *
|
||||
+ * Requests the device and tries to enable vmmouse mode.
|
||||
+ * If successful, sets up the input device for relative movement events.
|
||||
+ * It also allocates another input device and sets it up for absolute motion
|
||||
+ * events. Returns 0 on success and -1 on failure.
|
||||
+ */
|
||||
+int vmmouse_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct vmmouse_data *priv;
|
||||
+ struct input_dev *rel_dev = psmouse->dev, *abs_dev;
|
||||
+ int error;
|
||||
+
|
||||
+ if (!request_region(VMMOUSE_PROTO_PORT, 4, "vmmouse")) {
|
||||
+ psmouse_dbg(psmouse, "VMMouse port in use.\n");
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+
|
||||
+ psmouse_reset(psmouse);
|
||||
+ error = vmmouse_enable(psmouse);
|
||||
+ if (error)
|
||||
+ goto release_region;
|
||||
+
|
||||
+ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
+ abs_dev = input_allocate_device();
|
||||
+ if (!priv || !abs_dev) {
|
||||
+ error = -ENOMEM;
|
||||
+ goto init_fail;
|
||||
+ }
|
||||
+
|
||||
+ priv->abs_dev = abs_dev;
|
||||
+ psmouse->private = priv;
|
||||
+
|
||||
+ input_set_capability(rel_dev, EV_REL, REL_WHEEL);
|
||||
+
|
||||
+ /* Set up and register absolute device */
|
||||
+ snprintf(priv->phys, sizeof(priv->phys), "%s/input1",
|
||||
+ psmouse->ps2dev.serio->phys);
|
||||
+
|
||||
+ /* Mimic name setup for relative device in psmouse-base.c */
|
||||
+ snprintf(priv->dev_name, sizeof(priv->dev_name), "%s %s %s",
|
||||
+ VMMOUSE_PSNAME, VMMOUSE_VENDOR, VMMOUSE_NAME);
|
||||
+ abs_dev->phys = priv->phys;
|
||||
+ abs_dev->name = priv->dev_name;
|
||||
+ abs_dev->id.bustype = BUS_I8042;
|
||||
+ abs_dev->id.vendor = 0x0002;
|
||||
+ abs_dev->id.product = PSMOUSE_VMMOUSE;
|
||||
+ abs_dev->id.version = psmouse->model;
|
||||
+ abs_dev->dev.parent = &psmouse->ps2dev.serio->dev;
|
||||
+
|
||||
+ error = input_register_device(priv->abs_dev);
|
||||
+ if (error)
|
||||
+ goto init_fail;
|
||||
+
|
||||
+ /* Set absolute device capabilities */
|
||||
+ input_set_capability(abs_dev, EV_KEY, BTN_LEFT);
|
||||
+ input_set_capability(abs_dev, EV_KEY, BTN_RIGHT);
|
||||
+ input_set_capability(abs_dev, EV_KEY, BTN_MIDDLE);
|
||||
+ input_set_capability(abs_dev, EV_ABS, ABS_X);
|
||||
+ input_set_capability(abs_dev, EV_ABS, ABS_Y);
|
||||
+ input_set_abs_params(abs_dev, ABS_X, 0, VMMOUSE_MAX_X, 0, 0);
|
||||
+ input_set_abs_params(abs_dev, ABS_Y, 0, VMMOUSE_MAX_Y, 0, 0);
|
||||
+
|
||||
+ psmouse->protocol_handler = vmmouse_process_byte;
|
||||
+ psmouse->disconnect = vmmouse_disconnect;
|
||||
+ psmouse->reconnect = vmmouse_reconnect;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+init_fail:
|
||||
+ vmmouse_disable(psmouse);
|
||||
+ psmouse_reset(psmouse);
|
||||
+ input_free_device(abs_dev);
|
||||
+ kfree(priv);
|
||||
+ psmouse->private = NULL;
|
||||
+
|
||||
+release_region:
|
||||
+ release_region(VMMOUSE_PROTO_PORT, 4);
|
||||
+
|
||||
+ return error;
|
||||
+}
|
||||
diff --git a/drivers/input/mouse/vmmouse.h b/drivers/input/mouse/vmmouse.h
|
||||
new file mode 100644
|
||||
index 000000000000..6f126017a24c
|
||||
--- /dev/null
|
||||
+++ b/drivers/input/mouse/vmmouse.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+/*
|
||||
+ * Driver for Virtual PS/2 Mouse on VMware and QEMU hypervisors.
|
||||
+ *
|
||||
+ * Copyright (C) 2014, VMware, Inc. 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.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _VMMOUSE_H
|
||||
+#define _VMMOUSE_H
|
||||
+
|
||||
+#ifdef CONFIG_MOUSE_PS2_VMMOUSE
|
||||
+#define VMMOUSE_PSNAME "VirtualPS/2"
|
||||
+
|
||||
+int vmmouse_detect(struct psmouse *psmouse, bool set_properties);
|
||||
+int vmmouse_init(struct psmouse *psmouse);
|
||||
+#else
|
||||
+static inline int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
|
||||
+{
|
||||
+ return -ENOSYS;
|
||||
+}
|
||||
+static inline int vmmouse_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ return -ENOSYS;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
|
@ -1,220 +0,0 @@
|
|||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Tue, 7 Apr 2015 16:30:01 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - add support for Google Pixel 2
|
||||
|
||||
This change allows atmel_mxt_ts to bind to ACPI-enumerated devices in
|
||||
Google Pixel 2 (2015).
|
||||
|
||||
While newer version of ACPI standard allow use of device-tree-like
|
||||
properties in device descriptions, the version of ACPI implemented in
|
||||
Google BIOS does not support them, and we have to resort to DMI data to
|
||||
specify exact characteristics of the devices (touchpad vs. touchscreen,
|
||||
GPIO to button mapping, etc).
|
||||
|
||||
Pixel 1 continues to use i2c devices and platform data created by
|
||||
chromeos-laptop driver, since ACPI does not enumerate them.
|
||||
|
||||
Reviewed-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 141 ++++++++++++++++++++++++++++---
|
||||
1 file changed, 130 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 2875ddf37289..40b98dda8f38 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -14,6 +14,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/dmi.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/completion.h>
|
||||
@@ -2371,7 +2373,7 @@ static void mxt_input_close(struct input_dev *dev)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
+static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
{
|
||||
struct mxt_platform_data *pdata;
|
||||
u32 *keymap;
|
||||
@@ -2379,7 +2381,7 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
int proplen, i, ret;
|
||||
|
||||
if (!client->dev.of_node)
|
||||
- return ERR_PTR(-ENODEV);
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
|
||||
pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
@@ -2410,25 +2412,132 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
return pdata;
|
||||
}
|
||||
#else
|
||||
-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
+static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
|
||||
{
|
||||
- dev_dbg(&client->dev, "No platform data specified\n");
|
||||
- return ERR_PTR(-EINVAL);
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_ACPI
|
||||
+
|
||||
+struct mxt_acpi_platform_data {
|
||||
+ const char *hid;
|
||||
+ struct mxt_platform_data pdata;
|
||||
+};
|
||||
+
|
||||
+static unsigned int samus_touchpad_buttons[] = {
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_RESERVED,
|
||||
+ BTN_LEFT
|
||||
+};
|
||||
+
|
||||
+static struct mxt_acpi_platform_data samus_platform_data[] = {
|
||||
+ {
|
||||
+ /* Touchpad */
|
||||
+ .hid = "ATML0000",
|
||||
+ .pdata = {
|
||||
+ .t19_num_keys = ARRAY_SIZE(samus_touchpad_buttons),
|
||||
+ .t19_keymap = samus_touchpad_buttons,
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ /* Touchscreen */
|
||||
+ .hid = "ATML0001",
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct dmi_system_id mxt_dmi_table[] = {
|
||||
+ {
|
||||
+ /* 2015 Google Pixel */
|
||||
+ .ident = "Chromebook Pixel 2",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
|
||||
+ },
|
||||
+ .driver_data = samus_platform_data,
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
|
||||
+{
|
||||
+ struct acpi_device *adev;
|
||||
+ const struct dmi_system_id *system_id;
|
||||
+ const struct mxt_acpi_platform_data *acpi_pdata;
|
||||
+
|
||||
+ /*
|
||||
+ * Ignore ACPI devices representing bootloader mode.
|
||||
+ *
|
||||
+ * This is a bit of a hack: Google Chromebook BIOS creates ACPI
|
||||
+ * devices for both application and bootloader modes, but we are
|
||||
+ * interested in application mode only (if device is in bootloader
|
||||
+ * mode we'll end up switching into application anyway). So far
|
||||
+ * application mode addresses were all above 0x40, so we'll use it
|
||||
+ * as a threshold.
|
||||
+ */
|
||||
+ if (client->addr < 0x40)
|
||||
+ return ERR_PTR(-ENXIO);
|
||||
+
|
||||
+ adev = ACPI_COMPANION(&client->dev);
|
||||
+ if (!adev)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ system_id = dmi_first_match(mxt_dmi_table);
|
||||
+ if (!system_id)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ acpi_pdata = system_id->driver_data;
|
||||
+ if (!acpi_pdata)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ while (acpi_pdata->hid) {
|
||||
+ if (!strcmp(acpi_device_hid(adev), acpi_pdata->hid))
|
||||
+ return &acpi_pdata->pdata;
|
||||
+
|
||||
+ acpi_pdata++;
|
||||
+ }
|
||||
+
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+}
|
||||
+#else
|
||||
+static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
|
||||
+{
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
}
|
||||
#endif
|
||||
|
||||
+static const struct mxt_platform_data *
|
||||
+mxt_get_platform_data(struct i2c_client *client)
|
||||
+{
|
||||
+ const struct mxt_platform_data *pdata;
|
||||
+
|
||||
+ pdata = dev_get_platdata(&client->dev);
|
||||
+ if (pdata)
|
||||
+ return pdata;
|
||||
+
|
||||
+ pdata = mxt_parse_dt(client);
|
||||
+ if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
|
||||
+ return pdata;
|
||||
+
|
||||
+ pdata = mxt_parse_acpi(client);
|
||||
+ if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
|
||||
+ return pdata;
|
||||
+
|
||||
+ dev_err(&client->dev, "No platform data specified\n");
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+}
|
||||
+
|
||||
static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
{
|
||||
struct mxt_data *data;
|
||||
const struct mxt_platform_data *pdata;
|
||||
int error;
|
||||
|
||||
- pdata = dev_get_platdata(&client->dev);
|
||||
- if (!pdata) {
|
||||
- pdata = mxt_parse_dt(client);
|
||||
- if (IS_ERR(pdata))
|
||||
- return PTR_ERR(pdata);
|
||||
- }
|
||||
+ pdata = mxt_get_platform_data(client);
|
||||
+ if (IS_ERR(pdata))
|
||||
+ return PTR_ERR(pdata);
|
||||
|
||||
data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
|
||||
if (!data) {
|
||||
@@ -2536,6 +2645,15 @@ static const struct of_device_id mxt_of_match[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mxt_of_match);
|
||||
|
||||
+#ifdef CONFIG_ACPI
|
||||
+static const struct acpi_device_id mxt_acpi_id[] = {
|
||||
+ { "ATML0000", 0 }, /* Touchpad */
|
||||
+ { "ATML0001", 0 }, /* Touchscreen */
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
|
||||
+#endif
|
||||
+
|
||||
static const struct i2c_device_id mxt_id[] = {
|
||||
{ "qt602240_ts", 0 },
|
||||
{ "atmel_mxt_ts", 0 },
|
||||
@@ -2550,6 +2668,7 @@ static struct i2c_driver mxt_driver = {
|
||||
.name = "atmel_mxt_ts",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(mxt_of_match),
|
||||
+ .acpi_match_table = ACPI_PTR(mxt_acpi_id),
|
||||
.pm = &mxt_pm_ops,
|
||||
},
|
||||
.probe = mxt_probe,
|
|
@ -1,512 +0,0 @@
|
|||
From: Nick Dyer <nick.dyer@itdev.co.uk>
|
||||
Date: Mon, 6 Apr 2015 11:25:13 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - implement support for T100 touch object
|
||||
|
||||
Add support for the new T100 object which replaces the previous T9
|
||||
multitouch touchscreen object in recent maXTouch devices. T100 provides
|
||||
improved reporting with selectable auxiliary information, and a type field
|
||||
for hover/stylus/glove reporting.
|
||||
|
||||
The hovering finger support was based on Chung-Yih's work in the ChromiumOS
|
||||
downstream kernel:
|
||||
|
||||
https://chromium-review.googlesource.com/#/c/219280/
|
||||
|
||||
Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
|
||||
Acked-by: Yufeng Shen <miletus@chromium.org>
|
||||
[javier: Factor out T9 and T100 init functions and rework hover support]
|
||||
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 345 ++++++++++++++++++++++++++++---
|
||||
1 file changed, 318 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 95ee92a91bd2..1b3b845d92f4 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/slab.h>
|
||||
+#include <asm/unaligned.h>
|
||||
|
||||
/* Version */
|
||||
#define MXT_VER_20 20
|
||||
@@ -79,6 +80,7 @@
|
||||
#define MXT_SPT_DIGITIZER_T43 43
|
||||
#define MXT_SPT_MESSAGECOUNT_T44 44
|
||||
#define MXT_SPT_CTECONFIG_T46 46
|
||||
+#define MXT_TOUCH_MULTITOUCHSCREEN_T100 100
|
||||
|
||||
/* MXT_GEN_MESSAGE_T5 object */
|
||||
#define MXT_RPTID_NOMSG 0xff
|
||||
@@ -185,6 +187,36 @@ struct t9_range {
|
||||
#define MXT_RESET_VALUE 0x01
|
||||
#define MXT_BACKUP_VALUE 0x55
|
||||
|
||||
+/* T100 Multiple Touch Touchscreen */
|
||||
+#define MXT_T100_CTRL 0
|
||||
+#define MXT_T100_CFG1 1
|
||||
+#define MXT_T100_TCHAUX 3
|
||||
+#define MXT_T100_XRANGE 13
|
||||
+#define MXT_T100_YRANGE 24
|
||||
+
|
||||
+#define MXT_T100_CFG_SWITCHXY BIT(5)
|
||||
+
|
||||
+#define MXT_T100_TCHAUX_VECT BIT(0)
|
||||
+#define MXT_T100_TCHAUX_AMPL BIT(1)
|
||||
+#define MXT_T100_TCHAUX_AREA BIT(2)
|
||||
+
|
||||
+#define MXT_T100_DETECT BIT(7)
|
||||
+#define MXT_T100_TYPE_MASK 0x70
|
||||
+
|
||||
+enum t100_type {
|
||||
+ MXT_T100_TYPE_FINGER = 1,
|
||||
+ MXT_T100_TYPE_PASSIVE_STYLUS = 2,
|
||||
+ MXT_T100_TYPE_HOVERING_FINGER = 4,
|
||||
+ MXT_T100_TYPE_GLOVE = 5,
|
||||
+ MXT_T100_TYPE_LARGE_TOUCH = 6,
|
||||
+};
|
||||
+
|
||||
+#define MXT_DISTANCE_ACTIVE_TOUCH 0
|
||||
+#define MXT_DISTANCE_HOVERING 1
|
||||
+
|
||||
+#define MXT_TOUCH_MAJOR_DEFAULT 1
|
||||
+#define MXT_PRESSURE_DEFAULT 1
|
||||
+
|
||||
/* Delay times */
|
||||
#define MXT_BACKUP_TIME 50 /* msec */
|
||||
#define MXT_RESET_TIME 200 /* msec */
|
||||
@@ -244,6 +276,9 @@ struct mxt_data {
|
||||
unsigned int max_y;
|
||||
bool in_bootloader;
|
||||
u16 mem_size;
|
||||
+ u8 t100_aux_ampl;
|
||||
+ u8 t100_aux_area;
|
||||
+ u8 t100_aux_vect;
|
||||
u8 max_reportid;
|
||||
u32 config_crc;
|
||||
u32 info_crc;
|
||||
@@ -253,6 +288,7 @@ struct mxt_data {
|
||||
bool update_input;
|
||||
u8 last_message_count;
|
||||
u8 num_touchids;
|
||||
+ u8 multitouch;
|
||||
|
||||
/* Cached parameters from object table */
|
||||
u16 T5_address;
|
||||
@@ -264,6 +300,8 @@ struct mxt_data {
|
||||
u8 T9_reportid_max;
|
||||
u8 T19_reportid;
|
||||
u16 T44_address;
|
||||
+ u8 T100_reportid_min;
|
||||
+ u8 T100_reportid_max;
|
||||
|
||||
/* for fw update in bootloader */
|
||||
struct completion bl_completion;
|
||||
@@ -771,6 +809,114 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
|
||||
data->update_input = true;
|
||||
}
|
||||
|
||||
+static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
|
||||
+{
|
||||
+ struct device *dev = &data->client->dev;
|
||||
+ struct input_dev *input_dev = data->input_dev;
|
||||
+ int id;
|
||||
+ u8 status;
|
||||
+ u8 type = 0;
|
||||
+ u16 x;
|
||||
+ u16 y;
|
||||
+ int distance = 0;
|
||||
+ int tool = 0;
|
||||
+ u8 major = 0;
|
||||
+ u8 pressure = 0;
|
||||
+ u8 orientation = 0;
|
||||
+
|
||||
+ id = message[0] - data->T100_reportid_min - 2;
|
||||
+
|
||||
+ /* ignore SCRSTATUS events */
|
||||
+ if (id < 0)
|
||||
+ return;
|
||||
+
|
||||
+ status = message[1];
|
||||
+ x = get_unaligned_le16(&message[2]);
|
||||
+ y = get_unaligned_le16(&message[4]);
|
||||
+
|
||||
+ if (status & MXT_T100_DETECT) {
|
||||
+ type = (status & MXT_T100_TYPE_MASK) >> 4;
|
||||
+
|
||||
+ switch (type) {
|
||||
+ case MXT_T100_TYPE_HOVERING_FINGER:
|
||||
+ tool = MT_TOOL_FINGER;
|
||||
+ distance = MXT_DISTANCE_HOVERING;
|
||||
+
|
||||
+ if (data->t100_aux_vect)
|
||||
+ orientation = message[data->t100_aux_vect];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_FINGER:
|
||||
+ case MXT_T100_TYPE_GLOVE:
|
||||
+ tool = MT_TOOL_FINGER;
|
||||
+ distance = MXT_DISTANCE_ACTIVE_TOUCH;
|
||||
+
|
||||
+ if (data->t100_aux_area)
|
||||
+ major = message[data->t100_aux_area];
|
||||
+
|
||||
+ if (data->t100_aux_ampl)
|
||||
+ pressure = message[data->t100_aux_ampl];
|
||||
+
|
||||
+ if (data->t100_aux_vect)
|
||||
+ orientation = message[data->t100_aux_vect];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_PASSIVE_STYLUS:
|
||||
+ tool = MT_TOOL_PEN;
|
||||
+
|
||||
+ /*
|
||||
+ * Passive stylus is reported with size zero so
|
||||
+ * hardcode.
|
||||
+ */
|
||||
+ major = MXT_TOUCH_MAJOR_DEFAULT;
|
||||
+
|
||||
+ if (data->t100_aux_ampl)
|
||||
+ pressure = message[data->t100_aux_ampl];
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_T100_TYPE_LARGE_TOUCH:
|
||||
+ /* Ignore suppressed touch */
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ dev_dbg(dev, "Unexpected T100 type\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Values reported should be non-zero if tool is touching the
|
||||
+ * device
|
||||
+ */
|
||||
+ if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER)
|
||||
+ pressure = MXT_PRESSURE_DEFAULT;
|
||||
+
|
||||
+ input_mt_slot(input_dev, id);
|
||||
+
|
||||
+ if (status & MXT_T100_DETECT) {
|
||||
+ dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",
|
||||
+ id, type, x, y, major, pressure, orientation);
|
||||
+
|
||||
+ input_mt_report_slot_state(input_dev, tool, 1);
|
||||
+ input_report_abs(input_dev, ABS_MT_POSITION_X, x);
|
||||
+ input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
|
||||
+ input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
|
||||
+ input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
|
||||
+ input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
|
||||
+ input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);
|
||||
+ } else {
|
||||
+ dev_dbg(dev, "[%u] release\n", id);
|
||||
+
|
||||
+ /* close out slot */
|
||||
+ input_mt_report_slot_state(input_dev, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ data->update_input = true;
|
||||
+}
|
||||
+
|
||||
static int mxt_proc_message(struct mxt_data *data, u8 *message)
|
||||
{
|
||||
u8 report_id = message[0];
|
||||
@@ -786,9 +932,12 @@ static int mxt_proc_message(struct mxt_data *data, u8 *message)
|
||||
* is not yet registered.
|
||||
*/
|
||||
mxt_dump_message(data, message);
|
||||
- } else if (report_id >= data->T9_reportid_min
|
||||
- && report_id <= data->T9_reportid_max) {
|
||||
+ } else if (report_id >= data->T9_reportid_min &&
|
||||
+ report_id <= data->T9_reportid_max) {
|
||||
mxt_proc_t9_message(data, message);
|
||||
+ } else if (report_id >= data->T100_reportid_min &&
|
||||
+ report_id <= data->T100_reportid_max) {
|
||||
+ mxt_proc_t100_message(data, message);
|
||||
} else if (report_id == data->T19_reportid) {
|
||||
mxt_input_button(data, message);
|
||||
data->update_input = true;
|
||||
@@ -1411,6 +1560,8 @@ static void mxt_free_object_table(struct mxt_data *data)
|
||||
data->T9_reportid_max = 0;
|
||||
data->T19_reportid = 0;
|
||||
data->T44_address = 0;
|
||||
+ data->T100_reportid_min = 0;
|
||||
+ data->T100_reportid_max = 0;
|
||||
data->max_reportid = 0;
|
||||
}
|
||||
|
||||
@@ -1487,6 +1638,7 @@ static int mxt_get_object_table(struct mxt_data *data)
|
||||
data->T7_address = object->start_address;
|
||||
break;
|
||||
case MXT_TOUCH_MULTI_T9:
|
||||
+ data->multitouch = MXT_TOUCH_MULTI_T9;
|
||||
data->T9_reportid_min = min_id;
|
||||
data->T9_reportid_max = max_id;
|
||||
data->num_touchids = object->num_report_ids
|
||||
@@ -1498,6 +1650,13 @@ static int mxt_get_object_table(struct mxt_data *data)
|
||||
case MXT_SPT_GPIOPWM_T19:
|
||||
data->T19_reportid = min_id;
|
||||
break;
|
||||
+ case MXT_TOUCH_MULTITOUCHSCREEN_T100:
|
||||
+ data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100;
|
||||
+ data->T100_reportid_min = min_id;
|
||||
+ data->T100_reportid_max = max_id;
|
||||
+ /* first two report IDs reserved */
|
||||
+ data->num_touchids = object->num_report_ids - 2;
|
||||
+ break;
|
||||
}
|
||||
|
||||
end_address = object->start_address
|
||||
@@ -1582,10 +1741,88 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int mxt_read_t100_config(struct mxt_data *data)
|
||||
+{
|
||||
+ struct i2c_client *client = data->client;
|
||||
+ int error;
|
||||
+ struct mxt_object *object;
|
||||
+ u16 range_x, range_y;
|
||||
+ u8 cfg, tchaux;
|
||||
+ u8 aux;
|
||||
+
|
||||
+ object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100);
|
||||
+ if (!object)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_XRANGE,
|
||||
+ sizeof(range_x), &range_x);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ le16_to_cpus(&range_x);
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_YRANGE,
|
||||
+ sizeof(range_y), &range_y);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ le16_to_cpus(&range_y);
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_CFG1,
|
||||
+ 1, &cfg);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ error = __mxt_read_reg(client,
|
||||
+ object->start_address + MXT_T100_TCHAUX,
|
||||
+ 1, &tchaux);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
+ /* Handle default values */
|
||||
+ if (range_x == 0)
|
||||
+ range_x = 1023;
|
||||
+
|
||||
+ if (range_y == 0)
|
||||
+ range_y = 1023;
|
||||
+
|
||||
+ if (cfg & MXT_T100_CFG_SWITCHXY) {
|
||||
+ data->max_x = range_y;
|
||||
+ data->max_y = range_x;
|
||||
+ } else {
|
||||
+ data->max_x = range_x;
|
||||
+ data->max_y = range_y;
|
||||
+ }
|
||||
+
|
||||
+ /* allocate aux bytes */
|
||||
+ aux = 6;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_VECT)
|
||||
+ data->t100_aux_vect = aux++;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_AMPL)
|
||||
+ data->t100_aux_ampl = aux++;
|
||||
+
|
||||
+ if (tchaux & MXT_T100_TCHAUX_AREA)
|
||||
+ data->t100_aux_area = aux++;
|
||||
+
|
||||
+ dev_dbg(&client->dev,
|
||||
+ "T100 aux mappings vect:%u ampl:%u area:%u\n",
|
||||
+ data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
|
||||
+
|
||||
+ dev_info(&client->dev,
|
||||
+ "T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int mxt_input_open(struct input_dev *dev);
|
||||
static void mxt_input_close(struct input_dev *dev);
|
||||
|
||||
-static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
+static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
{
|
||||
struct device *dev = &data->client->dev;
|
||||
const struct mxt_platform_data *pdata = data->pdata;
|
||||
@@ -1595,9 +1832,25 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
unsigned int mt_flags = 0;
|
||||
int i;
|
||||
|
||||
- error = mxt_read_t9_resolution(data);
|
||||
- if (error)
|
||||
- dev_warn(dev, "Failed to initialize T9 resolution\n");
|
||||
+ switch (data->multitouch) {
|
||||
+ case MXT_TOUCH_MULTI_T9:
|
||||
+ num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
|
||||
+ error = mxt_read_t9_resolution(data);
|
||||
+ if (error)
|
||||
+ dev_warn(dev, "Failed to initialize T9 resolution\n");
|
||||
+ break;
|
||||
+
|
||||
+ case MXT_TOUCH_MULTITOUCHSCREEN_T100:
|
||||
+ num_mt_slots = data->num_touchids;
|
||||
+ error = mxt_read_t100_config(data);
|
||||
+ if (error)
|
||||
+ dev_warn(dev, "Failed to read T100 config\n");
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ dev_err(dev, "Invalid multitouch object\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
input_dev = input_allocate_device();
|
||||
if (!input_dev) {
|
||||
@@ -1612,9 +1865,7 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
input_dev->open = mxt_input_open;
|
||||
input_dev->close = mxt_input_close;
|
||||
|
||||
- __set_bit(EV_ABS, input_dev->evbit);
|
||||
- __set_bit(EV_KEY, input_dev->evbit);
|
||||
- __set_bit(BTN_TOUCH, input_dev->keybit);
|
||||
+ input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
|
||||
|
||||
if (pdata->t19_num_keys) {
|
||||
__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
@@ -1637,29 +1888,67 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data)
|
||||
}
|
||||
|
||||
/* For single touch */
|
||||
- input_set_abs_params(input_dev, ABS_X,
|
||||
- 0, data->max_x, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_Y,
|
||||
- 0, data->max_y, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_PRESSURE,
|
||||
- 0, 255, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl)) {
|
||||
+ input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
|
||||
+ }
|
||||
|
||||
/* For multi touch */
|
||||
- num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
|
||||
error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
|
||||
if (error) {
|
||||
dev_err(dev, "Error %d initialising slots\n", error);
|
||||
goto err_free_mem;
|
||||
}
|
||||
|
||||
- input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
|
||||
- 0, MXT_MAX_AREA, 0, 0);
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
|
||||
+ 0, MT_TOOL_MAX, 0, 0);
|
||||
+ input_set_abs_params(input_dev, ABS_MT_DISTANCE,
|
||||
+ MXT_DISTANCE_ACTIVE_TOUCH,
|
||||
+ MXT_DISTANCE_HOVERING,
|
||||
+ 0, 0);
|
||||
+ }
|
||||
+
|
||||
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
|
||||
0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
||||
0, data->max_y, 0, 0);
|
||||
- input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
- 0, 255, 0, 0);
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_area)) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
|
||||
+ 0, MXT_MAX_AREA, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
|
||||
+ (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl)) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_vect) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_ampl) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
|
||||
+ data->t100_aux_vect) {
|
||||
+ input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
|
||||
+ 0, 255, 0, 0);
|
||||
+ }
|
||||
|
||||
input_set_drvdata(input_dev, data);
|
||||
|
||||
@@ -1765,9 +2054,13 @@ static int mxt_configure_objects(struct mxt_data *data,
|
||||
dev_warn(dev, "Error %d updating config\n", error);
|
||||
}
|
||||
|
||||
- error = mxt_initialize_t9_input_device(data);
|
||||
- if (error)
|
||||
- return error;
|
||||
+ if (data->multitouch) {
|
||||
+ error = mxt_initialize_input_device(data);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+ } else {
|
||||
+ dev_warn(dev, "No touch object detected\n");
|
||||
+ }
|
||||
|
||||
dev_info(dev,
|
||||
"Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
|
||||
@@ -2044,15 +2337,13 @@ static const struct attribute_group mxt_attr_group = {
|
||||
static void mxt_start(struct mxt_data *data)
|
||||
{
|
||||
/* Touch enable */
|
||||
- mxt_write_object(data,
|
||||
- MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83);
|
||||
+ mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0x83);
|
||||
}
|
||||
|
||||
static void mxt_stop(struct mxt_data *data)
|
||||
{
|
||||
/* Touch disable */
|
||||
- mxt_write_object(data,
|
||||
- MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
|
||||
+ mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0);
|
||||
}
|
||||
|
||||
static int mxt_input_open(struct input_dev *dev)
|
|
@ -1,100 +0,0 @@
|
|||
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
Date: Mon, 6 Apr 2015 13:10:30 -0700
|
||||
Subject: [PATCH] Input: atmel_mxt_ts - split out touchpad initialisation logic
|
||||
|
||||
If the "linux,gpio-keymap" DT property is defined, the T19 keys are
|
||||
configured and the device is setup as a touchpad rather than a touchscreen.
|
||||
The logic is part of the input device initialization routine but it can be
|
||||
factored out to its own function to simplify the former.
|
||||
|
||||
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
|
||||
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/touchscreen/atmel_mxt_ts.c | 52 ++++++++++++++++++--------------
|
||||
1 file changed, 30 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
index 1b3b845d92f4..2875ddf37289 100644
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -1822,15 +1822,37 @@ static int mxt_read_t100_config(struct mxt_data *data)
|
||||
static int mxt_input_open(struct input_dev *dev);
|
||||
static void mxt_input_close(struct input_dev *dev);
|
||||
|
||||
+static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
|
||||
+ struct mxt_data *data)
|
||||
+{
|
||||
+ const struct mxt_platform_data *pdata = data->pdata;
|
||||
+ int i;
|
||||
+
|
||||
+ input_dev->name = "Atmel maXTouch Touchpad";
|
||||
+
|
||||
+ __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
+
|
||||
+ input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_MT_POSITION_X,
|
||||
+ MXT_PIXELS_PER_MM);
|
||||
+ input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
||||
+ MXT_PIXELS_PER_MM);
|
||||
+
|
||||
+ for (i = 0; i < pdata->t19_num_keys; i++)
|
||||
+ if (pdata->t19_keymap[i] != KEY_RESERVED)
|
||||
+ input_set_capability(input_dev, EV_KEY,
|
||||
+ pdata->t19_keymap[i]);
|
||||
+}
|
||||
+
|
||||
static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
{
|
||||
- struct device *dev = &data->client->dev;
|
||||
const struct mxt_platform_data *pdata = data->pdata;
|
||||
+ struct device *dev = &data->client->dev;
|
||||
struct input_dev *input_dev;
|
||||
int error;
|
||||
unsigned int num_mt_slots;
|
||||
unsigned int mt_flags = 0;
|
||||
- int i;
|
||||
|
||||
switch (data->multitouch) {
|
||||
case MXT_TOUCH_MULTI_T9:
|
||||
@@ -1867,26 +1889,6 @@ static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
|
||||
input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
|
||||
|
||||
- if (pdata->t19_num_keys) {
|
||||
- __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
||||
-
|
||||
- for (i = 0; i < pdata->t19_num_keys; i++)
|
||||
- if (pdata->t19_keymap[i] != KEY_RESERVED)
|
||||
- input_set_capability(input_dev, EV_KEY,
|
||||
- pdata->t19_keymap[i]);
|
||||
-
|
||||
- mt_flags |= INPUT_MT_POINTER;
|
||||
-
|
||||
- input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_MT_POSITION_X,
|
||||
- MXT_PIXELS_PER_MM);
|
||||
- input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
||||
- MXT_PIXELS_PER_MM);
|
||||
-
|
||||
- input_dev->name = "Atmel maXTouch Touchpad";
|
||||
- }
|
||||
-
|
||||
/* For single touch */
|
||||
input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
|
||||
@@ -1897,6 +1899,12 @@ static int mxt_initialize_input_device(struct mxt_data *data)
|
||||
input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
|
||||
}
|
||||
|
||||
+ /* If device has buttons we assume it is a touchpad */
|
||||
+ if (pdata->t19_num_keys) {
|
||||
+ mxt_set_up_as_touchpad(input_dev, data);
|
||||
+ mt_flags |= INPUT_MT_POINTER;
|
||||
+ }
|
||||
+
|
||||
/* For multi touch */
|
||||
error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
|
||||
if (error) {
|
|
@ -1,99 +0,0 @@
|
|||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Date: Wed, 20 May 2015 14:50:30 -0700
|
||||
Subject: [PATCH] Input: joydev - don't classify the vmmouse as a joystick
|
||||
|
||||
Joydev is currently thinking some absolute mice are joystick, and that
|
||||
messes up games in VMware guests, as the cursor typically gets stuck in
|
||||
the top left corner.
|
||||
|
||||
Try to detect the event signature of a VMmouse input device and back off
|
||||
for such devices. We're still incorrectly detecting, for example, the
|
||||
VMware absolute USB mouse as a joystick, but adding an event signature
|
||||
matching also that device would be considerably more risky, so defer that
|
||||
to a later merge window.
|
||||
|
||||
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/joydev.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 61 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
|
||||
index f362883c94e3..1d247bcf2ae2 100644
|
||||
--- a/drivers/input/joydev.c
|
||||
+++ b/drivers/input/joydev.c
|
||||
@@ -747,6 +747,63 @@ static void joydev_cleanup(struct joydev *joydev)
|
||||
input_close_device(handle);
|
||||
}
|
||||
|
||||
+static bool joydev_dev_is_absolute_mouse(struct input_dev *dev)
|
||||
+{
|
||||
+ DECLARE_BITMAP(jd_scratch, KEY_CNT);
|
||||
+
|
||||
+ BUILD_BUG_ON(ABS_CNT > KEY_CNT || EV_CNT > KEY_CNT);
|
||||
+
|
||||
+ /*
|
||||
+ * Virtualization (VMware, etc) and remote management (HP
|
||||
+ * ILO2) solutions use absolute coordinates for their virtual
|
||||
+ * pointing devices so that there is one-to-one relationship
|
||||
+ * between pointer position on the host screen and virtual
|
||||
+ * guest screen, and so their mice use ABS_X, ABS_Y and 3
|
||||
+ * primary button events. This clashes with what joydev
|
||||
+ * considers to be joysticks (a device with at minimum ABS_X
|
||||
+ * axis).
|
||||
+ *
|
||||
+ * Here we are trying to separate absolute mice from
|
||||
+ * joysticks. A device is, for joystick detection purposes,
|
||||
+ * considered to be an absolute mouse if the following is
|
||||
+ * true:
|
||||
+ *
|
||||
+ * 1) Event types are exactly EV_ABS, EV_KEY and EV_SYN.
|
||||
+ * 2) Absolute events are exactly ABS_X and ABS_Y.
|
||||
+ * 3) Keys are exactly BTN_LEFT, BTN_RIGHT and BTN_MIDDLE.
|
||||
+ * 4) Device is not on "Amiga" bus.
|
||||
+ */
|
||||
+
|
||||
+ bitmap_zero(jd_scratch, EV_CNT);
|
||||
+ __set_bit(EV_ABS, jd_scratch);
|
||||
+ __set_bit(EV_KEY, jd_scratch);
|
||||
+ __set_bit(EV_SYN, jd_scratch);
|
||||
+ if (!bitmap_equal(jd_scratch, dev->evbit, EV_CNT))
|
||||
+ return false;
|
||||
+
|
||||
+ bitmap_zero(jd_scratch, ABS_CNT);
|
||||
+ __set_bit(ABS_X, jd_scratch);
|
||||
+ __set_bit(ABS_Y, jd_scratch);
|
||||
+ if (!bitmap_equal(dev->absbit, jd_scratch, ABS_CNT))
|
||||
+ return false;
|
||||
+
|
||||
+ bitmap_zero(jd_scratch, KEY_CNT);
|
||||
+ __set_bit(BTN_LEFT, jd_scratch);
|
||||
+ __set_bit(BTN_RIGHT, jd_scratch);
|
||||
+ __set_bit(BTN_MIDDLE, jd_scratch);
|
||||
+
|
||||
+ if (!bitmap_equal(dev->keybit, jd_scratch, KEY_CNT))
|
||||
+ return false;
|
||||
+
|
||||
+ /*
|
||||
+ * Amiga joystick (amijoy) historically uses left/middle/right
|
||||
+ * button events.
|
||||
+ */
|
||||
+ if (dev->id.bustype == BUS_AMIGA)
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
|
||||
static bool joydev_match(struct input_handler *handler, struct input_dev *dev)
|
||||
{
|
||||
@@ -758,6 +815,10 @@ static bool joydev_match(struct input_handler *handler, struct input_dev *dev)
|
||||
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_DIGI, dev->keybit))
|
||||
return false;
|
||||
|
||||
+ /* Avoid absolute mice */
|
||||
+ if (joydev_dev_is_absolute_mouse(dev))
|
||||
+ return false;
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Sun, 5 Apr 2015 13:45:04 -0700
|
||||
Subject: [PATCH] Input: synaptics - allocate 3 slots to keep stability in
|
||||
image sensors
|
||||
|
||||
When slowly dropping 1, 2 and then 3 fingers on an image sensor touchpad,
|
||||
we can see that the first finger gets reassigned a new slot while it did
|
||||
not move. This is due to the kernel tracking algorithm which can not assign
|
||||
correctly the 3 touches, being out of slots.
|
||||
|
||||
Declaring that we support 3 slots allows to actually forward:
|
||||
slot 0 -> down, slot 1 -> up, slot 2 -> down
|
||||
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Acked-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Henrik Rydberg <rydberg@bitmath.org
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 63f001530d4c..41c9facc891b 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -1194,7 +1194,7 @@ static void set_input_params(struct psmouse *psmouse,
|
||||
ABS_MT_POSITION_Y);
|
||||
/* Image sensors can report per-contact pressure */
|
||||
input_set_abs_params(dev, ABS_MT_PRESSURE, 0, 255, 0, 0);
|
||||
- input_mt_init_slots(dev, 2, INPUT_MT_POINTER | INPUT_MT_TRACK);
|
||||
+ input_mt_init_slots(dev, 3, INPUT_MT_POINTER | INPUT_MT_TRACK);
|
||||
|
||||
/* Image sensors can signal 4 and 5 finger clicks */
|
||||
__set_bit(BTN_TOOL_QUADTAP, dev->keybit);
|
|
@ -27,10 +27,10 @@ Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
|||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index 41c9facc891b..ef91cbd03f92 100644
|
||||
index 3a32caf06bf1..58102970f94f 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -935,6 +935,14 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
|
||||
@@ -940,6 +940,14 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
|
||||
input_report_abs(dev, ABS_MT_PRESSURE, hw[i]->z);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,26 +1,29 @@
|
|||
From b634bc924371a7df6459af04f37c91f65ac59df2 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Lendacky <thomas.lendacky@amd.com>
|
||||
Date: Sat, 21 Feb 2015 12:25:12 -0500
|
||||
Subject: [PATCH] net: amd: Add xgbe-a0 driver
|
||||
Date: Thu, 28 May 2015 16:38:57 -0400
|
||||
Subject: [PATCH 1/2] amd-xgbe-a0: Add support for XGBE on A0
|
||||
|
||||
Add support for A0 silicon xgbe driver. This won't be upstreamed because
|
||||
the HW is being replaced with a better version.
|
||||
Add XGBE driver support for A0 hardware.
|
||||
|
||||
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
|
||||
[fixup timespec -> timespec64]
|
||||
[use device_dma_is_coherent]
|
||||
Signed-off-by: Mark Salter <msalter@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/amd/Makefile | 1 +
|
||||
drivers/net/ethernet/amd/xgbe-a0/Makefile | 8 +
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h | 1142 +++++++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c | 269 ++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c | 269 +++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c | 373 +++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c | 636 +++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c | 2964 +++++++++++++++++++++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c | 2204 +++++++++++++++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c | 2930 +++++++++++++++++++++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c | 2218 +++++++++++++++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c | 616 +++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c | 643 +++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c | 618 +++++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c | 312 +++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c | 284 +++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c | 278 +++
|
||||
drivers/net/ethernet/amd/xgbe-a0/xgbe.h | 868 +++++++
|
||||
13 files changed, 10320 insertions(+)
|
||||
13 files changed, 10269 insertions(+)
|
||||
create mode 100644 drivers/net/ethernet/amd/xgbe-a0/Makefile
|
||||
create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
|
||||
create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
|
||||
|
@ -35,7 +38,7 @@ Signed-off-by: Mark Salter <msalter@redhat.com>
|
|||
create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe.h
|
||||
|
||||
diff --git a/drivers/net/ethernet/amd/Makefile b/drivers/net/ethernet/amd/Makefile
|
||||
index a38a2dce3eb3..bf0cf2f8d2db 100644
|
||||
index a38a2dc..bf0cf2f 100644
|
||||
--- a/drivers/net/ethernet/amd/Makefile
|
||||
+++ b/drivers/net/ethernet/amd/Makefile
|
||||
@@ -18,3 +18,4 @@ obj-$(CONFIG_PCNET32) += pcnet32.o
|
||||
|
@ -45,7 +48,7 @@ index a38a2dce3eb3..bf0cf2f8d2db 100644
|
|||
+obj-$(CONFIG_AMD_XGBE) += xgbe-a0/
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/Makefile b/drivers/net/ethernet/amd/xgbe-a0/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..561116faadae
|
||||
index 0000000..561116f
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/Makefile
|
||||
@@ -0,0 +1,8 @@
|
||||
|
@ -59,7 +62,7 @@ index 000000000000..561116faadae
|
|||
+amd-xgbe-a0-$(CONFIG_DEBUG_FS) += xgbe-debugfs.o
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h b/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
|
||||
new file mode 100644
|
||||
index 000000000000..75b08c63d39f
|
||||
index 0000000..75b08c6
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
|
||||
@@ -0,0 +1,1142 @@
|
||||
|
@ -1207,7 +1210,7 @@ index 000000000000..75b08c63d39f
|
|||
+#endif
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
|
||||
new file mode 100644
|
||||
index 000000000000..343301cbf7b4
|
||||
index 0000000..343301c
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
|
||||
@@ -0,0 +1,269 @@
|
||||
|
@ -1482,7 +1485,7 @@ index 000000000000..343301cbf7b4
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c
|
||||
new file mode 100644
|
||||
index 000000000000..ecfa6f91da22
|
||||
index 0000000..ecfa6f9
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c
|
||||
@@ -0,0 +1,373 @@
|
||||
|
@ -1861,7 +1864,7 @@ index 000000000000..ecfa6f91da22
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c
|
||||
new file mode 100644
|
||||
index 000000000000..5dd57779c82c
|
||||
index 0000000..5dd5777
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c
|
||||
@@ -0,0 +1,636 @@
|
||||
|
@ -2503,10 +2506,10 @@ index 000000000000..5dd57779c82c
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c
|
||||
new file mode 100644
|
||||
index 000000000000..f6a3a581cc21
|
||||
index 0000000..2d88739
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c
|
||||
@@ -0,0 +1,2964 @@
|
||||
@@ -0,0 +1,2930 @@
|
||||
+/*
|
||||
+ * AMD 10Gb Ethernet driver
|
||||
+ *
|
||||
|
@ -5137,14 +5140,6 @@ index 000000000000..f6a3a581cc21
|
|||
+
|
||||
+ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 0);
|
||||
+ }
|
||||
+
|
||||
+ /*TODO: Poll to be sure the channels have stopped?
|
||||
+ while (count--) {
|
||||
+ if (XGMAC_IOREAD_BITS(pdata, DMA_DSR0, TPS) == 6)
|
||||
+ break;
|
||||
+ mdelay(1);
|
||||
+ }
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+static void xgbe_enable_rx(struct xgbe_prv_data *pdata)
|
||||
|
@ -5196,15 +5191,6 @@ index 000000000000..f6a3a581cc21
|
|||
+
|
||||
+ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 0);
|
||||
+ }
|
||||
+
|
||||
+ /*TODO: Poll to be sure the channels have stopped?
|
||||
+ while (count--) {
|
||||
+ dma_sr0 = XGMAC_IOREAD_BITS(pdata, DMA_DSR0, RPS);
|
||||
+ if (dma_sr0 == 3 || dma_sr0 == 4)
|
||||
+ break;
|
||||
+ mdelay(1);
|
||||
+ }
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+static void xgbe_powerup_tx(struct xgbe_prv_data *pdata)
|
||||
|
@ -5250,14 +5236,6 @@ index 000000000000..f6a3a581cc21
|
|||
+
|
||||
+ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 0);
|
||||
+ }
|
||||
+
|
||||
+ /*TODO: Poll to be sure the channels have stopped?
|
||||
+ while (count--) {
|
||||
+ if (XGMAC_IOREAD_BITS(pdata, DMA_DSR0, TPS) == 6)
|
||||
+ break;
|
||||
+ mdelay(1);
|
||||
+ }
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+static void xgbe_powerup_rx(struct xgbe_prv_data *pdata)
|
||||
|
@ -5288,15 +5266,6 @@ index 000000000000..f6a3a581cc21
|
|||
+
|
||||
+ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 0);
|
||||
+ }
|
||||
+
|
||||
+ /*TODO: Poll to be sure the channels have stopped?
|
||||
+ while (count--) {
|
||||
+ dma_sr0 = XGMAC_IOREAD_BITS(pdata, DMA_DSR0, RPS);
|
||||
+ if (dma_sr0 == 3 || dma_sr0 == 4)
|
||||
+ break;
|
||||
+ mdelay(1);
|
||||
+ }
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+static int xgbe_init(struct xgbe_prv_data *pdata)
|
||||
|
@ -5473,10 +5442,10 @@ index 000000000000..f6a3a581cc21
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c
|
||||
new file mode 100644
|
||||
index 000000000000..acaeaf56b63f
|
||||
index 0000000..ca4af9e
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c
|
||||
@@ -0,0 +1,2204 @@
|
||||
@@ -0,0 +1,2218 @@
|
||||
+/*
|
||||
+ * AMD 10Gb Ethernet driver
|
||||
+ *
|
||||
|
@ -5821,12 +5790,13 @@ index 000000000000..acaeaf56b63f
|
|||
+ dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR);
|
||||
+ DBGPR(" DMA_CH%u_ISR = %08x\n", i, dma_ch_isr);
|
||||
+
|
||||
+ /* If we get a TI or RI interrupt that means per channel DMA
|
||||
+ * interrupts are not enabled, so we use the private data napi
|
||||
+ * structure, not the per channel napi structure
|
||||
+ /* The TI or RI interrupt bits may still be set even if using
|
||||
+ * per channel DMA interrupts. Check to be sure those are not
|
||||
+ * enabled before using the private data napi structure.
|
||||
+ */
|
||||
+ if (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) ||
|
||||
+ XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI)) {
|
||||
+ if (!pdata->per_channel_irq &&
|
||||
+ (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) ||
|
||||
+ XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI))) {
|
||||
+ if (napi_schedule_prep(&pdata->napi)) {
|
||||
+ /* Disable Tx and Rx interrupts */
|
||||
+ xgbe_disable_rx_tx_ints(pdata);
|
||||
|
@ -6001,6 +5971,7 @@ index 000000000000..acaeaf56b63f
|
|||
+ hw_feat->sph = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, SPHEN);
|
||||
+ hw_feat->tso = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, TSOEN);
|
||||
+ hw_feat->dma_debug = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, DBGMEMA);
|
||||
+ hw_feat->rss = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, RSSEN);
|
||||
+ hw_feat->tc_cnt = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, NUMTC);
|
||||
+ hw_feat->hash_table_size = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R,
|
||||
+ HASHTBLSZ);
|
||||
|
@ -6030,13 +6001,14 @@ index 000000000000..acaeaf56b63f
|
|||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* The Queue and Channel counts are zero based so increment them
|
||||
+ /* The Queue, Channel and TC counts are zero based so increment them
|
||||
+ * to get the actual number
|
||||
+ */
|
||||
+ hw_feat->rx_q_cnt++;
|
||||
+ hw_feat->tx_q_cnt++;
|
||||
+ hw_feat->rx_ch_cnt++;
|
||||
+ hw_feat->tx_ch_cnt++;
|
||||
+ hw_feat->tc_cnt++;
|
||||
+
|
||||
+#define XGBE_TC_CNT 2
|
||||
+ hw_feat->tc_cnt = XGBE_TC_CNT;
|
||||
|
@ -6088,6 +6060,68 @@ index 000000000000..acaeaf56b63f
|
|||
+ }
|
||||
+}
|
||||
+
|
||||
+static int xgbe_request_irqs(struct xgbe_prv_data *pdata)
|
||||
+{
|
||||
+ struct xgbe_channel *channel;
|
||||
+ struct net_device *netdev = pdata->netdev;
|
||||
+ unsigned int i;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0,
|
||||
+ netdev->name, pdata);
|
||||
+ if (ret) {
|
||||
+ netdev_alert(netdev, "error requesting irq %d\n",
|
||||
+ pdata->dev_irq);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ if (!pdata->per_channel_irq)
|
||||
+ return 0;
|
||||
+
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++) {
|
||||
+ snprintf(channel->dma_irq_name,
|
||||
+ sizeof(channel->dma_irq_name) - 1,
|
||||
+ "%s-TxRx-%u", netdev_name(netdev),
|
||||
+ channel->queue_index);
|
||||
+
|
||||
+ ret = devm_request_irq(pdata->dev, channel->dma_irq,
|
||||
+ xgbe_dma_isr, 0,
|
||||
+ channel->dma_irq_name, channel);
|
||||
+ if (ret) {
|
||||
+ netdev_alert(netdev, "error requesting irq %d\n",
|
||||
+ channel->dma_irq);
|
||||
+ goto err_irq;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_irq:
|
||||
+ /* Using an unsigned int, 'i' will go to UINT_MAX and exit */
|
||||
+ for (i--, channel--; i < pdata->channel_count; i--, channel--)
|
||||
+ devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
||||
+
|
||||
+ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
|
||||
+{
|
||||
+ struct xgbe_channel *channel;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
||||
+
|
||||
+ if (!pdata->per_channel_irq)
|
||||
+ return;
|
||||
+
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++)
|
||||
+ devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
||||
+}
|
||||
+
|
||||
+void xgbe_a0_init_tx_coalesce(struct xgbe_prv_data *pdata)
|
||||
+{
|
||||
+ struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
|
@ -6289,20 +6323,20 @@ index 000000000000..acaeaf56b63f
|
|||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ phy_stop(pdata->phydev);
|
||||
+
|
||||
+ spin_lock_irqsave(&pdata->lock, flags);
|
||||
+
|
||||
+ if (caller == XGMAC_DRIVER_CONTEXT)
|
||||
+ netif_device_detach(netdev);
|
||||
+
|
||||
+ netif_tx_stop_all_queues(netdev);
|
||||
+ xgbe_napi_disable(pdata, 0);
|
||||
+
|
||||
+ /* Powerdown Tx/Rx */
|
||||
+ hw_if->powerdown_tx(pdata);
|
||||
+ hw_if->powerdown_rx(pdata);
|
||||
+
|
||||
+ xgbe_napi_disable(pdata, 0);
|
||||
+
|
||||
+ phy_stop(pdata->phydev);
|
||||
+
|
||||
+ pdata->power_down = 1;
|
||||
+
|
||||
+ spin_unlock_irqrestore(&pdata->lock, flags);
|
||||
|
@ -6333,14 +6367,14 @@ index 000000000000..acaeaf56b63f
|
|||
+
|
||||
+ phy_start(pdata->phydev);
|
||||
+
|
||||
+ /* Enable Tx/Rx */
|
||||
+ xgbe_napi_enable(pdata, 0);
|
||||
+
|
||||
+ hw_if->powerup_tx(pdata);
|
||||
+ hw_if->powerup_rx(pdata);
|
||||
+
|
||||
+ if (caller == XGMAC_DRIVER_CONTEXT)
|
||||
+ netif_device_attach(netdev);
|
||||
+
|
||||
+ xgbe_napi_enable(pdata, 0);
|
||||
+ netif_tx_start_all_queues(netdev);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&pdata->lock, flags);
|
||||
|
@ -6354,6 +6388,7 @@ index 000000000000..acaeaf56b63f
|
|||
+{
|
||||
+ struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
+ struct net_device *netdev = pdata->netdev;
|
||||
+ int ret;
|
||||
+
|
||||
+ DBGPR("-->xgbe_start\n");
|
||||
+
|
||||
|
@ -6363,17 +6398,31 @@ index 000000000000..acaeaf56b63f
|
|||
+
|
||||
+ phy_start(pdata->phydev);
|
||||
+
|
||||
+ xgbe_napi_enable(pdata, 1);
|
||||
+
|
||||
+ ret = xgbe_request_irqs(pdata);
|
||||
+ if (ret)
|
||||
+ goto err_napi;
|
||||
+
|
||||
+ hw_if->enable_tx(pdata);
|
||||
+ hw_if->enable_rx(pdata);
|
||||
+
|
||||
+ xgbe_init_tx_timers(pdata);
|
||||
+
|
||||
+ xgbe_napi_enable(pdata, 1);
|
||||
+ netif_tx_start_all_queues(netdev);
|
||||
+
|
||||
+ DBGPR("<--xgbe_start\n");
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_napi:
|
||||
+ xgbe_napi_disable(pdata, 1);
|
||||
+
|
||||
+ phy_stop(pdata->phydev);
|
||||
+
|
||||
+ hw_if->exit(pdata);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void xgbe_stop(struct xgbe_prv_data *pdata)
|
||||
|
@ -6386,16 +6435,21 @@ index 000000000000..acaeaf56b63f
|
|||
+
|
||||
+ DBGPR("-->xgbe_stop\n");
|
||||
+
|
||||
+ phy_stop(pdata->phydev);
|
||||
+
|
||||
+ netif_tx_stop_all_queues(netdev);
|
||||
+ xgbe_napi_disable(pdata, 1);
|
||||
+
|
||||
+ xgbe_stop_tx_timers(pdata);
|
||||
+
|
||||
+ hw_if->disable_tx(pdata);
|
||||
+ hw_if->disable_rx(pdata);
|
||||
+
|
||||
+ xgbe_free_irqs(pdata);
|
||||
+
|
||||
+ xgbe_napi_disable(pdata, 1);
|
||||
+
|
||||
+ phy_stop(pdata->phydev);
|
||||
+
|
||||
+ hw_if->exit(pdata);
|
||||
+
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++) {
|
||||
+ if (!channel->tx_ring)
|
||||
|
@ -6410,10 +6464,6 @@ index 000000000000..acaeaf56b63f
|
|||
+
|
||||
+static void xgbe_restart_dev(struct xgbe_prv_data *pdata)
|
||||
+{
|
||||
+ struct xgbe_channel *channel;
|
||||
+ struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ DBGPR("-->xgbe_restart_dev\n");
|
||||
+
|
||||
+ /* If not running, "restart" will happen on open */
|
||||
|
@ -6421,19 +6471,10 @@ index 000000000000..acaeaf56b63f
|
|||
+ return;
|
||||
+
|
||||
+ xgbe_stop(pdata);
|
||||
+ synchronize_irq(pdata->dev_irq);
|
||||
+ if (pdata->per_channel_irq) {
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++)
|
||||
+ synchronize_irq(channel->dma_irq);
|
||||
+ }
|
||||
+
|
||||
+ xgbe_free_tx_data(pdata);
|
||||
+ xgbe_free_rx_data(pdata);
|
||||
+
|
||||
+ /* Issue software reset to device */
|
||||
+ hw_if->exit(pdata);
|
||||
+
|
||||
+ xgbe_start(pdata);
|
||||
+
|
||||
+ DBGPR("<--xgbe_restart_dev\n");
|
||||
|
@ -6762,10 +6803,7 @@ index 000000000000..acaeaf56b63f
|
|||
+static int xgbe_open(struct net_device *netdev)
|
||||
+{
|
||||
+ struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
+ struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
+ struct xgbe_desc_if *desc_if = &pdata->desc_if;
|
||||
+ struct xgbe_channel *channel = NULL;
|
||||
+ unsigned int i = 0;
|
||||
+ int ret;
|
||||
+
|
||||
+ DBGPR("-->xgbe_open\n");
|
||||
|
@ -6808,55 +6846,14 @@ index 000000000000..acaeaf56b63f
|
|||
+ INIT_WORK(&pdata->restart_work, xgbe_restart);
|
||||
+ INIT_WORK(&pdata->tx_tstamp_work, xgbe_tx_tstamp);
|
||||
+
|
||||
+ /* Request interrupts */
|
||||
+ ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0,
|
||||
+ netdev->name, pdata);
|
||||
+ if (ret) {
|
||||
+ netdev_alert(netdev, "error requesting irq %d\n",
|
||||
+ pdata->dev_irq);
|
||||
+ goto err_rings;
|
||||
+ }
|
||||
+
|
||||
+ if (pdata->per_channel_irq) {
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++) {
|
||||
+ snprintf(channel->dma_irq_name,
|
||||
+ sizeof(channel->dma_irq_name) - 1,
|
||||
+ "%s-TxRx-%u", netdev_name(netdev),
|
||||
+ channel->queue_index);
|
||||
+
|
||||
+ ret = devm_request_irq(pdata->dev, channel->dma_irq,
|
||||
+ xgbe_dma_isr, 0,
|
||||
+ channel->dma_irq_name, channel);
|
||||
+ if (ret) {
|
||||
+ netdev_alert(netdev,
|
||||
+ "error requesting irq %d\n",
|
||||
+ channel->dma_irq);
|
||||
+ goto err_irq;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ret = xgbe_start(pdata);
|
||||
+ if (ret)
|
||||
+ goto err_start;
|
||||
+ goto err_rings;
|
||||
+
|
||||
+ DBGPR("<--xgbe_open\n");
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_start:
|
||||
+ hw_if->exit(pdata);
|
||||
+
|
||||
+err_irq:
|
||||
+ if (pdata->per_channel_irq) {
|
||||
+ /* Using an unsigned int, 'i' will go to UINT_MAX and exit */
|
||||
+ for (i--, channel--; i < pdata->channel_count; i--, channel--)
|
||||
+ devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
||||
+ }
|
||||
+
|
||||
+ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
||||
+
|
||||
+err_rings:
|
||||
+ desc_if->free_ring_resources(pdata);
|
||||
+
|
||||
|
@ -6878,30 +6875,16 @@ index 000000000000..acaeaf56b63f
|
|||
+static int xgbe_close(struct net_device *netdev)
|
||||
+{
|
||||
+ struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
+ struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
+ struct xgbe_desc_if *desc_if = &pdata->desc_if;
|
||||
+ struct xgbe_channel *channel;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ DBGPR("-->xgbe_close\n");
|
||||
+
|
||||
+ /* Stop the device */
|
||||
+ xgbe_stop(pdata);
|
||||
+
|
||||
+ /* Issue software reset to device */
|
||||
+ hw_if->exit(pdata);
|
||||
+
|
||||
+ /* Free the ring descriptors and buffers */
|
||||
+ desc_if->free_ring_resources(pdata);
|
||||
+
|
||||
+ /* Release the interrupts */
|
||||
+ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
|
||||
+ if (pdata->per_channel_irq) {
|
||||
+ channel = pdata->channel;
|
||||
+ for (i = 0; i < pdata->channel_count; i++, channel++)
|
||||
+ devm_free_irq(pdata->dev, channel->dma_irq, channel);
|
||||
+ }
|
||||
+
|
||||
+ /* Free the channel and ring structures */
|
||||
+ xgbe_free_channels(pdata);
|
||||
+
|
||||
|
@ -7683,7 +7666,7 @@ index 000000000000..acaeaf56b63f
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c
|
||||
new file mode 100644
|
||||
index 000000000000..165ff1ceedcc
|
||||
index 0000000..165ff1c
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c
|
||||
@@ -0,0 +1,616 @@
|
||||
|
@ -8305,10 +8288,10 @@ index 000000000000..165ff1ceedcc
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c
|
||||
new file mode 100644
|
||||
index 000000000000..a85fb4965835
|
||||
index 0000000..deb8551
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c
|
||||
@@ -0,0 +1,643 @@
|
||||
@@ -0,0 +1,618 @@
|
||||
+/*
|
||||
+ * AMD 10Gb Ethernet driver
|
||||
+ *
|
||||
|
@ -8495,13 +8478,8 @@ index 000000000000..a85fb4965835
|
|||
+#ifdef CONFIG_ACPI
|
||||
+static int xgbe_acpi_support(struct xgbe_prv_data *pdata)
|
||||
+{
|
||||
+ struct acpi_device *adev = pdata->adev;
|
||||
+ struct device *dev = pdata->dev;
|
||||
+ u32 property;
|
||||
+ acpi_handle handle;
|
||||
+ acpi_status status;
|
||||
+ unsigned long long data;
|
||||
+ int cca;
|
||||
+ int ret;
|
||||
+
|
||||
+ /* Obtain the system clock setting */
|
||||
|
@ -8522,24 +8500,6 @@ index 000000000000..a85fb4965835
|
|||
+ }
|
||||
+ pdata->ptpclk_rate = property;
|
||||
+
|
||||
+ /* Retrieve the device cache coherency value */
|
||||
+ handle = adev->handle;
|
||||
+ do {
|
||||
+ status = acpi_evaluate_integer(handle, "_CCA", NULL, &data);
|
||||
+ if (!ACPI_FAILURE(status)) {
|
||||
+ cca = data;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ status = acpi_get_parent(handle, &handle);
|
||||
+ } while (!ACPI_FAILURE(status));
|
||||
+
|
||||
+ if (ACPI_FAILURE(status)) {
|
||||
+ dev_err(dev, "error obtaining acpi coherency value\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ pdata->coherent = !!cca;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+#else /* CONFIG_ACPI */
|
||||
|
@ -8570,9 +8530,6 @@ index 000000000000..a85fb4965835
|
|||
+ }
|
||||
+ pdata->ptpclk_rate = clk_get_rate(pdata->ptpclk);
|
||||
+
|
||||
+ /* Retrieve the device cache coherency value */
|
||||
+ pdata->coherent = of_dma_is_coherent(dev->of_node);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+#else /* CONFIG_OF */
|
||||
|
@ -8691,6 +8648,7 @@ index 000000000000..a85fb4965835
|
|||
+ goto err_io;
|
||||
+
|
||||
+ /* Set the DMA coherency values */
|
||||
+ pdata->coherent = device_dma_is_coherent(pdata->dev);
|
||||
+ if (pdata->coherent) {
|
||||
+ pdata->axdomain = XGBE_DMA_OS_AXDOMAIN;
|
||||
+ pdata->arcache = XGBE_DMA_OS_ARCACHE;
|
||||
|
@ -8954,7 +8912,7 @@ index 000000000000..a85fb4965835
|
|||
+module_platform_driver(xgbe_a0_driver);
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c
|
||||
new file mode 100644
|
||||
index 000000000000..b84d0481bed8
|
||||
index 0000000..b84d048
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c
|
||||
@@ -0,0 +1,312 @@
|
||||
|
@ -9272,10 +9230,10 @@ index 000000000000..b84d0481bed8
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c
|
||||
new file mode 100644
|
||||
index 000000000000..c53c7b2a4b08
|
||||
index 0000000..1016aeb
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c
|
||||
@@ -0,0 +1,284 @@
|
||||
@@ -0,0 +1,278 @@
|
||||
+/*
|
||||
+ * AMD 10Gb Ethernet driver
|
||||
+ *
|
||||
|
@ -9449,21 +9407,15 @@ index 000000000000..c53c7b2a4b08
|
|||
+ struct xgbe_prv_data,
|
||||
+ ptp_clock_info);
|
||||
+ unsigned long flags;
|
||||
+ u64 nsec;
|
||||
+
|
||||
+ spin_lock_irqsave(&pdata->tstamp_lock, flags);
|
||||
+
|
||||
+ nsec = timecounter_read(&pdata->tstamp_tc);
|
||||
+
|
||||
+ nsec += delta;
|
||||
+ timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc, nsec);
|
||||
+
|
||||
+ timecounter_adjtime(&pdata->tstamp_tc, delta);
|
||||
+ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int xgbe_gettime(struct ptp_clock_info *info, struct timespec *ts)
|
||||
+static int xgbe_gettime(struct ptp_clock_info *info, struct timespec64 *ts)
|
||||
+{
|
||||
+ struct xgbe_prv_data *pdata = container_of(info,
|
||||
+ struct xgbe_prv_data,
|
||||
|
@ -9477,12 +9429,12 @@ index 000000000000..c53c7b2a4b08
|
|||
+
|
||||
+ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
|
||||
+
|
||||
+ *ts = ns_to_timespec(nsec);
|
||||
+ *ts = ns_to_timespec64(nsec);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int xgbe_settime(struct ptp_clock_info *info, const struct timespec *ts)
|
||||
+static int xgbe_settime(struct ptp_clock_info *info, const struct timespec64 *ts)
|
||||
+{
|
||||
+ struct xgbe_prv_data *pdata = container_of(info,
|
||||
+ struct xgbe_prv_data,
|
||||
|
@ -9490,7 +9442,7 @@ index 000000000000..c53c7b2a4b08
|
|||
+ unsigned long flags;
|
||||
+ u64 nsec;
|
||||
+
|
||||
+ nsec = timespec_to_ns(ts);
|
||||
+ nsec = timespec64_to_ns(ts);
|
||||
+
|
||||
+ spin_lock_irqsave(&pdata->tstamp_lock, flags);
|
||||
+
|
||||
|
@ -9520,8 +9472,8 @@ index 000000000000..c53c7b2a4b08
|
|||
+ info->max_adj = pdata->ptpclk_rate;
|
||||
+ info->adjfreq = xgbe_adjfreq;
|
||||
+ info->adjtime = xgbe_adjtime;
|
||||
+ info->gettime = xgbe_gettime;
|
||||
+ info->settime = xgbe_settime;
|
||||
+ info->gettime64 = xgbe_gettime;
|
||||
+ info->settime64 = xgbe_settime;
|
||||
+ info->enable = xgbe_enable;
|
||||
+
|
||||
+ clock = ptp_clock_register(info, pdata->dev);
|
||||
|
@ -9562,7 +9514,7 @@ index 000000000000..c53c7b2a4b08
|
|||
+}
|
||||
diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe.h b/drivers/net/ethernet/amd/xgbe-a0/xgbe.h
|
||||
new file mode 100644
|
||||
index 000000000000..dd8500da98a6
|
||||
index 0000000..04c00d2
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe.h
|
||||
@@ -0,0 +1,868 @@
|
||||
|
@ -9692,7 +9644,7 @@ index 000000000000..dd8500da98a6
|
|||
+#include <linux/if_vlan.h>
|
||||
+#include <linux/bitops.h>
|
||||
+#include <linux/ptp_clock_kernel.h>
|
||||
+#include <linux/clocksource.h>
|
||||
+#include <linux/timecounter.h>
|
||||
+#include <linux/net_tstamp.h>
|
||||
+#include <net/dcbnl.h>
|
||||
+
|
||||
|
@ -10434,3 +10386,6 @@ index 000000000000..dd8500da98a6
|
|||
+#endif
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.4.5
|
||||
|
|
@ -1,133 +1,10 @@
|
|||
Documentation/workqueue.txt:
|
||||
If there is dependency among multiple work items used
|
||||
during memory reclaim, they should be queued to separate
|
||||
wq each with WQ_MEM_RECLAIM.
|
||||
|
||||
Loop devices can be stacked, so we have to convert to per-device
|
||||
workqueue. One example is Fedora live CD.
|
||||
|
||||
Fixes: b5dd2f6047ca108001328aac0e8588edd15f1778
|
||||
Cc: stable@vger.kernel.org (v4.0)
|
||||
Cc: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
---
|
||||
drivers/block/loop.c | 30 ++++++++++++++----------------
|
||||
drivers/block/loop.h | 1 +
|
||||
2 files changed, 15 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index ae3fcb4..3dc1598 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -86,8 +86,6 @@ static DEFINE_MUTEX(loop_index_mutex);
|
||||
static int max_part;
|
||||
static int part_shift;
|
||||
|
||||
-static struct workqueue_struct *loop_wq;
|
||||
-
|
||||
/*
|
||||
* Transfer functions
|
||||
*/
|
||||
@@ -725,6 +723,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
|
||||
size = get_loop_size(lo, file);
|
||||
if ((loff_t)(sector_t)size != size)
|
||||
goto out_putf;
|
||||
+ error = -ENOMEM;
|
||||
+ lo->wq = alloc_workqueue("kloopd%d",
|
||||
+ WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0,
|
||||
+ lo->lo_number);
|
||||
+ if (!lo->wq)
|
||||
+ goto out_putf;
|
||||
|
||||
error = 0;
|
||||
|
||||
@@ -872,6 +876,8 @@ static int loop_clr_fd(struct loop_device *lo)
|
||||
lo->lo_flags = 0;
|
||||
if (!part_shift)
|
||||
lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
||||
+ destroy_workqueue(lo->wq);
|
||||
+ lo->wq = NULL;
|
||||
mutex_unlock(&lo->lo_ctl_mutex);
|
||||
/*
|
||||
* Need not hold lo_ctl_mutex to fput backing file.
|
||||
@@ -1425,9 +1431,13 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
const struct blk_mq_queue_data *bd)
|
||||
{
|
||||
struct loop_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
|
||||
+ struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
|
||||
blk_mq_start_request(bd->rq);
|
||||
|
||||
+ if (lo->lo_state != Lo_bound)
|
||||
+ return -EIO;
|
||||
+
|
||||
if (cmd->rq->cmd_flags & REQ_WRITE) {
|
||||
struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
bool need_sched = true;
|
||||
@@ -1441,9 +1451,9 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
spin_unlock_irq(&lo->lo_lock);
|
||||
|
||||
if (need_sched)
|
||||
- queue_work(loop_wq, &lo->write_work);
|
||||
+ queue_work(lo->wq, &lo->write_work);
|
||||
} else {
|
||||
- queue_work(loop_wq, &cmd->read_work);
|
||||
+ queue_work(lo->wq, &cmd->read_work);
|
||||
}
|
||||
|
||||
return BLK_MQ_RQ_QUEUE_OK;
|
||||
@@ -1455,9 +1465,6 @@ static void loop_handle_cmd(struct loop_cmd *cmd)
|
||||
struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
int ret = -EIO;
|
||||
|
||||
- if (lo->lo_state != Lo_bound)
|
||||
- goto failed;
|
||||
-
|
||||
if (write && (lo->lo_flags & LO_FLAGS_READ_ONLY))
|
||||
goto failed;
|
||||
|
||||
@@ -1806,13 +1813,6 @@ static int __init loop_init(void)
|
||||
goto misc_out;
|
||||
}
|
||||
|
||||
- loop_wq = alloc_workqueue("kloopd",
|
||||
- WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0);
|
||||
- if (!loop_wq) {
|
||||
- err = -ENOMEM;
|
||||
- goto misc_out;
|
||||
- }
|
||||
-
|
||||
blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
|
||||
THIS_MODULE, loop_probe, NULL, NULL);
|
||||
|
||||
@@ -1850,8 +1850,6 @@ static void __exit loop_exit(void)
|
||||
blk_unregister_region(MKDEV(LOOP_MAJOR, 0), range);
|
||||
unregister_blkdev(LOOP_MAJOR, "loop");
|
||||
|
||||
- destroy_workqueue(loop_wq);
|
||||
-
|
||||
misc_deregister(&loop_misc);
|
||||
}
|
||||
|
||||
diff --git a/drivers/block/loop.h b/drivers/block/loop.h
|
||||
index 301c27f..49564ed 100644
|
||||
--- a/drivers/block/loop.h
|
||||
+++ b/drivers/block/loop.h
|
||||
@@ -54,6 +54,7 @@ struct loop_device {
|
||||
gfp_t old_gfp_mask;
|
||||
|
||||
spinlock_t lo_lock;
|
||||
+ struct workqueue_struct *wq;
|
||||
struct list_head write_cmd_head;
|
||||
struct work_struct write_work;
|
||||
bool write_started;
|
||||
--
|
||||
1.9.1
|
||||
If there are too many pending per work I/O, too many
|
||||
high priority work thread can be generated so that
|
||||
system performance can be effected.
|
||||
|
||||
This patch limits the max_active parameter of workqueue as 16.
|
||||
This patch limits the max pending per work I/O as 16,
|
||||
and will fackback to single queue mode when the max
|
||||
number is reached.
|
||||
|
||||
This patch fixes Fedora 22 live booting performance
|
||||
regression when it is booted from squashfs over dm
|
||||
|
@ -146,24 +23,82 @@ as loop block, and ext3fs.img is inside the squashfs
|
|||
|
||||
Fixes: b5dd2f6047ca108001328aac0e8588edd15f1778
|
||||
Cc: stable@vger.kernel.org (v4.0)
|
||||
Cc: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Reported-by: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
|
||||
Signed-off-by: Ming Lei <ming.lei@canonical.com>
|
||||
---
|
||||
drivers/block/loop.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
drivers/block/loop.c | 19 +++++++++++++++++--
|
||||
drivers/block/loop.h | 2 ++
|
||||
2 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index 3dc1598..1bee523 100644
|
||||
index ae3fcb4..5a728c6 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -725,7 +725,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
|
||||
goto out_putf;
|
||||
error = -ENOMEM;
|
||||
lo->wq = alloc_workqueue("kloopd%d",
|
||||
- WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0,
|
||||
+ WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 16,
|
||||
lo->lo_number);
|
||||
if (!lo->wq)
|
||||
goto out_putf;
|
||||
@@ -1425,13 +1425,24 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
const struct blk_mq_queue_data *bd)
|
||||
{
|
||||
struct loop_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
|
||||
+ struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
+ bool single_queue = !!(cmd->rq->cmd_flags & REQ_WRITE);
|
||||
+
|
||||
+ /*
|
||||
+ * Fallback to single queue mode if the pending per work
|
||||
+ * I/O number reaches 16, otherwise too many high priority
|
||||
+ * worker thread may effect system performance as reported
|
||||
+ * in fedora live booting from squashfs over loop.
|
||||
+ */
|
||||
+ if (atomic_read(&lo->pending_per_work_io) >= 16)
|
||||
+ single_queue = true;
|
||||
|
||||
blk_mq_start_request(bd->rq);
|
||||
|
||||
- if (cmd->rq->cmd_flags & REQ_WRITE) {
|
||||
- struct loop_device *lo = cmd->rq->q->queuedata;
|
||||
+ if (single_queue) {
|
||||
bool need_sched = true;
|
||||
|
||||
+ cmd->per_work_io = false;
|
||||
spin_lock_irq(&lo->lo_lock);
|
||||
if (lo->write_started)
|
||||
need_sched = false;
|
||||
@@ -1443,6 +1454,8 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
if (need_sched)
|
||||
queue_work(loop_wq, &lo->write_work);
|
||||
} else {
|
||||
+ atomic_inc(&lo->pending_per_work_io);
|
||||
+ cmd->per_work_io = true;
|
||||
queue_work(loop_wq, &cmd->read_work);
|
||||
}
|
||||
|
||||
@@ -1467,6 +1480,8 @@ static void loop_handle_cmd(struct loop_cmd *cmd)
|
||||
if (ret)
|
||||
cmd->rq->errors = -EIO;
|
||||
blk_mq_complete_request(cmd->rq);
|
||||
+ if (cmd->per_work_io)
|
||||
+ atomic_dec(&lo->pending_per_work_io);
|
||||
}
|
||||
|
||||
static void loop_queue_write_work(struct work_struct *work)
|
||||
diff --git a/drivers/block/loop.h b/drivers/block/loop.h
|
||||
index 301c27f..eb855f5 100644
|
||||
--- a/drivers/block/loop.h
|
||||
+++ b/drivers/block/loop.h
|
||||
@@ -57,6 +57,7 @@ struct loop_device {
|
||||
struct list_head write_cmd_head;
|
||||
struct work_struct write_work;
|
||||
bool write_started;
|
||||
+ atomic_t pending_per_work_io;
|
||||
int lo_state;
|
||||
struct mutex lo_ctl_mutex;
|
||||
|
||||
@@ -68,6 +69,7 @@ struct loop_device {
|
||||
struct loop_cmd {
|
||||
struct work_struct read_work;
|
||||
struct request *rq;
|
||||
+ bool per_work_io;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#
|
||||
# Small compile fixes (For more involved fixes, please use a separate patch).
|
||||
#
|
||||
# Please add the errors from gcc before the diffs to save others having
|
||||
# to do a compile to figure out what your diff is fixing. Thanks.
|
||||
#
|
|
@ -1,4 +1,5 @@
|
|||
CONFIG_KUSER_HELPERS=y
|
||||
# CONFIG_VDSO is not set
|
||||
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
@ -42,15 +43,16 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
|
|||
# ARM AMBA generic HW
|
||||
CONFIG_ARM_AMBA=y
|
||||
# CONFIG_TEGRA_AHB is not set
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
CONFIG_ARM_CCI=y
|
||||
CONFIG_ARM_CCN=y
|
||||
CONFIG_ARM_CCI400_PMU=y
|
||||
CONFIG_ARM_DMA_USE_IOMMU=y
|
||||
CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_GIC_V2M=y
|
||||
CONFIG_ARM_GIC_V3=y
|
||||
CONFIG_ARM_GIC_V3_ITS=y
|
||||
CONFIG_KVM_ARM_VGIC=y
|
||||
CONFIG_ARM_GLOBAL_TIMER=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
CONFIG_MMC_ARMMMCI=y
|
||||
|
@ -75,7 +77,8 @@ CONFIG_CLKSRC_VERSATILE=y
|
|||
CONFIG_POWER_RESET_VERSATILE=y
|
||||
# CONFIG_ARM_CHARLCD is not set
|
||||
|
||||
# Power/Thermal/Cpufreq
|
||||
# Power management / thermal / cpu scaling
|
||||
# CONFIG_ARM_CPUIDLE is not set
|
||||
# CONFIG_ARM_DT_BL_CPUFREQ is not set
|
||||
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
|
||||
|
||||
|
@ -107,6 +110,20 @@ CONFIG_THERMAL_OF=y
|
|||
# CONFIG_MDIO_BUS_MUX_GPIO is not set
|
||||
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
|
||||
|
||||
# Mailbox
|
||||
CONFIG_MAILBOX=y
|
||||
CONFIG_ARM_MHU=m
|
||||
# CONFIG_PL320_MBOX is not set
|
||||
|
||||
# HW crypto and rng
|
||||
CONFIG_ARM_CRYPTO=y
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
# CONFIG_CRYPTO_AES_ARM_BS is not set
|
||||
CONFIG_CRYPTO_SHA1_ARM=m
|
||||
CONFIG_CRYPTO_SHA256_ARM=m
|
||||
CONFIG_CRYPTO_SHA1_ARM_NEON=m
|
||||
CONFIG_CRYPTO_SHA512_ARM_NEON=m
|
||||
|
||||
# USB
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=m
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=m
|
||||
|
@ -121,6 +138,7 @@ CONFIG_MMC_DW_PLTFM=m
|
|||
CONFIG_MMC_DW_PCI=m
|
||||
CONFIG_SPI_DW_MMIO=m
|
||||
CONFIG_SPI_DW_PCI=m
|
||||
# CONFIG_SPI_DW_MID_DMA is not set
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
# CONFIG_MMC_DW_K3 is not set
|
||||
# CONFIG_MMC_QCOM_DML is not set
|
||||
|
@ -134,7 +152,6 @@ CONFIG_USB_DWC3=m
|
|||
CONFIG_USB_DWC3_DUAL_ROLE=y
|
||||
CONFIG_USB_DWC3_PCI=m
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
# CONFIG_DWC3_HOST_USB3_LPM_ENABLE is not set
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
CONFIG_PCIE_DW=y
|
||||
# CONFIG_MMC_DW_EXYNOS is not set
|
||||
|
@ -143,6 +160,7 @@ CONFIG_PCIE_DW=y
|
|||
CONFIG_EXTCON=m
|
||||
CONFIG_EXTCON_GPIO=m
|
||||
CONFIG_EXTCON_ADC_JACK=m
|
||||
CONFIG_EXTCON_USB_GPIO=m
|
||||
# CONFIG_EXTCON_SM5502 is not set
|
||||
# CONFIG_EXTCON_RT8973A is not set
|
||||
|
||||
|
@ -204,6 +222,7 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
|
|||
CONFIG_CMA=y
|
||||
CONFIG_DMA_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_CMA_DEBUGFS=y
|
||||
CONFIG_CMA_SIZE_MBYTES=16
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
|
@ -237,6 +256,7 @@ CONFIG_CMA_AREAS=7
|
|||
# CONFIG_PATA_PLATFORM is not set
|
||||
# CONFIG_USB_ULPI is not set
|
||||
# CONFIG_KEYBOARD_OMAP4 is not set
|
||||
# CONFIG_KEYBOARD_BCM is not set
|
||||
# CONFIG_PHY_SAMSUNG_USB2 is not set
|
||||
|
||||
### turn off things which make no sense on embedded SoC
|
||||
|
@ -295,6 +315,7 @@ CONFIG_CMA_AREAS=7
|
|||
|
||||
# drm
|
||||
# CONFIG_DRM_VMWGFX is not set
|
||||
# CONFIG_DRM_MSM_DSI is not set
|
||||
# CONFIG_IMX_IPUV3_CORE is not set
|
||||
|
||||
# CONFIG_DEBUG_SET_MODULE_RONX is not set
|
||||
|
|
13
config-arm64
13
config-arm64
|
@ -14,6 +14,9 @@ CONFIG_ARCH_SEATTLE=y
|
|||
# CONFIG_ARCH_FSL_LS2085A is not set
|
||||
# CONFIG_ARCH_MEDIATEK is not set
|
||||
# CONFIG_ARCH_TEGRA is not set
|
||||
# CONFIG_ARCH_QCOM is not set
|
||||
# CONFIG_ARCH_SPRD is not set
|
||||
# CONFIG_ARCH_ZYNQMP is not set
|
||||
|
||||
# Erratum
|
||||
CONFIG_ARM64_ERRATUM_826319=y
|
||||
|
@ -38,7 +41,6 @@ CONFIG_CMDLINE="console=ttyAMA0"
|
|||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||
CONFIG_GENERIC_CSUM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_IO=y
|
||||
|
@ -72,8 +74,6 @@ CONFIG_SPARSEMEM_VMEMMAP=y
|
|||
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_VARS=y
|
||||
|
@ -95,8 +95,6 @@ CONFIG_CRYPTO_DEV_CCP=y
|
|||
CONFIG_CRYPTO_DEV_CCP_DD=m
|
||||
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
|
||||
|
||||
CONFIG_ARM64_CPUIDLE=y
|
||||
|
||||
# APM Xgene
|
||||
CONFIG_POWER_RESET_XGENE=y
|
||||
CONFIG_COMMON_CLK_XGENE=y
|
||||
|
@ -108,6 +106,7 @@ CONFIG_RTC_DRV_XGENE=m
|
|||
CONFIG_HW_RANDOM_XGENE=m
|
||||
CONFIG_GPIO_XGENE=y
|
||||
CONFIG_GPIO_XGENE_SB=m
|
||||
CONFIG_XGENE_DMA=m
|
||||
|
||||
# busted build for various reasons
|
||||
# uses pci_* for some reason to allocate DMA buffers
|
||||
|
@ -126,7 +125,6 @@ CONFIG_HOTPLUG_PCI=y
|
|||
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
|
||||
|
||||
# CONFIG_PNP_DEBUG_MESSAGES is not set
|
||||
CONFIG_SBSAUART_TTY=y
|
||||
CONFIG_I2C_SCMI=m
|
||||
CONFIG_SENSORS_ACPI_POWER=m
|
||||
|
||||
|
@ -140,6 +138,7 @@ CONFIG_ACPI_IPMI=y
|
|||
CONFIG_ACPI_CONTAINER=y
|
||||
CONFIG_ACPI_HED=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
CONFIG_PCC=y
|
||||
|
||||
CONFIG_NET_SB1000=y
|
||||
CONFIG_AMD_XGBE=m
|
||||
|
@ -166,4 +165,4 @@ CONFIG_SATA_AHCI_PLATFORM=y
|
|||
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
|
||||
CONFIG_EDAC_XGENE=y
|
||||
# CONFIG_FSL_MC_BUS is not set
|
||||
|
|
71
config-armv7
71
config-armv7
|
@ -2,7 +2,6 @@
|
|||
|
||||
# CONFIG_ARCH_BERLIN is not set
|
||||
# CONFIG_ARCH_KEYSTONE is not set
|
||||
CONFIG_ARCH_MVEBU=y
|
||||
CONFIG_ARCH_MXC=y
|
||||
CONFIG_ARCH_OMAP3=y
|
||||
CONFIG_ARCH_OMAP4=y
|
||||
|
@ -18,56 +17,6 @@ CONFIG_ARCH_ZYNQ=y
|
|||
# CONFIG_ARM_VIRT_EXT is not set
|
||||
# CONFIG_VIRTUALIZATION is not set
|
||||
|
||||
# mvebu
|
||||
CONFIG_MACH_ARMADA_370=y
|
||||
CONFIG_MACH_ARMADA_375=y
|
||||
CONFIG_MACH_ARMADA_38X=y
|
||||
CONFIG_MACH_ARMADA_XP=y
|
||||
CONFIG_MACH_DOVE=y
|
||||
|
||||
CONFIG_MVEBU_DEVBUS=y
|
||||
CONFIG_PCI_MVEBU=y
|
||||
CONFIG_CACHE_TAUROS2=y
|
||||
CONFIG_MV_XOR=y
|
||||
CONFIG_CRYPTO_DEV_MV_CESA=m
|
||||
CONFIG_MV643XX_ETH=m
|
||||
CONFIG_PINCTRL_MVEBU=y
|
||||
CONFIG_PINCTRL_ARMADA_370=y
|
||||
CONFIG_PINCTRL_ARMADA_XP=y
|
||||
# CONFIG_ARM_MVEBU_V7_CPUIDLE is not set
|
||||
CONFIG_PINCTRL_DOVE=y
|
||||
CONFIG_EDAC_MV64X60=m
|
||||
CONFIG_RTC_DRV_S35390A=m
|
||||
CONFIG_RTC_DRV_88PM80X=m
|
||||
CONFIG_RTC_DRV_ISL12057=m
|
||||
CONFIG_RTC_DRV_MV=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
CONFIG_MVNETA=m
|
||||
CONFIG_GPIO_MVEBU=y
|
||||
CONFIG_MVEBU_CLK_CORE=y
|
||||
CONFIG_MVEBU_CLK_COREDIV=y
|
||||
CONFIG_MMC_MVSDIO=m
|
||||
CONFIG_MMC_SDHCI_DOVE=m
|
||||
CONFIG_SPI_ORION=m
|
||||
CONFIG_USB_MV_UDC=m
|
||||
CONFIG_MVEBU_MBUS=y
|
||||
CONFIG_USB_XHCI_MVEBU=m
|
||||
CONFIG_PHY_MVEBU_SATA=y
|
||||
CONFIG_AHCI_MVEBU=m
|
||||
CONFIG_ARMADA_THERMAL=m
|
||||
CONFIG_DOVE_THERMAL=m
|
||||
CONFIG_DRM_ARMADA=m
|
||||
CONFIG_ORION_WATCHDOG=m
|
||||
CONFIG_SND_KIRKWOOD_SOC=m
|
||||
CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
|
||||
CONFIG_USB_EHCI_HCD_ORION=m
|
||||
CONFIG_MMC_SDHCI_PXAV3=m
|
||||
CONFIG_MVPP2=m
|
||||
CONFIG_COMMON_CLK_SI5351=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
# CONFIG_CACHE_FEROCEON_L2 is not set
|
||||
# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
|
||||
|
||||
# omap
|
||||
CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
|
||||
CONFIG_SOC_OMAP5=y
|
||||
|
@ -75,7 +24,6 @@ CONFIG_SOC_OMAP5=y
|
|||
CONFIG_SOC_OMAP3430=y
|
||||
CONFIG_SOC_TI81XX=y
|
||||
# CONFIG_MACH_CM_T35 is not set
|
||||
# CONFIG_MACH_DEVKIT8000 is not set
|
||||
# CONFIG_MACH_NOKIA_RX51 is not set
|
||||
# CONFIG_MACH_OMAP_LDP is not set
|
||||
# CONFIG_MACH_OMAP3_BEAGLE is not set
|
||||
|
@ -84,8 +32,6 @@ CONFIG_SOC_TI81XX=y
|
|||
# CONFIG_MACH_OMAP3_PANDORA is not set
|
||||
# CONFIG_MACH_OMAP3_TORPEDO is not set
|
||||
# CONFIG_MACH_OVERO is not set
|
||||
# CONFIG_MACH_SBC3530 is not set
|
||||
# CONFIG_MACH_TOUCHBOOK is not set
|
||||
|
||||
CONFIG_SOC_HAS_REALTIME_COUNTER=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
|
@ -102,6 +48,7 @@ CONFIG_DMA_OMAP=m
|
|||
CONFIG_OMAP_IOMMU=y
|
||||
CONFIG_HWSPINLOCK_OMAP=m
|
||||
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
|
||||
# CONFIG_PHY_DM816X_USB is not set
|
||||
|
||||
CONFIG_SERIAL_OMAP=y
|
||||
CONFIG_SERIAL_OMAP_CONSOLE=y
|
||||
|
@ -296,7 +243,6 @@ CONFIG_TI_CPSW_ALE=m
|
|||
CONFIG_TI_CPTS=y
|
||||
# Builtin needed for BBone White
|
||||
CONFIG_REGULATOR_TPS65217=y
|
||||
CONFIG_INPUT_TPS65218_PWRBUTTON=m
|
||||
CONFIG_TI_EMIF=m
|
||||
CONFIG_DRM_TILCDC=m
|
||||
CONFIG_SPI_DAVINCI=m
|
||||
|
@ -313,6 +259,7 @@ CONFIG_TI_AM335X_ADC=m
|
|||
CONFIG_PWM_TIPWMSS=y
|
||||
CONFIG_MFD_TPS65218=m
|
||||
CONFIG_REGULATOR_TPS65218=m
|
||||
CONFIG_INPUT_TPS65218_PWRBUTTON=m
|
||||
CONFIG_VIDEO_AM437X_VPFE=m
|
||||
|
||||
# QCom
|
||||
|
@ -321,7 +268,6 @@ CONFIG_ARCH_MSM8960=y
|
|||
CONFIG_ARCH_MSM8974=y
|
||||
CONFIG_SERIAL_MSM=y
|
||||
CONFIG_SERIAL_MSM_CONSOLE=y
|
||||
CONFIG_SERIAL_MSM_HS=m
|
||||
CONFIG_PINCTRL_APQ8064=m
|
||||
CONFIG_PINCTRL_APQ8084=m
|
||||
CONFIG_PINCTRL_IPQ8064=m
|
||||
|
@ -330,6 +276,7 @@ CONFIG_PINCTRL_MSM8X74=m
|
|||
CONFIG_PINCTRL_MSM8916=m
|
||||
CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
|
||||
CONFIG_COMMON_CLK_QCOM=m
|
||||
# CONFIG_MSM_GCC_8916 is not set
|
||||
# CONFIG_IPQ_LCC_806X is not set
|
||||
# CONFIG_MSM_LCC_8960 is not set
|
||||
CONFIG_MFD_QCOM_RPM=m
|
||||
|
@ -365,6 +312,7 @@ CONFIG_MFD_PM8XXX=m
|
|||
CONFIG_KEYBOARD_PMIC8XXX=m
|
||||
CONFIG_INPUT_PM8XXX_VIBRATOR=m
|
||||
CONFIG_INPUT_PMIC8XXX_PWRKEY=m
|
||||
CONFIG_INPUT_PM8941_PWRKEY=m
|
||||
CONFIG_RTC_DRV_PM8XXX=m
|
||||
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
|
||||
CONFIG_QCOM_WDT=m
|
||||
|
@ -373,6 +321,12 @@ CONFIG_SPMI=m
|
|||
CONFIG_SPMI_MSM_PMIC_ARB=m
|
||||
CONFIG_QCOM_SPMI_IADC=m
|
||||
CONFIG_QCOM_SPMI_VADC=m
|
||||
CONFIG_LEDS_PM8941_WLED=m
|
||||
CONFIG_SND_SOC_QCOM=m
|
||||
CONFIG_SND_SOC_LPASS_CPU=m
|
||||
CONFIG_SND_SOC_LPASS_PLATFORM=m
|
||||
CONFIG_SND_SOC_STORM=m
|
||||
CONFIG_PHY_QCOM_UFS=m
|
||||
|
||||
# i.MX
|
||||
# CONFIG_MXC_DEBUG_BOARD is not set
|
||||
|
@ -401,6 +355,8 @@ CONFIG_USB_CHIPIDEA_HOST=y
|
|||
CONFIG_USB_FSL_USB2=m
|
||||
CONFIG_NET_VENDOR_FREESCALE=y
|
||||
CONFIG_FEC=m
|
||||
# CONFIG_FSL_PQ_MDIO is not set
|
||||
# CONFIG_FSL_XGMAC_MDIO is not set
|
||||
CONFIG_KEYBOARD_IMX=m
|
||||
CONFIG_KEYBOARD_STMPE=m
|
||||
CONFIG_TOUCHSCREEN_STMPE=m
|
||||
|
@ -613,7 +569,7 @@ CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
|
|||
CONFIG_COMMON_CLK_AXI_CLKGEN=m
|
||||
CONFIG_COMMON_CLK_SI570=m
|
||||
CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
|
||||
CONFIG_ARM_ZYNQ_CPUIDLE=y
|
||||
# CONFIG_ARM_ZYNQ_CPUIDLE is not set
|
||||
CONFIG_LATTICE_ECP3_CONFIG=m
|
||||
CONFIG_NET_VENDOR_XILINX=y
|
||||
CONFIG_XILINX_EMACLITE=m
|
||||
|
@ -664,4 +620,3 @@ CONFIG_REGULATOR_MAX8649=m
|
|||
CONFIG_REGULATOR_MAX8660=m
|
||||
CONFIG_REGULATOR_MAX8907=m
|
||||
CONFIG_REGULATOR_MAX8952=m
|
||||
CONFIG_REGULATOR_MAX8973=m
|
||||
|
|
|
@ -14,7 +14,6 @@ CONFIG_VFP=y
|
|||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_IWMMXT=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_THUMB=y
|
||||
|
@ -72,6 +71,8 @@ CONFIG_ARCH_VIRT=y
|
|||
# CONFIG_ARCH_VEXPRESS_SPC is not set
|
||||
# CONFIG_ARCH_WM8850 is not set
|
||||
# CONFIG_ARCH_DIGICOLOR is not set
|
||||
# CONFIG_ARCH_ALPINE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
|
||||
# errata
|
||||
# v5/v6
|
||||
|
@ -116,17 +117,12 @@ CONFIG_RCU_FANOUT=32
|
|||
CONFIG_CHECKPOINT_RESTORE=y
|
||||
|
||||
# Power management / thermal / cpu scaling
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
|
||||
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_ARM_PSCI=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_CLOCK_THERMAL=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_CPUFREQ_DT=m
|
||||
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
|
||||
CONFIG_PM_DEVFREQ=y
|
||||
CONFIG_PM_DEVFREQ_EVENT=y
|
||||
|
@ -144,6 +140,7 @@ CONFIG_UACCESS_WITH_MEMCPY=y
|
|||
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
# CONFIG_PCI_LAYERSCAPE is not set
|
||||
# CONFIG_PCIE_IPROC is not set
|
||||
|
||||
CONFIG_LBDAF=y
|
||||
|
||||
|
@ -193,6 +190,7 @@ CONFIG_STMMAC_PLATFORM=m
|
|||
CONFIG_EEPROM_SUNXI_SID=m
|
||||
CONFIG_RTC_DRV_SUNXI=m
|
||||
CONFIG_PHY_SUN4I_USB=m
|
||||
# CONFIG_PHY_SUN9I_USB is not set
|
||||
CONFIG_AHCI_SUNXI=m
|
||||
CONFIG_SPI_SUN4I=m
|
||||
CONFIG_SPI_SUN6I=m
|
||||
|
@ -202,6 +200,7 @@ CONFIG_GPIO_PCA953X=m
|
|||
CONFIG_TOUCHSCREEN_SUN4I=m
|
||||
CONFIG_MFD_AXP20X=y
|
||||
CONFIG_REGULATOR_AXP20X=m
|
||||
CONFIG_AXP288_FUEL_GAUGE=m
|
||||
CONFIG_IR_SUNXI=m
|
||||
CONFIG_MDIO_SUN4I=m
|
||||
CONFIG_SUN4I_EMAC=m
|
||||
|
@ -225,14 +224,14 @@ CONFIG_SOC_EXYNOS5410=y
|
|||
CONFIG_SOC_EXYNOS5800=y
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_ARM_EXYNOS_CPUFREQ=m
|
||||
CONFIG_ARM_EXYNOS5250_CPUFREQ=y
|
||||
CONFIG_ARM_EXYNOS5440_CPUFREQ=y
|
||||
CONFIG_ARM_EXYNOS5440_CPUFREQ=m
|
||||
CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW=y
|
||||
CONFIG_ARM_EXYNOS_CPUIDLE=y
|
||||
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
|
||||
# CONFIG_ARM_EXYNOS_CPUIDLE is not set
|
||||
CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m
|
||||
# CONFIG_EXYNOS5420_MCPM not set
|
||||
CONFIG_ARM_EXYNOS_CPUFREQ=m
|
||||
CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
|
||||
|
||||
CONFIG_I2C_EXYNOS5=m
|
||||
CONFIG_I2C_S3C2410=m
|
||||
|
@ -397,6 +396,58 @@ CONFIG_RTC_DRV_AS3722=y
|
|||
CONFIG_TI_SOC_THERMAL=m
|
||||
CONFIG_TI_THERMAL=y
|
||||
|
||||
# mvebu
|
||||
CONFIG_ARCH_MVEBU=y
|
||||
CONFIG_MACH_ARMADA_370=y
|
||||
CONFIG_MACH_ARMADA_375=y
|
||||
CONFIG_MACH_ARMADA_38X=y
|
||||
CONFIG_MACH_ARMADA_39X=y
|
||||
CONFIG_MACH_ARMADA_XP=y
|
||||
CONFIG_MACH_DOVE=y
|
||||
|
||||
CONFIG_MVEBU_DEVBUS=y
|
||||
CONFIG_PCI_MVEBU=y
|
||||
CONFIG_CACHE_TAUROS2=y
|
||||
CONFIG_MV_XOR=y
|
||||
CONFIG_CRYPTO_DEV_MV_CESA=m
|
||||
CONFIG_MV643XX_ETH=m
|
||||
CONFIG_PINCTRL_MVEBU=y
|
||||
CONFIG_PINCTRL_ARMADA_370=y
|
||||
CONFIG_PINCTRL_ARMADA_XP=y
|
||||
# CONFIG_ARM_MVEBU_V7_CPUIDLE is not set
|
||||
CONFIG_PINCTRL_DOVE=y
|
||||
CONFIG_EDAC_MV64X60=m
|
||||
CONFIG_RTC_DRV_S35390A=m
|
||||
CONFIG_RTC_DRV_88PM80X=m
|
||||
CONFIG_RTC_DRV_ISL12057=m
|
||||
CONFIG_RTC_DRV_MV=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
CONFIG_MVNETA=m
|
||||
CONFIG_GPIO_MVEBU=y
|
||||
CONFIG_MVEBU_CLK_CORE=y
|
||||
CONFIG_MVEBU_CLK_COREDIV=y
|
||||
CONFIG_MMC_MVSDIO=m
|
||||
CONFIG_MMC_SDHCI_DOVE=m
|
||||
CONFIG_SPI_ORION=m
|
||||
CONFIG_USB_MV_UDC=m
|
||||
CONFIG_MVEBU_MBUS=y
|
||||
CONFIG_USB_XHCI_MVEBU=m
|
||||
CONFIG_PHY_MVEBU_SATA=y
|
||||
CONFIG_AHCI_MVEBU=m
|
||||
CONFIG_ARMADA_THERMAL=m
|
||||
CONFIG_DOVE_THERMAL=m
|
||||
CONFIG_DRM_ARMADA=m
|
||||
CONFIG_ORION_WATCHDOG=m
|
||||
CONFIG_SND_KIRKWOOD_SOC=m
|
||||
CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
|
||||
CONFIG_USB_EHCI_HCD_ORION=m
|
||||
CONFIG_MMC_SDHCI_PXAV3=m
|
||||
CONFIG_MVPP2=m
|
||||
CONFIG_COMMON_CLK_SI5351=m
|
||||
CONFIG_RTC_DRV_ARMADA38X=m
|
||||
# CONFIG_CACHE_FEROCEON_L2 is not set
|
||||
# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
|
||||
|
||||
# DRM panels
|
||||
CONFIG_DRM_PANEL=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=m
|
||||
|
@ -447,6 +498,7 @@ CONFIG_USB_CONFIGFS_SERIAL=y
|
|||
# CONFIG_USB_CONFIGFS_F_MIDI is not set
|
||||
# CONFIG_USB_CONFIGFS_F_HID is not set
|
||||
# CONFIG_USB_CONFIGFS_F_UVC is not set
|
||||
# CONFIG_USB_CONFIGFS_F_PRINTER is not set
|
||||
|
||||
# CONFIG_USB_GADGET_DEBUG is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
|
@ -495,6 +547,7 @@ CONFIG_PINCONF=y
|
|||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_SINGLE=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
# CONFIG_PINCTRL_AMD is not set
|
||||
# CONFIG_PINCTRL_SAMSUNG is not set
|
||||
# CONFIG_PINCTRL_MSM8X74 is not set
|
||||
# CONFIG_PINCTRL_BCM281XX is not set
|
||||
|
@ -551,21 +604,15 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
|||
CONFIG_I2C_MV64XXX=m
|
||||
|
||||
# HW crypto and rng
|
||||
CONFIG_CRYPTO_SHA1_ARM=m
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
# CONFIG_CRYPTO_AES_ARM_BS is not set
|
||||
CONFIG_CRYPTO_SHA1_ARM_NEON=m
|
||||
CONFIG_CRYPTO_SHA512_ARM_NEON=m
|
||||
# CONFIG_CRYPTO_SHA1_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_SHA2_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_AES_ARM_CE is not set
|
||||
# CONFIG_CRYPTO_GHASH_ARM_CE is not set
|
||||
|
||||
# DMA
|
||||
CONFIG_TI_PRIV_EDMA=y
|
||||
CONFIG_TI_EDMA=y
|
||||
|
||||
# Watchdog
|
||||
|
||||
# Mailbox
|
||||
CONFIG_MAILBOX=y
|
||||
|
||||
# MTD
|
||||
# CONFIG_MG_DISK is not set
|
||||
CONFIG_MTD_DATAFLASH=m
|
||||
|
@ -757,6 +804,9 @@ CONFIG_UBIFS_FS_ADVANCED_COMPR=y
|
|||
CONFIG_UBIFS_FS_LZO=y
|
||||
CONFIG_UBIFS_FS_ZLIB=y
|
||||
|
||||
# vfio
|
||||
# CONFIG_VFIO_PLATFORM is not set
|
||||
|
||||
# Sensors
|
||||
CONFIG_SENSORS_HTU21=m
|
||||
|
||||
|
@ -767,6 +817,8 @@ CONFIG_MFD_CROS_EC_SPI=m
|
|||
CONFIG_KEYBOARD_CROS_EC=m
|
||||
CONFIG_I2C_CROS_EC_TUNNEL=m
|
||||
CONFIG_SND_SOC_TS3A227E=m
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CROS_EC_CHARDEV=m
|
||||
|
||||
CONFIG_R8188EU=m
|
||||
# CONFIG_88EU_AP_MODE is not set
|
||||
|
@ -830,6 +882,7 @@ CONFIG_R8188EU=m
|
|||
# CONFIG_POWER_RESET_BRCMSTB is not set
|
||||
# CONFIG_INPUT_TPS65218_PWRBUTTON is not set
|
||||
# CONFIG_CLK_QORIQ is not set
|
||||
# CONFIG_QORIQ_CPUFREQ is not set
|
||||
|
||||
# Debug options. We need to deal with them at some point like x86
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# ARM A15 lpae unified arch kernel
|
||||
CONFIG_ARCH_KEYSTONE=y
|
||||
|
||||
# CONFIG_ARCH_MVEBU is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_OMAP3 is not set
|
||||
# CONFIG_ARCH_OMAP4 is not set
|
||||
|
@ -16,7 +15,6 @@ CONFIG_ARM_LPAE=y
|
|||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
|
||||
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
|
@ -29,7 +27,6 @@ CONFIG_ARM_ERRATA_773022=y
|
|||
CONFIG_KVM=y
|
||||
CONFIG_KVM_ARM_HOST=y
|
||||
CONFIG_KVM_ARM_MAX_VCPUS=8
|
||||
CONFIG_KVM_ARM_TIMER=y
|
||||
|
||||
# CONFIG_XEN is not set
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
|
@ -54,7 +51,7 @@ CONFIG_XEN_WDT=m
|
|||
CONFIG_KEYSTONE_USB_PHY=m
|
||||
CONFIG_USB_DWC3_KEYSTONE=m
|
||||
CONFIG_GPIO_DAVINCI=y
|
||||
CONFIG_I2C_DAVINCI=m
|
||||
# CONFIG_I2C_DAVINCI is not set
|
||||
CONFIG_TI_AEMIF=m
|
||||
CONFIG_POWER_RESET_KEYSTONE=y
|
||||
CONFIG_DAVINCI_WATCHDOG=m
|
||||
|
|
|
@ -52,6 +52,7 @@ CONFIG_KALLSYMS=y
|
|||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
|
@ -202,6 +203,7 @@ CONFIG_BINFMT_MISC=m
|
|||
|
||||
# CONFIG_COMMON_CLK_SI5351 is not set
|
||||
# CONFIG_COMMON_CLK_CDCE706 is not set
|
||||
# CONFIG_COMMON_CLK_PWM is not set
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
|
@ -264,6 +266,7 @@ CONFIG_MTD=m
|
|||
# CONFIG_SM_FTL is not set
|
||||
# CONFIG_MTD_OOPS is not set
|
||||
# CONFIG_MTD_SWAP is not set
|
||||
# CONFIG_MTD_PARTITIONED_MASTER is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
|
@ -364,6 +367,7 @@ CONFIG_BLK_DEV_OSD=m
|
|||
CONFIG_BLK_DEV_RAM=m
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_BLK_DEV_PMEM=m
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_BLK_DEV_IO_TRACE=y
|
||||
|
||||
|
@ -382,11 +386,13 @@ CONFIG_BLK_DEV_THROTTLING=y
|
|||
# CONFIG_BLK_DEV_HD is not set
|
||||
# CONFIG_BLK_DEV_RSXX is not set
|
||||
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_SCSI_VIRTIO=m
|
||||
CONFIG_VIRTIO_BLK=m
|
||||
CONFIG_VIRTIO_PCI=m
|
||||
CONFIG_VIRTIO_PCI_LEGACY=y
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
CONFIG_VIRTIO_INPUT=m
|
||||
CONFIG_VIRTIO_MMIO=m
|
||||
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
|
||||
CONFIG_VIRTIO_NET=m
|
||||
|
@ -642,6 +648,7 @@ CONFIG_MD=y
|
|||
CONFIG_BLK_DEV_MD=y
|
||||
CONFIG_MD_AUTODETECT=y
|
||||
CONFIG_MD_FAULTY=m
|
||||
# CONFIG_MD_CLUSTER is not set
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_RAID0=m
|
||||
|
@ -655,6 +662,7 @@ CONFIG_BCACHE=m
|
|||
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
# CONFIG_DM_MQ_DEFAULT is not set
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_DEBUG=y
|
||||
CONFIG_DM_DELAY=m
|
||||
|
@ -676,6 +684,7 @@ CONFIG_DM_RAID=m
|
|||
CONFIG_DM_FLAKEY=m
|
||||
CONFIG_DM_VERITY=m
|
||||
CONFIG_DM_SWITCH=m
|
||||
CONFIG_DM_LOG_WRITES=m
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -1149,6 +1158,7 @@ CONFIG_IP_DCCP_CCID3=y
|
|||
#
|
||||
CONFIG_TIPC=m
|
||||
# CONFIG_TIPC_MEDIA_IB is not set
|
||||
CONFIG_TIPC_MEDIA_UDP=y
|
||||
|
||||
CONFIG_NETLABEL=y
|
||||
|
||||
|
@ -1359,7 +1369,6 @@ CONFIG_ATL1=m
|
|||
CONFIG_ATL1C=m
|
||||
CONFIG_ATL1E=m
|
||||
CONFIG_NET_CADENCE=y
|
||||
CONFIG_ARM_AT91_ETHER=m
|
||||
CONFIG_MACB=m
|
||||
|
||||
CONFIG_NET_VENDOR_BROCADE=y
|
||||
|
@ -1856,10 +1865,20 @@ CONFIG_IEEE802154_CC2520=m
|
|||
|
||||
CONFIG_MAC802154=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
CONFIG_MPLS_ROUTING=m
|
||||
|
||||
CONFIG_NET_SWITCHDEV=y
|
||||
|
||||
CONFIG_6LOWPAN=m
|
||||
CONFIG_6LOWPAN_NHC=m
|
||||
CONFIG_6LOWPAN_NHC_DEST=m
|
||||
CONFIG_6LOWPAN_NHC_FRAGMENT=m
|
||||
CONFIG_6LOWPAN_NHC_HOP=m
|
||||
CONFIG_6LOWPAN_NHC_IPV6=m
|
||||
CONFIG_6LOWPAN_NHC_MOBILITY=m
|
||||
CONFIG_6LOWPAN_NHC_ROUTING=m
|
||||
CONFIG_6LOWPAN_NHC_UDP=m
|
||||
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -1923,6 +1942,7 @@ CONFIG_NFC_ST21NFCA=m
|
|||
CONFIG_NFC_ST21NFCA_I2C=m
|
||||
# CONFIG_NFC_ST21NFCB is not set
|
||||
# CONFIG_NFC_ST21NFCB_I2C is not set
|
||||
# CONFIG_NFC_NXP_NCI is not set
|
||||
# CONFIG_NFC_NCI_SPI is not set
|
||||
|
||||
|
||||
|
@ -1972,6 +1992,7 @@ CONFIG_BT_BREDR=y
|
|||
CONFIG_BT_LE=y
|
||||
CONFIG_BT_6LOWPAN=m
|
||||
# CONFIG_BT_SELFTEST is not set
|
||||
# CONFIG_BT_DEBUGFS is not set
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_CMTP=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
|
@ -1987,11 +2008,14 @@ CONFIG_BT_HIDP=m
|
|||
CONFIG_BT_HCIBTUSB=m
|
||||
# Disable the BT_HCIUSB driver.
|
||||
# It sucks more power than BT_HCIBTUSB which has the same functionality.
|
||||
CONFIG_BT_HCIBTUSB_BCM=y
|
||||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_ATH3K=y
|
||||
CONFIG_BT_HCIUART_3WIRE=y
|
||||
CONFIG_BT_HCIUART_INTEL=y
|
||||
CONFIG_BT_HCIUART_BCM=y
|
||||
CONFIG_BT_HCIDTL1=m
|
||||
CONFIG_BT_HCIBT3C=m
|
||||
CONFIG_BT_HCIBLUECARD=m
|
||||
|
@ -2225,6 +2249,8 @@ CONFIG_MOUSE_PS2=y
|
|||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
CONFIG_MOUSE_PS2_ELANTECH=y
|
||||
CONFIG_MOUSE_PS2_SENTELIC=y
|
||||
# Fedora 22 and 23 don't have a new enough xorg-x11-drv-vmmouse. Revisit
|
||||
# CONFIG_MOUSE_PS2_VMMOUSE is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_MOUSE_VSXXXAA=m
|
||||
CONFIG_MOUSE_APPLETOUCH=m
|
||||
|
@ -2315,6 +2341,8 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
|
|||
# CONFIG_TOUCHSCREEN_AD7877 is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC2005 is not set
|
||||
# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
|
||||
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
|
||||
# CONFIG_TOUCHSCREEN_SX8654 is not set
|
||||
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_E3X0_BUTTON=m
|
||||
|
@ -2366,7 +2394,7 @@ CONFIG_TCG_TIS=m
|
|||
CONFIG_TCG_NSC=m
|
||||
CONFIG_TCG_ATMEL=m
|
||||
# CONFIG_TCG_INFINEON is not set
|
||||
# CONFIG_TCG_TIS_I2C_ST33 is not set
|
||||
# CONFIG_TCG_TIS_ST33ZP24 is not set
|
||||
# CONFIG_TCG_XEN is not set
|
||||
CONFIG_TELCLOCK=m
|
||||
|
||||
|
@ -2394,7 +2422,6 @@ CONFIG_CYCLADES=m
|
|||
CONFIG_SERIAL_JSM=m
|
||||
# CONFIG_SERIAL_SCCNXP is not set
|
||||
# CONFIG_SERIAL_SC16IS7XX is not set
|
||||
# CONFIG_SERIAL_MFD_HSU is not set
|
||||
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
|
@ -2573,6 +2600,7 @@ CONFIG_SENSORS_MCP3021=m
|
|||
CONFIG_SENSORS_NCT6775=m
|
||||
CONFIG_SENSORS_NCT6683=m
|
||||
CONFIG_SENSORS_NCT7802=m
|
||||
CONFIG_SENSORS_NCT7904=m
|
||||
CONFIG_SENSORS_NTC_THERMISTOR=m
|
||||
CONFIG_SENSORS_PC87360=m
|
||||
CONFIG_SENSORS_PC87427=m
|
||||
|
@ -2688,6 +2716,7 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
|||
# CONFIG_APDS9300 is not set
|
||||
CONFIG_CM32181=m
|
||||
# CONFIG_CM3232 is not set
|
||||
# CONFIG_CM3323 is not set
|
||||
# CONFIG_CM36651 is not set
|
||||
# CONFIG_GP2AP020A00F is not set
|
||||
# CONFIG_TSL2583 is not set
|
||||
|
@ -2756,6 +2785,7 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
|
|||
# CONFIG_ADIS16480 is not set
|
||||
# CONFIG_DHT11 is not set
|
||||
# CONFIG_MPL3115 is not set
|
||||
# CONFIG_MS5611 is not set
|
||||
# CONFIG_MPL115 is not set
|
||||
# CONFIG_SI7005 is not set
|
||||
# CONFIG_SI7020 is not set
|
||||
|
@ -2902,6 +2932,7 @@ CONFIG_WM831X_WATCHDOG=m
|
|||
# CONFIG_MEN_A21_WDT is not set
|
||||
# CONFIG_GPIO_WATCHDOG is not set
|
||||
# CONFIG_XILINX_WATCHDOG is not set
|
||||
# CONFIG_CADENCE_WATCHDOG is not set
|
||||
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||
|
@ -2919,6 +2950,7 @@ CONFIG_RTC_INTF_PROC=y
|
|||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
CONFIG_RTC_DRV_CMOS=y
|
||||
CONFIG_RTC_DRV_ABX80X=m
|
||||
CONFIG_RTC_DRV_DS1307=m
|
||||
CONFIG_RTC_DRV_DS1511=m
|
||||
CONFIG_RTC_DRV_DS1553=m
|
||||
|
@ -3017,6 +3049,7 @@ CONFIG_DRM_CIRRUS_QEMU=m # do not enable on f17 or older
|
|||
# CONFIG_DRM_TDFX is not set
|
||||
# CONFIG_DRM_R128 is not set
|
||||
CONFIG_DRM_RADEON=m
|
||||
CONFIG_DRM_RADEON_USERPTR=y
|
||||
# CONFIG_DRM_RADEON_UMS is not set
|
||||
# CONFIG_DRM_I810 is not set
|
||||
# CONFIG_DRM_MGA is not set
|
||||
|
@ -3042,9 +3075,11 @@ CONFIG_DRM_VMWGFX_FBCON=y
|
|||
CONFIG_DRM_QXL=m
|
||||
CONFIG_DRM_BOCHS=m
|
||||
CONFIG_DRM_PTN3460=m
|
||||
CONFIG_DRM_PS8622=m
|
||||
# CONFIG_DRM_PANEL is not set
|
||||
# CONFIG_DRM_PANEL_SIMPLE is not set
|
||||
# CONFIG_DRM_PANEL_S6E8AA0 is not set
|
||||
CONFIG_DRM_VGEM=m
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
|
@ -3071,12 +3106,14 @@ CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
|
|||
CONFIG_MEDIA_RADIO_SUPPORT=y
|
||||
CONFIG_MEDIA_RC_SUPPORT=y
|
||||
CONFIG_MEDIA_CONTROLLER=y
|
||||
# CONFIG_MEDIA_CONTROLLER_DVB is not set
|
||||
# CONFIG_MEDIA_SDR_SUPPORT is not set
|
||||
CONFIG_VIDEO_DEV=m
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||
# CONFIG_VIDEO_VIVI is not set
|
||||
# CONFIG_VIDEO_XILINX is not set
|
||||
# CONFIG_USB_SI4713 is not set
|
||||
# CONFIG_PLATFORM_SI4713 is not set
|
||||
# CONFIG_I2C_SI4713 is not set
|
||||
|
@ -3678,6 +3715,7 @@ CONFIG_HID_BATTERY_STRENGTH=y
|
|||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
CONFIG_HID_PID=y
|
||||
CONFIG_HID_LOGITECH=m
|
||||
CONFIG_LOGITECH_FF=y
|
||||
CONFIG_HID_LOGITECH_DJ=m
|
||||
CONFIG_HID_LOGITECH_HIDPP=m
|
||||
|
@ -3688,22 +3726,28 @@ CONFIG_HID_WACOM=m
|
|||
CONFIG_ZEROPLUS_FF=y
|
||||
CONFIG_USB_HIDDEV=y
|
||||
CONFIG_USB_IDMOUSE=m
|
||||
CONFIG_HID_CYPRESS=m
|
||||
CONFIG_DRAGONRISE_FF=y
|
||||
CONFIG_GREENASIA_FF=y
|
||||
CONFIG_SMARTJOYPLUS_FF=y
|
||||
CONFIG_LOGIG940_FF=y
|
||||
CONFIG_LOGIWHEELS_FF=y
|
||||
CONFIG_HID_MAGICMOUSE=y
|
||||
CONFIG_HID_MICROSOFT=m
|
||||
CONFIG_HID_MONTEREY=m
|
||||
CONFIG_HID_MULTITOUCH=m
|
||||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_PLANTRONICS=m
|
||||
CONFIG_HID_PRIMAX=m
|
||||
CONFIG_HID_BETOP_FF=m
|
||||
CONFIG_HID_CHERRY=m
|
||||
CONFIG_HID_CHICONY=m
|
||||
CONFIG_HID_PRODIKEYS=m
|
||||
CONFIG_HID_DRAGONRISE=m
|
||||
CONFIG_HID_GYRATION=m
|
||||
CONFIG_HID_ICADE=m
|
||||
CONFIG_HID_TWINHAN=m
|
||||
CONFIG_HID_KENSINGTON=m
|
||||
CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PENMOUNT=m
|
||||
|
@ -3730,9 +3774,11 @@ CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
|
|||
CONFIG_HID_SENSOR_ALS=m
|
||||
# CONFIG_HID_SENSOR_PROX is not set
|
||||
CONFIG_HID_SENSOR_ACCEL_3D=m
|
||||
# CONFIG_HID_SENSOR_CUSTOM_SENSOR is not set
|
||||
CONFIG_HID_EMS_FF=m
|
||||
CONFIG_HID_ELECOM=m
|
||||
CONFIG_HID_ELO=m
|
||||
CONFIG_HID_EZKEY=m
|
||||
CONFIG_HID_UCLOGIC=m
|
||||
CONFIG_HID_WALTOP=m
|
||||
CONFIG_HID_ACRUX=m
|
||||
|
@ -3741,7 +3787,6 @@ CONFIG_HID_KEYTOUCH=m
|
|||
CONFIG_HID_LCPOWER=m
|
||||
CONFIG_HID_HOLTEK=m
|
||||
CONFIG_HOLTEK_FF=y
|
||||
CONFIG_HID_HUION=m
|
||||
CONFIG_HID_GT683R=m
|
||||
CONFIG_HID_SPEEDLINK=m
|
||||
CONFIG_HID_WIIMOTE=m
|
||||
|
@ -3750,6 +3795,9 @@ CONFIG_HID_SAITEK=m
|
|||
CONFIG_HID_TIVO=m
|
||||
CONFIG_HID_GENERIC=y
|
||||
CONFIG_HID_AUREAL=m
|
||||
CONFIG_HID_A4TECH=m
|
||||
CONFIG_HID_APPLE=m
|
||||
CONFIG_HID_BELKIN=m
|
||||
CONFIG_HID_APPLEIR=m
|
||||
# CONFIG_HID_CP2112 is not set
|
||||
CONFIG_HID_LENOVO=m
|
||||
|
@ -3992,6 +4040,7 @@ CONFIG_USB_YUREX=m
|
|||
CONFIG_USB_EZUSB_FX2=m
|
||||
CONFIG_USB_HSIC_USB3503=m
|
||||
# CONFIG_USB_LINK_LAYER_TEST is not set
|
||||
CONFIG_USB_CHAOSKEY=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_LD=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
|
@ -4081,6 +4130,7 @@ CONFIG_MFD_VIPERBOARD=m
|
|||
# CONFIG_MFD_CS5535 is not set
|
||||
# CONFIG_MFD_STMPE is not set
|
||||
# CONFIG_MFD_MAX8998 is not set
|
||||
# CONFIG_MFD_MT6397 is not set
|
||||
# CONFIG_MFD_TPS6586X is not set
|
||||
# CONFIG_MFD_TC3589X is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
|
@ -4110,6 +4160,8 @@ CONFIG_MFD_VIPERBOARD=m
|
|||
# CONFIG_MFD_RN5T618 is not set
|
||||
# CONFIG_MFD_DA9150 is not set
|
||||
# CONFIG_MFD_RT5033 is not set
|
||||
# CONFIG_MFD_SKY81452 is not set
|
||||
# CONFIG_MFD_MAX77843 is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
# CONFIG_INTEL_SOC_PMIC is not set
|
||||
|
||||
|
@ -4126,6 +4178,7 @@ CONFIG_EXT4_FS=y
|
|||
CONFIG_EXT4_USE_FOR_EXT23=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
# CONFIG_EXT4_ENCRYPTION is not set
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
|
@ -4550,6 +4603,7 @@ CONFIG_CRYPTO_FIPS=y
|
|||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_CRYPTO_USER_API_RNG=y
|
||||
CONFIG_CRYPTO_USER_API_AEAD=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
# Note, CONFIG_CRYPTO_MANAGER_DISABLE_TESTS needs to be unset, or FIPS will be disabled.
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
|
@ -4703,7 +4757,7 @@ CONFIG_SCHED_DEBUG=y
|
|||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_CFS_BANDWIDTH=y
|
||||
CONFIG_SCHED_OMIT_FRAME_POINTER=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_SCHED_AUTOGROUP=y
|
||||
|
||||
CONFIG_CPUSETS=y
|
||||
|
@ -4842,6 +4896,7 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
|
|||
# CONFIG_SND_SOC_PCM1792A is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
# CONFIG_SND_SOC_PCM512x_SPI is not set
|
||||
# CONFIG_SND_SOC_QCOM is not set
|
||||
# CONFIG_SND_SOC_SGTL5000 is not set
|
||||
# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
|
||||
# CONFIG_SND_SOC_TAS5086 is not set
|
||||
|
@ -4859,6 +4914,8 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
|
|||
# CONFIG_SND_SOC_WM8770 is not set
|
||||
# CONFIG_SND_SOC_WM8776 is not set
|
||||
# CONFIG_SND_SOC_WM8804 is not set
|
||||
# CONFIG_SND_SOC_WM8804_I2C is not set
|
||||
# CONFIG_SND_SOC_WM8804_SPI is not set
|
||||
# CONFIG_SND_SOC_WM8903 is not set
|
||||
# CONFIG_SND_SOC_WM8962 is not set
|
||||
# CONFIG_SND_SOC_TPA6130A2 is not set
|
||||
|
@ -4917,6 +4974,7 @@ CONFIG_LEDS_DELL_NETBOOKS=m
|
|||
# CONFIG_LEDS_LP8501 is not set
|
||||
# CONFIG_LEDS_LP8860 is not set
|
||||
# CONFIG_LEDS_PCA963X is not set
|
||||
# CONFIG_LEDS_PM8941_WLED is not set
|
||||
# CONFIG_LEDS_SYSCON is not set
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=m
|
||||
|
@ -4955,6 +5013,9 @@ CONFIG_DW_DMAC_PCI=m
|
|||
# CONFIG_FSL_EDMA is not set
|
||||
# CONFIG_NBPFAXI_DMA is not set
|
||||
CONFIG_ASYNC_TX_DMA=y
|
||||
# CONFIG_HSU_DMA is not set
|
||||
# CONFIG_HSU_DMA_PCI is not set
|
||||
# CONFIG_XGENE_DMA is not set
|
||||
|
||||
CONFIG_UNUSED_SYMBOLS=y
|
||||
|
||||
|
@ -4975,6 +5036,7 @@ CONFIG_FUNCTION_PROFILER=y
|
|||
# CONFIG_TRACEPOINT_BENCHMARK is not set
|
||||
CONFIG_RING_BUFFER_BENCHMARK=m
|
||||
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
|
||||
# CONFIG_TRACE_ENUM_MAP_FILE is not set
|
||||
# CONFIG_RBTREE_TEST is not set
|
||||
# CONFIG_INTERVAL_TREE_TEST is not set
|
||||
CONFIG_FUNCTION_TRACER=y
|
||||
|
@ -4991,6 +5053,7 @@ CONFIG_HZ_1000=y
|
|||
CONFIG_NO_HZ=y
|
||||
|
||||
# CONFIG_SCHED_STACK_END_CHECK is not set
|
||||
# CONFIG_DEBUG_TIMEKEEPING is not set
|
||||
CONFIG_TIMER_STATS=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
|
@ -5033,6 +5096,7 @@ CONFIG_APM_POWER=m
|
|||
CONFIG_POWER_RESET=y
|
||||
# CONFIG_POWER_RESET_LTC2952 is not set
|
||||
# CONFIG_POWER_RESET_SYSCON is not set
|
||||
# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_POWER_RESET_RESTART is not set
|
||||
|
||||
|
@ -5162,7 +5226,6 @@ CONFIG_STAGING_MEDIA=y
|
|||
# CONFIG_I2C_BCM2048 is not set
|
||||
# CONFIG_DT3155 is not set
|
||||
# CONFIG_PRISM2_USB is not set
|
||||
# CONFIG_ECHO is not set
|
||||
CONFIG_USB_ATMEL=m
|
||||
# CONFIG_COMEDI is not set
|
||||
# CONFIG_PANEL is not set
|
||||
|
@ -5213,6 +5276,7 @@ CONFIG_USBIP_HOST=m
|
|||
# CONFIG_DVB_MN88473 is not set
|
||||
# CONFIG_FB_SM7XX is not set
|
||||
# CONFIG_FB_TFT is not set
|
||||
# CONFIG_FB_SM750 is not set
|
||||
# END OF STAGING
|
||||
|
||||
#
|
||||
|
@ -5242,6 +5306,8 @@ CONFIG_RCU_NOCB_CPU=y
|
|||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
# CONFIG_RCU_TORTURE_TEST_SLOW_INIT is not set
|
||||
CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
# CONFIG_RCU_CPU_STALL_INFO is not set
|
||||
# CONFIG_TASKS_RCU is not set
|
||||
|
@ -5330,6 +5396,7 @@ CONFIG_GPIO_VIPERBOARD=m
|
|||
# CONFIG_GPIO_MC33880 is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_GPIO_XILINX is not set
|
||||
# CONFIG_GPIO_ALTERA is not set
|
||||
|
||||
# FIXME: Why?
|
||||
|
||||
|
@ -5353,7 +5420,7 @@ CONFIG_TCM_IBLOCK=m
|
|||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_TCM_FC=m
|
||||
CONFIG_TCM_USER=m
|
||||
CONFIG_TCM_USER2=m
|
||||
|
||||
CONFIG_HWSPINLOCK=m
|
||||
|
||||
|
@ -5367,6 +5434,7 @@ CONFIG_PSTORE_RAM=m
|
|||
# CONFIG_TEST_USER_COPY is not set
|
||||
# CONFIG_TEST_BPF is not set
|
||||
# CONFIG_TEST_UDELAY is not set
|
||||
# CONFIG_MEMTEST is not set
|
||||
# CONFIG_TEST_HEXDUMP is not set
|
||||
# CONFIG_TEST_RHASHTABLE is not set
|
||||
|
||||
|
@ -5403,6 +5471,7 @@ CONFIG_FMC_WRITE_EEPROM=m
|
|||
CONFIG_FMC_CHARDEV=m
|
||||
|
||||
# CONFIG_GENWQE is not set
|
||||
CONFIG_ECHO=m
|
||||
|
||||
CONFIG_POWERCAP=y
|
||||
# CONFIG_THUNDERBOLT is not set
|
||||
|
@ -5436,11 +5505,7 @@ CONFIG_POWERCAP=y
|
|||
|
||||
# CONFIG_GLOB_SELFTEST is not set
|
||||
|
||||
# CONFIG_SBSAUART_TTY is not set
|
||||
|
||||
# CONFIG_SERIAL_8250_FINTEK is not set
|
||||
|
||||
# set in x86-generic presently
|
||||
# CONFIG_TOUCHSCREEN_GOODIX is not set
|
||||
|
||||
CONFIG_PCI_ECAM=y
|
||||
|
|
|
@ -326,6 +326,7 @@ CONFIG_I2C_MPC=m
|
|||
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
|
||||
# CONFIG_CRYPTO_SHA1_PPC is not set
|
||||
# CONFIG_CRYPTO_MD5_PPC is not set
|
||||
|
||||
# CONFIG_CAN_FLEXCAN is not set
|
||||
# CONFIG_NET_VENDOR_XILINX is not set
|
||||
|
|
|
@ -11,7 +11,6 @@ CONFIG_PPC_MAPLE=y
|
|||
CONFIG_PPC_PSERIES=y
|
||||
CONFIG_PPC_PMAC=y
|
||||
CONFIG_PPC_POWERNV=y
|
||||
CONFIG_PPC_POWERNV_RTAS=y
|
||||
CONFIG_SENSORS_IBMPOWERNV=y
|
||||
CONFIG_HW_RANDOM_POWERNV=m
|
||||
CONFIG_POWERNV_CPUFREQ=m
|
||||
|
@ -20,7 +19,6 @@ CONFIG_SCOM_DEBUGFS=y
|
|||
# CONFIG_PPC_PASEMI is not set
|
||||
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
|
||||
# CONFIG_PPC_PS3 is not set
|
||||
# CONFIG_PPC_CELLEB is not set
|
||||
# CONFIG_PPC_CELL_QPACE is not set
|
||||
CONFIG_PMAC_RACKMETER=m
|
||||
CONFIG_IBMEBUS=y
|
||||
|
@ -70,7 +68,6 @@ CONFIG_PATA_SCC=m
|
|||
CONFIG_APM_EMULATION=m
|
||||
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_NR_CPUS=1024
|
||||
# CONFIG_FB_PLATINUM is not set
|
||||
# CONFIG_FB_VALKYRIE is not set
|
||||
|
@ -119,7 +116,6 @@ CONFIG_EDAC_CPC925=m
|
|||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_FORCE_MAX_ZONEORDER=9
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
|
||||
CONFIG_VSX=y
|
||||
|
||||
|
@ -135,10 +131,12 @@ CONFIG_RCU_FANOUT=64
|
|||
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_KVM_BOOK3S_64_PR=m
|
||||
# CONFIG_KVM_BOOK3S_HV_EXIT_TIMING is not set
|
||||
# CONFIG_KVM_EXIT_TIMING is not set
|
||||
CONFIG_KVM_XICS=y
|
||||
|
||||
|
@ -173,6 +171,8 @@ CONFIG_CRYPTO_DEV_NX=y
|
|||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_CRYPTO_DEV_NX_COMPRESS=m
|
||||
CONFIG_CRYPTO_DEV_VMX=y
|
||||
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=y
|
||||
|
||||
CONFIG_CXL=m
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ CONFIG_POWER7_CPU=y
|
|||
CONFIG_PPC_PSERIES=y
|
||||
# CONFIG_PPC_PMAC is not set
|
||||
CONFIG_PPC_POWERNV=y
|
||||
CONFIG_PPC_POWERNV_RTAS=y
|
||||
CONFIG_HW_RANDOM_POWERNV=m
|
||||
CONFIG_SENSORS_IBMPOWERNV=y
|
||||
CONFIG_POWERNV_CPUFREQ=m
|
||||
|
@ -15,7 +14,6 @@ CONFIG_SCOM_DEBUGFS=y
|
|||
# CONFIG_PPC_PASEMI is not set
|
||||
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
|
||||
# CONFIG_PPC_PS3 is not set
|
||||
# CONFIG_PPC_CELLEB is not set
|
||||
# CONFIG_PPC_CELL_QPACE is not set
|
||||
CONFIG_IBMEBUS=y
|
||||
CONFIG_RTAS_FLASH=y
|
||||
|
@ -60,7 +58,6 @@ CONFIG_PATA_SCC=m
|
|||
CONFIG_APM_EMULATION=m
|
||||
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_NR_CPUS=1024
|
||||
# CONFIG_FB_PLATINUM is not set
|
||||
# CONFIG_FB_VALKYRIE is not set
|
||||
|
@ -109,7 +106,6 @@ CONFIG_EDAC_CPC925=m
|
|||
CONFIG_FRAME_WARN=2048
|
||||
|
||||
CONFIG_FORCE_MAX_ZONEORDER=9
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
|
||||
CONFIG_VSX=y
|
||||
|
||||
|
@ -125,10 +121,12 @@ CONFIG_RCU_FANOUT=64
|
|||
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_KVM_BOOK3S_64_PR=m
|
||||
# CONFIG_KVM_BOOK3S_HV_EXIT_TIMING is not set
|
||||
# CONFIG_KVM_EXIT_TIMING is not set
|
||||
CONFIG_KVM_XICS=y
|
||||
|
||||
|
@ -163,6 +161,8 @@ CONFIG_CRYPTO_DEV_NX=y
|
|||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_CRYPTO_DEV_NX_COMPRESS=m
|
||||
CONFIG_CRYPTO_DEV_VMX=y
|
||||
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=y
|
||||
|
||||
CONFIG_CXL=m
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
CONFIG_64BIT=y
|
||||
# CONFIG_MARCH_G5 is not set
|
||||
# CONFIG_MARCH_Z900 is not set
|
||||
CONFIG_MARCH_Z9_109=y
|
||||
# CONFIG_MARCH_Z990 is not set
|
||||
|
@ -147,10 +146,6 @@ CONFIG_DIAG288_WATCHDOG=m
|
|||
CONFIG_VMLOGRDR=m
|
||||
CONFIG_MONREADER=m
|
||||
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
|
||||
# CONFIG_CLAW is not set
|
||||
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
# CONFIG_MII is not set
|
||||
|
@ -176,7 +171,6 @@ CONFIG_CTCM=m
|
|||
CONFIG_QETH_L2=m
|
||||
CONFIG_QETH_L3=m
|
||||
CONFIG_CRYPTO_SHA512_S390=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
# CONFIG_KVM_S390_UCONTROL is not set
|
||||
CONFIG_S390_GUEST=y
|
||||
|
|
|
@ -219,3 +219,4 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
# CONFIG_COMMON_CLK_SI570 is not set
|
||||
# CONFIG_COMMON_CLK_QCOM is not set
|
||||
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
|
||||
# CONFIG_KEYBOARD_BCM is not set
|
||||
|
|
|
@ -257,7 +257,6 @@ CONFIG_CRASH_DUMP=y
|
|||
CONFIG_PROC_VMCORE=y
|
||||
CONFIG_CRASH=m
|
||||
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
CONFIG_KVM_INTEL=m
|
||||
CONFIG_KVM_AMD=m
|
||||
|
@ -353,6 +352,7 @@ CONFIG_HP_ILO=m
|
|||
|
||||
CONFIG_BACKLIGHT_APPLE=m
|
||||
|
||||
CONFIG_X86_PMEM_LEGACY=y
|
||||
|
||||
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
|
||||
|
||||
|
@ -427,7 +427,6 @@ CONFIG_INTEL_IDLE=y
|
|||
CONFIG_F71808E_WDT=m
|
||||
CONFIG_HPWDT_NMI_DECODING=y
|
||||
# CONFIG_MFD_TPS6586X is not set
|
||||
# CONFIG_INTEL_MID_DMAC is not set
|
||||
# CONFIG_GPIO_INTEL_MID is not set
|
||||
CONFIG_PCH_DMA=m
|
||||
CONFIG_INTEL_IPS=m
|
||||
|
@ -491,6 +490,7 @@ CONFIG_NFC_MICROREAD_MEI=m
|
|||
CONFIG_X86_INTEL_LPSS=y
|
||||
|
||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||
# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
|
||||
|
||||
CONFIG_IOSF_MBI=m
|
||||
# CONFIG_IOSF_MBI_DEBUG is not set
|
||||
|
@ -500,6 +500,8 @@ CONFIG_PWM_LPSS_PLATFORM=m
|
|||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BAYTRAIL=y
|
||||
CONFIG_PINCTRL_CHERRYVIEW=m
|
||||
# CONFIG_PINCTRL_AMD is not set
|
||||
CONFIG_PINCTRL_SUNRISEPOINT=m
|
||||
|
||||
#baytrail/cherrytrail stuff
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
|
|
|
@ -9,10 +9,10 @@ Upstream-status: Fedora mustard
|
|||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 9a782b02e4d5..d97b5032d4b0 100644
|
||||
index dc24dec..1598edb 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1135,7 +1135,7 @@ config DEBUG_BLK_CGROUP
|
||||
@@ -1144,7 +1144,7 @@ config DEBUG_BLK_CGROUP
|
||||
endif # CGROUPS
|
||||
|
||||
config CHECKPOINT_RESTORE
|
||||
|
@ -21,12 +21,12 @@ index 9a782b02e4d5..d97b5032d4b0 100644
|
|||
default n
|
||||
help
|
||||
Enables additional kernel features in a sake of checkpoint/restore.
|
||||
@@ -1146,7 +1146,7 @@ config CHECKPOINT_RESTORE
|
||||
@@ -1155,7 +1155,7 @@ config CHECKPOINT_RESTORE
|
||||
If unsure, say N here.
|
||||
|
||||
menuconfig NAMESPACES
|
||||
- bool "Namespaces support" if EXPERT
|
||||
+ bool "Namespaces support"
|
||||
depends on MULTIUSER
|
||||
default !EXPERT
|
||||
help
|
||||
Provides the way to make tasks work with different objects using
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Thu, 29 Jan 2015 14:03:17 -0500
|
||||
Subject: [PATCH] drm/i915: Disable verbose state checks
|
||||
|
||||
For stable releases, we disable the verbose state checks in the i915 driver.
|
||||
They are mostly for development purposes and they fill the retrace server
|
||||
to the point of uselessness. We leave these enabled in rawhide kernels,
|
||||
where they are both more likely to get attention from upstream and more
|
||||
likely to be fixable.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_params.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
|
||||
index 44f2262a5553..09566acd995d 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_params.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_params.c
|
||||
@@ -51,7 +51,7 @@ struct i915_params i915 __read_mostly = {
|
||||
.disable_vtd_wa = 0,
|
||||
.use_mmio_flip = 0,
|
||||
.mmio_debug = 0,
|
||||
- .verbose_state_checks = 1,
|
||||
+ .verbose_state_checks = 0,
|
||||
.nuclear_pageflip = 0,
|
||||
};
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
|
||||
Date: Wed, 20 May 2015 16:32:34 +0300
|
||||
Subject: [PATCH] drm/i915: Fix ilk watermarks calculation when primary plane
|
||||
is disabled
|
||||
|
||||
On Fedora 21 or 22, when the transition from the X server to the wayland
|
||||
compositor is done, the CRTC with the login screen is left active with a
|
||||
disabled fb. A cursor ioctl after the transition causes the watermarks
|
||||
to be updated, but due to the logic in intel_crtc_active() checking for
|
||||
the primary plane fb, the update considers all planes to be disabled,
|
||||
untimately setting the wrong watermark values and causing screen
|
||||
flicker. Since the crtc is active, a modeset done later is skipped and
|
||||
replaced with a flip, which doesn't update the watermarks.
|
||||
|
||||
This regression was introduced somewhere between v3.16 and v3.17.
|
||||
Another issue prevented me from doing a full bisect, but the issue was
|
||||
introduced in one of the following skipped commits:
|
||||
|
||||
commit 7707e6535f43328e05e4729ac96eee864b90e8a4
|
||||
Author: Rob Clark <robdclark@gmail.com>
|
||||
Date: Thu Jul 17 23:30:04 2014 -0400
|
||||
|
||||
drm/i915: use helpers
|
||||
|
||||
commit ca5a1b9ba0fb5291b555a23b76dbe5f6c30bfd7a
|
||||
Merge: c7dbc6c 3488229
|
||||
Author: Dave Airlie <airlied@redhat.com>
|
||||
Date: Wed Jul 9 10:38:42 2014 +1000
|
||||
|
||||
Merge tag 'drm-intel-next-2014-06-20' of git://anongit.freedesktop.org/drm-intel into drm-next
|
||||
|
||||
commit c51f71679042a5f388d9580ffbede14c897f1e86
|
||||
Merge: b957f45 7b3c29f
|
||||
Author: Dave Airlie <airlied@redhat.com>
|
||||
Date: Sat Jul 19 16:43:41 2014 +1000
|
||||
|
||||
Merge tag 'drm-intel-next-2014-07-11' of git://anongit.freedesktop.org/drm-intel into drm-next
|
||||
|
||||
This patch is a simplified version of the following commits:
|
||||
|
||||
commit 3dd512fbda0d87d1c3fb44bf878b262baee98fb6
|
||||
Author: Matt Roper <matthew.d.roper@intel.com>
|
||||
Date: Fri Feb 27 10:12:00 2015 -0800
|
||||
|
||||
drm/i915: Kill intel_crtc->cursor_{width, height} (v2)
|
||||
|
||||
commit 54da691deb123c045259ebf4f5c67381244f58f1
|
||||
Author: Thomas Gummerer <t.gummerer@gmail.com>
|
||||
Date: Thu May 14 09:16:39 2015 +0200
|
||||
|
||||
drm/i915: fix screen flickering
|
||||
|
||||
commit 3ef00284e6a48f7deb0784ccca0478ebb7d4bcfc
|
||||
Author: Matt Roper <matthew.d.roper@intel.com>
|
||||
Date: Mon Mar 9 10:19:24 2015 -0700
|
||||
|
||||
drm/i915: Use crtc->state->active in ilk/skl watermark calculations (v3)
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90508
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1218688
|
||||
Cc: stable@vger.kernel.org
|
||||
Cc: Dave Airlie <airlied@gmail.com>
|
||||
Cc: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_pm.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 24d77ddcc5f4..3d67f8e496de 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -1898,16 +1898,24 @@ static void ilk_compute_wm_parameters(struct drm_crtc *crtc,
|
||||
enum pipe pipe = intel_crtc->pipe;
|
||||
struct drm_plane *plane;
|
||||
|
||||
- if (!intel_crtc_active(crtc))
|
||||
+ if (!intel_crtc->active)
|
||||
return;
|
||||
|
||||
p->active = true;
|
||||
p->pipe_htotal = intel_crtc->config->base.adjusted_mode.crtc_htotal;
|
||||
p->pixel_rate = ilk_pipe_pixel_rate(dev, crtc);
|
||||
- p->pri.bytes_per_pixel = crtc->primary->fb->bits_per_pixel / 8;
|
||||
+
|
||||
+
|
||||
+ if (crtc->primary->fb)
|
||||
+ p->pri.bytes_per_pixel = crtc->primary->fb->bits_per_pixel / 8;
|
||||
+ else
|
||||
+ p->pri.bytes_per_pixel = 4;
|
||||
+
|
||||
p->cur.bytes_per_pixel = 4;
|
||||
+
|
||||
p->pri.horiz_pixels = intel_crtc->config->pipe_src_w;
|
||||
- p->cur.horiz_pixels = intel_crtc->cursor_width;
|
||||
+ p->cur.horiz_pixels = intel_crtc->base.cursor->state->crtc_w;
|
||||
+
|
||||
/* TODO: for now, assume primary and cursor planes are always enabled. */
|
||||
p->pri.enabled = true;
|
||||
p->cur.enabled = true;
|
|
@ -7,15 +7,15 @@ Subject: [PATCH] drm: i915: turn off wc mmaps
|
|||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
|
||||
index 1a46787129e7..e41096ea77f1 100644
|
||||
index d2df321ba634..775a5b11a366 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_dma.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_dma.c
|
||||
@@ -147,7 +147,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
|
||||
@@ -151,7 +151,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
|
||||
value = 1;
|
||||
break;
|
||||
case I915_PARAM_MMAP_VERSION:
|
||||
- value = 1;
|
||||
+ value = 0;
|
||||
break;
|
||||
default:
|
||||
DRM_DEBUG("Unknown parameter %d\n", param->param);
|
||||
case I915_PARAM_SUBSLICE_TOTAL:
|
||||
value = INTEL_INFO(dev)->subslice_total;
|
||||
|
|
|
@ -12,10 +12,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
|||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index a3d8174dedf9..26c5d54124c1 100644
|
||||
index c2e4f52cad30..5def6b4143fa 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1153,7 +1153,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1162,7 +1162,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
if (boot_params.secure_boot) {
|
||||
|
@ -26,14 +26,14 @@ index a3d8174dedf9..26c5d54124c1 100644
|
|||
#endif
|
||||
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index cf7e431cbc73..c74cbd892032 100644
|
||||
index 85ef051ac6fb..de3e45088d4a 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -942,6 +942,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_64BIT 5 /* Is the firmware 64-bit? */
|
||||
@@ -959,6 +959,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_PARAVIRT 6 /* Access is via a paravirt interface */
|
||||
#define EFI_ARCH_1 7 /* First arch-specific bit */
|
||||
+#define EFI_SECURE_BOOT 8 /* Are we in Secure Boot mode? */
|
||||
#define EFI_DBG 8 /* Print additional debug info at runtime */
|
||||
+#define EFI_SECURE_BOOT 9 /* Are we in Secure Boot mode? */
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
/*
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
From c4343b792fe32b46800298444549a71bc6d8e825 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 18 Nov 2014 10:18:22 -0500
|
||||
Subject: [PATCH] efi: Add esrt support.
|
||||
|
@ -37,7 +38,7 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
|
|||
|
||||
diff --git a/Documentation/ABI/testing/sysfs-firmware-efi-esrt b/Documentation/ABI/testing/sysfs-firmware-efi-esrt
|
||||
new file mode 100644
|
||||
index 000000000000..6e431d1a4e79
|
||||
index 0000000..6e431d1
|
||||
--- /dev/null
|
||||
+++ b/Documentation/ABI/testing/sysfs-firmware-efi-esrt
|
||||
@@ -0,0 +1,81 @@
|
||||
|
@ -123,20 +124,20 @@ index 000000000000..6e431d1a4e79
|
|||
+ 6 - Battery power event
|
||||
+
|
||||
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
|
||||
index dbc8627a5cdf..b4c9fbbc9270 100644
|
||||
index 02744df..3b984c3 100644
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -492,6 +492,8 @@ void __init efi_init(void)
|
||||
return;
|
||||
@@ -501,6 +501,8 @@ void __init efi_init(void)
|
||||
|
||||
print_efi_memmap();
|
||||
if (efi_enabled(EFI_DBG))
|
||||
print_efi_memmap();
|
||||
+
|
||||
+ efi_esrt_init();
|
||||
}
|
||||
|
||||
void __init efi_late_init(void)
|
||||
diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
|
||||
index d8be608a9f3b..26eabbc55341 100644
|
||||
index d8be608..26eabbc 100644
|
||||
--- a/drivers/firmware/efi/Makefile
|
||||
+++ b/drivers/firmware/efi/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
|
@ -149,7 +150,7 @@ index d8be608a9f3b..26eabbc55341 100644
|
|||
obj-$(CONFIG_EFI_VARS_PSTORE) += efi-pstore.o
|
||||
obj-$(CONFIG_UEFI_CPER) += cper.o
|
||||
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
|
||||
index 3061bb8629dc..48b4c356740f 100644
|
||||
index 3061bb8..48b4c35 100644
|
||||
--- a/drivers/firmware/efi/efi.c
|
||||
+++ b/drivers/firmware/efi/efi.c
|
||||
@@ -39,6 +39,7 @@ struct efi __read_mostly efi = {
|
||||
|
@ -264,7 +265,7 @@ index 3061bb8629dc..48b4c356740f 100644
|
|||
|
||||
diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
|
||||
new file mode 100644
|
||||
index 000000000000..20c0cbdb1c60
|
||||
index 0000000..20c0cbd
|
||||
--- /dev/null
|
||||
+++ b/drivers/firmware/efi/esrt.c
|
||||
@@ -0,0 +1,464 @@
|
||||
|
@ -733,7 +734,7 @@ index 000000000000..20c0cbdb1c60
|
|||
+MODULE_DESCRIPTION("EFI System Resource Table support");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 470e8dfcb517..c15e1de5273c 100644
|
||||
index af5be03..024c27e 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -583,6 +583,9 @@ void efi_native_runtime_setup(void);
|
||||
|
@ -746,7 +747,7 @@ index 470e8dfcb517..c15e1de5273c 100644
|
|||
#define EFI_FILE_SYSTEM_GUID \
|
||||
EFI_GUID( 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
|
||||
|
||||
@@ -849,6 +852,7 @@ extern struct efi {
|
||||
@@ -823,6 +826,7 @@ extern struct efi {
|
||||
unsigned long fw_vendor; /* fw_vendor */
|
||||
unsigned long runtime; /* runtime table */
|
||||
unsigned long config_table; /* config tables */
|
||||
|
@ -754,7 +755,7 @@ index 470e8dfcb517..c15e1de5273c 100644
|
|||
efi_get_time_t *get_time;
|
||||
efi_set_time_t *set_time;
|
||||
efi_get_wakeup_time_t *get_wakeup_time;
|
||||
@@ -901,6 +905,7 @@ static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned lon
|
||||
@@ -875,6 +879,7 @@ static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned lon
|
||||
#endif
|
||||
extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr);
|
||||
extern int efi_config_init(efi_config_table_type_t *arch_tables);
|
||||
|
@ -762,7 +763,7 @@ index 470e8dfcb517..c15e1de5273c 100644
|
|||
extern int efi_config_parse_tables(void *config_tables, int count, int sz,
|
||||
efi_config_table_type_t *arch_tables);
|
||||
extern u64 efi_get_iobase (void);
|
||||
@@ -908,12 +913,15 @@ extern u32 efi_mem_type (unsigned long phys_addr);
|
||||
@@ -882,12 +887,15 @@ extern u32 efi_mem_type (unsigned long phys_addr);
|
||||
extern u64 efi_mem_attributes (unsigned long phys_addr);
|
||||
extern u64 efi_mem_attribute (unsigned long phys_addr, unsigned long size);
|
||||
extern int __init efi_uart_console_only (void);
|
||||
|
@ -778,3 +779,6 @@ index 470e8dfcb517..c15e1de5273c 100644
|
|||
|
||||
extern int efi_reboot_quirk_mode;
|
||||
extern bool efi_poweroff_required(void);
|
||||
--
|
||||
2.4.3
|
||||
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
From: Lukas Czerner <lczerner@redhat.com>
|
||||
Date: Wed, 18 Feb 2015 17:49:28 +0100
|
||||
Subject: [PATCH] ext4: Allocate entire range in zero range
|
||||
|
||||
Currently there is a bug in zero range code which causes zero range
|
||||
calls to only allocate block aligned portion of the range, while
|
||||
ignoring the rest in some cases.
|
||||
|
||||
In some cases, namely if the end of the range is past isize, we do
|
||||
attempt to preallocate the last nonaligned block. However this might
|
||||
cause kernel to BUG() in some carefully designed zero range requests on
|
||||
setups where page size > block size.
|
||||
|
||||
Fix this problem by first preallocating the entire range, including the
|
||||
nonaligned edges and converting the written extents to unwritten in the
|
||||
next step. This approach will also give us the advantage of having the
|
||||
range to be as linearly contiguous as possible.
|
||||
|
||||
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
|
||||
---
|
||||
fs/ext4/extents.c | 31 +++++++++++++++++++------------
|
||||
1 file changed, 19 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
|
||||
index ea4ee1732143..410841e364ef 100644
|
||||
--- a/fs/ext4/extents.c
|
||||
+++ b/fs/ext4/extents.c
|
||||
@@ -4803,12 +4803,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
||||
else
|
||||
max_blocks -= lblk;
|
||||
|
||||
- flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT |
|
||||
- EXT4_GET_BLOCKS_CONVERT_UNWRITTEN |
|
||||
- EXT4_EX_NOCACHE;
|
||||
- if (mode & FALLOC_FL_KEEP_SIZE)
|
||||
- flags |= EXT4_GET_BLOCKS_KEEP_SIZE;
|
||||
-
|
||||
mutex_lock(&inode->i_mutex);
|
||||
|
||||
/*
|
||||
@@ -4825,15 +4819,28 @@ static long ext4_zero_range(struct file *file, loff_t offset,
|
||||
ret = inode_newsize_ok(inode, new_size);
|
||||
if (ret)
|
||||
goto out_mutex;
|
||||
- /*
|
||||
- * If we have a partial block after EOF we have to allocate
|
||||
- * the entire block.
|
||||
- */
|
||||
- if (partial_end)
|
||||
- max_blocks += 1;
|
||||
}
|
||||
|
||||
+ flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT;
|
||||
+ if (mode & FALLOC_FL_KEEP_SIZE)
|
||||
+ flags |= EXT4_GET_BLOCKS_KEEP_SIZE;
|
||||
+
|
||||
+ /* Preallocate the range including the unaligned edges */
|
||||
+ if (partial_begin || partial_end) {
|
||||
+ ret = ext4_alloc_file_blocks(file,
|
||||
+ round_down(offset, 1 << blkbits) >> blkbits,
|
||||
+ (round_up((offset + len), 1 << blkbits) -
|
||||
+ round_down(offset, 1 << blkbits)) >> blkbits,
|
||||
+ new_size, flags, mode);
|
||||
+ if (ret)
|
||||
+ goto out_mutex;
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ /* Zero range excluding the unaligned edges */
|
||||
if (max_blocks > 0) {
|
||||
+ flags |= (EXT4_GET_BLOCKS_CONVERT_UNWRITTEN |
|
||||
+ EXT4_EX_NOCACHE);
|
||||
|
||||
/* Now release the pages and zero block aligned part of pages*/
|
||||
truncate_pagecache_range(inode, start, end - 1);
|
|
@ -1,290 +0,0 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: Sent in 2012. Pinged again on Dec 17, 2013
|
||||
|
||||
commit b94887bbc0621e1e8402e7f0ec4bc3adf46c9a6e
|
||||
Author: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Date: Fri Feb 17 12:42:08 2012 -0500
|
||||
|
||||
Freeze all filesystems during system suspend and (kernel-driven)
|
||||
hibernation by calling freeze_supers() for all superblocks and thaw
|
||||
them during the subsequent resume with the help of thaw_supers().
|
||||
|
||||
This makes filesystems stay in a consistent state in case something
|
||||
goes wrong between system suspend (or hibernation) and the subsequent
|
||||
resume (e.g. journal replays won't be necessary in those cases). In
|
||||
particular, this should help to solve a long-standing issue that, in
|
||||
some cases, during resume from hibernation the boot loader causes the
|
||||
journal to be replied for the filesystem containing the kernel image
|
||||
and/or initrd causing it to become inconsistent with the information
|
||||
stored in the hibernation image.
|
||||
|
||||
The user-space-driven hibernation (s2disk) is not covered by this
|
||||
change, because the freezing of filesystems prevents s2disk from
|
||||
accessing device special files it needs to do its job.
|
||||
|
||||
This change is based on earlier work by Nigel Cunningham.
|
||||
|
||||
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
|
||||
Rebased to 3.3-rc3 by Josh Boyer <jwboyer@redhat.com>
|
||||
|
||||
diff --git a/fs/super.c b/fs/super.c
|
||||
index 6015c02..c8057fa 100644
|
||||
--- a/fs/super.c
|
||||
+++ b/fs/super.c
|
||||
@@ -594,6 +594,79 @@ void iterate_supers_type(struct file_system_type *type,
|
||||
EXPORT_SYMBOL(iterate_supers_type);
|
||||
|
||||
/**
|
||||
+ * thaw_supers - call thaw_super() for all superblocks
|
||||
+ */
|
||||
+void thaw_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ list_for_each_entry(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_flags & MS_FROZEN) {
|
||||
+ thaw_super(sb);
|
||||
+ sb->s_flags &= ~MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * freeze_supers - call freeze_super() for all superblocks
|
||||
+ */
|
||||
+int freeze_supers(void)
|
||||
+{
|
||||
+ struct super_block *sb, *p = NULL;
|
||||
+ int error = 0;
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ /*
|
||||
+ * Freeze in reverse order so filesystems depending on others are
|
||||
+ * frozen in the right order (eg. loopback on ext3).
|
||||
+ */
|
||||
+ list_for_each_entry_reverse(sb, &super_blocks, s_list) {
|
||||
+ if (hlist_unhashed(&sb->s_instances))
|
||||
+ continue;
|
||||
+ sb->s_count++;
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (sb->s_root && sb->s_frozen != SB_FREEZE_TRANS
|
||||
+ && !(sb->s_flags & MS_RDONLY)) {
|
||||
+ error = freeze_super(sb);
|
||||
+ if (!error)
|
||||
+ sb->s_flags |= MS_FROZEN;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock(&sb_lock);
|
||||
+ if (error)
|
||||
+ break;
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ p = sb;
|
||||
+ }
|
||||
+ if (p)
|
||||
+ __put_super(p);
|
||||
+ spin_unlock(&sb_lock);
|
||||
+
|
||||
+ if (error)
|
||||
+ thaw_supers();
|
||||
+
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
* get_super - get the superblock of a device
|
||||
* @bdev: device to get the superblock for
|
||||
*
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index 386da09..a164f4a 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -210,6 +210,7 @@ struct inodes_stat_t {
|
||||
#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
|
||||
#define MS_I_VERSION (1<<23) /* Update inode I_version field */
|
||||
#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
|
||||
+#define MS_FROZEN (1<<25) /* Frozen filesystem */
|
||||
#define MS_NOSEC (1<<28)
|
||||
#define MS_BORN (1<<29)
|
||||
#define MS_ACTIVE (1<<30)
|
||||
@@ -2501,6 +2502,8 @@ extern void drop_super(struct super_block *sb);
|
||||
extern void iterate_supers(void (*)(struct super_block *, void *), void *);
|
||||
extern void iterate_supers_type(struct file_system_type *,
|
||||
void (*)(struct super_block *, void *), void *);
|
||||
+extern int freeze_supers(void);
|
||||
+extern void thaw_supers(void);
|
||||
|
||||
extern int dcache_dir_open(struct inode *, struct file *);
|
||||
extern int dcache_dir_close(struct inode *, struct file *);
|
||||
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
|
||||
index 6d6d288..492fc62 100644
|
||||
--- a/kernel/power/hibernate.c
|
||||
+++ b/kernel/power/hibernate.c
|
||||
@@ -626,12 +626,17 @@ int hibernate(void)
|
||||
if (error)
|
||||
goto Finish;
|
||||
|
||||
- error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ error = freeze_supers();
|
||||
if (error)
|
||||
goto Thaw;
|
||||
+
|
||||
+ error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
+ if (error)
|
||||
+ goto Thaw_fs;
|
||||
+
|
||||
if (freezer_test_done) {
|
||||
freezer_test_done = false;
|
||||
- goto Thaw;
|
||||
+ goto Thaw_fs;
|
||||
}
|
||||
|
||||
if (in_suspend) {
|
||||
@@ -655,6 +660,8 @@ int hibernate(void)
|
||||
pr_debug("PM: Image restored successfully.\n");
|
||||
}
|
||||
|
||||
+ Thaw_fs:
|
||||
+ thaw_supers();
|
||||
Thaw:
|
||||
thaw_processes();
|
||||
Finish:
|
||||
diff --git a/kernel/power/power.h b/kernel/power/power.h
|
||||
index 21724ee..40d6f64 100644
|
||||
--- a/kernel/power/power.h
|
||||
+++ b/kernel/power/power.h
|
||||
@@ -1,3 +1,4 @@
|
||||
+#include <linux/fs.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/suspend_ioctls.h>
|
||||
#include <linux/utsname.h>
|
||||
@@ -227,45 +228,3 @@ enum {
|
||||
#define TEST_MAX (__TEST_AFTER_LAST - 1)
|
||||
|
||||
extern int pm_test_level;
|
||||
-
|
||||
-#ifdef CONFIG_SUSPEND_FREEZER
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- int error;
|
||||
-
|
||||
- error = freeze_processes();
|
||||
-
|
||||
- /*
|
||||
- * freeze_processes() automatically thaws every task if freezing
|
||||
- * fails. So we need not do anything extra upon error.
|
||||
- */
|
||||
- if (error)
|
||||
- goto Finish;
|
||||
-
|
||||
- error = freeze_kernel_threads();
|
||||
-
|
||||
- /*
|
||||
- * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
- * failure. So we have to thaw the userspace tasks ourselves.
|
||||
- */
|
||||
- if (error)
|
||||
- thaw_processes();
|
||||
-
|
||||
- Finish:
|
||||
- return error;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
- thaw_processes();
|
||||
-}
|
||||
-#else
|
||||
-static inline int suspend_freeze_processes(void)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void suspend_thaw_processes(void)
|
||||
-{
|
||||
-}
|
||||
-#endif
|
||||
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
||||
index 4fd51be..5f51fc7 100644
|
||||
--- a/kernel/power/suspend.c
|
||||
+++ b/kernel/power/suspend.c
|
||||
@@ -29,6 +29,62 @@
|
||||
|
||||
#include "power.h"
|
||||
|
||||
+#ifdef CONFIG_SUSPEND_FREEZER
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ error = freeze_processes();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_processes() automatically thaws every task if freezing
|
||||
+ * fails. So we need not do anything extra upon error.
|
||||
+ */
|
||||
+
|
||||
+ if (error)
|
||||
+ goto Finish;
|
||||
+
|
||||
+ error = freeze_supers();
|
||||
+ if (error) {
|
||||
+ thaw_processes();
|
||||
+ goto Finish;
|
||||
+ }
|
||||
+
|
||||
+ error = freeze_kernel_threads();
|
||||
+
|
||||
+ /*
|
||||
+ * freeze_kernel_threads() thaws only kernel threads upon freezing
|
||||
+ * failure. So we have to thaw the userspace tasks ourselves.
|
||||
+ */
|
||||
+ if (error) {
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+ }
|
||||
+
|
||||
+Finish:
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+ thaw_supers();
|
||||
+ thaw_processes();
|
||||
+}
|
||||
+
|
||||
+#else /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
+static inline int suspend_freeze_processes(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void suspend_thaw_processes(void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+#endif /* !CONFIG_SUSPEND_FREEZER */
|
||||
+
|
||||
const char *const pm_states[PM_SUSPEND_MAX] = {
|
||||
[PM_SUSPEND_STANDBY] = "standby",
|
||||
[PM_SUSPEND_MEM] = "mem",
|
172
kernel.spec
172
kernel.spec
|
@ -40,19 +40,19 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 300
|
||||
%global baserelease 200
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
|
||||
# which yields a base_sublevel of 0.
|
||||
%define base_sublevel 0
|
||||
%define base_sublevel 1
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 8
|
||||
%define stable_update 2
|
||||
# Set rpm version accordingly
|
||||
%if 0%{?stable_update}
|
||||
%define stablerev %{stable_update}
|
||||
|
@ -486,17 +486,12 @@ Patch00: patch-4.%{base_sublevel}-git%{gitrev}.xz
|
|||
%endif
|
||||
%endif
|
||||
|
||||
# we also need compile fixes for -vanilla
|
||||
Patch04: compile-fixes.patch
|
||||
|
||||
# build tweak for build ID magic, even for -vanilla
|
||||
Patch05: kbuild-AFTER_LINK.patch
|
||||
|
||||
%if !%{nopatches}
|
||||
|
||||
|
||||
# revert upstream patches we get via other methods
|
||||
Patch09: upstream-reverts.patch
|
||||
# Git trees.
|
||||
|
||||
# Standalone patches
|
||||
|
@ -554,7 +549,6 @@ Patch1020: efi-Add-esrt-support.patch
|
|||
# nouveau + drm fixes
|
||||
# intel drm is all merged upstream
|
||||
Patch1826: drm-i915-hush-check-crtc-state.patch
|
||||
Patch1827: drm-i915-Disable-verbose-state-checks.patch
|
||||
|
||||
# Quiet boot fixes
|
||||
|
||||
|
@ -565,8 +559,6 @@ Patch1827: drm-i915-Disable-verbose-state-checks.patch
|
|||
# patches headed upstream
|
||||
Patch12016: disable-i8042-check-on-apple-mac.patch
|
||||
|
||||
Patch14000: hibernate-freeze-filesystems.patch
|
||||
|
||||
Patch14010: lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
Patch15000: watchdog-Disable-watchdog-on-virtual-machines.patch
|
||||
|
@ -574,23 +566,23 @@ Patch15000: watchdog-Disable-watchdog-on-virtual-machines.patch
|
|||
# PPC
|
||||
|
||||
# ARM64
|
||||
Patch21000: net-amd-Add-xgbe-a0-driver.patch
|
||||
Patch21001: amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
|
||||
Patch21002: arm64-avoid-needing-console-to-enable-serial-console.patch
|
||||
Patch21003: usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
||||
Patch16000: amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
|
||||
Patch16001: amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
|
||||
Patch16002: arm64-avoid-needing-console-to-enable-serial-console.patch
|
||||
Patch16003: usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
||||
|
||||
# ARMv7
|
||||
Patch21020: ARM-tegra-usb-no-reset.patch
|
||||
Patch21021: arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
|
||||
Patch21022: arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
|
||||
Patch21023: arm-dts-am335x-bone-common-enable-and-use-i2c2.patch
|
||||
Patch21024: arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
|
||||
Patch21025: arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
|
||||
Patch21026: pinctrl-pinctrl-single-must-be-initialized-early.patch
|
||||
Patch21027: 0001-drivers-rtc-rtc-em3027.c-add-device-tree-support.patch
|
||||
Patch21028: arm-i.MX6-Utilite-device-dtb.patch
|
||||
Patch16020: ARM-tegra-usb-no-reset.patch
|
||||
Patch16021: arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
|
||||
Patch16022: arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
|
||||
Patch16023: arm-dts-am335x-bone-common-enable-and-use-i2c2.patch
|
||||
Patch16024: arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
|
||||
Patch16025: arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
|
||||
Patch16026: pinctrl-pinctrl-single-must-be-initialized-early.patch
|
||||
|
||||
Patch21100: arm-highbank-l2-reverts.patch
|
||||
Patch16028: arm-i.MX6-Utilite-device-dtb.patch
|
||||
|
||||
Patch16030: arm-highbank-l2-reverts.patch
|
||||
|
||||
#rhbz 754518
|
||||
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
@ -601,85 +593,34 @@ Patch21242: criu-no-expert.patch
|
|||
#rhbz 892811
|
||||
Patch21247: ath9k-rx-dma-stop-check.patch
|
||||
|
||||
Patch22000: weird-root-dentry-name-debug.patch
|
||||
|
||||
#CVE-2015-0275 rhbz 1193907 1195178
|
||||
Patch26138: ext4-Allocate-entire-range-in-zero-range.patch
|
||||
|
||||
#rhbz 1196825
|
||||
Patch26140: security-yama-Remove-unnecessary-selects-from-Kconfi.patch
|
||||
|
||||
#rhbz 1201532
|
||||
Patch26168: HID-multitouch-add-support-of-clickpads.patch
|
||||
|
||||
#rhbz 1187004
|
||||
Patch26170: acpi-video-Allow-forcing-native-backlight-on-non-win.patch
|
||||
Patch26171: acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
|
||||
|
||||
#CVE-2015-2150 rhbz 1196266 1200397
|
||||
Patch26175: xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
||||
|
||||
#rhbz 1210801
|
||||
Patch26179: HID-logitech-hidpp-add-a-module-parameter-to-keep-fi.patch
|
||||
|
||||
#rhbz 1209088
|
||||
Patch26180: Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
||||
Patch26181: Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
Patch26182: Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1188741
|
||||
Patch26183: 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
Patch26184: 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
#rhbz 1212230
|
||||
Patch26176: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
||||
|
||||
#rhbz 1210857
|
||||
Patch26192: blk-loop-avoid-too-many-pending-per-work-IO.patch
|
||||
|
||||
#rhbz 1206036 1215989
|
||||
Patch26193: toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
||||
|
||||
#rhbz 1219343
|
||||
Patch26200: 0001-HID-usbhid-Add-HID_QUIRK_NOGET-for-Aten-DVI-KVM-swit.patch
|
||||
|
||||
#rhbz 1220118
|
||||
Patch26202: media-Fix-regression-in-some-more-dib0700-based-devi.patch
|
||||
|
||||
Patch26203: v4l-uvcvideo-Fix-incorrect-bandwidth-with-Chicony-de.patch
|
||||
|
||||
#rhbz 1204390
|
||||
Patch26204: 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
|
||||
|
||||
#rhbz 1218688
|
||||
Patch26205: drm-i915-Fix-ilk-watermarks-calculation-when-primary.patch
|
||||
|
||||
#rhbz 1214474
|
||||
Patch26210: Input-add-vmmouse-driver.patch
|
||||
Patch26213: Input-joydev-don-t-classify-the-vmmouse-as-a-joystic.patch
|
||||
|
||||
#rhbz 1217249
|
||||
Patch26214: acpi_video-Add-enable_native_backlight-quirk-for-Mac.patch
|
||||
|
||||
#rhbz 1225563
|
||||
Patch26215: HID-lenovo-set-INPUT_PROP_POINTING_STICK.patch
|
||||
|
||||
#rhbz 1218882
|
||||
Patch26216: 0001-target-use-vfs_iter_read-write-in-fd_do_rw.patch
|
||||
|
||||
#rhbz 1133378
|
||||
Patch26219: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
|
||||
|
||||
# FAF Problem 885578
|
||||
Patch26220: 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
|
||||
|
||||
#rhbz 1226743
|
||||
Patch26221: drm-i915-turn-off-wc-mmaps.patch
|
||||
|
||||
#rhbz 1212230
|
||||
Patch26238: Input-Revert-Revert-synaptics-use-dmax-in-input_mt_a.patch
|
||||
Patch26239: Input-synaptics-allocate-3-slots-to-keep-stability-i.patch
|
||||
Patch26240: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
||||
|
||||
# CVE-2015-XXXX rhbz 1230770 1230774
|
||||
Patch26241: kvm-x86-fix-kvm_apic_has_events-to-check-for-NULL-po.patch
|
||||
Patch26231: kvm-x86-fix-kvm_apic_has_events-to-check-for-NULL-po.patch
|
||||
|
||||
# rhbz 1227891
|
||||
Patch26250: HID-rmi-Disable-populating-F30-when-the-touchpad-has.patch
|
||||
|
@ -1184,7 +1125,7 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
|
|||
# Update vanilla to the latest upstream.
|
||||
# (non-released_kernel case only)
|
||||
%if 0%{?rcrev}
|
||||
# ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
|
||||
%if 0%{?gitrev}
|
||||
ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
%endif
|
||||
|
@ -1245,16 +1186,9 @@ done
|
|||
|
||||
ApplyPatch kbuild-AFTER_LINK.patch
|
||||
|
||||
#
|
||||
# misc small stuff to make things compile
|
||||
#
|
||||
ApplyOptionalPatch compile-fixes.patch
|
||||
|
||||
%if !%{nopatches}
|
||||
|
||||
# revert patches from upstream that conflict or that we get via other means
|
||||
ApplyOptionalPatch upstream-reverts.patch -R
|
||||
|
||||
# Architecture patches
|
||||
# x86(-64)
|
||||
ApplyPatch lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
|
||||
|
@ -1262,7 +1196,7 @@ ApplyPatch lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
|
|||
# PPC
|
||||
|
||||
# ARM64
|
||||
ApplyPatch net-amd-Add-xgbe-a0-driver.patch
|
||||
ApplyPatch amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
|
||||
ApplyPatch amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
|
||||
ApplyPatch arm64-avoid-needing-console-to-enable-serial-console.patch
|
||||
ApplyPatch usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
||||
|
@ -1271,13 +1205,14 @@ ApplyPatch usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
|
|||
# ARM
|
||||
#
|
||||
ApplyPatch ARM-tegra-usb-no-reset.patch
|
||||
|
||||
ApplyPatch arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
|
||||
ApplyPatch arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-enable-and-use-i2c2.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
|
||||
ApplyPatch arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
|
||||
ApplyPatch pinctrl-pinctrl-single-must-be-initialized-early.patch
|
||||
ApplyPatch 0001-drivers-rtc-rtc-em3027.c-add-device-tree-support.patch
|
||||
|
||||
ApplyPatch arm-i.MX6-Utilite-device-dtb.patch
|
||||
|
||||
ApplyPatch arm-highbank-l2-reverts.patch
|
||||
|
@ -1376,16 +1311,12 @@ ApplyPatch efi-Add-esrt-support.patch
|
|||
|
||||
# Intel DRM
|
||||
ApplyPatch drm-i915-hush-check-crtc-state.patch
|
||||
ApplyPatch drm-i915-Disable-verbose-state-checks.patch
|
||||
|
||||
# Radeon DRM
|
||||
|
||||
# Patches headed upstream
|
||||
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
||||
|
||||
# FIXME: REBASE
|
||||
#ApplyPatch hibernate-freeze-filesystems.patch
|
||||
|
||||
ApplyPatch lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
# Disable watchdog on virtual machines.
|
||||
|
@ -1394,81 +1325,35 @@ ApplyPatch watchdog-Disable-watchdog-on-virtual-machines.patch
|
|||
#rhbz 754518
|
||||
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
#pplyPatch weird-root-dentry-name-debug.patch
|
||||
|
||||
# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
|
||||
ApplyPatch criu-no-expert.patch
|
||||
|
||||
#rhbz 892811
|
||||
ApplyPatch ath9k-rx-dma-stop-check.patch
|
||||
|
||||
#CVE-2015-0275 rhbz 1193907 1195178
|
||||
ApplyPatch ext4-Allocate-entire-range-in-zero-range.patch
|
||||
|
||||
#rhbz 1196825
|
||||
ApplyPatch security-yama-Remove-unnecessary-selects-from-Kconfi.patch
|
||||
|
||||
#rhbz 1201532
|
||||
ApplyPatch HID-multitouch-add-support-of-clickpads.patch
|
||||
|
||||
#rhbz 1187004
|
||||
ApplyPatch acpi-video-Allow-forcing-native-backlight-on-non-win.patch
|
||||
ApplyPatch acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
|
||||
|
||||
#CVE-2015-2150 rhbz 1196266 1200397
|
||||
ApplyPatch xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
||||
|
||||
#rhbz 1210801
|
||||
ApplyPatch HID-logitech-hidpp-add-a-module-parameter-to-keep-fi.patch
|
||||
|
||||
#rhbz 1209088
|
||||
ApplyPatch Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
||||
ApplyPatch Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
ApplyPatch Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1188741
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
#rhbz 1212230
|
||||
ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
||||
|
||||
#rhbz 1210857
|
||||
ApplyPatch blk-loop-avoid-too-many-pending-per-work-IO.patch
|
||||
|
||||
#rhbz 1206036 1215989
|
||||
ApplyPatch toshiba_acpi-Do-not-register-vendor-backlight-when-a.patch
|
||||
|
||||
#rhbz 1219343
|
||||
ApplyPatch 0001-HID-usbhid-Add-HID_QUIRK_NOGET-for-Aten-DVI-KVM-swit.patch
|
||||
|
||||
#rhbz 1220118
|
||||
ApplyPatch media-Fix-regression-in-some-more-dib0700-based-devi.patch
|
||||
|
||||
ApplyPatch v4l-uvcvideo-Fix-incorrect-bandwidth-with-Chicony-de.patch
|
||||
|
||||
#rhbz 1204390
|
||||
ApplyPatch 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
|
||||
|
||||
#rhbz 1218688
|
||||
ApplyPatch drm-i915-Fix-ilk-watermarks-calculation-when-primary.patch
|
||||
|
||||
#rhbz 1214474
|
||||
ApplyPatch Input-add-vmmouse-driver.patch
|
||||
ApplyPatch Input-joydev-don-t-classify-the-vmmouse-as-a-joystic.patch
|
||||
|
||||
#rhbz 1217249
|
||||
ApplyPatch acpi_video-Add-enable_native_backlight-quirk-for-Mac.patch
|
||||
|
||||
#rhbz 1225563
|
||||
ApplyPatch HID-lenovo-set-INPUT_PROP_POINTING_STICK.patch
|
||||
|
||||
#rhbz 1218882
|
||||
ApplyPatch 0001-target-use-vfs_iter_read-write-in-fd_do_rw.patch
|
||||
|
||||
#rhbz 1133378
|
||||
ApplyPatch firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
|
||||
|
||||
# FAF Problem 885578
|
||||
ApplyPatch 0001-mwifiex-use-del_timer-variant-in-interrupt-context.patch
|
||||
|
||||
#rhbz 1226743
|
||||
ApplyPatch drm-i915-turn-off-wc-mmaps.patch
|
||||
|
||||
|
@ -1888,7 +1773,7 @@ BuildKernel %make_target %kernel_image
|
|||
%endif
|
||||
|
||||
%global perf_make \
|
||||
make -s %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
|
||||
make -s EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
|
||||
%if %{with_perf}
|
||||
# perf
|
||||
%{perf_make} DESTDIR=$RPM_BUILD_ROOT all
|
||||
|
@ -2333,6 +2218,9 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Wed Jul 15 2015 Laura Abbott <labbott@fedoraproject.org> - 4.1.2-200
|
||||
- Linux v4.1.2 rebase
|
||||
|
||||
* Fri Jul 10 2015 Laura Abbott <labbott@redhat.com> - 4.0.8-300
|
||||
- Linux v4.0.8
|
||||
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
From: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
Date: Fri, 27 Feb 2015 16:23:59 -0500
|
||||
Subject: [PATCH] security/yama: Remove unnecessary selects from Kconfig.
|
||||
|
||||
Yama selects SECURITYFS and SECURITY_PATH, but requires neither.
|
||||
Remove them.
|
||||
|
||||
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
---
|
||||
security/yama/Kconfig | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/security/yama/Kconfig b/security/yama/Kconfig
|
||||
index 20ef5143c0c0..3123e1da2fed 100644
|
||||
--- a/security/yama/Kconfig
|
||||
+++ b/security/yama/Kconfig
|
||||
@@ -1,8 +1,6 @@
|
||||
config SECURITY_YAMA
|
||||
bool "Yama support"
|
||||
depends on SECURITY
|
||||
- select SECURITYFS
|
||||
- select SECURITY_PATH
|
||||
default n
|
||||
help
|
||||
This selects Yama, which extends DAC support with additional
|
6
sources
6
sources
|
@ -1,3 +1,3 @@
|
|||
a86916bd12798220da9eb4a1eec3616d linux-4.0.tar.xz
|
||||
d125eecce68ab6fb5f1f23523c2c04b8 perf-man-4.0.tar.gz
|
||||
a0628c5fcaa897b11d5cd340038406e3 patch-4.0.8.xz
|
||||
fe9dc0f6729f36400ea81aa41d614c37 linux-4.1.tar.xz
|
||||
5b4d0e18c713a479a7b4c1aa53a7432b perf-man-4.1.tar.gz
|
||||
b9923009c2edf86d5d3d52c5ee53c8e1 patch-4.1.2.xz
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 21 Apr 2015 12:01:32 +0200
|
||||
Subject: [PATCH] toshiba_acpi: Do not register vendor backlight when
|
||||
acpi_video bl is available
|
||||
|
||||
commit a39f46df33c6 ("toshiba_acpi: Fix regression caused by backlight extra
|
||||
check code") causes the backlight to no longer work on the Toshiba Z30,
|
||||
reverting that commit fixes this but restores the original issue fixed
|
||||
by that commit.
|
||||
|
||||
Looking at the toshiba_acpi backlight code for a fix for this I noticed that
|
||||
the toshiba code is the only code under platform/x86 which unconditionally
|
||||
registers a vendor acpi backlight interface, without checking for acpi_video
|
||||
backlight support first.
|
||||
|
||||
This commit adds the necessary checks bringing toshiba_acpi in line with the
|
||||
other drivers, and fixing the Z30 regression without needing to revert the
|
||||
commit causing it.
|
||||
|
||||
Chances are that there will be some Toshiba models which have a non working
|
||||
acpi-video implementation while the toshiba vendor backlight interface does
|
||||
work, this commit adds an empty dmi_id table where such systems can be added,
|
||||
this is identical to how other drivers handle such systems.
|
||||
|
||||
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1206036
|
||||
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=86521
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Reviewed-and-tested-by: Azael Avalos <coproscefalo@gmail.com>
|
||||
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
|
||||
---
|
||||
drivers/platform/x86/Kconfig | 1 +
|
||||
drivers/platform/x86/toshiba_acpi.c | 23 +++++++++++++++++++++++
|
||||
2 files changed, 24 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
|
||||
index 97527614141b..f9f205cb1f11 100644
|
||||
--- a/drivers/platform/x86/Kconfig
|
||||
+++ b/drivers/platform/x86/Kconfig
|
||||
@@ -614,6 +614,7 @@ config ACPI_TOSHIBA
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
depends on SERIO_I8042 || SERIO_I8042 = n
|
||||
+ depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
select INPUT_POLLDEV
|
||||
select INPUT_SPARSEKMAP
|
||||
---help---
|
||||
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
|
||||
index dbcb7a8915b8..2da716c3b648 100644
|
||||
--- a/drivers/platform/x86/toshiba_acpi.c
|
||||
+++ b/drivers/platform/x86/toshiba_acpi.c
|
||||
@@ -51,6 +51,7 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/uaccess.h>
|
||||
+#include <acpi/video.h>
|
||||
|
||||
MODULE_AUTHOR("John Belmonte");
|
||||
MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
|
||||
@@ -281,6 +282,14 @@ static const struct key_entry toshiba_acpi_alt_keymap[] = {
|
||||
};
|
||||
|
||||
/*
|
||||
+ * List of models which have a broken acpi-video backlight interface and thus
|
||||
+ * need to use the toshiba (vendor) interface instead.
|
||||
+ */
|
||||
+static const struct dmi_system_id toshiba_vendor_backlight_dmi[] = {
|
||||
+ {}
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
* Utility
|
||||
*/
|
||||
|
||||
@@ -2541,6 +2550,20 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
|
||||
ret = get_tr_backlight_status(dev, &enabled);
|
||||
dev->tr_backlight_supported = !ret;
|
||||
|
||||
+ /*
|
||||
+ * Tell acpi-video-detect code to prefer vendor backlight on all
|
||||
+ * systems with transflective backlight and on dmi matched systems.
|
||||
+ */
|
||||
+ if (dev->tr_backlight_supported ||
|
||||
+ dmi_check_system(toshiba_vendor_backlight_dmi))
|
||||
+ acpi_video_dmi_promote_vendor();
|
||||
+
|
||||
+ if (acpi_video_backlight_support())
|
||||
+ return 0;
|
||||
+
|
||||
+ /* acpi-video may have loaded before we called dmi_promote_vendor() */
|
||||
+ acpi_video_unregister_backlight();
|
||||
+
|
||||
memset(&props, 0, sizeof(props));
|
||||
props.type = BACKLIGHT_PLATFORM;
|
||||
props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;
|
|
@ -1 +0,0 @@
|
|||
nil
|
|
@ -1,22 +0,0 @@
|
|||
Bugzilla: 787171 766277
|
||||
Upstream-status: Fedora mustard
|
||||
|
||||
debug patch for bz 787171/766277
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index bcbdb33..a6a5fdb 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -2530,8 +2530,10 @@ global_root:
|
||||
*/
|
||||
if (IS_ROOT(dentry) &&
|
||||
(dentry->d_name.len != 1 || dentry->d_name.name[0] != '/')) {
|
||||
- WARN(1, "Root dentry has weird name <%.*s>\n",
|
||||
- (int) dentry->d_name.len, dentry->d_name.name);
|
||||
+ WARN(1, "Root dentry has weird name <%.*s> vfsmnt:%s fs:%s\n",
|
||||
+ (int) dentry->d_name.len, dentry->d_name.name,
|
||||
+ vfsmnt->mnt_root->d_name.name,
|
||||
+ vfsmnt->mnt_sb->s_type->name);
|
||||
}
|
||||
if (!slash)
|
||||
error = prepend(buffer, buflen, "/", 1);
|
|
@ -14,7 +14,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
|
||||
index 4ddaf66ea35f..00b440307419 100644
|
||||
index 37dae792dbbe..1ecc03ca3c15 100644
|
||||
--- a/arch/x86/kernel/ioport.c
|
||||
+++ b/arch/x86/kernel/ioport.c
|
||||
@@ -15,6 +15,7 @@
|
||||
|
@ -44,13 +44,13 @@ index 4ddaf66ea35f..00b440307419 100644
|
|||
}
|
||||
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
|
||||
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
|
||||
index 297110c12635..efe38c1bc234 100644
|
||||
index 6b1721f978c2..53fe675f9bd7 100644
|
||||
--- a/drivers/char/mem.c
|
||||
+++ b/drivers/char/mem.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/export.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/aio.h>
|
||||
#include <linux/uio.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
|
|
Loading…
Reference in New Issue