Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
leds
leds-hp6xx.c
Go to the documentation of this file.
1
/*
2
* LED Triggers Core
3
* For the HP Jornada 620/660/680/690 handhelds
4
*
5
* Copyright 2008 Kristoffer Ericson <
[email protected]
>
6
* this driver is based on leds-spitz.c by Richard Purdie.
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*/
12
13
#include <linux/module.h>
14
#include <linux/kernel.h>
15
#include <
linux/init.h
>
16
#include <
linux/platform_device.h
>
17
#include <
linux/leds.h
>
18
#include <
asm/hd64461.h
>
19
#include <
mach/hp6xx.h
>
20
21
static
void
hp6xxled_green_set(
struct
led_classdev
*led_cdev,
22
enum
led_brightness
value
)
23
{
24
u8
v8;
25
26
v8 =
inb
(
PKDR
);
27
if
(value)
28
outb
(v8 & (~
PKDR_LED_GREEN
),
PKDR
);
29
else
30
outb
(v8 |
PKDR_LED_GREEN
,
PKDR
);
31
}
32
33
static
void
hp6xxled_red_set(
struct
led_classdev
*led_cdev,
34
enum
led_brightness
value)
35
{
36
u16
v16;
37
38
v16 =
inw
(
HD64461_GPBDR
);
39
if
(value)
40
outw
(v16 & (~
HD64461_GPBDR_LED_RED
),
HD64461_GPBDR
);
41
else
42
outw
(v16 |
HD64461_GPBDR_LED_RED
,
HD64461_GPBDR
);
43
}
44
45
static
struct
led_classdev
hp6xx_red_led = {
46
.name =
"hp6xx:red"
,
47
.default_trigger =
"hp6xx-charge"
,
48
.brightness_set = hp6xxled_red_set,
49
.flags =
LED_CORE_SUSPENDRESUME
,
50
};
51
52
static
struct
led_classdev
hp6xx_green_led = {
53
.name =
"hp6xx:green"
,
54
.default_trigger =
"ide-disk"
,
55
.brightness_set = hp6xxled_green_set,
56
.flags =
LED_CORE_SUSPENDRESUME
,
57
};
58
59
static
int
hp6xxled_probe(
struct
platform_device
*pdev)
60
{
61
int
ret
;
62
63
ret =
led_classdev_register
(&pdev->
dev
, &hp6xx_red_led);
64
if
(ret < 0)
65
return
ret
;
66
67
ret =
led_classdev_register
(&pdev->
dev
, &hp6xx_green_led);
68
if
(ret < 0)
69
led_classdev_unregister
(&hp6xx_red_led);
70
71
return
ret
;
72
}
73
74
static
int
hp6xxled_remove(
struct
platform_device
*pdev)
75
{
76
led_classdev_unregister
(&hp6xx_red_led);
77
led_classdev_unregister
(&hp6xx_green_led);
78
79
return
0;
80
}
81
82
static
struct
platform_driver
hp6xxled_driver = {
83
.probe = hp6xxled_probe,
84
.remove = hp6xxled_remove,
85
.driver = {
86
.name =
"hp6xx-led"
,
87
.owner =
THIS_MODULE
,
88
},
89
};
90
91
module_platform_driver
(hp6xxled_driver);
92
93
MODULE_AUTHOR
(
"Kristoffer Ericson <
[email protected]
>"
);
94
MODULE_DESCRIPTION
(
"HP Jornada 6xx LED driver"
);
95
MODULE_LICENSE
(
"GPL"
);
96
MODULE_ALIAS
(
"platform:hp6xx-led"
);
Generated on Thu Jan 10 2013 13:42:58 for Linux Kernel by
1.8.2