-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] LED: add LED device support for locomo devices
Adds an LED driver for LEDs exported by the Sharp LOCOMO chip as found on some models of Sharp Zaurus. Signed-off-by: Richard Purdie <rpurdie@rpsys.net> Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
- Loading branch information
Richard Purdie
authored and
Linus Torvalds
committed
Mar 31, 2006
1 parent
3179108
commit 4d3cb35
Showing
3 changed files
with
103 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/* | ||
* linux/drivers/leds/locomo.c | ||
* | ||
* Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#include <linux/config.h> | ||
#include <linux/kernel.h> | ||
#include <linux/init.h> | ||
#include <linux/device.h> | ||
#include <linux/leds.h> | ||
|
||
#include <asm/hardware.h> | ||
#include <asm/hardware/locomo.h> | ||
|
||
static void locomoled_brightness_set(struct led_classdev *led_cdev, | ||
enum led_brightness value, int offset) | ||
{ | ||
struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->class_dev->dev); | ||
unsigned long flags; | ||
|
||
local_irq_save(flags); | ||
if (value) | ||
locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset); | ||
else | ||
locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset); | ||
local_irq_restore(flags); | ||
} | ||
|
||
static void locomoled_brightness_set0(struct led_classdev *led_cdev, | ||
enum led_brightness value) | ||
{ | ||
locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0); | ||
} | ||
|
||
static void locomoled_brightness_set1(struct led_classdev *led_cdev, | ||
enum led_brightness value) | ||
{ | ||
locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1); | ||
} | ||
|
||
static struct led_classdev locomo_led0 = { | ||
.name = "locomo:amber", | ||
.brightness_set = locomoled_brightness_set0, | ||
}; | ||
|
||
static struct led_classdev locomo_led1 = { | ||
.name = "locomo:green", | ||
.brightness_set = locomoled_brightness_set1, | ||
}; | ||
|
||
static int locomoled_probe(struct locomo_dev *ldev) | ||
{ | ||
int ret; | ||
|
||
ret = led_classdev_register(&ldev->dev, &locomo_led0); | ||
if (ret < 0) | ||
return ret; | ||
|
||
ret = led_classdev_register(&ldev->dev, &locomo_led1); | ||
if (ret < 0) | ||
led_classdev_unregister(&locomo_led0); | ||
|
||
return ret; | ||
} | ||
|
||
static int locomoled_remove(struct locomo_dev *dev) | ||
{ | ||
led_classdev_unregister(&locomo_led0); | ||
led_classdev_unregister(&locomo_led1); | ||
return 0; | ||
} | ||
|
||
static struct locomo_driver locomoled_driver = { | ||
.drv = { | ||
.name = "locomoled" | ||
}, | ||
.devid = LOCOMO_DEVID_LED, | ||
.probe = locomoled_probe, | ||
.remove = locomoled_remove, | ||
}; | ||
|
||
static int __init locomoled_init(void) | ||
{ | ||
return locomo_driver_register(&locomoled_driver); | ||
} | ||
module_init(locomoled_init); | ||
|
||
MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>"); | ||
MODULE_DESCRIPTION("Locomo LED driver"); | ||
MODULE_LICENSE("GPL"); |