Re: [PATCH 3/3] leds-clevo-mail: driver for Clevo mail LED

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 19 Oct 2007 20:52:52 +0200 Németh Márton wrote:

> From: Márton Németh <[email protected]>
> 
> The driver supports the mail LED commonly found on different Clevo notebooks.
> The driver access the LED through the i8042 hardware and implements the support for
> hardware accelerated blink function.
> 
> Signed-off-by: Márton Németh <[email protected]>
> ---
> diff -uprN linux-2.6.23.orig/drivers/leds/Kconfig linux-2.6.23/drivers/leds/Kconfig
> --- linux-2.6.23.orig/drivers/leds/Kconfig	2007-10-09 22:31:38.000000000 +0200
> +++ linux-2.6.23/drivers/leds/Kconfig	2007-10-18 07:20:12.000000000 +0200
> @@ -101,6 +101,26 @@ config LEDS_GPIO
>  	  outputs. To be useful the particular board must have LEDs
>  	  and they must be connected to the GPIO lines.
> 
> +config LEDS_CLEVO_MAIL
> +	tristate "Mail LED on Clevo notebook (EXPERIMENTAL)"
> +	depends on LEDS_CLASS && X86 && SERIO_I8042 && DMI && EXPERIMENTAL
> +	help
> +	  This driver makes the mail LED accessible from userspace
> +	  programs through the leds subsystem. This LED can blink at
> +	  about 0.5Hz and 1Hz.

?:
	  can blink 1 time every 1 or 2 seconds.

> +	  This module can drive the mail LED for the following notebooks:
> +
> +		Clevo D410J
> +		Clevo D410V
> +		Clevo D400V/D470V (not tested, but might work)
> +		Clevo M540N
> +		Clevo M5x0N (not tested, but might work)
> +		Positivo Mobile (Clevo M5x0V)
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called leds-clevo-mail.
> +
>  comment "LED Triggers"
> 
>  config LEDS_TRIGGERS
> diff -uprN linux-2.6.23.orig/drivers/leds/leds-clevo-mail.c linux-2.6.23/drivers/leds/leds-clevo-mail.c
> --- linux-2.6.23.orig/drivers/leds/leds-clevo-mail.c	1970-01-01 01:00:00.000000000 +0100
> +++ linux-2.6.23/drivers/leds/leds-clevo-mail.c	2007-10-18 07:17:56.000000000 +0200
> @@ -0,0 +1,226 @@
> +
> +#include <linux/module.h>
> +
> +#include <linux/platform_device.h>
> +#include <linux/err.h>
> +#include <linux/leds.h>
> +
> +#include <linux/io.h>
> +#include <linux/dmi.h>
> +
> +#include <linux/i8042.h>
> +
> +
> +#define TRUE				1
> +#define FALSE				0

Just use true / false.

> +#define HANDLED				0
> +
> +#define CLEVO_MAIL_LED_OFF		0x0084
> +#define CLEVO_MAIL_LED_BLINK_1HZ	0x008A
> +#define CLEVO_MAIL_LED_BLINK_0_5HZ	0x0083
> +
> +#define MODULE_FNAME		"leds-clevo-mail.c"
> +#define DRVNAME			"clevo-mail-led"

Kbuild provides KBUILD_BASENAME and KBUILD_MODNAME.  Can you use
one of those?

> +#define NO_RESOURCES		NULL

Just use NULL.

> +MODULE_AUTHOR("Márton Németh <[email protected]>");
> +MODULE_DESCRIPTION("Clevo mail LED driver");
> +MODULE_LICENSE("GPL");
> +
> +
> +static int __init clevo_mail_led_dmi_callback(struct dmi_system_id *id)
> +{
> +	printk(KERN_INFO MODULE_FNAME ": '%s' found\n", id->ident);

MODULE_FNAME string looks too long and out of place here.

> +	return 1;
> +}
> +
> +/**

/** introduces kernel-doc, but there is no following kernel-doc....,
so just use /*, please.

> + * struct mail_led_whitelist - List of known good models
> + *
> + * Contains the known good models this driver is compatible with.
> + * When adding a new model try to be as strict as possible. This
> + * makes it possible to keep the false positives (the model is
> + * detected as working, but in reality it is not) as low as
> + * possible.
> + */
> +static struct dmi_system_id __initdata mail_led_whitelist[] = {
> +	{
...
> +	{ }
> +};
> +
> +
> +
> +static struct led_classdev clevo_mail_led = {
> +	.name			= "clevo::mail",

What's the purpose of the "::"?

> +	.brightness_set		= clevo_mail_led_set,
> +	.blink_set		= clevo_mail_led_blink,
> +};
> +
> +
> +static struct platform_driver clevo_mail_led_driver = {
> +	.probe		= clevo_mail_led_probe,
> +	.remove		= clevo_mail_led_remove,
> +#ifdef CONFIG_PM
> +	.suspend	= clevo_mail_led_suspend,
> +	.resume		= clevo_mail_led_resume,
> +#endif
> +	.driver		= {
> +		.name		= DRVNAME,
> +	},
> +};

We prefer to have clevo_mail_led_susped() and _resume() defined
all the time, so that the above  ifdef & endif can go away, so
do more like:

#ifdef CONFIG_PM
/* those functions as you have them */
#else
#define clevo_mail_led_suspend	NULL
#define clevo_mail_led_resume	NULL
#endif



> +static int __init clevo_mail_led_init(void)
> +{
> +	int error = 0;
> +	int count = 0;
> +
> +	/* Check with the help of DMI if we are running on supported hardware */
> +	if (!nodetect) {
> +		count = dmi_check_system(mail_led_whitelist);
> +	} else {
> +		count = 1;
> +		printk(KERN_ERR MODULE_FNAME ": Skipping DMI detection. "
> +		       "If the driver works on your hardware please "
> +		       "report model and the output of dmidecode in tracker "
> +		       "at http://sourceforge.net/projects/clevo-mailled/\n";);
> +	}
> +
> +	if (!count) {
> +		return -ENODEV;
> +	}

Don't use braces on one-statement/one-line "blocks."

> +	pdev = platform_device_register_simple(DRVNAME, -1, NO_RESOURCES, 0);
> +	if (!IS_ERR(pdev)) {
> +		error = platform_driver_probe(&clevo_mail_led_driver,
> +					      clevo_mail_led_probe);
> +		if (error) {
> +			printk(KERN_ERR MODULE_FNAME

Use the module logical name, not source file name.

> +			       ": Can't probe platform driver\n");
> +			platform_device_unregister(pdev);
> +		}
> +	} else {
> +		error = PTR_ERR(pdev);
> +	}
> +
> +	return error;
> +}


---
~Randy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux