|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 n& Y0 |7 g3 ^ A' Y5 x- v
#include <linux/init.h>! n# r) \4 F$ y2 S( e
#include <linux/module.h>
7 \) s; x/ }/ @1 U2 B1 s#include <linux/kernel.h>
+ e7 _& ~: J$ G4 ~* |' j#include <linux/types.h>
# G3 x; l, O+ e5 m O#include <linux/gpio.h>" G) d3 @7 }2 Z* Q* s$ B
#include <linux/leds.h>
7 O- b2 T% o8 }$ Y+ @) u @: _#include <linux/platform_device.h>3 @- f9 O" R7 M/ d/ I$ l( ^
9 M2 A# u0 h7 ^6 s
#include <asm/mach-types.h>
/ m' T! L: S* | c" {#include <asm/mach/arch.h>* g% \' V: ]9 z3 d( Y
#include <mach/da8xx.h>
D0 m. F# d. b$ z* |3 z/ D( z#include <mach/mux.h>1 ~2 @3 W$ j8 j3 `; e
2 m& P7 f# K! @+ e- m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 L7 ^7 D+ r D, g3 B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- Z5 {: s1 Y8 y5 v! R A7 ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 c9 ?! I& \% w) H* T% i8 g4 U#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 c6 V' [$ r- F2 K9 m2 b* a/ |
8 a. n$ f. R7 Q* H# \0 m) h+ h/* assign the tl som board LED-GPIOs*/
3 o" j4 X0 P2 X2 _6 i$ Estatic const short da850_evm_tl_user_led_pins[] = {6 c5 {: t6 j; v" E
/* These pins are definition at <mach/mux.h> file */
: v$ L+ Y. ]5 C- _# X/ U2 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! U# X' z0 _' w4 B" `
-1
& h& W4 i* X: p, E( V7 m1 X" `};+ J7 Y/ t5 ]1 ?; U
" c, x6 n, ~' \7 Pstatic struct gpio_led da850_evm_tl_leds[] = {2 f6 E/ ^, R% p" y3 f
{( I# E# |- [8 D) Q6 V; m
.active_low = 0,; H- V2 W, |4 `/ G, N% l
.gpio = DA850_USER_LED0,$ B3 ?* e1 x4 E$ t( C- \
.name = "user_led0",. h" [# q6 L; ?6 g3 L, y( H
.default_trigger = "default-on", Y* K! U% d- J4 [* Z
},
6 y) _- y2 }. U% a# R. _1 t {1 A4 J+ `) x8 G, T1 i/ q
.active_low = 0,
) D1 s9 S& V; J! n2 I .gpio = DA850_USER_LED1,
( X) B9 J9 G7 p$ }6 K .name = "user_led1",
# O. u. b; F* L8 J( }0 ? .default_trigger = "default-on",- P/ @' |% ~% E, U# l
},, t- x& {; w' G3 I* l1 _9 X
{
; a" K2 L4 |5 ?, ^5 Z8 s! | .active_low = 0,
% Y$ W d& g4 b* V .gpio = DA850_USER_LED2,
, ~" g5 z# B# T& i1 i8 F .name = "user_led2",7 L2 k7 Q$ s9 b% T7 C0 X2 u
.default_trigger = "default-on",
@3 ^$ P; P6 m },7 [! L/ Y$ h4 U/ C6 I
{
% D, E+ ~: c$ Q3 f; _0 Q* S .active_low = 0,
! |. y- Y* M* O# j4 [: Q. z. D .gpio = DA850_USER_LED3,0 a, N/ c c. m" r7 l
.name = "user_led3",
- ?: |5 M% O7 e! R: l$ Y' M .default_trigger = "default-on",) h5 [$ t q6 L( G. X( K
},
/ R! G3 E* ?2 L2 n};$ C: u6 `7 Z: F+ `/ f5 `' e
+ W6 v4 k' |, C0 Q* c, n: r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' t+ ~& j; l4 W9 a
.leds = da850_evm_tl_leds,# ]1 |, F, Y6 I7 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% {& x( F& A1 Q( L1 i1 l/ j
};% B) S" a2 u, e7 \
) m" c( g. K5 F w5 J9 p1 N7 {
static void led_dev_release(struct device *dev)
3 H/ l1 |; e S3 S) `# z{
7 ]4 T2 P% I5 U9 ~- j1 h" `6 y) |};. @1 J! n' N/ r8 A% H, D
2 a f! [. b Y3 a) O) B5 a' d" W
static struct platform_device da850_evm_tl_leds_device = {
- q" z/ Y4 J& Z% }7 Q" T .name = "leds-gpio",- s& a% G9 q% b$ d
.id = 1,
: R* ~5 Z7 c6 i j2 {* V! _ .dev = {& p! z( F) H3 U# J* C# C7 _
.platform_data = &da850_evm_tl_leds_pdata,
! P$ s! e C) j; I .release = led_dev_release,/ b8 b$ o/ `& ~$ h
}! x- G! C0 ?5 M, `
};
1 C" h* f* h/ a* d5 d. [7 G+ }, j0 L) b
static int __init led_platform_init(void)4 C1 y/ E+ d% B. c( S
{
( s; |/ g' s4 d. E int ret;+ Y# s, M" s6 z
#if 0! Y, e( P+ }: U! H& @8 `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 Y) {8 }. V8 r# A
if (ret)0 F& Q: `/ h( w* t0 B$ w6 k# I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ [) [0 }- V6 _! N* u% Y
"%d\n", ret);: Z2 k5 M3 [+ G" v
#endif. q+ ? V* u- o
ret = platform_device_register(&da850_evm_tl_leds_device);
; q& T3 Y' u0 h4 H: R {) o% | if (ret) a# k. h/ V" s; ]
pr_warning("Could not register som GPIO expander LEDS");8 g3 x' g6 H1 y; r$ h
else% e2 w& C% [7 T/ n. b
printk(KERN_INFO "LED register sucessful!\n");: d* P- q) z# I, h0 N! B8 |
, K( y9 ]3 U5 |0 V return ret;! Q0 E! J! A* i( p' m! B
}
1 ~" E& `+ F' m3 J6 ~
" E: b* i* O: S7 [static void __exit led_platform_exit(void)4 y0 Y8 y# A' s( I
{6 i) U4 q7 Z# n4 l# j" e4 f
platform_device_unregister(&da850_evm_tl_leds_device);
4 H6 D" D/ \; o F5 t3 G9 O5 }' ], ~- P5 Y% p- `" Q* M! |$ p
printk(KERN_INFO "LED unregister!\n");* u; U4 K% N2 D
}
s9 R" L4 x5 e1 v9 L' G4 v
( Y8 E# G: T/ v& P9 Cmodule_init(led_platform_init);, W; f8 y7 g W C ]# B2 n
module_exit(led_platform_exit);9 x% m! x" L( d5 L" J# |
; q: o6 h. W/ z
MODULE_DESCRIPTION("Led platform driver");
& ^$ q7 d- w( Y' B3 Z. `$ kMODULE_AUTHOR("Tronlong");
# k; x; ?. K9 lMODULE_LICENSE("GPL");5 g8 y; k! H, F- ~. i
& a- T+ h# T v$ j8 |4 v$ ]; W |
|