|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; B1 m; h1 k; W; n x#include <linux/init.h>
/ b: W: C/ T2 J% o+ c$ n#include <linux/module.h> x) |/ s1 ]& h1 i, w1 E6 ?3 [( N
#include <linux/kernel.h>; u" ?- D/ ?2 X, j; c
#include <linux/types.h>+ z7 w4 n! O" L, G
#include <linux/gpio.h>
* O$ ]' e: N; w0 l#include <linux/leds.h>
' o; A1 V: i' ?" w2 T# O4 \; {#include <linux/platform_device.h>
k# u8 p" c! A) m
3 v- d6 A0 X1 {. P0 h( w4 x. T+ S#include <asm/mach-types.h>
; e- T1 j3 q& `9 i! V1 _1 P! N#include <asm/mach/arch.h>4 J% N5 C; v/ n( d
#include <mach/da8xx.h>
# d( i2 V: y0 x, M+ Q, N#include <mach/mux.h>
[! }6 `0 X _* E' q0 t9 h; ^5 h5 q2 z( i9 c# u% P, @4 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 H$ P# h- V* e( b! S- v+ O0 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% h- y' r/ y2 ?% b- M2 _# s( K, f: `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% e1 p& D$ t! a: i g2 _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( g: N1 a) S5 } ?* j' X8 @( D+ u4 n! L+ W% C
/* assign the tl som board LED-GPIOs*/2 j1 q6 C9 i3 D, e% S- F
static const short da850_evm_tl_user_led_pins[] = {
3 U+ d% ^+ m3 K6 G5 a8 F /* These pins are definition at <mach/mux.h> file */
- Y6 e0 g7 S1 b0 _9 v; p. E; F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ y# {; H6 ?0 h5 T" e1 V -15 Q9 L+ j" H" k* A7 x% S
};
) r; i( o' U9 R* W. y: Y& i% Y/ n/ H8 \" d; v. ?( l4 x+ v
static struct gpio_led da850_evm_tl_leds[] = {" F/ I* D6 D' }4 u. c
{
8 D# p: L" O L, S" t2 P .active_low = 0,/ _! t' j! E" g$ ~. r
.gpio = DA850_USER_LED0,
, U2 d' D& Y, j3 V; ~. p .name = "user_led0",: k, k' A; V5 Z3 t. c% ]
.default_trigger = "default-on",
& `# x0 u9 D3 l# I1 {2 F },
m8 A+ s# l) k ^" {% W8 e! I {8 }. w' C# K. |. \
.active_low = 0,
2 d0 U7 g% ~* E* F6 A' T2 F .gpio = DA850_USER_LED1,
+ I: n1 Q- T6 A8 J0 E" Q9 g( L1 { .name = "user_led1",
$ Y" ~2 F3 ]5 e .default_trigger = "default-on",
, ~ w7 K3 |- } },8 U- L* f- F8 y7 b- S. j V" C
{: |: A" W5 F1 P
.active_low = 0,* h/ S6 R3 ^' O$ Z7 X; d; _, k
.gpio = DA850_USER_LED2,5 a- K5 |9 H: F. E9 w7 |* P
.name = "user_led2",
( g+ x# ~9 T# n9 R$ ?# j .default_trigger = "default-on",) F3 _$ u: Z) n7 U& L' `/ |) m
},
1 ?( B( A& ^5 g& V9 ^ {% D/ [0 [7 s7 i2 a+ z
.active_low = 0,
8 o% n2 o: V5 T, w; q" e$ j! c .gpio = DA850_USER_LED3,
$ d2 K" k8 C& Y2 V4 { .name = "user_led3",
" L" H. _# Q" d8 [+ {- U .default_trigger = "default-on",# J& _/ F2 C' t1 q1 N) m# m3 d/ O
},
) x8 Y2 k* E' B5 E) s' ?& P5 S};
& r9 d- Q! g ~; B3 P+ d& o1 Z2 v% H; k; O4 z: |: \9 ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# s3 t8 y- s7 O' F7 e
.leds = da850_evm_tl_leds,1 N4 {0 G! y- ^! I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ i$ n9 D. t$ M+ ~6 w/ H
};' N# {# Y: K$ p u8 p, P
" v+ H8 D' p4 \" ?& E
static void led_dev_release(struct device *dev)
/ ^4 a; w8 i2 Q( {{
4 h4 L5 \5 F& q" b' L8 u- T5 r0 z};7 s7 i& W% l# b1 [) v. h
0 V* }. k d3 n( H" k
static struct platform_device da850_evm_tl_leds_device = {
) `# t: G/ Q U/ y2 x! Z .name = "leds-gpio",
3 H. l+ {- x1 e' @ .id = 1,
6 [6 p* S( ^9 a3 k( o .dev = {
4 w( C9 S' v/ J .platform_data = &da850_evm_tl_leds_pdata,
; {. |4 D! S- ]% `: A( F .release = led_dev_release,3 R, k& F5 \0 P6 `9 i, s
}- l7 r- \" n- o5 C4 t' C' d; B
};
1 D- `% }0 h( w, z0 h
3 J7 R7 W" }9 H8 S- H9 Ustatic int __init led_platform_init(void). j7 {0 m9 ]. X' t. x: x9 Z8 |
{
: d& U; t" |6 t6 K! s6 x int ret;
$ }2 u# S7 E k* P* m7 O& P$ i( g#if 0
* Y5 x0 H) B& b/ s* D- q9 }( v4 B$ E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ V& H( u5 R- P" _ if (ret)
5 A% y5 l$ @# W$ g6 X+ w. R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ u. O8 e5 [7 g$ E, X7 ` "%d\n", ret);
( O6 s4 B, W( l S#endif/ Q4 ^' a8 C# i! b' z
ret = platform_device_register(&da850_evm_tl_leds_device);: a0 X4 j$ Z E, X* q
if (ret)
% z4 m# s F: U# S8 m! g( O) C pr_warning("Could not register som GPIO expander LEDS");
+ W* W( h. F) X7 {. Q6 x o- i5 ^8 x else
8 D2 d' i- Z z# ]$ k. U printk(KERN_INFO "LED register sucessful!\n");. R5 R. c7 j$ _/ a1 T- N
8 h! o! ~7 @5 q8 d
return ret;/ S, [* J) K ]8 m
}. X6 k! B, ^: R9 n
0 z( k, c! N3 ~4 i" j ~; C1 V: V7 V
static void __exit led_platform_exit(void)
$ a9 N5 b- [- h6 W; n7 n+ ^0 s{
7 L2 h+ M1 W5 Q platform_device_unregister(&da850_evm_tl_leds_device);
( I' q/ W' D# Y! R+ ]- B0 P, H
. D: v& h, A5 w3 i' t/ k printk(KERN_INFO "LED unregister!\n");
5 H& {3 x( c) A3 o- G* v}
; W, ]4 X8 H9 J1 r
9 K( l# \8 ~1 Lmodule_init(led_platform_init);
' J, A# f& e2 i% Tmodule_exit(led_platform_exit);
& w' @3 M( Q! n1 ~- j6 q; _' v6 q0 }- v: u
MODULE_DESCRIPTION("Led platform driver");
0 U2 g8 R; b2 GMODULE_AUTHOR("Tronlong");
0 G5 y+ v- L$ t7 C( B' `MODULE_LICENSE("GPL");/ i$ C) Q% t. W6 n' x
4 R- i$ k$ M m |
|