|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; r/ J Q% y9 q5 I! y9 |( M#include <linux/init.h>0 @/ E, q8 c0 Z
#include <linux/module.h>; u! X% G# V6 V; }' ?! O
#include <linux/kernel.h>9 K+ w. }0 h1 e! W) v/ t& N: |
#include <linux/types.h>. K& p# a7 y& }! [7 |% p W
#include <linux/gpio.h>
- V% B9 a$ P* }, A. n3 g2 [#include <linux/leds.h>/ j* w) p" j8 A9 j0 C9 C2 ?5 f& P& ^3 Z
#include <linux/platform_device.h>
4 r1 {0 z3 x! ?8 t" G! R. r# v* v1 ~, n# b# P7 e) E1 \* `
#include <asm/mach-types.h>
' c; L+ x n6 Y: P9 u#include <asm/mach/arch.h>' ^& A; `2 d8 c, s$ `: ~6 V# B* n- B
#include <mach/da8xx.h>, ~! v0 }$ w2 J3 D/ p
#include <mach/mux.h>, E9 e$ Y! c" i( d3 _
6 ]) r$ Q K" P" p: Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% H; d5 [$ F. i! d1 N8 P6 ?) \/ W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ p3 D% K) k) F! c4 z- P. K$ t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( e$ k- R S* b" R# c# Q, R. ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 S7 U9 o; Z! v; v: w9 m# n; z& e8 c. H9 v2 m
/* assign the tl som board LED-GPIOs*/4 M3 R( m! j1 E
static const short da850_evm_tl_user_led_pins[] = {
: f1 g O. A2 P* N. p' z* L3 h /* These pins are definition at <mach/mux.h> file */. i$ f% i+ q5 d: b- x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- z9 _# U1 U/ A G( y -11 f6 x+ h! u5 y
};+ @. d% [2 l: n s: F, V
- c2 Q- t% w" p8 T9 hstatic struct gpio_led da850_evm_tl_leds[] = {
" k j- f" e5 K% O% V {2 y) y1 n! ]4 K' |
.active_low = 0,
2 @9 _4 D9 o* a. w& z .gpio = DA850_USER_LED0,
7 d# d: k3 Y7 y; { .name = "user_led0",
" U% D* l1 [8 k9 x K: ?9 M+ c .default_trigger = "default-on",4 j! }: r; |* t8 Z8 t A1 I9 O
},
+ b2 ~1 x v& Q( e4 @/ h6 u {% m0 i4 d: Z+ L! B3 n" r
.active_low = 0,
- ?+ [6 s. X/ F7 M$ |2 l .gpio = DA850_USER_LED1,
2 ^( y) C% z$ j6 H. @% n, q .name = "user_led1",5 `+ R! g* { o+ D; } ^* I9 B
.default_trigger = "default-on",
3 Q' Z* l" K: t0 j+ I; F7 _( A, e },0 c t \+ F% V9 G
{( I& _' z2 e, r+ B& H) r4 z' H
.active_low = 0,
. d+ z. E$ {3 P3 B .gpio = DA850_USER_LED2,, m+ N- R+ _1 `8 u3 y
.name = "user_led2",& T$ g% Q! C. G- v- ]- \" u
.default_trigger = "default-on",6 }$ W7 @3 k; O! N {, ?& s
},
/ E* D7 C2 U$ Y# {8 m3 m {# G$ r9 S! Q% e, O
.active_low = 0,
. `- P4 v' w6 @# {% Z) r+ O .gpio = DA850_USER_LED3,, T( I0 K7 L- L7 Q) [9 S
.name = "user_led3",+ R! H4 y' p+ V+ B( k3 {
.default_trigger = "default-on",
8 B: @; u: N; h* T9 s$ p+ ] }," r; c6 I% o# S0 o
};
, I2 U7 E4 ^# s3 k( L0 S. c0 t* J0 @' p4 \; `" J! u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% w- ~& J; g& O- g+ i) ~5 K .leds = da850_evm_tl_leds,
2 ]2 T G/ L" E$ W. L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 u8 x5 n5 D) n+ r8 l) l
};% K& \9 e: G' \' _# \
+ f/ e+ n2 [5 A- istatic void led_dev_release(struct device *dev)
+ S3 I; k( I6 ]; Q! e- O" o{
- |& L9 z1 N* u: z) Z};! ^8 x5 s9 b1 ~# _3 _& b
4 x: m! N1 \' Q' D( {8 |static struct platform_device da850_evm_tl_leds_device = {
3 ~( u& a0 O- L. z .name = "leds-gpio",
% ]& ^# t2 k# M& g/ n0 v E .id = 1,
% o# A5 B' O: h( X) {( E( J .dev = {
+ k7 t7 K! ]: A) }9 D* K" X* V .platform_data = &da850_evm_tl_leds_pdata,
% @" q: `/ N' g, { .release = led_dev_release,
" }* @3 s( s3 z1 U2 Z }
4 a& \/ |6 i3 X+ {/ N, h};" D, S- C t' U1 I7 _/ p
' N* |% B, d2 @, y# M1 K' }* U- pstatic int __init led_platform_init(void)
3 K P: q8 U( e; `{
2 b# I- q" _1 e9 d, \ int ret;2 @& b% w7 S7 {2 F) l6 `$ M6 Y
#if 0% r5 g2 p7 T; M% F' s( E' r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 ~9 ^" G& W1 l+ q+ \0 C if (ret)8 O/ u, K9 Y& @/ U$ R, \0 S3 U. e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ I. R& ~: E# k+ G* j1 {
"%d\n", ret);
7 n+ J% U& N& ~: R# P#endif
' N# |$ B( Z5 {; M- _: r1 G8 T ret = platform_device_register(&da850_evm_tl_leds_device);
& ]& ?& o) q. a3 Y' I if (ret)
5 Z3 \- U0 Q4 t% d8 W pr_warning("Could not register som GPIO expander LEDS");
_) g8 @3 V U- o- [$ m1 n else: h/ V ^. @2 e, w6 D: {, G& ?) X
printk(KERN_INFO "LED register sucessful!\n");$ l2 w# `$ v6 ^/ u! C2 A- ]
+ D$ v+ l, \4 q0 ], u, S) C8 B
return ret; o' D/ q1 F5 @
}
3 E, N' z" G) }0 a5 }/ S
5 l$ Y' W P4 u8 ^5 m! c) `# j! d8 _( mstatic void __exit led_platform_exit(void)
" ? R; b; B! n{- N" X! R) C+ X; K9 l
platform_device_unregister(&da850_evm_tl_leds_device);
6 n% B. s# H0 s! N
8 J. I2 Y& v1 E! C# r printk(KERN_INFO "LED unregister!\n");7 j. [3 |5 \, H: `
}
6 t3 r: m) ?# i' Z
0 ~7 L d; }( Kmodule_init(led_platform_init);% t6 i7 _, ~ F6 O
module_exit(led_platform_exit);$ c% n1 ]" u- L/ u C2 t
% U! N# S( e+ ]7 v: Q. ^/ bMODULE_DESCRIPTION("Led platform driver");
% U! q& s T. e- P$ NMODULE_AUTHOR("Tronlong");! m: W/ t6 @8 `: J/ K4 k- i
MODULE_LICENSE("GPL");/ \8 X! Q) ?+ x7 j9 F
9 F+ F& k8 [0 x" R4 u
|
|