All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andres Salomon <dilinger@queued.net>
To: Philip Prindeville <philipp@redfish-solutions.com>
Cc: platform-driver-x86@vger.kernel.org,
	Alessandro Zummo <a.zummo@towertech.it>,
	Richard Purdie <rpurdie@rpsys.net>,
	Ed Wildgoose <kernel@wildgooses.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v3 1/1] alix2: supplement driver to include GPIO button support
Date: Mon, 23 Jan 2012 14:56:41 -0800	[thread overview]
Message-ID: <20120123145641.55a4bcf3@queued.net> (raw)
In-Reply-To: <1327348589-9601-1-git-send-email-philipp@redfish-solutions.com>

Thanks, looks good.

Acked-by: Andres Salomon <dilinger@queued.net>


On Mon, 23 Jan 2012 12:56:29 -0700
Philip Prindeville <philipp@redfish-solutions.com> wrote:

> From: "Philip A. Prindeville" <philipp@redfish-solutions.com>
> 
> GPIO 24 is used in reference designs as a soft-reset button, and
> the alix2 is no exception. Add it as a gpio-button.
> 
> Use symbolic values to describe BIOS addresses.
> 
> Record the model number.
> 
> Redux: address Andres' review comments; make the model number
> exported; add support for DMI detection of the board and
> manufacturer; change detection return type to bool; add comment
> explaining that the model number is used by downstream drivers to
> detect if we have RFKILL GPIO line to mini-PCIe slots (alix 6 only).
> 
> Signed-off-by: Philip A. Prindeville <philipp@redfish-solutions.com>
> Acked-by: Ed Wildgoose <kernel@wildgooses.com>
> Cc: Andres Salomon <dilinger@queued.net>
> ---
>  arch/x86/platform/geode/alix.c |   80
> +++++++++++++++++++++++++++++++++++++-- 1 files changed, 75
> insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/platform/geode/alix.c
> b/arch/x86/platform/geode/alix.c index dc5f1d3..cb97c13 100644
> --- a/arch/x86/platform/geode/alix.c
> +++ b/arch/x86/platform/geode/alix.c
> @@ -6,6 +6,7 @@
>   *
>   * Copyright (C) 2008 Constantin Baranov <const@mimas.ru>
>   * Copyright (C) 2011 Ed Wildgoose <kernel@wildgooses.com>
> + *                and Philip Prindeville
> <philipp@redfish-solutions.com> *
>   * TODO: There are large similarities with leds-net5501.c
>   * by Alessandro Zummo <a.zummo@towertech.it>
> @@ -24,14 +25,55 @@
>  #include <linux/leds.h>
>  #include <linux/platform_device.h>
>  #include <linux/gpio.h>
> +#include <linux/input.h>
> +#include <linux/gpio_keys.h>
> +#include <linux/dmi.h>
>  
>  #include <asm/geode.h>
>  
> +#define BIOS_SIGNATURE_TINYBIOS		0xf0000
> +#define BIOS_SIGNATURE_COREBOOT		0x500
> +#define BIOS_REGION_SIZE		0x10000
> +
> +/*
> + * the 6F2 has an RFKILL GPIO line to the mini-PCIe slots that isn't
> + * present on other Alix boards. Wifi drivers can use this symbol to
> + * detect if it's available.
> + */
> +int alix_model;
> +EXPORT_SYMBOL(alix_model);
> +
>  static bool force = 0;
>  module_param(force, bool, 0444);
>  /* FIXME: Award bios is not automatically detected as Alix platform
> */ MODULE_PARM_DESC(force, "Force detection as ALIX.2/ALIX.3
> platform"); 
> +static struct gpio_keys_button alix_gpio_buttons[] = {
> +	{
> +		.code = KEY_RESTART,
> +		.gpio = 24,
> +		.active_low = 1,
> +		.desc = "Reset button",
> +		.type = EV_KEY,
> +		.wakeup = 0,
> +		.debounce_interval = 100,
> +		.can_disable = 0,
> +	}
> +};
> +static struct gpio_keys_platform_data alix_buttons_data = {
> +	.buttons = alix_gpio_buttons,
> +	.nbuttons = ARRAY_SIZE(alix_gpio_buttons),
> +	.poll_interval = 20,
> +};
> +
> +static struct platform_device alix_buttons_dev = {
> +	.name = "gpio-keys-polled",
> +	.id = 1,
> +	.dev = {
> +		.platform_data = &alix_buttons_data,
> +	}
> +};
> +
>  static struct gpio_led alix_leds[] = {
>  	{
>  		.name = "alix:1",
> @@ -64,17 +106,22 @@ static struct platform_device alix_leds_dev = {
>  	.dev.platform_data = &alix_leds_data,
>  };
>  
> +static struct __initdata platform_device *alix_devs[] = {
> +	&alix_buttons_dev,
> +	&alix_leds_dev,
> +};
> +
>  static void __init register_alix(void)
>  {
>  	/* Setup LED control through leds-gpio driver */
> -	platform_device_register(&alix_leds_dev);
> +	platform_add_devices(alix_devs, ARRAY_SIZE(alix_devs));
>  }
>  
>  static int __init alix_present(unsigned long bios_phys,
>  				const char *alix_sig,
>  				size_t alix_sig_len)
>  {
> -	const size_t bios_len = 0x00010000;
> +	const size_t bios_len = BIOS_REGION_SIZE;
>  	const char *bios_virt;
>  	const char *scan_end;
>  	const char *p;
> @@ -109,7 +156,9 @@ static int __init alix_present(unsigned long
> bios_phys, *a = '\0';
>  
>  		tail = p + alix_sig_len;
> -		if ((tail[0] == '2' || tail[0] == '3')) {
> +		if ((tail[0] == '2' || tail[0] == '3' || tail[0] ==
> '6')) {
> +			alix_model = tail[0] - '0';
> +
>  			printk(KERN_INFO
>  			       "%s: system is recognized as
> \"%s\"\n", KBUILD_MODNAME, name);
> @@ -120,6 +169,26 @@ static int __init alix_present(unsigned long
> bios_phys, return 0;
>  }
>  
> +static bool __init alix_present_dmi(void)
> +{
> +	char *vendor, *product;
> +
> +	vendor = dmi_get_system_info(DMI_SYS_VENDOR);
> +	if (!vendor || strcmp(vendor, "PC Engines"))
> +		return false;
> +
> +	product = dmi_get_system_info(DMI_PRODUCT_NAME);
> +	if (!product || (strcmp(product, "ALIX.2D") &&
> strcmp(product, "ALIX.6")))
> +		return false;
> +
> +	alix_model = product[5] - '0';
> +
> +	printk(KERN_INFO "%s: system is recognized as \"%s %s\"\n",
> +	       KBUILD_MODNAME, vendor, product);
> +
> +	return true;
> +}
> +
>  static int __init alix_init(void)
>  {
>  	const char tinybios_sig[] = "PC Engines ALIX.";
> @@ -128,8 +197,9 @@ static int __init alix_init(void)
>  	if (!is_geode())
>  		return 0;
>  
> -	if (alix_present(0xf0000, tinybios_sig, sizeof(tinybios_sig)
> - 1) ||
> -	    alix_present(0x500, coreboot_sig, sizeof(coreboot_sig) -
> 1))
> +	if (alix_present(BIOS_SIGNATURE_TINYBIOS, tinybios_sig,
> sizeof(tinybios_sig) - 1) ||
> +	    alix_present(BIOS_SIGNATURE_COREBOOT, coreboot_sig,
> sizeof(coreboot_sig) - 1) ||
> +	    alix_present_dmi())
>  		register_alix();
>  
>  	return 0;

  reply	other threads:[~2012-01-23 22:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-23 19:56 [PATCH v3 1/1] alix2: supplement driver to include GPIO button support Philip Prindeville
2012-01-23 22:56 ` Andres Salomon [this message]
2012-01-25 22:57 ` Andrew Morton
2012-01-25 23:04   ` Philip Prindeville
2012-01-25 23:16     ` Andrew Morton
2012-01-25 23:47       ` Philip Prindeville
2012-01-26  1:08         ` Andrew Morton
2012-01-26  1:37           ` Philip Prindeville
2012-01-26 10:15             ` Ed Wildgoose

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=20120123145641.55a4bcf3@queued.net \
    --to=dilinger@queued.net \
    --cc=a.zummo@towertech.it \
    --cc=akpm@linux-foundation.org \
    --cc=dwmw2@infradead.org \
    --cc=kernel@wildgooses.com \
    --cc=philipp@redfish-solutions.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rpurdie@rpsys.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.