[kernel/f17] Linux v3.8.1
Justin M. Forbes
jforbes at fedoraproject.org
Mon Mar 4 06:11:50 UTC 2013
commit ec583c93beb38932497d03dba5cd90a391f64cff
Author: Justin M. Forbes <jforbes at redhat.com>
Date: Mon Mar 4 00:05:01 2013 -0600
Linux v3.8.1
...dd-support-for-atheros-04ca-3004-device-t.patch | 47 -
8139cp-re-enable-interrupts-after-tx-timeout.patch | 29 -
...set-ring-address-before-enabling-receiver.patch | 64 -
...cp-set-ring-address-after-enabling-C-mode.patch | 100 -
Makefile.config | 9 +-
USB-report-submission-of-active-URBs.patch | 46 -
acpi-debug-infinite-loop.patch | 25 +
....6-acpi-video-dos.patch => acpi-video-dos.patch | 0
alps-v2-3.7.patch | 2494 --------------------
alps.patch | 1405 +++++++++++
arm-tegra-sdhci-module-fix.patch | 2 +-
brcmsmac-updates-rhbz892428.patch | 28 -
...-2.6-compile-fixes.patch => compile-fixes.patch | 0
config-arm-generic | 13 +
config-arm-kirkwood | 12 +-
config-arm-omap | 61 +-
config-arm-tegra | 19 +-
config-armv7 | 82 +-
config-generic | 72 +-
config-powerpc-generic | 7 +-
config-s390x | 21 +-
config-sparc64-generic | 217 --
config-x86-32-generic | 5 +
config-x86-generic | 3 +
config-x86_64-generic | 4 +
linux-2.6-crash-driver.patch => crash-driver.patch | 0
...s-acpi-video.patch => defaults-acpi-video.patch | 0
dmar-disable-when-ricoh-multifunction.patch | 2 +-
drm-i915-lvds-reclock-fix.patch | 72 -
exec-use-eloop-for-max-recursion-depth.patch | 144 --
...sages.patch => input-kill-stupid-messages.patch | 0
kernel.spec | 158 +-
linux-2.6-e1000-ich9-montevina.patch | 46 -
...e-after_link.patch => makefile-after_link.patch | 0
net-fix-infinite-loop-in-__skb_recv_datagram.patch | 53 -
...spkr-modalias.patch => no-pcspkr-modalias.patch | 0
power-x86-destdir.patch | 35 -
...-2.6-serial-460800.patch => serial-460800.patch | 0
...blacklist.patch => silence-acpi-blacklist.patch | 0
silence-brcmsmac-warning.patch | 14 -
...ce-fbcon-logo.patch => silence-fbcon-logo.patch | 0
...-2.6-silence-noise.patch => silence-noise.patch | 2 +-
silence-tty-null.patch | 13 +
sources | 4 +-
...pstream-reverts.patch => upstream-reverts.patch | 0
usb-cypress-supertop.patch | 38 -
userns-avoid-recursion-in-put_user_ns.patch | 53 +-
47 files changed, 1785 insertions(+), 3614 deletions(-)
---
diff --git a/Makefile.config b/Makefile.config
index 2ac1fa9..015f834 100644
--- a/Makefile.config
+++ b/Makefile.config
@@ -14,10 +14,9 @@ CONFIGFILES = \
$(CFG)-armv7l-omap.config $(CFG)-armv7hl-omap.config \
$(CFG)-armv7l-tegra.config $(CFG)-armv7hl-tegra.config \
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
- $(CFG)-sparc64.config \
$(CFG)-ppc64.config $(CFG)-ppc64-debug.config
-PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x sparc64 arm
+PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x arm
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
configs: $(CONFIGFILES)
@@ -68,9 +67,6 @@ temp-x86_64-generic: temp-x86-64 temp-generic
temp-x86_64-debug-generic: temp-x86-64 temp-debug-generic
perl merge.pl $^ > $@
-temp-sparc64-generic: config-sparc64-generic temp-generic
- perl merge.pl $^ > $@
-
temp-powerpc-generic: config-powerpc-generic temp-generic
perl merge.pl $^ > $@
@@ -101,9 +97,6 @@ kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic
kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
perl merge.pl $^ x86_64 > $@
-kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic
- perl merge.pl $^ sparc64 > $@
-
kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic
perl merge.pl $^ powerpc > $@
diff --git a/acpi-debug-infinite-loop.patch b/acpi-debug-infinite-loop.patch
new file mode 100644
index 0000000..f2cc1a5
--- /dev/null
+++ b/acpi-debug-infinite-loop.patch
@@ -0,0 +1,25 @@
+--- linux-2.6.34.noarch/include/acpi/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
++++ linux-2.6.34.noarch/include/acpi/acconfig.h 2010-07-01 14:49:17.000000000 -0400
+@@ -117,7 +117,7 @@
+
+ /* Maximum number of While() loop iterations before forced abort */
+
+-#define ACPI_MAX_LOOP_ITERATIONS 0xFFFF
++#define ACPI_MAX_LOOP_ITERATIONS 0xFFFFFF
+
+ /* Maximum sleep allowed via Sleep() operator */
+
+--- a/drivers/acpi/acpica/dscontrol.c
++++ b/drivers/acpi/acpica/dscontrol.c
+@@ -212,6 +212,11 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
+ * loop does not implement a timeout.
+ */
+ control_state->control.loop_count++;
++ if ((control_state->control.loop_count > 1) &&
++ (control_state->control.loop_count % 0xffff == 0))
++ printk("ACPI: While loop taking a really long time. loop_count=0x%x\n",
++ control_state->control.loop_count);
++
+ if (control_state->control.loop_count >
+ ACPI_MAX_LOOP_ITERATIONS) {
+ status = AE_AML_INFINITE_LOOP;
diff --git a/linux-2.6-acpi-video-dos.patch b/acpi-video-dos.patch
similarity index 100%
rename from linux-2.6-acpi-video-dos.patch
rename to acpi-video-dos.patch
diff --git a/alps.patch b/alps.patch
new file mode 100644
index 0000000..83d3cfe
--- /dev/null
+++ b/alps.patch
@@ -0,0 +1,1405 @@
+diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
+index e229fa3..7b99fc7 100644
+--- a/drivers/input/mouse/alps.c
++++ b/drivers/input/mouse/alps.c
+@@ -27,14 +27,11 @@
+ /*
+ * Definitions for ALPS version 3 and 4 command mode protocol
+ */
+-#define ALPS_V3_X_MAX 2000
+-#define ALPS_V3_Y_MAX 1400
+-
+-#define ALPS_BITMAP_X_BITS 15
+-#define ALPS_BITMAP_Y_BITS 11
+-
+ #define ALPS_CMD_NIBBLE_10 0x01f2
+
++#define ALPS_REG_BASE_RUSHMORE 0xc2c0
++#define ALPS_REG_BASE_PINNACLE 0x0000
++
+ static const struct alps_nibble_commands alps_v3_nibble_commands[] = {
+ { PSMOUSE_CMD_SETPOLL, 0x00 }, /* 0 */
+ { PSMOUSE_CMD_RESET_DIS, 0x00 }, /* 1 */
+@@ -109,11 +106,14 @@ static const struct alps_model_info alps_model_data[] = {
+ { { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS }, /* Dell Vostro 1400 */
+ { { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff,
+ ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */
+- { { 0x73, 0x02, 0x64 }, 0x9b, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
+- { { 0x73, 0x02, 0x64 }, 0x9d, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
+ { { 0x73, 0x02, 0x64 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
+ };
+
++static void alps_set_abs_params_st(struct alps_data *priv,
++ struct input_dev *dev1);
++static void alps_set_abs_params_mt(struct alps_data *priv,
++ struct input_dev *dev1);
++
+ /*
+ * XXX - this entry is suspicious. First byte has zero lower nibble,
+ * which is what a normal mouse would report. Also, the value 0x0e
+@@ -122,10 +122,10 @@ static const struct alps_model_info alps_model_data[] = {
+
+ /* Packet formats are described in Documentation/input/alps.txt */
+
+-static bool alps_is_valid_first_byte(const struct alps_model_info *model,
++static bool alps_is_valid_first_byte(struct alps_data *priv,
+ unsigned char data)
+ {
+- return (data & model->mask0) == model->byte0;
++ return (data & priv->mask0) == priv->byte0;
+ }
+
+ static void alps_report_buttons(struct psmouse *psmouse,
+@@ -158,14 +158,13 @@ static void alps_report_buttons(struct psmouse *psmouse,
+ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
+ {
+ struct alps_data *priv = psmouse->private;
+- const struct alps_model_info *model = priv->i;
+ unsigned char *packet = psmouse->packet;
+ struct input_dev *dev = psmouse->dev;
+ struct input_dev *dev2 = priv->dev2;
+ int x, y, z, ges, fin, left, right, middle;
+ int back = 0, forward = 0;
+
+- if (model->proto_version == ALPS_PROTO_V1) {
++ if (priv->proto_version == ALPS_PROTO_V1) {
+ left = packet[2] & 0x10;
+ right = packet[2] & 0x08;
+ middle = 0;
+@@ -181,12 +180,12 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
+ z = packet[5];
+ }
+
+- if (model->flags & ALPS_FW_BK_1) {
++ if (priv->flags & ALPS_FW_BK_1) {
+ back = packet[0] & 0x10;
+ forward = packet[2] & 4;
+ }
+
+- if (model->flags & ALPS_FW_BK_2) {
++ if (priv->flags & ALPS_FW_BK_2) {
+ back = packet[3] & 4;
+ forward = packet[2] & 4;
+ if ((middle = forward && back))
+@@ -196,7 +195,7 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
+ ges = packet[2] & 1;
+ fin = packet[2] & 2;
+
+- if ((model->flags & ALPS_DUALPOINT) && z == 127) {
++ if ((priv->flags & ALPS_DUALPOINT) && z == 127) {
+ input_report_rel(dev2, REL_X, (x > 383 ? (x - 768) : x));
+ input_report_rel(dev2, REL_Y, -(y > 255 ? (y - 512) : y));
+
+@@ -239,15 +238,15 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
+ input_report_abs(dev, ABS_PRESSURE, z);
+ input_report_key(dev, BTN_TOOL_FINGER, z > 0);
+
+- if (model->flags & ALPS_WHEEL)
++ if (priv->flags & ALPS_WHEEL)
+ input_report_rel(dev, REL_WHEEL, ((packet[2] << 1) & 0x08) - ((packet[0] >> 4) & 0x07));
+
+- if (model->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) {
++ if (priv->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) {
+ input_report_key(dev, BTN_FORWARD, forward);
+ input_report_key(dev, BTN_BACK, back);
+ }
+
+- if (model->flags & ALPS_FOUR_BUTTONS) {
++ if (priv->flags & ALPS_FOUR_BUTTONS) {
+ input_report_key(dev, BTN_0, packet[2] & 4);
+ input_report_key(dev, BTN_1, packet[0] & 0x10);
+ input_report_key(dev, BTN_2, packet[3] & 4);
+@@ -267,7 +266,8 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
+ * These points are returned in x1, y1, x2, and y2 when the return value
+ * is greater than 0.
+ */
+-static int alps_process_bitmap(unsigned int x_map, unsigned int y_map,
++static int alps_process_bitmap(struct alps_data *priv,
++ unsigned int x_map, unsigned int y_map,
+ int *x1, int *y1, int *x2, int *y2)
+ {
+ struct alps_bitmap_point {
+@@ -309,7 +309,7 @@ static int alps_process_bitmap(unsigned int x_map, unsigned int y_map,
+ * y bitmap is reversed for what we need (lower positions are in
+ * higher bits), so we process from the top end.
+ */
+- y_map = y_map << (sizeof(y_map) * BITS_PER_BYTE - ALPS_BITMAP_Y_BITS);
++ y_map = y_map << (sizeof(y_map) * BITS_PER_BYTE - priv->y_bits);
+ prev_bit = 0;
+ point = &y_low;
+ for (i = 0; y_map != 0; i++, y_map <<= 1) {
+@@ -355,16 +355,18 @@ static int alps_process_bitmap(unsigned int x_map, unsigned int y_map,
+ }
+ }
+
+- *x1 = (ALPS_V3_X_MAX * (2 * x_low.start_bit + x_low.num_bits - 1)) /
+- (2 * (ALPS_BITMAP_X_BITS - 1));
+- *y1 = (ALPS_V3_Y_MAX * (2 * y_low.start_bit + y_low.num_bits - 1)) /
+- (2 * (ALPS_BITMAP_Y_BITS - 1));
++ *x1 = (priv->x_max * (2 * x_low.start_bit + x_low.num_bits - 1)) /
++ (2 * (priv->x_bits - 1));
++ *y1 = (priv->y_max * (2 * y_low.start_bit + y_low.num_bits - 1)) /
++ (2 * (priv->y_bits - 1));
+
+ if (fingers > 1) {
+- *x2 = (ALPS_V3_X_MAX * (2 * x_high.start_bit + x_high.num_bits - 1)) /
+- (2 * (ALPS_BITMAP_X_BITS - 1));
+- *y2 = (ALPS_V3_Y_MAX * (2 * y_high.start_bit + y_high.num_bits - 1)) /
+- (2 * (ALPS_BITMAP_Y_BITS - 1));
++ *x2 = (priv->x_max *
++ (2 * x_high.start_bit + x_high.num_bits - 1)) /
++ (2 * (priv->x_bits - 1));
++ *y2 = (priv->y_max *
++ (2 * y_high.start_bit + y_high.num_bits - 1)) /
++ (2 * (priv->y_bits - 1));
+ }
+
+ return fingers;
+@@ -448,17 +450,57 @@ static void alps_process_trackstick_packet_v3(struct psmouse *psmouse)
+ return;
+ }
+
++static void alps_decode_buttons_v3(struct alps_fields *f, unsigned char *p)
++{
++ f->left = !!(p[3] & 0x01);
++ f->right = !!(p[3] & 0x02);
++ f->middle = !!(p[3] & 0x04);
++
++ f->ts_left = !!(p[3] & 0x10);
++ f->ts_right = !!(p[3] & 0x20);
++ f->ts_middle = !!(p[3] & 0x40);
++}
++
++static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p)
++{
++ f->first_mp = !!(p[4] & 0x40);
++ f->is_mp = !!(p[0] & 0x40);
++
++ f->fingers = (p[5] & 0x3) + 1;
++ f->x_map = ((p[4] & 0x7e) << 8) |
++ ((p[1] & 0x7f) << 2) |
++ ((p[0] & 0x30) >> 4);
++ f->y_map = ((p[3] & 0x70) << 4) |
++ ((p[2] & 0x7f) << 1) |
++ (p[4] & 0x01);
++
++ f->x = ((p[1] & 0x7f) << 4) | ((p[4] & 0x30) >> 2) |
++ ((p[0] & 0x30) >> 4);
++ f->y = ((p[2] & 0x7f) << 4) | (p[4] & 0x0f);
++ f->z = p[5] & 0x7f;
++
++ alps_decode_buttons_v3(f, p);
++}
++
++static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p)
++{
++ alps_decode_pinnacle(f, p);
++
++ f->x_map |= (p[5] & 0x10) << 11;
++ f->y_map |= (p[5] & 0x20) << 6;
++}
++
+ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+ {
+ struct alps_data *priv = psmouse->private;
+ unsigned char *packet = psmouse->packet;
+ struct input_dev *dev = psmouse->dev;
+ struct input_dev *dev2 = priv->dev2;
+- int x, y, z;
+- int left, right, middle;
+ int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
+ int fingers = 0, bmap_fingers;
+- unsigned int x_bitmap, y_bitmap;
++ struct alps_fields f;
++
++ priv->decode_fields(&f, packet);
+
+ /*
+ * There's no single feature of touchpad position and bitmap packets
+@@ -473,16 +515,10 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+ * packet. Check for this, and when it happens process the
+ * position packet as usual.
+ */
+- if (packet[0] & 0x40) {
+- fingers = (packet[5] & 0x3) + 1;
+- x_bitmap = ((packet[4] & 0x7e) << 8) |
+- ((packet[1] & 0x7f) << 2) |
+- ((packet[0] & 0x30) >> 4);
+- y_bitmap = ((packet[3] & 0x70) << 4) |
+- ((packet[2] & 0x7f) << 1) |
+- (packet[4] & 0x01);
+-
+- bmap_fingers = alps_process_bitmap(x_bitmap, y_bitmap,
++ if (f.is_mp) {
++ fingers = f.fingers;
++ bmap_fingers = alps_process_bitmap(priv,
++ f.x_map, f.y_map,
+ &x1, &y1, &x2, &y2);
+
+ /*
+@@ -493,7 +529,7 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+ fingers = bmap_fingers;
+
+ /* Now process position packet */
+- packet = priv->multi_data;
++ priv->decode_fields(&f, priv->multi_data);
+ } else {
+ priv->multi_packet = 0;
+ }
+@@ -507,10 +543,10 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+ * out misidentified bitmap packets, we reject anything with this
+ * bit set.
+ */
+- if (packet[0] & 0x40)
++ if (f.is_mp)
+ return;
+
+- if (!priv->multi_packet && (packet[4] & 0x40)) {
++ if (!priv->multi_packet && f.first_mp) {
+ priv->multi_packet = 1;
+ memcpy(priv->multi_data, packet, sizeof(priv->multi_data));
+ return;
+@@ -518,22 +554,13 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+
+ priv->multi_packet = 0;
+
+- left = packet[3] & 0x01;
+- right = packet[3] & 0x02;
+- middle = packet[3] & 0x04;
+-
+- x = ((packet[1] & 0x7f) << 4) | ((packet[4] & 0x30) >> 2) |
+- ((packet[0] & 0x30) >> 4);
+- y = ((packet[2] & 0x7f) << 4) | (packet[4] & 0x0f);
+- z = packet[5] & 0x7f;
+-
+ /*
+ * Sometimes the hardware sends a single packet with z = 0
+ * in the middle of a stream. Real releases generate packets
+ * with x, y, and z all zero, so these seem to be flukes.
+ * Ignore them.
+ */
+- if (x && y && !z)
++ if (f.x && f.y && !f.z)
+ return;
+
+ /*
+@@ -541,12 +568,12 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+ * to rely on ST data.
+ */
+ if (!fingers) {
+- x1 = x;
+- y1 = y;
+- fingers = z > 0 ? 1 : 0;
++ x1 = f.x;
++ y1 = f.y;
++ fingers = f.z > 0 ? 1 : 0;
+ }
+
+- if (z >= 64)
++ if (f.z >= 64)
+ input_report_key(dev, BTN_TOUCH, 1);
+ else
+ input_report_key(dev, BTN_TOUCH, 0);
+@@ -555,26 +582,22 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
+
+ input_mt_report_finger_count(dev, fingers);
+
+- input_report_key(dev, BTN_LEFT, left);
+- input_report_key(dev, BTN_RIGHT, right);
+- input_report_key(dev, BTN_MIDDLE, middle);
++ input_report_key(dev, BTN_LEFT, f.left);
++ input_report_key(dev, BTN_RIGHT, f.right);
++ input_report_key(dev, BTN_MIDDLE, f.middle);
+
+- if (z > 0) {
+- input_report_abs(dev, ABS_X, x);
+- input_report_abs(dev, ABS_Y, y);
++ if (f.z > 0) {
++ input_report_abs(dev, ABS_X, f.x);
++ input_report_abs(dev, ABS_Y, f.y);
+ }
+- input_report_abs(dev, ABS_PRESSURE, z);
++ input_report_abs(dev, ABS_PRESSURE, f.z);
+
+ input_sync(dev);
+
+ if (!(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) {
+- left = packet[3] & 0x10;
+- right = packet[3] & 0x20;
+- middle = packet[3] & 0x40;
+-
+- input_report_key(dev2, BTN_LEFT, left);
+- input_report_key(dev2, BTN_RIGHT, right);
+- input_report_key(dev2, BTN_MIDDLE, middle);
++ input_report_key(dev2, BTN_LEFT, f.ts_left);
++ input_report_key(dev2, BTN_RIGHT, f.ts_right);
++ input_report_key(dev2, BTN_MIDDLE, f.ts_middle);
+ input_sync(dev2);
+ }
+ }
+@@ -639,7 +662,7 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
+ ((priv->multi_data[3] & 0x1f) << 5) |
+ (priv->multi_data[1] & 0x1f);
+
+- fingers = alps_process_bitmap(x_bitmap, y_bitmap,
++ fingers = alps_process_bitmap(priv, x_bitmap, y_bitmap,
+ &x1, &y1, &x2, &y2);
+
+ /* Store MT data.*/
+@@ -696,25 +719,6 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
+ input_sync(dev);
+ }
+
+-static void alps_process_packet(struct psmouse *psmouse)
+-{
+- struct alps_data *priv = psmouse->private;
+- const struct alps_model_info *model = priv->i;
+-
+- switch (model->proto_version) {
+- case ALPS_PROTO_V1:
+- case ALPS_PROTO_V2:
+- alps_process_packet_v1_v2(psmouse);
+- break;
+- case ALPS_PROTO_V3:
+- alps_process_packet_v3(psmouse);
+- break;
+- case ALPS_PROTO_V4:
+- alps_process_packet_v4(psmouse);
+- break;
+- }
+-}
+-
+ static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
+ unsigned char packet[],
+ bool report_buttons)
+@@ -765,14 +769,14 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
+ if (((psmouse->packet[3] |
+ psmouse->packet[4] |
+ psmouse->packet[5]) & 0x80) ||
+- (!alps_is_valid_first_byte(priv->i, psmouse->packet[6]))) {
++ (!alps_is_valid_first_byte(priv, psmouse->packet[6]))) {
+ psmouse_dbg(psmouse,
+ "refusing packet %4ph (suspected interleaved ps/2)\n",
+ psmouse->packet + 3);
+ return PSMOUSE_BAD_DATA;
+ }
+
+- alps_process_packet(psmouse);
++ priv->process_packet(psmouse);
+
+ /* Continue with the next packet */
+ psmouse->packet[0] = psmouse->packet[6];
+@@ -816,6 +820,7 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
+ static void alps_flush_packet(unsigned long data)
+ {
+ struct psmouse *psmouse = (struct psmouse *)data;
++ struct alps_data *priv = psmouse->private;
+
+ serio_pause_rx(psmouse->ps2dev.serio);
+
+@@ -833,7 +838,7 @@ static void alps_flush_packet(unsigned long data)
+ "refusing packet %3ph (suspected interleaved ps/2)\n",
+ psmouse->packet + 3);
+ } else {
+- alps_process_packet(psmouse);
++ priv->process_packet(psmouse);
+ }
+ psmouse->pktcnt = 0;
+ }
+@@ -844,7 +849,6 @@ static void alps_flush_packet(unsigned long data)
+ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
+ {
+ struct alps_data *priv = psmouse->private;
+- const struct alps_model_info *model = priv->i;
+
+ if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */
+ if (psmouse->pktcnt == 3) {
+@@ -857,15 +861,15 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
+
+ /* Check for PS/2 packet stuffed in the middle of ALPS packet. */
+
+- if ((model->flags & ALPS_PS2_INTERLEAVED) &&
++ if ((priv->flags & ALPS_PS2_INTERLEAVED) &&
+ psmouse->pktcnt >= 4 && (psmouse->packet[3] & 0x0f) == 0x0f) {
+ return alps_handle_interleaved_ps2(psmouse);
+ }
+
+- if (!alps_is_valid_first_byte(model, psmouse->packet[0])) {
++ if (!alps_is_valid_first_byte(priv, psmouse->packet[0])) {
+ psmouse_dbg(psmouse,
+ "refusing packet[0] = %x (mask0 = %x, byte0 = %x)\n",
+- psmouse->packet[0], model->mask0, model->byte0);
++ psmouse->packet[0], priv->mask0, priv->byte0);
+ return PSMOUSE_BAD_DATA;
+ }
+
+@@ -879,7 +883,7 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
+ }
+
+ if (psmouse->pktcnt == psmouse->pktsize) {
+- alps_process_packet(psmouse);
++ priv->process_packet(psmouse);
+ return PSMOUSE_FULL_PACKET;
+ }
+
+@@ -967,24 +971,42 @@ static int alps_command_mode_write_reg(struct psmouse *psmouse, int addr,
+ return __alps_command_mode_write_reg(psmouse, value);
+ }
+
++static int alps_rpt_cmd(struct psmouse *psmouse, int init_command,
++ int repeated_command, unsigned char *param)
++{
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++
++ param[0] = 0;
++ if (init_command && ps2_command(ps2dev, param, init_command))
++ return -EIO;
++
++ if (ps2_command(ps2dev, NULL, repeated_command) ||
++ ps2_command(ps2dev, NULL, repeated_command) ||
++ ps2_command(ps2dev, NULL, repeated_command))
++ return -EIO;
++
++ param[0] = param[1] = param[2] = 0xff;
++ if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
++ return -EIO;
++
++ psmouse_dbg(psmouse, "%2.2X report: %2.2x %2.2x %2.2x\n",
++ repeated_command, param[0], param[1], param[2]);
++ return 0;
++}
++
+ static int alps_enter_command_mode(struct psmouse *psmouse,
+ unsigned char *resp)
+ {
+ unsigned char param[4];
+- struct ps2dev *ps2dev = &psmouse->ps2dev;
+
+- if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) ||
+- ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) {
++ if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_RESET_WRAP, param)) {
+ psmouse_err(psmouse, "failed to enter command mode\n");
+ return -1;
+ }
+
+- if (param[0] != 0x88 && param[1] != 0x07) {
++ if (param[0] != 0x88 || (param[1] != 0x07 && param[1] != 0x08)) {
+ psmouse_dbg(psmouse,
+- "unknown response while entering command mode: %2.2x %2.2x %2.2x\n",
+- param[0], param[1], param[2]);
++ "unknown response while entering command mode\n");
+ return -1;
+ }
+
+@@ -1001,99 +1023,6 @@ static inline int alps_exit_command_mode(struct psmouse *psmouse)
+ return 0;
+ }
+
+-static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int *version)
+-{
+- struct ps2dev *ps2dev = &psmouse->ps2dev;
+- static const unsigned char rates[] = { 0, 10, 20, 40, 60, 80, 100, 200 };
+- unsigned char param[4];
+- const struct alps_model_info *model = NULL;
+- int i;
+-
+- /*
+- * First try "E6 report".
+- * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed.
+- * The bits 0-2 of the first byte will be 1s if some buttons are
+- * pressed.
+- */
+- param[0] = 0;
+- if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11))
+- return NULL;
+-
+- param[0] = param[1] = param[2] = 0xff;
+- if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
+- return NULL;
+-
+- psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x",
+- param[0], param[1], param[2]);
+-
+- if ((param[0] & 0xf8) != 0 || param[1] != 0 ||
+- (param[2] != 10 && param[2] != 100))
+- return NULL;
+-
+- /*
+- * Now try "E7 report". Allowed responses are in
+- * alps_model_data[].signature
+- */
+- param[0] = 0;
+- if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21))
+- return NULL;
+-
+- param[0] = param[1] = param[2] = 0xff;
+- if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
+- return NULL;
+-
+- psmouse_dbg(psmouse, "E7 report: %2.2x %2.2x %2.2x",
+- param[0], param[1], param[2]);
+-
+- if (version) {
+- for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++)
+- /* empty */;
+- *version = (param[0] << 8) | (param[1] << 4) | i;
+- }
+-
+- for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) {
+- if (!memcmp(param, alps_model_data[i].signature,
+- sizeof(alps_model_data[i].signature))) {
+- model = alps_model_data + i;
+- break;
+- }
+- }
+-
+- if (model && model->proto_version > ALPS_PROTO_V2) {
+- /*
+- * Need to check command mode response to identify
+- * model
+- */
+- model = NULL;
+- if (alps_enter_command_mode(psmouse, param)) {
+- psmouse_warn(psmouse,
+- "touchpad failed to enter command mode\n");
+- } else {
+- for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) {
+- if (alps_model_data[i].proto_version > ALPS_PROTO_V2 &&
+- alps_model_data[i].command_mode_resp == param[0]) {
+- model = alps_model_data + i;
+- break;
+- }
+- }
+- alps_exit_command_mode(psmouse);
+-
+- if (!model)
+- psmouse_dbg(psmouse,
+- "Unknown command mode response %2.2x\n",
+- param[0]);
+- }
+- }
+-
+- return model;
+-}
+-
+ /*
+ * For DualPoint devices select the device that should respond to
+ * subsequent commands. It looks like glidepad is behind stickpointer,
+@@ -1137,18 +1066,10 @@ static int alps_absolute_mode_v1_v2(struct psmouse *psmouse)
+
+ static int alps_get_status(struct psmouse *psmouse, char *param)
+ {
+- struct ps2dev *ps2dev = &psmouse->ps2dev;
+-
+ /* Get status: 0xF5 0xF5 0xF5 0xE9 */
+- if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) ||
+- ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
++ if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_DISABLE, param))
+ return -1;
+
+- psmouse_dbg(psmouse, "Status: %2.2x %2.2x %2.2x",
+- param[0], param[1], param[2]);
+-
+ return 0;
+ }
+
+@@ -1190,16 +1111,16 @@ static int alps_poll(struct psmouse *psmouse)
+ unsigned char buf[sizeof(psmouse->packet)];
+ bool poll_failed;
+
+- if (priv->i->flags & ALPS_PASS)
++ if (priv->flags & ALPS_PASS)
+ alps_passthrough_mode_v2(psmouse, true);
+
+ poll_failed = ps2_command(&psmouse->ps2dev, buf,
+ PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)) < 0;
+
+- if (priv->i->flags & ALPS_PASS)
++ if (priv->flags & ALPS_PASS)
+ alps_passthrough_mode_v2(psmouse, false);
+
+- if (poll_failed || (buf[0] & priv->i->mask0) != priv->i->byte0)
++ if (poll_failed || (buf[0] & priv->mask0) != priv->byte0)
+ return -1;
+
+ if ((psmouse->badbyte & 0xc8) == 0x08) {
+@@ -1217,9 +1138,8 @@ static int alps_poll(struct psmouse *psmouse)
+ static int alps_hw_init_v1_v2(struct psmouse *psmouse)
+ {
+ struct alps_data *priv = psmouse->private;
+- const struct alps_model_info *model = priv->i;
+
+- if ((model->flags & ALPS_PASS) &&
++ if ((priv->flags & ALPS_PASS) &&
+ alps_passthrough_mode_v2(psmouse, true)) {
+ return -1;
+ }
+@@ -1234,7 +1154,7 @@ static int alps_hw_init_v1_v2(struct psmouse *psmouse)
+ return -1;
+ }
+
+- if ((model->flags & ALPS_PASS) &&
++ if ((priv->flags & ALPS_PASS) &&
+ alps_passthrough_mode_v2(psmouse, false)) {
+ return -1;
+ }
+@@ -1249,26 +1169,31 @@ static int alps_hw_init_v1_v2(struct psmouse *psmouse)
+ }
+
+ /*
+- * Enable or disable passthrough mode to the trackstick. Must be in
+- * command mode when calling this function.
++ * Enable or disable passthrough mode to the trackstick.
+ */
+-static int alps_passthrough_mode_v3(struct psmouse *psmouse, bool enable)
++static int alps_passthrough_mode_v3(struct psmouse *psmouse,
++ int reg_base, bool enable)
+ {
+- int reg_val;
++ int reg_val, ret = -1;
+
+- reg_val = alps_command_mode_read_reg(psmouse, 0x0008);
+- if (reg_val == -1)
++ if (alps_enter_command_mode(psmouse, NULL))
+ return -1;
+
++ reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x0008);
++ if (reg_val == -1)
++ goto error;
++
+ if (enable)
+ reg_val |= 0x01;
+ else
+ reg_val &= ~0x01;
+
+- if (__alps_command_mode_write_reg(psmouse, reg_val))
+- return -1;
++ ret = __alps_command_mode_write_reg(psmouse, reg_val);
+
+- return 0;
++error:
++ if (alps_exit_command_mode(psmouse))
++ ret = -1;
++ return ret;
+ }
+
+ /* Must be in command mode when calling this function */
+@@ -1287,73 +1212,102 @@ static int alps_absolute_mode_v3(struct psmouse *psmouse)
+ return 0;
+ }
+
+-static int alps_hw_init_v3(struct psmouse *psmouse)
++static int alps_probe_trackstick_v3(struct psmouse *psmouse, int reg_base)
+ {
+- struct alps_data *priv = psmouse->private;
+- struct ps2dev *ps2dev = &psmouse->ps2dev;
+- int reg_val;
+- unsigned char param[4];
+-
+- priv->nibble_commands = alps_v3_nibble_commands;
+- priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
++ int ret = -EIO, reg_val;
+
+ if (alps_enter_command_mode(psmouse, NULL))
+ goto error;
+
+- /* Check for trackstick */
+- reg_val = alps_command_mode_read_reg(psmouse, 0x0008);
++ reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x08);
+ if (reg_val == -1)
+ goto error;
+- if (reg_val & 0x80) {
+- if (alps_passthrough_mode_v3(psmouse, true))
+- goto error;
+- if (alps_exit_command_mode(psmouse))
+- goto error;
++
++ /* bit 7: trackstick is present */
++ ret = reg_val & 0x80 ? 0 : -ENODEV;
++
++error:
++ alps_exit_command_mode(psmouse);
++ return ret;
++}
++
++static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base)
++{
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++ int ret = 0;
++ unsigned char param[4];
++
++ if (alps_passthrough_mode_v3(psmouse, reg_base, true))
++ return -EIO;
++
++ /*
++ * E7 report for the trackstick
++ *
++ * There have been reports of failures to seem to trace back
++ * to the above trackstick check failing. When these occur
++ * this E7 report fails, so when that happens we continue
++ * with the assumption that there isn't a trackstick after
++ * all.
++ */
++ if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_SETSCALE21, param)) {
++ psmouse_warn(psmouse, "trackstick E7 report failed\n");
++ ret = -ENODEV;
++ } else {
++ psmouse_dbg(psmouse,
++ "trackstick E7 report: %2.2x %2.2x %2.2x\n",
++ param[0], param[1], param[2]);
+
+ /*
+- * E7 report for the trackstick
+- *
+- * There have been reports of failures to seem to trace back
+- * to the above trackstick check failing. When these occur
+- * this E7 report fails, so when that happens we continue
+- * with the assumption that there isn't a trackstick after
+- * all.
++ * Not sure what this does, but it is absolutely
++ * essential. Without it, the touchpad does not
++ * work at all and the trackstick just emits normal
++ * PS/2 packets.
+ */
+- param[0] = 0x64;
+- if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) ||
+- ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) {
+- psmouse_warn(psmouse, "trackstick E7 report failed\n");
+- } else {
+- psmouse_dbg(psmouse,
+- "trackstick E7 report: %2.2x %2.2x %2.2x\n",
+- param[0], param[1], param[2]);
+-
+- /*
+- * Not sure what this does, but it is absolutely
+- * essential. Without it, the touchpad does not
+- * work at all and the trackstick just emits normal
+- * PS/2 packets.
+- */
+- if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
+- ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
+- alps_command_mode_send_nibble(psmouse, 0x9) ||
+- alps_command_mode_send_nibble(psmouse, 0x4)) {
+- psmouse_err(psmouse,
+- "Error sending magic E6 sequence\n");
+- goto error_passthrough;
+- }
++ if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
++ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
++ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
++ alps_command_mode_send_nibble(psmouse, 0x9) ||
++ alps_command_mode_send_nibble(psmouse, 0x4)) {
++ psmouse_err(psmouse,
++ "Error sending magic E6 sequence\n");
++ ret = -EIO;
++ goto error;
+ }
+
+- if (alps_enter_command_mode(psmouse, NULL))
+- goto error_passthrough;
+- if (alps_passthrough_mode_v3(psmouse, false))
+- goto error;
++ /*
++ * This ensures the trackstick packets are in the format
++ * supported by this driver. If bit 1 isn't set the packet
++ * format is different.
++ */
++ if (alps_enter_command_mode(psmouse, NULL) ||
++ alps_command_mode_write_reg(psmouse,
++ reg_base + 0x08, 0x82) ||
++ alps_exit_command_mode(psmouse))
++ ret = -EIO;
+ }
+
+- if (alps_absolute_mode_v3(psmouse)) {
++error:
++ if (alps_passthrough_mode_v3(psmouse, reg_base, false))
++ ret = -EIO;
++
++ return ret;
++}
++
++static int alps_hw_init_v3(struct psmouse *psmouse)
++{
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++ int reg_val;
++ unsigned char param[4];
++
++ reg_val = alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE);
++ if (reg_val == -EIO)
++ goto error;
++ if (reg_val == 0 &&
++ alps_setup_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE) == -EIO)
++ goto error;
++
++ if (alps_enter_command_mode(psmouse, NULL) ||
++ alps_absolute_mode_v3(psmouse)) {
+ psmouse_err(psmouse, "Failed to enter absolute mode\n");
+ goto error;
+ }
+@@ -1390,14 +1344,6 @@ static int alps_hw_init_v3(struct psmouse *psmouse)
+ if (alps_command_mode_write_reg(psmouse, 0x0162, 0x04))
+ goto error;
+
+- /*
+- * This ensures the trackstick packets are in the format
+- * supported by this driver. If bit 1 isn't set the packet
+- * format is different.
+- */
+- if (alps_command_mode_write_reg(psmouse, 0x0008, 0x82))
+- goto error;
+-
+ alps_exit_command_mode(psmouse);
+
+ /* Set rate and enable data reporting */
+@@ -1410,10 +1356,6 @@ static int alps_hw_init_v3(struct psmouse *psmouse)
+
+ return 0;
+
+-error_passthrough:
+- /* Something failed while in passthrough mode, so try to get out */
+- if (!alps_enter_command_mode(psmouse, NULL))
+- alps_passthrough_mode_v3(psmouse, false);
+ error:
+ /*
+ * Leaving the touchpad in command mode will essentially render
+@@ -1424,6 +1366,50 @@ error:
+ return -1;
+ }
+
++static int alps_hw_init_rushmore_v3(struct psmouse *psmouse)
++{
++ struct alps_data *priv = psmouse->private;
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++ int reg_val, ret = -1;
++
++ if (priv->flags & ALPS_DUALPOINT) {
++ reg_val = alps_setup_trackstick_v3(psmouse,
++ ALPS_REG_BASE_RUSHMORE);
++ if (reg_val == -EIO)
++ goto error;
++ if (reg_val == -ENODEV)
++ priv->flags &= ~ALPS_DUALPOINT;
++ }
++
++ if (alps_enter_command_mode(psmouse, NULL) ||
++ alps_command_mode_read_reg(psmouse, 0xc2d9) == -1 ||
++ alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00))
++ goto error;
++
++ reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6);
++ if (reg_val == -1)
++ goto error;
++ if (__alps_command_mode_write_reg(psmouse, reg_val & 0xfd))
++ goto error;
++
++ if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64))
++ goto error;
++
++ /* enter absolute mode */
++ reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4);
++ if (reg_val == -1)
++ goto error;
++ if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02))
++ goto error;
++
++ alps_exit_command_mode(psmouse);
++ return ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE);
++
++error:
++ alps_exit_command_mode(psmouse);
++ return ret;
++}
++
+ /* Must be in command mode when calling this function */
+ static int alps_absolute_mode_v4(struct psmouse *psmouse)
+ {
+@@ -1442,13 +1428,9 @@ static int alps_absolute_mode_v4(struct psmouse *psmouse)
+
+ static int alps_hw_init_v4(struct psmouse *psmouse)
+ {
+- struct alps_data *priv = psmouse->private;
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
+ unsigned char param[4];
+
+- priv->nibble_commands = alps_v4_nibble_commands;
+- priv->addr_command = PSMOUSE_CMD_DISABLE;
+-
+ if (alps_enter_command_mode(psmouse, NULL))
+ goto error;
+
+@@ -1517,39 +1499,140 @@ error:
+ return -1;
+ }
+
+-static int alps_hw_init(struct psmouse *psmouse)
++static void alps_set_defaults(struct alps_data *priv)
+ {
+- struct alps_data *priv = psmouse->private;
+- const struct alps_model_info *model = priv->i;
+- int ret = -1;
++ priv->byte0 = 0x8f;
++ priv->mask0 = 0x8f;
++ priv->flags = ALPS_DUALPOINT;
++
++ priv->x_max = 2000;
++ priv->y_max = 1400;
++ priv->x_bits = 15;
++ priv->y_bits = 11;
+
+- switch (model->proto_version) {
++ switch (priv->proto_version) {
+ case ALPS_PROTO_V1:
+ case ALPS_PROTO_V2:
+- ret = alps_hw_init_v1_v2(psmouse);
++ priv->hw_init = alps_hw_init_v1_v2;
++ priv->process_packet = alps_process_packet_v1_v2;
++ priv->set_abs_params = alps_set_abs_params_st;
+ break;
+ case ALPS_PROTO_V3:
+- ret = alps_hw_init_v3(psmouse);
++ priv->hw_init = alps_hw_init_v3;
++ priv->process_packet = alps_process_packet_v3;
++ priv->set_abs_params = alps_set_abs_params_mt;
++ priv->decode_fields = alps_decode_pinnacle;
++ priv->nibble_commands = alps_v3_nibble_commands;
++ priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
+ break;
+ case ALPS_PROTO_V4:
+- ret = alps_hw_init_v4(psmouse);
++ priv->hw_init = alps_hw_init_v4;
++ priv->process_packet = alps_process_packet_v4;
++ priv->set_abs_params = alps_set_abs_params_mt;
++ priv->nibble_commands = alps_v4_nibble_commands;
++ priv->addr_command = PSMOUSE_CMD_DISABLE;
+ break;
+ }
++}
+
+- return ret;
++static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv,
++ unsigned char *e7, unsigned char *ec)
++{
++ const struct alps_model_info *model;
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) {
++ model = &alps_model_data[i];
++
++ if (!memcmp(e7, model->signature, sizeof(model->signature)) &&
++ (!model->command_mode_resp ||
++ model->command_mode_resp == ec[2])) {
++
++ priv->proto_version = model->proto_version;
++ alps_set_defaults(priv);
++
++ priv->flags = model->flags;
++ priv->byte0 = model->byte0;
++ priv->mask0 = model->mask0;
++
++ return 0;
++ }
++ }
++
++ return -EINVAL;
++}
++
++static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
++{
++ unsigned char e6[4], e7[4], ec[4];
++
++ /*
++ * First try "E6 report".
++ * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed.
++ * The bits 0-2 of the first byte will be 1s if some buttons are
++ * pressed.
++ */
++ if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES,
++ PSMOUSE_CMD_SETSCALE11, e6))
++ return -EIO;
++
++ if ((e6[0] & 0xf8) != 0 || e6[1] != 0 || (e6[2] != 10 && e6[2] != 100))
++ return -EINVAL;
++
++ /*
++ * Now get the "E7" and "EC" reports. These will uniquely identify
++ * most ALPS touchpads.
++ */
++ if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES,
++ PSMOUSE_CMD_SETSCALE21, e7) ||
++ alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES,
++ PSMOUSE_CMD_RESET_WRAP, ec) ||
++ alps_exit_command_mode(psmouse))
++ return -EIO;
++
++ if (alps_match_table(psmouse, priv, e7, ec) == 0) {
++ return 0;
++ } else if (ec[0] == 0x88 && ec[1] == 0x08) {
++ priv->proto_version = ALPS_PROTO_V3;
++ alps_set_defaults(priv);
++
++ priv->hw_init = alps_hw_init_rushmore_v3;
++ priv->decode_fields = alps_decode_rushmore;
++ priv->x_bits = 16;
++ priv->y_bits = 12;
++
++ /* hack to make addr_command, nibble_command available */
++ psmouse->private = priv;
++
++ if (alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_RUSHMORE))
++ priv->flags &= ~ALPS_DUALPOINT;
++
++ return 0;
++ } else if (ec[0] == 0x88 && ec[1] == 0x07 &&
++ ec[2] >= 0x90 && ec[2] <= 0x9d) {
++ priv->proto_version = ALPS_PROTO_V3;
++ alps_set_defaults(priv);
++
++ return 0;
++ }
++
++ psmouse_info(psmouse,
++ "Unknown ALPS touchpad: E7=%2.2x %2.2x %2.2x, EC=%2.2x %2.2x %2.2x\n",
++ e7[0], e7[1], e7[2], ec[0], ec[1], ec[2]);
++
++ return -EINVAL;
+ }
+
+ static int alps_reconnect(struct psmouse *psmouse)
+ {
+- const struct alps_model_info *model;
++ struct alps_data *priv = psmouse->private;
+
+ psmouse_reset(psmouse);
+
+- model = alps_get_model(psmouse, NULL);
+- if (!model)
++ if (alps_identify(psmouse, priv) < 0)
+ return -1;
+
+- return alps_hw_init(psmouse);
++ return priv->hw_init(psmouse);
+ }
+
+ static void alps_disconnect(struct psmouse *psmouse)
+@@ -1562,12 +1645,33 @@ static void alps_disconnect(struct psmouse *psmouse)
+ kfree(priv);
+ }
+
++static void alps_set_abs_params_st(struct alps_data *priv,
++ struct input_dev *dev1)
++{
++ input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0);
++ input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0);
++}
++
++static void alps_set_abs_params_mt(struct alps_data *priv,
++ struct input_dev *dev1)
++{
++ set_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
++ input_mt_init_slots(dev1, 2, 0);
++ input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
++ input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
++
++ set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit);
++ set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit);
++ set_bit(BTN_TOOL_QUADTAP, dev1->keybit);
++
++ input_set_abs_params(dev1, ABS_X, 0, priv->x_max, 0, 0);
++ input_set_abs_params(dev1, ABS_Y, 0, priv->y_max, 0, 0);
++}
++
+ int alps_init(struct psmouse *psmouse)
+ {
+ struct alps_data *priv;
+- const struct alps_model_info *model;
+ struct input_dev *dev1 = psmouse->dev, *dev2;
+- int version;
+
+ priv = kzalloc(sizeof(struct alps_data), GFP_KERNEL);
+ dev2 = input_allocate_device();
+@@ -1581,13 +1685,10 @@ int alps_init(struct psmouse *psmouse)
+
+ psmouse_reset(psmouse);
+
+- model = alps_get_model(psmouse, &version);
+- if (!model)
++ if (alps_identify(psmouse, priv) < 0)
+ goto init_fail;
+
+- priv->i = model;
+-
+- if (alps_hw_init(psmouse))
++ if (priv->hw_init(psmouse))
+ goto init_fail;
+
+ /*
+@@ -1609,41 +1710,20 @@ int alps_init(struct psmouse *psmouse)
+
+ dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS);
+
+- switch (model->proto_version) {
+- case ALPS_PROTO_V1:
+- case ALPS_PROTO_V2:
+- input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0);
+- input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0);
+- break;
+- case ALPS_PROTO_V3:
+- case ALPS_PROTO_V4:
+- set_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
+- input_mt_init_slots(dev1, 2, 0);
+- input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, ALPS_V3_X_MAX, 0, 0);
+- input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, ALPS_V3_Y_MAX, 0, 0);
+-
+- set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit);
+- set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit);
+- set_bit(BTN_TOOL_QUADTAP, dev1->keybit);
+-
+- input_set_abs_params(dev1, ABS_X, 0, ALPS_V3_X_MAX, 0, 0);
+- input_set_abs_params(dev1, ABS_Y, 0, ALPS_V3_Y_MAX, 0, 0);
+- break;
+- }
+-
++ priv->set_abs_params(priv, dev1);
+ input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0);
+
+- if (model->flags & ALPS_WHEEL) {
++ if (priv->flags & ALPS_WHEEL) {
+ dev1->evbit[BIT_WORD(EV_REL)] |= BIT_MASK(EV_REL);
+ dev1->relbit[BIT_WORD(REL_WHEEL)] |= BIT_MASK(REL_WHEEL);
+ }
+
+- if (model->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) {
++ if (priv->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) {
+ dev1->keybit[BIT_WORD(BTN_FORWARD)] |= BIT_MASK(BTN_FORWARD);
+ dev1->keybit[BIT_WORD(BTN_BACK)] |= BIT_MASK(BTN_BACK);
+ }
+
+- if (model->flags & ALPS_FOUR_BUTTONS) {
++ if (priv->flags & ALPS_FOUR_BUTTONS) {
+ dev1->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_0);
+ dev1->keybit[BIT_WORD(BTN_1)] |= BIT_MASK(BTN_1);
+ dev1->keybit[BIT_WORD(BTN_2)] |= BIT_MASK(BTN_2);
+@@ -1654,7 +1734,8 @@ int alps_init(struct psmouse *psmouse)
+
+ snprintf(priv->phys, sizeof(priv->phys), "%s/input1", psmouse->ps2dev.serio->phys);
+ dev2->phys = priv->phys;
+- dev2->name = (model->flags & ALPS_DUALPOINT) ? "DualPoint Stick" : "PS/2 Mouse";
++ dev2->name = (priv->flags & ALPS_DUALPOINT) ?
++ "DualPoint Stick" : "PS/2 Mouse";
+ dev2->id.bustype = BUS_I8042;
+ dev2->id.vendor = 0x0002;
+ dev2->id.product = PSMOUSE_ALPS;
+@@ -1673,7 +1754,7 @@ int alps_init(struct psmouse *psmouse)
+ psmouse->poll = alps_poll;
+ psmouse->disconnect = alps_disconnect;
+ psmouse->reconnect = alps_reconnect;
+- psmouse->pktsize = model->proto_version == ALPS_PROTO_V4 ? 8 : 6;
++ psmouse->pktsize = priv->proto_version == ALPS_PROTO_V4 ? 8 : 6;
+
+ /* We are having trouble resyncing ALPS touchpads so disable it for now */
+ psmouse->resync_time = 0;
+@@ -1690,18 +1771,16 @@ init_fail:
+
+ int alps_detect(struct psmouse *psmouse, bool set_properties)
+ {
+- int version;
+- const struct alps_model_info *model;
++ struct alps_data dummy;
+
+- model = alps_get_model(psmouse, &version);
+- if (!model)
++ if (alps_identify(psmouse, &dummy) < 0)
+ return -1;
+
+ if (set_properties) {
+ psmouse->vendor = "ALPS";
+- psmouse->name = model->flags & ALPS_DUALPOINT ?
++ psmouse->name = dummy.flags & ALPS_DUALPOINT ?
+ "DualPoint TouchPad" : "GlidePoint";
+- psmouse->model = version;
++ psmouse->model = dummy.proto_version << 8;
+ }
+ return 0;
+ }
+diff --git a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h
+index ae1ac35..9704805 100644
+--- a/drivers/input/mouse/alps.h
++++ b/drivers/input/mouse/alps.h
+@@ -12,35 +12,146 @@
+ #ifndef _ALPS_H
+ #define _ALPS_H
+
+-#define ALPS_PROTO_V1 0
+-#define ALPS_PROTO_V2 1
+-#define ALPS_PROTO_V3 2
+-#define ALPS_PROTO_V4 3
++#define ALPS_PROTO_V1 1
++#define ALPS_PROTO_V2 2
++#define ALPS_PROTO_V3 3
++#define ALPS_PROTO_V4 4
+
++/**
++ * struct alps_model_info - touchpad ID table
++ * @signature: E7 response string to match.
++ * @command_mode_resp: For V3/V4 touchpads, the final byte of the EC response
++ * (aka command mode response) identifies the firmware minor version. This
++ * can be used to distinguish different hardware models which are not
++ * uniquely identifiable through their E7 responses.
++ * @proto_version: Indicates V1/V2/V3/...
++ * @byte0: Helps figure out whether a position report packet matches the
++ * known format for this model. The first byte of the report, ANDed with
++ * mask0, should match byte0.
++ * @mask0: The mask used to check the first byte of the report.
++ * @flags: Additional device capabilities (passthrough port, trackstick, etc.).
++ *
++ * Many (but not all) ALPS touchpads can be identified by looking at the
++ * values returned in the "E7 report" and/or the "EC report." This table
++ * lists a number of such touchpads.
++ */
+ struct alps_model_info {
+- unsigned char signature[3];
+- unsigned char command_mode_resp; /* v3/v4 only */
++ unsigned char signature[3];
++ unsigned char command_mode_resp;
+ unsigned char proto_version;
+- unsigned char byte0, mask0;
+- unsigned char flags;
++ unsigned char byte0, mask0;
++ unsigned char flags;
+ };
+
++/**
++ * struct alps_nibble_commands - encodings for register accesses
++ * @command: PS/2 command used for the nibble
++ * @data: Data supplied as an argument to the PS/2 command, if applicable
++ *
++ * The ALPS protocol uses magic sequences to transmit binary data to the
++ * touchpad, as it is generally not OK to send arbitrary bytes out the
++ * PS/2 port. Each of the sequences in this table sends one nibble of the
++ * register address or (write) data. Different versions of the ALPS protocol
++ * use slightly different encodings.
++ */
+ struct alps_nibble_commands {
+ int command;
+ unsigned char data;
+ };
+
++/**
++ * struct alps_fields - decoded version of the report packet
++ * @x_map: Bitmap of active X positions for MT.
++ * @y_map: Bitmap of active Y positions for MT.
++ * @fingers: Number of fingers for MT.
++ * @x: X position for ST.
++ * @y: Y position for ST.
++ * @z: Z position for ST.
++ * @first_mp: Packet is the first of a multi-packet report.
++ * @is_mp: Packet is part of a multi-packet report.
++ * @left: Left touchpad button is active.
++ * @right: Right touchpad button is active.
++ * @middle: Middle touchpad button is active.
++ * @ts_left: Left trackstick button is active.
++ * @ts_right: Right trackstick button is active.
++ * @ts_middle: Middle trackstick button is active.
++ */
++struct alps_fields {
++ unsigned int x_map;
++ unsigned int y_map;
++ unsigned int fingers;
++ unsigned int x;
++ unsigned int y;
++ unsigned int z;
++ unsigned int first_mp:1;
++ unsigned int is_mp:1;
++
++ unsigned int left:1;
++ unsigned int right:1;
++ unsigned int middle:1;
++
++ unsigned int ts_left:1;
++ unsigned int ts_right:1;
++ unsigned int ts_middle:1;
++};
++
++/**
++ * struct alps_data - private data structure for the ALPS driver
++ * @dev2: "Relative" device used to report trackstick or mouse activity.
++ * @phys: Physical path for the relative device.
++ * @nibble_commands: Command mapping used for touchpad register accesses.
++ * @addr_command: Command used to tell the touchpad that a register address
++ * follows.
++ * @proto_version: Indicates V1/V2/V3/...
++ * @byte0: Helps figure out whether a position report packet matches the
++ * known format for this model. The first byte of the report, ANDed with
++ * mask0, should match byte0.
++ * @mask0: The mask used to check the first byte of the report.
++ * @flags: Additional device capabilities (passthrough port, trackstick, etc.).
++ * @x_max: Largest possible X position value.
++ * @y_max: Largest possible Y position value.
++ * @x_bits: Number of X bits in the MT bitmap.
++ * @y_bits: Number of Y bits in the MT bitmap.
++ * @hw_init: Protocol-specific hardware init function.
++ * @process_packet: Protocol-specific function to process a report packet.
++ * @decode_fields: Protocol-specific function to read packet bitfields.
++ * @set_abs_params: Protocol-specific function to configure the input_dev.
++ * @prev_fin: Finger bit from previous packet.
++ * @multi_packet: Multi-packet data in progress.
++ * @multi_data: Saved multi-packet data.
++ * @x1: First X coordinate from last MT report.
++ * @x2: Second X coordinate from last MT report.
++ * @y1: First Y coordinate from last MT report.
++ * @y2: Second Y coordinate from last MT report.
++ * @fingers: Number of fingers from last MT report.
++ * @quirks: Bitmap of ALPS_QUIRK_*.
++ * @timer: Timer for flushing out the final report packet in the stream.
++ */
+ struct alps_data {
+- struct input_dev *dev2; /* Relative device */
+- char phys[32]; /* Phys */
+- const struct alps_model_info *i;/* Info */
++ struct input_dev *dev2;
++ char phys[32];
++
++ /* these are autodetected when the device is identified */
+ const struct alps_nibble_commands *nibble_commands;
+- int addr_command; /* Command to set register address */
+- int prev_fin; /* Finger bit from previous packet */
+- int multi_packet; /* Multi-packet data in progress */
+- unsigned char multi_data[6]; /* Saved multi-packet data */
+- int x1, x2, y1, y2; /* Coordinates from last MT report */
+- int fingers; /* Number of fingers from MT report */
++ int addr_command;
++ unsigned char proto_version;
++ unsigned char byte0, mask0;
++ unsigned char flags;
++ int x_max;
++ int y_max;
++ int x_bits;
++ int y_bits;
++
++ int (*hw_init)(struct psmouse *psmouse);
++ void (*process_packet)(struct psmouse *psmouse);
++ void (*decode_fields)(struct alps_fields *f, unsigned char *p);
++ void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1);
++
++ int prev_fin;
++ int multi_packet;
++ unsigned char multi_data[6];
++ int x1, x2, y1, y2;
++ int fingers;
+ u8 quirks;
+ struct timer_list timer;
+ };
diff --git a/arm-tegra-sdhci-module-fix.patch b/arm-tegra-sdhci-module-fix.patch
index 24ba278..0c5d244 100644
--- a/arm-tegra-sdhci-module-fix.patch
+++ b/arm-tegra-sdhci-module-fix.patch
@@ -7,5 +7,5 @@
-MODULE_DEVICE_TABLE(of, sdhci_dt_ids);
+MODULE_DEVICE_TABLE(of, sdhci_tegra_dt_match);
- static struct tegra_sdhci_platform_data * __devinit sdhci_tegra_dt_parse_pdata(
+ static struct tegra_sdhci_platform_data * sdhci_tegra_dt_parse_pdata(
struct platform_device *pdev)
diff --git a/linux-2.6-compile-fixes.patch b/compile-fixes.patch
similarity index 100%
rename from linux-2.6-compile-fixes.patch
rename to compile-fixes.patch
diff --git a/config-arm-generic b/config-arm-generic
index 92e3e5c..5cd466e 100644
--- a/config-arm-generic
+++ b/config-arm-generic
@@ -64,6 +64,7 @@ CONFIG_SCHED_SMT=y
CONFIG_RCU_FANOUT=32
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -110,6 +111,7 @@ CONFIG_RFKILL_GPIO=m
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_PINCTRL_SINGLE=m
+CONFIG_POWER_RESET_GPIO=y
CONFIG_USB_ULPI=y
@@ -135,7 +137,9 @@ CONFIG_SERIO_AMBAKMI=m
CONFIG_I2C_NOMADIK=m
CONFIG_ARM_SP805_WATCHDOG=m
CONFIG_FB_ARMCLCD=m
+CONFIG_FB_SSD1307=m
CONFIG_MPCORE_WATCHDOG=m
+CONFIG_BACKLIGHT_PWM=m
CONFIG_MMC_ARMMMCI=m
CONFIG_MMC_SDHCI_PLTFM=m
@@ -256,6 +260,7 @@ CONFIG_HW_RANDOM_ATMEL=m
CONFIG_HW_RANDOM_EXYNOS=m
# Device tree
+CONFIG_DTC=y
CONFIG_OF=y
CONFIG_USE_OF=y
CONFIG_OF_DEVICE=y
@@ -351,6 +356,8 @@ CONFIG_MFD_88PM805=m
CONFIG_MFD_ARIZONA_SPI=m
CONFIG_MFD_MC13XXX_SPI=m
CONFIG_MFD_SYSCON=y
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_MFD_AS3711 is not set
# CONFIG_MFD_WM5102 is not set
# CONFIG_MFD_WM5110 is not set
# CONFIG_MFD_TPS65912_SPI is not set
@@ -362,19 +369,23 @@ CONFIG_MFD_SYSCON=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+# CONFIG_REGULATOR_DUMMY is not set
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_AD5398=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_ARIZONA=m
CONFIG_REGULATOR_FAN53555=m
CONFIG_REGULATOR_ISL6271A=m
+CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_MAX1586=m
CONFIG_REGULATOR_MAX8649=m
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8952=m
+CONFIG_REGULATOR_MAX8973=m
CONFIG_REGULATOR_MC13783=m
CONFIG_REGULATOR_MC13892=m
CONFIG_REGULATOR_LP3971=m
+CONFIG_REGULATOR_TPS51632=m
CONFIG_REGULATOR_TPS62360=m
CONFIG_REGULATOR_TPS65023=m
CONFIG_REGULATOR_TPS6524X=m
@@ -395,6 +406,7 @@ CONFIG_IEEE802154_MRF24J40=m
# CONFIG_ARM_VIRT_EXT is not set
# CONFIG_PINCTRL_EXYNOS4 is not set
+# CONFIG_PINCTRL_EXYNOS5440 is not set
# CONFIG_AUTO_ZRELADDR is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
@@ -488,6 +500,7 @@ CONFIG_TOUCHSCREEN_MC13783=m
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_CS89x0 is not set
# CONFIG_DVB_USB_PCTV452E is not set
+# CONFIG_PINCTRL_EXYNOS is not set
# CONFIG_EZX_PCAP is not set
diff --git a/config-arm-kirkwood b/config-arm-kirkwood
index d729e75..9f80aaf 100644
--- a/config-arm-kirkwood
+++ b/config-arm-kirkwood
@@ -15,20 +15,29 @@ CONFIG_MACH_GURUPLUG=y
CONFIG_MACH_ICONNECT_DT=y
CONFIG_MACH_IB62X0_DT=y
CONFIG_MACH_INETSPACE_V2=y
+CONFIG_MACH_INETSPACE_V2_DT=y
CONFIG_MACH_IOMEGA_IX2_200_DT=y
CONFIG_MACH_KM_KIRKWOOD_DT=y
CONFIG_MACH_LSXL_DT=y
+CONFIG_MACH_MPLCEC4_DT=y
CONFIG_MACH_MV88F6281GTW_GE=y
-CONFIG_MACH_NETSPACE_V2=y
+CONFIG_MACH_NETSPACE_LITE_V2_DT=y
CONFIG_MACH_NETSPACE_MAX_V2=y
+CONFIG_MACH_NETSPACE_MAX_V2_DT=y
+CONFIG_MACH_NETSPACE_MINI_V2_DT=y
+CONFIG_MACH_NETSPACE_V2=y
+CONFIG_MACH_NETSPACE_V2_DT=y
CONFIG_MACH_NET2BIG_V2=y
CONFIG_MACH_NET5BIG_V2=y
+CONFIG_MACH_NSA310_DT=y
+CONFIG_MACH_OPENBLOCKS_A6_DT=y
CONFIG_MACH_OPENRD_BASE=y
CONFIG_MACH_OPENRD_CLIENT=y
CONFIG_MACH_OPENRD_ULTIMATE=y
CONFIG_MACH_RD88F6192_NAS=y
CONFIG_MACH_RD88F6281=y
CONFIG_MACH_SHEEVAPLUG=y
+CONFIG_MACH_TOPKICK_DT=y
CONFIG_MACH_TS219=y
CONFIG_MACH_TS219_DT=y
CONFIG_MACH_TS41X=y
@@ -52,6 +61,7 @@ CONFIG_LEDS_NETXBIG=m
CONFIG_RTC_DRV_MV=y
CONFIG_MV_XOR=y
CONFIG_CRYPTO_DEV_MV_CESA=m
+# CONFIG_PINCTRL_EXYNOS is not set
CONFIG_PINCTRL_MVEBU=y
CONFIG_PINCTRL_KIRKWOOD=y
diff --git a/config-arm-omap b/config-arm-omap
index 7e27075..554ce05 100644
--- a/config-arm-omap
+++ b/config-arm-omap
@@ -41,7 +41,7 @@ CONFIG_SOC_OMAP3430=y
CONFIG_SOC_TI81XX=y
CONFIG_SOC_AM33XX=y
CONFIG_SOC_OMAPTI816X=y
-CONFIG_SOC_OMAP5=y
+# CONFIG_SOC_OMAP5 is not set
CONFIG_OMAP_PACKAGE_CBB=y
CONFIG_OMAP_PACKAGE_CBL=y
CONFIG_OMAP_PACKAGE_CBS=y
@@ -174,6 +174,7 @@ CONFIG_TOUCHSCREEN_TI_TSCADC=m
CONFIG_SERIAL_OMAP=y
CONFIG_SERIAL_OMAP_CONSOLE=y
CONFIG_OMAP_WATCHDOG=y
+CONFIG_CLK_TWL6040=m
CONFIG_TWL4030_CORE=y
CONFIG_TWL4030_MADC=m
CONFIG_TWL4030_POWER=y
@@ -185,6 +186,7 @@ CONFIG_CHARGER_TWL4030=m
CONFIG_TWL6030_PWM=m
CONFIG_TWL6040_CORE=y
CONFIG_SENSORS_TWL4030_MADC=m
+CONFIG_SENSORS_LIS3_I2C=m
CONFIG_TI_DAVINCI_EMAC=m
CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_DAVINCI_CPDMA=m
@@ -194,12 +196,16 @@ CONFIG_LEDS_LP8788=m
CONFIG_MTD_ONENAND_OMAP2=y
CONFIG_HDQ_MASTER_OMAP=m
CONFIG_I2C_OMAP=m
-CONFIG_SPI_OMAP24XX=y
+CONFIG_SPI_OMAP24XX=m
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LP8788=y
+CONFIG_MFD_TPS65910=y
+CONFIG_GPIO_TPS65910=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_LP8788=y
+CONFIG_REGULATOR_TPS65217=y
+CONFIG_REGULATOR_TPS65910=y
# Enable V4L2 drivers for OMAP2+
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
@@ -236,20 +242,24 @@ CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET=y
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
+CONFIG_FB_DA8XX=m
+CONFIG_FB_DA8XX_CONSISTENT_DMA_SIZE=5
+
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_PANEL_GENERIC_DPI=m
CONFIG_PANEL_TFP410=m
CONFIG_PANEL_TAAL=m
CONFIG_PANEL_PICODLP=m
+CONFIG_PANEL_SHARP_LS037V7DW01=m
+CONFIG_PANEL_NEC_NL8048HL11_01B=m
+CONFIG_PANEL_TPO_TD043MTEA1=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_PANDORA=m
-#
-# OMAP2/3 Display Device Drivers
-#
-CONFIG_PANEL_GENERIC_DPI=y
-CONFIG_PANEL_SHARP_LS037V7DW01=y
-CONFIG_PANEL_NEC_NL8048HL11_01B=y
-CONFIG_PANEL_TPO_TD043MTEA1=y
-
CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_DMIC=m
CONFIG_SND_OMAP_SOC_MCBSP=m
CONFIG_SND_OMAP_SOC_MCPDM=m
CONFIG_SND_OMAP_SOC_OVERO=m
@@ -260,20 +270,18 @@ CONFIG_SND_OMAP_SOC_SDP4430=m
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=m
CONFIG_SND_OMAP_SOC_ZOOM2=m
-CONFIG_SND_OMAP_SOC_IGEP0020=y
-CONFIG_SND_OMAP_SOC_OMAP_HDMI=y
-# Because alsa is modular http://www.spinics.net/lists/linux-omap/msg67307.html
-# CONFIG_SND_OMAP_SOC_OMAP4_HDMI is not set
+CONFIG_SND_OMAP_SOC_IGEP0020=m
+CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_OMAP_SOC_RX51 is not set
# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC23=y
-CONFIG_SND_SOC_TLV320AIC3X=y
-CONFIG_SND_SOC_TWL4030=y
-CONFIG_SND_SOC_TWL6040=y
-CONFIG_RADIO_WL128X
+CONFIG_SND_SOC_TLV320AIC23=m
+CONFIG_SND_SOC_TLV320AIC3X=m
+CONFIG_SND_SOC_TWL4030=m
+CONFIG_SND_SOC_TWL6040=m
+CONFIG_RADIO_WL128X=m
CONFIG_USB_OTG=y
CONFIG_USB_EHCI_HCD_OMAP=y
@@ -301,9 +309,17 @@ CONFIG_MMC_OMAP=y
CONFIG_MMC_OMAP_HS=y
CONFIG_TWL4030_USB=y
CONFIG_TWL6030_USB=y
+CONFIG_RTC_DRV_OMAP=m
CONFIG_RTC_DRV_TWL4030=y
+CONFIG_RTC_DRV_TPS65910=m
+
+CONFIG_PWM_TIECAP=m
+CONFIG_PWM_TIEHRPWM=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
-CONFIG_IR_RX51=m
+# CONFIG_IR_RX51 is not set
+# CONFIG_BATTERY_RX51 is not set
# CONFIG_TIDSPBRIDGE is not set
# CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE=0x600000
@@ -317,6 +333,7 @@ CONFIG_IR_RX51=m
# CONFIG_OMAP_REMOTEPROC is not set
# CONFIG_OMAP_BANDGAP is not set
+# CONFIG_OMAP_BANDGAP is not set
# CONFIG_OMAP_IOVMM is not set
CONFIG_CRYPTO_DEV_OMAP_SHAM=m
@@ -324,7 +341,6 @@ CONFIG_CRYPTO_DEV_OMAP_AES=m
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_MTD_NAND_OMAP_BCH is not set
-# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_DA9052_I2C is not set
@@ -337,7 +353,8 @@ CONFIG_CRYPTO_DEV_OMAP_AES=m
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_PALMAS is not set
-# CONFIG_REGULATOR_DUMMY is not set
# CONFIG_REGULATOR_LP3972 is not set
# CONFIG_REGULATOR_LP872X is not set
+# CONFIG_OMAP2_DSS_DEBUG is not set
+# CONFIG_OMAP2_DSS_DEBUGFS is not set
diff --git a/config-arm-tegra b/config-arm-tegra
index f74f579..30f2493 100644
--- a/config-arm-tegra
+++ b/config-arm-tegra
@@ -3,7 +3,6 @@ CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_TEGRA_2x_SOC=y
# CONFIG_ARCH_TEGRA_3x_SOC is not set
# CONFIG_ARM_LPAE is not set
-CONFIG_TEGRA_PCI=y
CONFIG_VFP=y
CONFIG_VFPv3=y
@@ -20,6 +19,7 @@ CONFIG_MACH_VENTANA=y
CONFIG_TEGRA_DEBUG_UARTD=y
CONFIG_ARM_CPU_TOPOLOGY=y
+CONFIG_TEGRA_PCI=y
CONFIG_TEGRA_IOMMU_GART=y
CONFIG_TEGRA_IOMMU_SMMU=y
@@ -76,10 +76,12 @@ CONFIG_SND_SOC_TEGRA_ALC5632=m
CONFIG_SND_SOC_TEGRA_WM8753=m
CONFIG_SND_SOC_TEGRA_WM8903=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
-# CONFIG_SND_SOC_TEGRA30_AHUB is not set
-# CONFIG_SND_SOC_TEGRA30_I2S is not set
+CONFIG_SND_SOC_TEGRA30_AHUB=m
+CONFIG_SND_SOC_TEGRA30_I2S=m
-CONFIG_MFD_NVEC=y
+# AC100 (PAZ00)
+# CONFIG_MFD_NVEC is not set
+CONFIG_MFD_TPS80031=y
CONFIG_KEYBOARD_NVEC=y
CONFIG_SERIO_NVEC_PS2=y
CONFIG_NVEC_POWER=y
@@ -87,6 +89,13 @@ CONFIG_POWER_SUPPLY=y
CONFIG_NVEC_LEDS=y
CONFIG_NVEC_PAZ00=y
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_RTC_DRV_TPS6586X is not set
+
+CONFIG_PWM_TEGRA=m
+
+CONFIG_DRM_TEGRA=m
+
CONFIG_CPU_PM=y
CONFIG_ARM_CPU_SUSPEND=y
@@ -101,6 +110,8 @@ CONFIG_OF_GPIO=y
CONFIG_OF_PCI=y
CONFIG_OF_PCI_IRQ=y
+# CONFIG_DRM_TEGRA_DEBUG is not set
+
# CONFIG_TI_DAC7512 is not set
# CONFIG_SPI_TOPCLIFF_PCH is not set
# CONFIG_SPI_DW_PCI is not set
diff --git a/config-armv7 b/config-armv7
index 3a8c5b6..bbb64ec 100644
--- a/config-armv7
+++ b/config-armv7
@@ -5,12 +5,18 @@ CONFIG_CPU_V7=y
# CONFIG_ARCH_MULTI_V6 is not set
CONFIG_ARCH_MULTI_V6_V7=y
CONFIG_ARCH_MULTI_V7=y
-CONFIG_ARCH_MVEBU=y
+# This is V6 so we'll eventually support it in v5 unified kernels
+# CONFIG_ARCH_BCM is not set
CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_MVEBU=y
+# CONFIG_ARCH_MXC is not set
CONFIG_ARCH_PICOXCELL=y
CONFIG_ARCH_SOCFPGA=y
+CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_VEXPRESS_CA9X4=y
CONFIG_ARCH_VEXPRESS_DT=y
+# not enabling first round
+# CONFIG_ARCH_ZYNQ is not set
CONFIG_MACH_ARMADA_370_XP=y
CONFIG_MACH_ARMADA_370=y
@@ -49,6 +55,7 @@ CONFIG_HIGHPTE=y
# CONFIG_THUMB2_KERNEL is not set
# CONFIG_XEN is not set
CONFIG_HVC_DCC=y
+# CONFIG_VIRTIO_CONSOLE is not set
# CONFIG_ARM_VIRT_EXT is not set
@@ -89,6 +96,7 @@ CONFIG_RCU_FANOUT_LEAF=16
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
CONFIG_LSM_MMAP_MIN_ADDR=32768
@@ -148,6 +156,8 @@ CONFIG_AMBA_PL08X=y
CONFIG_ARM_SP805_WATCHDOG=m
# highbank
+CONFIG_CPU_IDLE_CALXEDA=y
+
CONFIG_EDAC_HIGHBANK_MC=m
CONFIG_EDAC_HIGHBANK_L2=m
@@ -166,6 +176,7 @@ CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_I2C_VERSATILE=m
CONFIG_OC_ETM=y
CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
+CONFIG_SENSORS_VEXPRESS=m
# unknown and needs review
CONFIG_ARM_AMBA=y
@@ -177,9 +188,67 @@ CONFIG_CRYPTO_DEV_MV_CESA=m
CONFIG_MV643XX_ETH=m
CONFIG_I2C_MV64XXX=m
CONFIG_PINCTRL_MVEBU=y
+CONFIG_PINCTRL_ARMADA_370=y
+CONFIG_PINCTRL_ARMADA_XP=y
+CONFIG_PINCTRL_DOVE=y
+CONFIG_EDAC_MV64X60=m
+CONFIG_MVNETA=m
+CONFIG_SATA_MV=m
+CONFIG_MARVELL_PHY=m
+CONFIG_RTC_DRV_S35390A=y
+CONFIG_USB_EHCI_MV=m
+
+# Allwinner a1x
+# CONFIG_SUNXI_RFKILL=y
+# CONFIG_SUNXI_NAND=y
+# CONFIG_SUNXI_DBGREG=m
+# CONFIG_WEMAC_SUN4I=y
+# CONFIG_KEYBOARD_SUN4IKEYPAD=m
+# CONFIG_KEYBOARD_SUN4I_KEYBOARD=m
+# CONFIG_IR_SUN4I=m
+# CONFIG_TOUCHSCREEN_SUN4I_TS=m
+# CONFIG_SUN4I_G2D=y
+# CONFIG_I2C_SUN4I=y
+# CONFIG_DRM_MALI=m
+# CONFIG_MALI=m
+# CONFIG_FB_SUNXI=m
+# CONFIG_FB_SUNXI_UMP=y
+# CONFIG_FB_SUNXI_LCD=m
+# CONFIG_FB_SUNXI_HDMI=m
+# CONFIG_SOUND_SUN4I=y
+# CONFIG_SND_SUN4I_SOC_CODEC=y
+# CONFIG_SND_SUN4I_SOC_HDMIAUDIO=y
+# CONFIG_SND_SUN4I_SOC_SPDIF=m
+# CONFIG_SND_SUN4I_SOC_I2S_INTERFACE=m
+# CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_USB_SW_SUN4I_HCD=y
+# CONFIG_USB_SW_SUN4I_HCD0=y
+# CONFIG_USB_SW_SUN4I_HCI=y
+# CONFIG_USB_SW_SUN4I_EHCI0=y
+# CONFIG_USB_SW_SUN4I_EHCI1=y
+# CONFIG_USB_SW_SUN4I_OHCI0=y
+# CONFIG_USB_SW_SUN4I_OHCI1=y
+# CONFIG_USB_SW_SUN4I_USB=y
+# CONFIG_USB_SW_SUN4I_USB_MANAGER=y
+# CONFIG_MMC_SUNXI_POWER_CONTROL=y
+# CONFIG_MMC_SUNXI=y
+# CONFIG_RTC_DRV_SUN4I=y
+
+# imx
+CONFIG_BACKLIGHT_PWM=m
+# CONFIG_DRM_IMX is not set
+# CONFIG_DRM_IMX_FB_HELPER=m
+# CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
+# CONFIG_DRM_IMX_IPUV3_CORE=m
+# CONFIG_DRM_IMX_IPUV3=m
+# CONFIG_VIDEO_CODA is not set
+
+CONFIG_INPUT_PWM_BEEPER=m
# exynos
# CONFIG_DRM_EXYNOS is not set
+# CONFIG_PINCTRL_EXYNOS5440 is not set
+# CONFIG_PINCTRL_EXYNOS is not set
# picoxcell
CONFIG_CRYPTO_DEV_PICOXCELL=m
@@ -187,8 +256,12 @@ CONFIG_CRYPTO_DEV_PICOXCELL=m
# ST Ericsson
# CONFIG_I2C_NOMADIK is not set
+# OMAP
+# CONFIG_SENSORS_LIS3_I2C is not set
+
# General ARM drivers
# Device tree
+CONFIG_DTC=y
CONFIG_OF=y
CONFIG_USE_OF=y
CONFIG_OF_DEVICE=y
@@ -256,6 +329,7 @@ CONFIG_EDAC_LEGACY_SYSFS=y
CONFIG_MPCORE_WATCHDOG=m
# Multi function devices
+CONFIG_MFD_CORE=m
CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y
CONFIG_MFD_SYSCON=y
@@ -278,6 +352,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_GPIO_EM=m
CONFIG_GPIO_ADNP=m
CONFIG_GPIO_MCP23S08=m
+CONFIG_POWER_RESET_GPIO=y
CONFIG_RFKILL_GPIO=m
CONFIG_SERIAL_8250_EM=m
CONFIG_INPUT_GP2A=m
@@ -288,6 +363,9 @@ CONFIG_MDIO_BUS_MUX_MMIOREG=m
CONFIG_MTD_OF_PARTS=y
# CONFIG_MG_DISK is not set
+# Framebuffers
+CONFIG_FB_SSD1307=m
+
# Regulator drivers
CONFIG_REGULATOR_FAN53555=m
# Needs work/investigation
@@ -333,6 +411,7 @@ CONFIG_PERF_EVENTS=y
# CONFIG_VIDEO_DM6446_CCDC is not set
# CONFIG_PANEL_TAAL is not set
# CONFIG_IR_RX51 is not set
+# CONFIG_DRM_OMAP is not set
# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
# CONFIG_GPIO_TWL6040 is not set
@@ -342,7 +421,6 @@ CONFIG_PERF_EVENTS=y
# CONFIG_MFD_MAX8907 is not set
# CONFIG_REGULATOR_FAN53555 is not set
# CONFIG_REGULATOR_ANATOP is not set
-# CONFIG_IR_RX51 is not set
# CONFIG_VIDEO_DM6446_CCDC is not set
# CONFIG_PANEL_TAAL is not set
# CONFIG_SND_OMAP_SOC_OMAP_TWL4030 is not set
diff --git a/config-generic b/config-generic
index 88f6ff1..0c7e209 100644
--- a/config-generic
+++ b/config-generic
@@ -4,6 +4,8 @@
CONFIG_MMU=y
CONFIG_SMP=y
CONFIG_HOTPLUG_CPU=y
+# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
+# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_LOCALVERSION=""
CONFIG_CROSS_COMPILE=""
CONFIG_DEFAULT_HOSTNAME="(none)"
@@ -52,6 +54,8 @@ CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_DEFAULT_CFQ=y
+# CONFIG_CHECKPOINT_RESTORE is not set
+CONFIG_NAMESPACES=y
CONFIG_PID_NS=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
@@ -124,6 +128,7 @@ CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
+CONFIG_MMC_SDHCI_ACPI=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_TIFM_SD=m
CONFIG_MMC_WBSD=m
@@ -132,6 +137,7 @@ CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_CB710=m
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_USHC=m
+CONFIG_MMC_REALTEK_PCI=m
CONFIG_MMC_VUB300=m
CONFIG_CB710_CORE=m
@@ -340,6 +346,7 @@ CONFIG_SCSI_SRP=m
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_TGT=m
CONFIG_SCSI_ISCI=m
+CONFIG_SCSI_CHELSIO_FCOE=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
@@ -416,6 +423,9 @@ CONFIG_SCSI_MVSAS_TASKLET=y
CONFIG_SCSI_MPT2SAS=m
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS_LOGGING=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_LOGGING=y
CONFIG_SCSI_UFSHCD=m
@@ -607,6 +617,7 @@ CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_NOSY=m
+CONFIG_FIREWIRE_SERIAL=m
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
#
@@ -977,9 +988,11 @@ CONFIG_IP_SCTP=m
CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-CONFIG_SCTP_HMAC_SHA1=y
-# CONFIG_SCTP_HMAC_MD5 is not set
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_ATM=m
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
@@ -1077,6 +1090,7 @@ CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
CONFIG_BATMAN_ADV=m
CONFIG_BATMAN_ADV_BLA=y
+CONFIG_BATMAN_ADV_DAT=y
# CONFIG_BATMAN_ADV_DEBUG is not set
CONFIG_OPENVSWITCH=m
CONFIG_NETPRIO_CGROUP=m
@@ -1187,6 +1201,9 @@ CONFIG_ATL2=m
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
CONFIG_BNA=m
@@ -1257,6 +1274,7 @@ CONFIG_IXGBE_PTP=y
# CONFIG_NET_VENDOR_I825XX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_MVMDIO=m
CONFIG_SKGE=m
# CONFIG_SKGE_DEBUG is not set
CONFIG_SKGE_GENESIS=y
@@ -1483,6 +1501,7 @@ CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
# CONFIG_ADM8211 is not set
CONFIG_ATH_COMMON=m
+CONFIG_ATH_CARDS=m
CONFIG_ATH5K=m
CONFIG_ATH5K_DEBUG=y
# CONFIG_ATH5K_TRACER is not set
@@ -1490,6 +1509,7 @@ CONFIG_ATH6KL=m
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_SDIO=m
CONFIG_ATH6KL_USB=m
+CONFIG_AR5523=m
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
@@ -1500,6 +1520,8 @@ CONFIG_ATH9K_HTC=m
CONFIG_ATH9K_BTCOEX_SUPPORT=y
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_ATH9K_RATE_CONTROL=y
+CONFIG_WIL6210=m
+CONFIG_WIL6210_ISR_COR=y
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
# CONFIG_CARL9170_HWRNG is not set
@@ -1530,6 +1552,7 @@ CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_SDIO_OOB=y
CONFIG_BRCMFMAC_USB=y
+# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMISCAN is not set
# CONFIG_BRCMDBG is not set
CONFIG_HERMES=m
@@ -1622,6 +1645,7 @@ CONFIG_RTL8192CE=m
CONFIG_RTL8192SE=m
CONFIG_RTL8192CU=m
CONFIG_RTL8192DE=m
+CONFIG_RTL8723AE=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
@@ -1932,6 +1956,7 @@ CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_RAW=m
CONFIG_SERIO_ALTERA_PS2=m
# CONFIG_SERIO_PS2MULT is not set
+CONFIG_SERIO_ARC_PS2=m
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
@@ -2043,9 +2068,12 @@ CONFIG_TOUCHSCREEN_W90X900=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
# CONFIG_TOUCHSCREEN_MAX11801 is not set
+CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
+CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_WISTRON_BTNS=m
CONFIG_INPUT_ATLAS_BTNS=m
@@ -2169,6 +2197,8 @@ CONFIG_I2C_ALGOPCA=m
# CONFIG_I2C_NFORCE2_S4985 is not set
# CONFIG_I2C_INTEL_MID is not set
# CONFIG_I2C_EG20T is not set
+# CONFIG_I2C_CBUS_GPIO is not set
+CONFIG_I2C_VIPERBOARD=m
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_LEGACY=m
@@ -2339,6 +2369,8 @@ CONFIG_SENSORS_MAX197=m
# CONFIG_PCH_PHUB is not set
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_USB_SWITCH_FSA9480 is not set
+CONFIG_SERIAL_ARC=m
+CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_W1=m
CONFIG_W1_CON=y
@@ -2451,6 +2483,7 @@ CONFIG_RTC_DRV_RS5C372=m
# CONFIG_RTC_DRV_SA1100 is not set
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_STK17TA8=m
@@ -2671,6 +2704,7 @@ CONFIG_DVB_BT8XX=m
CONFIG_DVB_BUDGET_CORE=m
CONFIG_DVB_PLUTO2=m
CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_SIANO_RC=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_SMS_USB_DRV=m
CONFIG_SMS_SDIO_DRV=m
@@ -3044,6 +3078,7 @@ CONFIG_SND_USB_6FIRE=m
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_SPEAKERS=m
CONFIG_SND_ISIGHT=m
+CONFIG_SND_SCS1X=m
#
# Open Sound System
@@ -3131,6 +3166,7 @@ CONFIG_USB_HID=y
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
+CONFIG_I2C_HID=m
CONFIG_HID_BATTERY_STRENGTH=y
# debugging default is y upstream now
CONFIG_HIDRAW=y
@@ -3161,6 +3197,7 @@ CONFIG_HID_PS3REMOTE=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_HID_GYRATION=m
+CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -3292,6 +3329,7 @@ CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_NET_CDC_EEM=m
CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_NET_CX82310_ETH=m
CONFIG_USB_NET_INT51X1=m
@@ -3411,6 +3449,7 @@ CONFIG_USB_SEVSEG=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_APPLEDISPLAY=m
# CONFIG_OMAP_USB2 is not set
+CONFIG_USB_RCAR_PHY=m
CONFIG_USB_ATM=m
CONFIG_USB_CXACRU=m
# CONFIG_USB_C67X00_HCD is not set
@@ -3471,6 +3510,7 @@ CONFIG_SSB_PCMCIAHOST=y
# CONFIG_SSB_SILENT is not set
# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_SSB_DRIVER_GPIO=y
# Multifunction USB devices
# CONFIG_MFD_PCF50633 is not set
@@ -3487,6 +3527,10 @@ CONFIG_MFD_SUPPORT=y
CONFIG_MFD_VX855=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
+CONFIG_MFD_RTSX_PCI=m
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+CONFIG_MFD_VIPERBOARD=m
+# CONFIG_MFD_RETU is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8350_I2C is not set
@@ -3648,6 +3692,7 @@ CONFIG_9P_FS_POSIX_ACL=y
CONFIG_FUSE_FS=m
# CONFIG_OMFS_FS is not set
CONFIG_CUSE=m
+# CONFIG_F2FS_FS is not set
#
# Network File Systems
@@ -3687,6 +3732,7 @@ CONFIG_CIFS_POSIX=y
CONFIG_CIFS_FSCACHE=y
CONFIG_CIFS_ACL=y
CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_DEBUG=y
# CONFIG_CIFS_DEBUG2 is not set
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_NFSD_EXPORT=y
@@ -4069,6 +4115,11 @@ CONFIG_KEXEC=y
CONFIG_HWMON=y
# CONFIG_HWMON_DEBUG_CHIP is not set
CONFIG_THERMAL_HWMON=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+CONFIG_FAIR_SHARE=y
+CONFIG_STEP_WISE=y
+# CONFIG_USER_SPACE is not set
# CONFIG_CPU_THERMAL is not set
CONFIG_INOTIFY=y
@@ -4145,6 +4196,7 @@ CONFIG_SND_INDIGOIOX=m
CONFIG_SND_INDIGODJX=m
# CONFIG_SND_SOC is not set
+CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_MIGRATION=y
CONFIG_NEW_LEDS=y
@@ -4256,6 +4308,8 @@ CONFIG_APM_POWER=m
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_GPIO is not set
# CONFIG_CHARGER_PCF50633 is not set
+# CONFIG_CHARGER_BQ2415X is not set
+CONFIG_POWER_RESET=y
# CONFIG_PDA_POWER is not set
@@ -4265,6 +4319,7 @@ CONFIG_UIO=m
CONFIG_UIO_CIF=m
# CONFIG_UIO_PDRV is not set
# CONFIG_UIO_PDRV_GENIRQ is not set
+# CONFIG_UIO_DMEM_GENIRQ is not set
CONFIG_UIO_AEC=m
CONFIG_UIO_SERCOS3=m
CONFIG_UIO_PCI_GENERIC=m
@@ -4299,6 +4354,8 @@ CONFIG_NOZOMI=m
# CONFIG_TPS65010 is not set
CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_GP2A=m
+# CONFIG_INPUT_GPIO_TILT_POLLED is not set
# CONFIG_INTEL_MENLOW is not set
CONFIG_ENCLOSURE_SERVICES=m
@@ -4312,6 +4369,7 @@ CONFIG_MSPRO_BLOCK=m
CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
CONFIG_MEMSTICK_R592=m
+CONFIG_MEMSTICK_REALTEK_PCI=m
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y
@@ -4432,6 +4490,7 @@ CONFIG_ALTERA_STAPL=m
# CONFIG_BPCTL is not set
# CONFIG_CED1401 is not set
# CONFIG_DGRP is not set
+# CONFIG_SB105X is not set
# END OF STAGING
#
@@ -4459,8 +4518,9 @@ CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_RCU_FANOUT_EXACT is not set
-# FIXME: Revisit FAST_NO_HZ after 3.5
+# FIXME: Revisit FAST_NO_HZ after it's fixed
# CONFIG_RCU_FAST_NO_HZ is not set
+# CONFIG_RCU_NOCB_CPU is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_TRACE is not set
@@ -4517,6 +4577,9 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_CS5535 is not set
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_IT8761E is not set
+# CONFIG SB105x is not set
+# CONFIG_GPIO_TS5500 is not set
+CONFIG_GPIO_VIPERBOARD=m
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_UCB1400_CORE is not set
# CONFIG_TPS6105X is not set
@@ -4568,6 +4631,7 @@ CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set
# CONFIG_GOOGLE_FIRMWARE is not set
diff --git a/config-powerpc-generic b/config-powerpc-generic
index a6ef1c4..902dccd 100644
--- a/config-powerpc-generic
+++ b/config-powerpc-generic
@@ -313,7 +313,7 @@ CONFIG_SPARSE_IRQ=y
# CONFIG_PPC_MPC5200_LPBFIFO is not set
# CONFIG_CAN_MSCAN is not set
# CONFIG_CAN_MPC5XXX is not set
-CONFIG_PATA_MACIO=m
+CONFIG_PATA_MACIO=y
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_88PM8607 is not set
@@ -380,3 +380,8 @@ CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RTC_DRV_SNVS is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_FB_SSD1307=m
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=n
diff --git a/config-s390x b/config-s390x
index 41e41c5..c0ae0aa 100644
--- a/config-s390x
+++ b/config-s390x
@@ -244,9 +244,22 @@ CONFIG_ETHERNET=y
CONFIG_BPF_JIT=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
-# CONFIG_SCM_BUS is not set
-# CONFIG_EADM_SCH is not set
-# CONFIG_SCM_BLOCK is not set
-# CONFIG_SCM_BLOCK_CLUSTER_WRITE is not set
+CONFIG_SCM_BUS=y
+CONFIG_EADM_SCH=m
+CONFIG_SCM_BLOCK=m
+CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
# CONFIG_S390_PTDUMP is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+CONFIG_PCI_NR_FUNCTIONS=64
+CONFIG_HOTPLUG_PCI=m
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+CONFIG_HOTPLUG_PCI_S390=m
+# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_MCP23S08 is not set
+
+# CONFIG_PCI is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_PTP_1588_CLOCK_PCH is not set
diff --git a/config-x86-32-generic b/config-x86-32-generic
index 3273fd1..f1a9b51 100644
--- a/config-x86-32-generic
+++ b/config-x86-32-generic
@@ -53,6 +53,8 @@ CONFIG_FB_GEODE_LX=y
CONFIG_FB_GEODE_GX=y
# CONFIG_FB_GEODE_GX1 is not set
+CONFIG_FB_SSD1307=m
+
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOMMCONFIG is not set
@@ -181,6 +183,7 @@ CONFIG_XO1_RFKILL=m
CONFIG_X86_32_IRIS=m
+CONFIG_POWER_RESET_GPIO=y
CONFIG_MTD_OF_PARTS=y
CONFIG_MTD_PHYSMAP_OF=m
@@ -203,6 +206,8 @@ CONFIG_I2O_CONFIG=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=m
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_BACKLIGHT_PWM=m
# CONFIG_EDAC_SBRIDGE is not set
diff --git a/config-x86-generic b/config-x86-generic
index 6e13303..cdf46b3 100644
--- a/config-x86-generic
+++ b/config-x86-generic
@@ -78,6 +78,7 @@ CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_TOSHIBA=m
CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y
# FIXME: Next two are deprecated. Remove them when they disappear upstream
# CONFIG_ACPI_PROCFS_POWER is not set
# CONFIG_ACPI_PROC_EVENT is not set
@@ -282,6 +283,7 @@ CONFIG_MTD_CK804XROM=m
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -409,6 +411,7 @@ CONFIG_HYPERV_UTILS=m
CONFIG_HID_HYPERV_MOUSE=m
CONFIG_HYPERV_NET=m
CONFIG_HYPERV_STORAGE=m
+CONFIG_HYPERV_BALLOON=m
# Depends on HOTPLUG_PCI_PCIE
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
diff --git a/config-x86_64-generic b/config-x86_64-generic
index 2e4195d..bcea67e 100644
--- a/config-x86_64-generic
+++ b/config-x86_64-generic
@@ -13,6 +13,8 @@ CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
# CONFIG_NUMA_EMU is not set
# CONFIG_X86_NUMACHIP is not set
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
+CONFIG_NUMA_BALANCING=y
CONFIG_NR_CPUS=128
CONFIG_PHYSICAL_START=0x1000000
@@ -52,6 +54,7 @@ CONFIG_CRYPTO_CAST5_AVX_X86_64=m
CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
@@ -71,6 +74,7 @@ CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP=y
+# CONFIG_MOVABLE_NODE is not set
# CONFIG_MEMORY_HOTPLUG is not set
# CONFIG_MEMORY_HOTREMOVE is not set
diff --git a/linux-2.6-crash-driver.patch b/crash-driver.patch
similarity index 100%
rename from linux-2.6-crash-driver.patch
rename to crash-driver.patch
diff --git a/linux-2.6-defaults-acpi-video.patch b/defaults-acpi-video.patch
similarity index 100%
rename from linux-2.6-defaults-acpi-video.patch
rename to defaults-acpi-video.patch
diff --git a/dmar-disable-when-ricoh-multifunction.patch b/dmar-disable-when-ricoh-multifunction.patch
index a452861..839db59 100644
--- a/dmar-disable-when-ricoh-multifunction.patch
+++ b/dmar-disable-when-ricoh-multifunction.patch
@@ -16,7 +16,7 @@ index 4789f8e..5923914 100644
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x006a, quirk_calpella_no_shadow_gtt);
+/* https://bugzilla.redhat.com/show_bug.cgi?id=605888 */
-+static void __devinit quirk_ricoh_multifunction(struct pci_dev *dev)
++static void quirk_ricoh_multifunction(struct pci_dev *dev)
+{
+ dmar_disabled = 1;
+}
diff --git a/linux-2.6-input-kill-stupid-messages.patch b/input-kill-stupid-messages.patch
similarity index 100%
rename from linux-2.6-input-kill-stupid-messages.patch
rename to input-kill-stupid-messages.patch
diff --git a/kernel.spec b/kernel.spec
index ba729b0..6a7241b 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -54,19 +54,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 102
+%global baserelease 101
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
# on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
# which yields a base_sublevel of 21.
-%define base_sublevel 7
+%define base_sublevel 8
## If this is a released kernel ##
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 10
+%define stable_update 1
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -325,8 +325,8 @@ Summary: The Linux kernel
%define with_bootwrapper 0
%endif
-# sparse blows up on ppc64 and sparc64
-%ifarch ppc64 ppc sparc64
+# sparse blows up on ppc64
+%ifarch ppc64 ppc
%define with_sparse 0
%endif
@@ -367,19 +367,6 @@ Summary: The Linux kernel
%define with_tools 0
%endif
-%ifarch sparc64
-%define asmarch sparc
-%define all_arch_configs kernel-%{version}-sparc64*.config
-%define make_target vmlinux
-%define kernel_image vmlinux
-%define image_install_path boot
-%define with_tools 0
-%endif
-
-%ifarch sparcv9
-%define hdrarch sparc
-%endif
-
%ifarch ppc
%define asmarch powerpc
%define hdrarch powerpc
@@ -424,7 +411,7 @@ Summary: The Linux kernel
# Which is a BadThing(tm).
# We only build kernel-headers on the following...
-%define nobuildarches i386 s390 sparc sparcv9
+%define nobuildarches i386 s390
%ifarch %nobuildarches
%define with_up 0
@@ -512,7 +499,7 @@ Version: %{rpmversion}
Release: %{pkg_release}
# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
# SET %%nobuildarches (ABOVE) INSTEAD
-ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 %{sparc} s390 s390x %{arm}
+ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 s390 s390x %{arm}
ExclusiveOS: Linux
%kernel_reqprovconf
@@ -568,8 +555,6 @@ Source53: config-powerpc64
Source70: config-s390x
-Source90: config-sparc64-generic
-
# Unified ARM kernels
Source100: config-armv7
@@ -622,18 +607,16 @@ Patch00: patch-3.%{base_sublevel}-git%{gitrev}.bz2
%endif
# we also need compile fixes for -vanilla
-Patch04: linux-2.6-compile-fixes.patch
+Patch04: compile-fixes.patch
# build tweak for build ID magic, even for -vanilla
-Patch05: linux-2.6-makefile-after_link.patch
-
-Patch06: power-x86-destdir.patch
+Patch05: makefile-after_link.patch
%if !%{nopatches}
# revert upstream patches we get via other methods
-Patch09: linux-2.6-upstream-reverts.patch
+Patch09: upstream-reverts.patch
# Git trees.
# Standalone patches
@@ -643,27 +626,26 @@ Patch101: taint-rss.patch
Patch110: vmbugon-warnon.patch
-Patch390: linux-2.6-defaults-acpi-video.patch
-Patch391: linux-2.6-acpi-video-dos.patch
-Patch394: linux-2.6-acpi-debug-infinite-loop.patch
+Patch390: defaults-acpi-video.patch
+Patch391: acpi-video-dos.patch
+Patch394: acpi-debug-infinite-loop.patch
Patch396: acpi-sony-nonvs-blacklist.patch
-Patch450: linux-2.6-input-kill-stupid-messages.patch
-Patch452: linux-2.6.30-no-pcspkr-modalias.patch
+Patch450: input-kill-stupid-messages.patch
+Patch452: no-pcspkr-modalias.patch
-Patch460: linux-2.6-serial-460800.patch
+Patch460: serial-460800.patch
Patch470: die-floppy-die.patch
-Patch510: linux-2.6-silence-noise.patch
+Patch510: silence-noise.patch
Patch520: quite-apm.patch
-Patch530: linux-2.6-silence-fbcon-logo.patch
+Patch530: silence-fbcon-logo.patch
Patch540: silence-empty-ipi-mask-warning.patch
+Patch541: silence-tty-null.patch
-Patch700: linux-2.6-e1000-ich9-montevina.patch
-
-Patch800: linux-2.6-crash-driver.patch
+Patch800: crash-driver.patch
# crypto/
@@ -681,14 +663,12 @@ Patch1825: drm-i915-dp-stfu.patch
# mustard patch to shut abrt up. please drop (and notify ajax) whenever it
# fails to apply
Patch1826: drm-i915-tv-detect-hush.patch
-# d-i-n backport for https://bugzilla.redhat.com/show_bug.cgi?id=901951
-Patch1827: drm-i915-lvds-reclock-fix.patch
Patch1900: linux-2.6-intel-iommu-igfx.patch
# Quiet boot fixes
# silence the ACPI blacklist code
-Patch2802: linux-2.6-silence-acpi-blacklist.patch
+Patch2802: silence-acpi-blacklist.patch
# media patches
Patch2901: drivers-media-update.patch
@@ -738,20 +718,6 @@ Patch22014: efifb-skip-DMI-checks-if-bootloader-knows.patch
#rhbz 857324
Patch22070: net-tcp-bz857324.patch
-#rhbz 871078
-Patch22112: USB-report-submission-of-active-URBs.patch
-
-#rhbz CVE-2012-4530 868285 880147
-Patch22229: exec-use-eloop-for-max-recursion-depth.patch
-
-#rhbz 851278
-Patch22231: 8139cp-revert-set-ring-address-before-enabling-receiver.patch
-Patch22232: 8139cp-set-ring-address-after-enabling-C-mode.patch
-Patch22233: 8139cp-re-enable-interrupts-after-tx-timeout.patch
-
-#rhbz 892428
-Patch22238: brcmsmac-updates-rhbz892428.patch
-
#rhbz 799564
Patch22240: Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
Patch22242: Input-add-support-for-Cypress-PS2-Trackpads.patch
@@ -759,15 +725,6 @@ Patch22242: Input-add-support-for-Cypress-PS2-Trackpads.patch
#rhbz 892811
Patch22247: ath9k_rx_dma_stop_check.patch
-#rhbz 909591
-Patch22255: usb-cypress-supertop.patch
-
-#rhbz 911479 911473 CVE-2013-0290
-Patch22256: net-fix-infinite-loop-in-__skb_recv_datagram.patch
-
-#rhbz 844750
-Patch22257: 0001-bluetooth-Add-support-for-atheros-04ca-3004-device-t.patch
-
#rhbz 903192
Patch22261: 0001-kmsg-Honor-dmesg_restrict-sysctl-on-dev-kmsg.patch
@@ -778,10 +735,8 @@ Patch22262: x86-mm-Fix-vmalloc_fault-oops-during-lazy-MMU-updates.patch
Patch22263: 0001-svcrpc-make-svc_age_temp_xprts-enqueue-under-sv_lock.patch
Patch22264: 0002-svcrpc-fix-rpc-server-shutdown-races.patch
-Patch23000: silence-brcmsmac-warning.patch
-
#rhbz 812111
-Patch24000: alps-v2-3.7.patch
+Patch24000: alps.patch
Patch24100: userns-avoid-recursion-in-put_user_ns.patch
@@ -1312,19 +1267,17 @@ do
done
%endif
-ApplyPatch linux-2.6-makefile-after_link.patch
+ApplyPatch makefile-after_link.patch
#
# misc small stuff to make things compile
#
-ApplyOptionalPatch linux-2.6-compile-fixes.patch
-
-ApplyPatch power-x86-destdir.patch
+ApplyOptionalPatch compile-fixes.patch
%if !%{nopatches}
# revert patches from upstream that conflict or that we get via other means
-ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
+ApplyOptionalPatch upstream-reverts.patch -R
ApplyPatch taint-vbox.patch
ApplyPatch taint-rss.patch
@@ -1339,9 +1292,9 @@ ApplyPatch vmbugon-warnon.patch
#
#ApplyPatch arm-read_current_timer.patch
#ApplyPatch arm-fix-omapdrm.patch
-ApplyPatch arm-tegra-nvec-kconfig.patch
+#ApplyPatch arm-tegra-nvec-kconfig.patch
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
-ApplyPatch arm-tegra-sdhci-module-fix.patch
+#ApplyPatch arm-tegra-sdhci-module-fix.patch
ApplyPatch arm-alignment-faults.patch
#
@@ -1364,9 +1317,9 @@ ApplyPatch arm-alignment-faults.patch
# WMI
# ACPI
-ApplyPatch linux-2.6-defaults-acpi-video.patch
-ApplyPatch linux-2.6-acpi-video-dos.patch
-ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
+ApplyPatch defaults-acpi-video.patch
+ApplyPatch acpi-video-dos.patch
+ApplyPatch acpi-debug-infinite-loop.patch
ApplyPatch acpi-sony-nonvs-blacklist.patch
#
@@ -1385,33 +1338,31 @@ ApplyPatch acpi-sony-nonvs-blacklist.patch
# Misc fixes
# The input layer spews crap no-one cares about.
-ApplyPatch linux-2.6-input-kill-stupid-messages.patch
+ApplyPatch input-kill-stupid-messages.patch
# stop floppy.ko from autoloading during udev...
ApplyPatch die-floppy-die.patch
-ApplyPatch linux-2.6.30-no-pcspkr-modalias.patch
+ApplyPatch no-pcspkr-modalias.patch
# Allow to use 480600 baud on 16C950 UARTs
-ApplyPatch linux-2.6-serial-460800.patch
+ApplyPatch serial-460800.patch
# Silence some useless messages that still get printed with 'quiet'
-ApplyPatch linux-2.6-silence-noise.patch
+ApplyPatch silence-noise.patch
# Make fbcon not show the penguins with 'quiet'
-ApplyPatch linux-2.6-silence-fbcon-logo.patch
+ApplyPatch silence-fbcon-logo.patch
# No-one cares about these warnings
ApplyPatch silence-empty-ipi-mask-warning.patch
+ApplyPatch silence-tty-null.patch
# Changes to upstream defaults.
# /dev/crash driver.
-ApplyPatch linux-2.6-crash-driver.patch
-
-# Hack e1000e to work on Montevina SDV
-ApplyPatch linux-2.6-e1000-ich9-montevina.patch
+ApplyPatch crash-driver.patch
# crypto/
@@ -1427,12 +1378,11 @@ ApplyPatch linux-2.6-e1000-ich9-montevina.patch
ApplyOptionalPatch drm-intel-next.patch
ApplyPatch drm-i915-dp-stfu.patch
ApplyPatch drm-i915-tv-detect-hush.patch
-ApplyPatch drm-i915-lvds-reclock-fix.patch
ApplyPatch linux-2.6-intel-iommu-igfx.patch
# silence the ACPI blacklist code
-ApplyPatch linux-2.6-silence-acpi-blacklist.patch
+ApplyPatch silence-acpi-blacklist.patch
ApplyPatch quite-apm.patch
# Media (V4L/DVB/IR) updates/fixes/experimental drivers
@@ -1469,20 +1419,6 @@ ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch
#rhbz 857324
ApplyPatch net-tcp-bz857324.patch
-#rhbz 871078
-ApplyPatch USB-report-submission-of-active-URBs.patch
-
-#rhbz CVE-2012-4530 868285 880147
-ApplyPatch exec-use-eloop-for-max-recursion-depth.patch
-
-#rhbz 851278
-ApplyPatch 8139cp-revert-set-ring-address-before-enabling-receiver.patch -R
-ApplyPatch 8139cp-set-ring-address-after-enabling-C-mode.patch
-ApplyPatch 8139cp-re-enable-interrupts-after-tx-timeout.patch
-
-#rhbz 892428
-ApplyPatch brcmsmac-updates-rhbz892428.patch
-
#rhbz 799564
ApplyPatch Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
ApplyPatch Input-add-support-for-Cypress-PS2-Trackpads.patch
@@ -1490,19 +1426,8 @@ ApplyPatch Input-add-support-for-Cypress-PS2-Trackpads.patch
#rhbz 892811
ApplyPatch ath9k_rx_dma_stop_check.patch
-ApplyPatch silence-brcmsmac-warning.patch
-
-#rhbz 909591
-ApplyPatch usb-cypress-supertop.patch
-
-#rhbz 911479 911473 CVE-2013-0290
-ApplyPatch net-fix-infinite-loop-in-__skb_recv_datagram.patch
-
-#rhbz 844750
-ApplyPatch 0001-bluetooth-Add-support-for-atheros-04ca-3004-device-t.patch
-
#rhbz 812111
-ApplyPatch alps-v2-3.7.patch
+ApplyPatch alps.patch
#rhbz 903192
ApplyPatch 0001-kmsg-Honor-dmesg_restrict-sysctl-on-dev-kmsg.patch
@@ -2371,6 +2296,11 @@ fi
# '-' | |
# '-'
%changelog
+* Fri Mar 01 2013 Justin M. Forbes <jforbes at redhat.com> - 3.8.1-101
+- Linux v3.8.1
+- Drop SPARC64 support
+- Silence "tty is NULL" trace.
+
* Fri Mar 01 2013 Josh Boyer <jwboyer at redhat.com>
- Add patches to fix sunrpc panic (rhbz 904870)
diff --git a/linux-2.6-makefile-after_link.patch b/makefile-after_link.patch
similarity index 100%
rename from linux-2.6-makefile-after_link.patch
rename to makefile-after_link.patch
diff --git a/linux-2.6.30-no-pcspkr-modalias.patch b/no-pcspkr-modalias.patch
similarity index 100%
rename from linux-2.6.30-no-pcspkr-modalias.patch
rename to no-pcspkr-modalias.patch
diff --git a/linux-2.6-serial-460800.patch b/serial-460800.patch
similarity index 100%
rename from linux-2.6-serial-460800.patch
rename to serial-460800.patch
diff --git a/linux-2.6-silence-acpi-blacklist.patch b/silence-acpi-blacklist.patch
similarity index 100%
rename from linux-2.6-silence-acpi-blacklist.patch
rename to silence-acpi-blacklist.patch
diff --git a/linux-2.6-silence-fbcon-logo.patch b/silence-fbcon-logo.patch
similarity index 100%
rename from linux-2.6-silence-fbcon-logo.patch
rename to silence-fbcon-logo.patch
diff --git a/linux-2.6-silence-noise.patch b/silence-noise.patch
similarity index 97%
rename from linux-2.6-silence-noise.patch
rename to silence-noise.patch
index 1e4d7c5..bcd5baa 100644
--- a/linux-2.6-silence-noise.patch
+++ b/silence-noise.patch
@@ -14,7 +14,7 @@ diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 170f71e..4f3e632 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
-@@ -701,10 +701,8 @@ static int __devinit i8042_check_aux(void)
+@@ -701,10 +701,8 @@ static int i8042_check_aux(void)
static int i8042_controller_check(void)
{
diff --git a/silence-tty-null.patch b/silence-tty-null.patch
new file mode 100644
index 0000000..00f6423
--- /dev/null
+++ b/silence-tty-null.patch
@@ -0,0 +1,13 @@
+This should be fixed in 3.9, but is unlikely to be backported.
+
+--- linux-3.8.1-201.fc18.x86_64/drivers/tty/tty_buffer.c~ 2013-03-01 11:07:37.498291384 -0500
++++ linux-3.8.1-201.fc18.x86_64/drivers/tty/tty_buffer.c 2013-03-01 11:08:11.088250537 -0500
+@@ -473,7 +473,7 @@ static void flush_to_ldisc(struct work_s
+ struct tty_ldisc *disc;
+
+ tty = port->itty;
+- if (WARN_RATELIMIT(tty == NULL, "tty is NULL\n"))
++ if (tty == NULL)
+ return;
+
+ disc = tty_ldisc_ref(tty);
diff --git a/sources b/sources
index 7b85431..52a9095 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-21223369d682bcf44bcdfe1521095983 linux-3.7.tar.xz
-ffc885cf2fdedf1792b999d4ab5b8ba8 patch-3.7.10.xz
+1c738edfc54e7c65faeb90c436104e2f linux-3.8.tar.xz
+50a68679086c346dddb34dedccfae7ee patch-3.8.1.xz
diff --git a/linux-2.6-upstream-reverts.patch b/upstream-reverts.patch
similarity index 100%
rename from linux-2.6-upstream-reverts.patch
rename to upstream-reverts.patch
diff --git a/userns-avoid-recursion-in-put_user_ns.patch b/userns-avoid-recursion-in-put_user_ns.patch
index d364e79..c3bb604 100644
--- a/userns-avoid-recursion-in-put_user_ns.patch
+++ b/userns-avoid-recursion-in-put_user_ns.patch
@@ -27,8 +27,10 @@ Date: Fri Dec 28 18:58:39 2012 -0800
Pointed-out-by: Vasily Kulikov <segoon at openwall.com>
Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
---- linux-3.7.9-105.fc17.noarch/include/linux/user_namespace.h 2013-02-14 11:29:49.757652513 -0600
-+++ linux-3.7.9-105.fc17.user_ns/include/linux/user_namespace.h 2013-02-26 15:19:40.696782035 -0600
+diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
+index b9bd2e6..4ce0093 100644
+--- a/include/linux/user_namespace.h
++++ b/include/linux/user_namespace.h
@@ -21,7 +21,7 @@ struct user_namespace {
struct uid_gid_map uid_map;
struct uid_gid_map gid_map;
@@ -38,7 +40,7 @@ Date: Fri Dec 28 18:58:39 2012 -0800
struct user_namespace *parent;
kuid_t owner;
kgid_t group;
-@@ -34,17 +34,17 @@ extern struct user_namespace init_user_n
+@@ -35,18 +35,18 @@ extern struct user_namespace init_user_ns;
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
{
if (ns)
@@ -46,11 +48,12 @@ Date: Fri Dec 28 18:58:39 2012 -0800
+ atomic_inc(&ns->count);
return ns;
}
-
+
extern int create_user_ns(struct cred *new);
+ extern int unshare_userns(unsigned long unshare_flags, struct cred **new_cred);
-extern void free_user_ns(struct kref *kref);
+extern void free_user_ns(struct user_namespace *ns);
-
+
static inline void put_user_ns(struct user_namespace *ns)
{
- if (ns)
@@ -58,11 +61,13 @@ Date: Fri Dec 28 18:58:39 2012 -0800
+ if (ns && atomic_dec_and_test(&ns->count))
+ free_user_ns(ns);
}
-
+
struct seq_operations;
---- linux-3.7.9-105.fc17.noarch/kernel/user.c 2013-02-14 11:29:46.675652732 -0600
-+++ linux-3.7.9-105.fc17.user_ns/kernel/user.c 2013-02-26 15:16:12.347796824 -0600
-@@ -46,9 +46,7 @@ struct user_namespace init_user_ns = {
+diff --git a/kernel/user.c b/kernel/user.c
+index 33acb5e..57ebfd4 100644
+--- a/kernel/user.c
++++ b/kernel/user.c
+@@ -47,9 +47,7 @@ struct user_namespace init_user_ns = {
.count = 4294967295U,
},
},
@@ -72,37 +77,41 @@ Date: Fri Dec 28 18:58:39 2012 -0800
+ .count = ATOMIC_INIT(3),
.owner = GLOBAL_ROOT_UID,
.group = GLOBAL_ROOT_GID,
- };
---- linux-3.7.9-105.fc17.noarch/kernel/user_namespace.c 2013-02-14 11:29:46.690652731 -0600
-+++ linux-3.7.9-105.fc17.user_ns/kernel/user_namespace.c 2013-02-26 15:24:47.984760224 -0600
-@@ -52,7 +52,7 @@ int create_user_ns(struct cred *new)
- if (!ns)
- return -ENOMEM;
-
+ .proc_inum = PROC_USER_INIT_INO,
+diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
+index 2b042c4..24f8ec3 100644
+--- a/kernel/user_namespace.c
++++ b/kernel/user_namespace.c
+@@ -78,7 +78,7 @@ int create_user_ns(struct cred *new)
+ return ret;
+ }
+
- kref_init(&ns->kref);
+ atomic_set(&ns->count, 1);
+ /* Leave the new->user_ns reference with the new user namespace. */
ns->parent = parent_ns;
ns->owner = owner;
- ns->group = group;
-@@ -78,14 +78,15 @@ int create_user_ns(struct cred *new)
- return 0;
+@@ -104,15 +104,16 @@ int unshare_userns(unsigned long unshare_flags, struct cred **new_cred)
+ return create_user_ns(cred);
}
-
+
-void free_user_ns(struct kref *kref)
+void free_user_ns(struct user_namespace *ns)
{
- struct user_namespace *parent, *ns =
- container_of(kref, struct user_namespace, kref);
+ struct user_namespace *parent;
-
+
- parent = ns->parent;
+- proc_free_inum(ns->proc_inum);
- kmem_cache_free(user_ns_cachep, ns);
- put_user_ns(parent);
+ do {
+ parent = ns->parent;
++ proc_free_inum(ns->proc_inum);
+ kmem_cache_free(user_ns_cachep, ns);
+ ns = parent;
+ } while (atomic_dec_and_test(&parent->count));
}
EXPORT_SYMBOL(free_user_ns);
-
+
More information about the scm-commits
mailing list