From patchwork Fri May 14 10:35:54 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martyn Welch X-Patchwork-Id: 99576 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o4EAf7IN030982 for ; Fri, 14 May 2010 10:41:07 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752879Ab0ENKlG (ORCPT ); Fri, 14 May 2010 06:41:06 -0400 Received: from exprod5og113.obsmtp.com ([64.18.0.26]:52130 "EHLO exprod5og113.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751889Ab0ENKlF (ORCPT ); Fri, 14 May 2010 06:41:05 -0400 X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 14 May 2010 10:41:07 +0000 (UTC) X-Greylist: delayed 304 seconds by postgrey-1.27 at vger.kernel.org; Fri, 14 May 2010 06:41:04 EDT Received: from source ([12.71.149.1]) (using TLSv1) by exprod5ob113.postini.com ([64.18.4.12]) with SMTP ID DSNKS+0ovXWk5ppYCQ4uutdXh7Daa0x3NBVQ@postini.com; Fri, 14 May 2010 03:41:05 PDT Received: from unknown (HELO alpmlip01.e2k.ad.ge.com) ([3.159.17.48]) by Cinmlip05.e2k.ad.ge.com with ESMTP; 14 May 2010 06:35:55 -0400 Received: from es-j7s4d2j.amer.consind.ge.com ([3.138.54.92]) by alpmlip01.e2k.ad.ge.com with ESMTP; 14 May 2010 06:35:56 -0400 From: Martyn Welch Subject: [PATCH] powerpc: Add i8042 keyboard and mouse irq parsing To: Dmitry Torokhov , benh@kernel.crashing.org Cc: linux-input@vger.kernel.org, linuxppc-dev@ozlabs.org Date: Fri, 14 May 2010 11:35:54 +0100 Message-ID: <20100514102905.7807.27638.stgit@ES-J7S4D2J.amer.consind.ge.com> User-Agent: StGIT/0.13 MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 03dd6a2..9c4dc4c 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -93,6 +93,10 @@ struct screen_info screen_info = { .orig_video_points = 16 }; +/* Variables required to store legacy IO irq routing */ +int of_i8042_kbd_irq; +int of_i8042_aux_irq; + #ifdef __DO_IRQ_CANON /* XXX should go elsewhere eventually */ int ppc_do_canonicalize_irqs; @@ -555,13 +559,37 @@ void probe_machine(void) /* Match a class of boards, not a specific device configuration. */ int check_legacy_ioport(unsigned long base_port) { - struct device_node *parent, *np = NULL; + struct device_node *parent, *np = NULL, *np_aux = NULL; int ret = -ENODEV; switch(base_port) { case I8042_DATA_REG: - if (!(np = of_find_compatible_node(NULL, NULL, "pnpPNP,303"))) - np = of_find_compatible_node(NULL, NULL, "pnpPNP,f03"); + np = of_find_compatible_node(NULL, NULL, "pnpPNP,303"); + if (np) { + /* + * Attempt to parse DTS for keyboard irq, fallback to + * standard. + */ + of_i8042_kbd_irq = irq_of_parse_and_map(np, 0); + if (!of_i8042_kbd_irq) + of_i8042_kbd_irq = 1; + } + + np_aux = of_find_compatible_node(NULL, NULL, "pnpPNP,f03"); + if (np_aux) { + if (!np) { + of_node_put(np); + np = np_aux; + } + /* + * Attempt to parse DTS for mouse (aux) irq, fallback to + * standard. + */ + of_i8042_aux_irq = irq_of_parse_and_map(np_aux, 0); + if (!of_i8042_aux_irq) + of_i8042_aux_irq = 12; + } + if (np) { parent = of_get_parent(np); of_node_put(np); diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h index 847f4aa..8fc8753 100644 --- a/drivers/input/serio/i8042-io.h +++ b/drivers/input/serio/i8042-io.h @@ -19,6 +19,11 @@ * IRQs. */ +#if defined(CONFIG_PPC) +extern int of_i8042_kbd_irq; +extern int of_i8042_aux_irq; +#endif + #ifdef __alpha__ # define I8042_KBD_IRQ 1 # define I8042_AUX_IRQ (RTC_PORT(0) == 0x170 ? 9 : 12) /* Jensen is special */ @@ -27,6 +32,9 @@ #include #elif defined(CONFIG_SH_CAYMAN) #include +#elif defined(CONFIG_PPC) +#define I8042_KBD_IRQ of_i8042_kbd_irq +#define I8042_AUX_IRQ of_i8042_aux_irq #else # define I8042_KBD_IRQ 1 # define I8042_AUX_IRQ 12