linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Martyn Welch <martyn.welch@ge.com>
To: grant.likely@secretlab.ca
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linuxppc-dev@ozlabs.org
Subject: Re: [PATCH] powerpc: Add i8042 keyboard and mouse irq parsing
Date: Fri, 14 May 2010 11:39:21 +0100	[thread overview]
Message-ID: <4BED2859.3050204@ge.com> (raw)
In-Reply-To: <20100514102905.7807.27638.stgit@ES-J7S4D2J.amer.consind.ge.com>

Martyn Welch wrote:
> Currently the irqs for the i8042, which historically provides keyboard and
> mouse (aux) support, is hardwired in the driver rather than parsing the
> dts.
>
> In addition the interrupts are provided in the dts, but in a way that is
> not easily parsable using irq_of_parse_and_map().
>
> This patch modifies the powerpc legacy IO code to attempt to parse the
> device tree for this information, failing back to the hardcoded values if
> it fails. For this to succeed the interrupts for the keyboard and mouse
> ports need to be moved from the parent i8042 node to the individual port
> nodes.
>
> Signed-off-by: Martyn Welch <martyn.welch@ge.com>
> ---
>
> To get irq_of_parse_and_map() to successfully parse the interrupts, I had
> to do this to my device tree:
>
> @@ -120,16 +120,17 @@
>                                 #address-cells = <1>;
>                                 reg = <1 0x60 0x1
>                                        1 0x64 0x1>;
> -                               interrupts = <1 1 12 1>;
>                                 interrupt-parent = <&lpc_pic>;
>  
>                                 keyboard@0 {
>                                         reg = <0x0>;
> +                                       interrupts = <1 1>;
>                                         compatible = "pnpPNP,303";
>                                 };
>  
>                                 mouse@1 {
>                                         reg = <0x1>;
> +                                       interrupts = <12 1>;
>                                         compatible = "pnpPNP,f03";
>                                 };
>                         };
>
> I'm not sure how to parse for the correct interrupt if I don't do this. I
> this is incorrect and someone could advise me on how the existing device
> tree layout can be properly parsed, I'll happily modify this patch.
>
>   

Grant, any suggestions? (sorry, forgot to CC you)

Martyn

>  arch/powerpc/kernel/setup-common.c |   34 +++++++++++++++++++++++++++++++---
>  drivers/input/serio/i8042-io.h     |    8 ++++++++
>  2 files changed, 39 insertions(+), 3 deletions(-)
>
> 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 <asm/irq.h>
>  #elif defined(CONFIG_SH_CAYMAN)
>  #include <asm/irq.h>
> +#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
>
>
> --
> Martyn Welch (Principal Software Engineer)   |   Registered in England and
> GE Intelligent Platforms                     |   Wales (3828642) at 100
> T +44(0)127322748                            |   Barbirolli Square, Manchester,
> E martyn.welch@ge.com                        |   M2 3AB  VAT:GB 927559189
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
>   


-- 
Martyn Welch (Principal Software Engineer)   |   Registered in England and
GE Intelligent Platforms                     |   Wales (3828642) at 100
T +44(0)127322748                            |   Barbirolli Square, Manchester,
E martyn.welch@ge.com                        |   M2 3AB  VAT:GB 927559189

  reply	other threads:[~2010-05-14 10:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-14 10:35 [PATCH] powerpc: Add i8042 keyboard and mouse irq parsing Martyn Welch
2010-05-14 10:39 ` Martyn Welch [this message]
2010-05-19 16:00   ` Grant Likely

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BED2859.3050204@ge.com \
    --to=martyn.welch@ge.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-input@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).