|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! z- s0 Z/ @3 E# ]5 w#include <linux/init.h>/ g: @7 X4 z+ l: g; b% ?( K z
#include <linux/module.h>0 s- m) g; Z; l# J- t4 l" ~
#include <linux/kernel.h>+ l/ `3 B3 w( R2 [3 [: X
#include <linux/types.h>
: S( a$ S, Z6 Y( L# q#include <linux/gpio.h>' M* ~7 _* @3 t# m4 c2 v# M) I
#include <linux/leds.h>
, j$ C0 K& ~- _. Z2 Y- ^# ^#include <linux/platform_device.h>
. T0 F4 X8 ^/ G s* J$ O# F8 a5 {5 H+ e& J1 F0 e3 H# S" C P3 i
#include <asm/mach-types.h>
+ r0 b6 U" a0 i: ^5 G#include <asm/mach/arch.h># V+ b& H) D: N& V2 u
#include <mach/da8xx.h>
# S' L1 X) ?: {! M: H#include <mach/mux.h>
v a, j1 K# ~6 m
2 K* Z3 _' h: Q' A: x# z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); X# V: `) w8 s5 v7 v( B: x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ v) U! O! i7 v ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" b0 _% g! g( o" s4 K8 z# G0 O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) X2 D# i, p0 Z/ h+ B+ Q3 y) w0 R+ B6 @2 p) d& A% a% [# Y/ {7 y
/* assign the tl som board LED-GPIOs*/# h$ r7 ]6 o7 f0 ?) A
static const short da850_evm_tl_user_led_pins[] = {# M7 x; M- I3 M. a& k
/* These pins are definition at <mach/mux.h> file */, l, n2 K( @/ W# f$ v. T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" H) E1 }3 ^* Z6 e& C -1) v8 \2 F) x% q" B6 @* @0 @
};
/ x5 g# p. d' y6 C. L% _
3 ?( J: @, g' _" {2 I: Jstatic struct gpio_led da850_evm_tl_leds[] = {# S. Q$ Y y; R6 g n
{
1 V5 T/ L1 S* d$ y% G) w& l9 n .active_low = 0,; z: ` k6 X" p: `1 _
.gpio = DA850_USER_LED0,
8 o6 l1 u, N$ n6 W6 b& Z .name = "user_led0",
$ n# J, j: d% M6 e; J+ n .default_trigger = "default-on",& V: Y6 }0 Q( W% E# s' }* a2 n
},
7 O/ `: Q& `4 | {
1 j7 S) M7 S" H .active_low = 0,
' c1 N9 ?8 r8 I1 |& s x .gpio = DA850_USER_LED1,
- A) f$ c Z+ l! g6 p5 H .name = "user_led1",8 _. S8 e' C, q
.default_trigger = "default-on",$ z0 l3 y: n# ?7 B2 b# A
},
3 ~- {; t6 P, U3 u, C {% l6 `. \* t( K+ _4 O4 W5 S* C
.active_low = 0,0 e. K( t6 T" x3 F
.gpio = DA850_USER_LED2,
: V9 C9 h7 ?) _) P$ Z7 u& u .name = "user_led2",$ C2 G; t3 @9 f8 T+ U8 a
.default_trigger = "default-on",) q% L5 W& c3 ]: J- t
},
) Z) y% s& e% y {, `( @+ G- b' z/ |, E
.active_low = 0,5 A0 A# X, @+ i5 U
.gpio = DA850_USER_LED3,, o7 Y5 m. n0 _$ j5 m8 l
.name = "user_led3",8 J4 B& i* @* C( p6 O4 @
.default_trigger = "default-on",+ }; l. |# g& y8 L9 X7 z
},
, T- s3 E0 q) ]. u# F5 U, L};/ M+ o3 c9 T" y; \
( e2 b% F6 s* |8 B1 \. R% T6 g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% J3 `2 P7 U h
.leds = da850_evm_tl_leds,
9 ~$ R9 N# d# a6 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% z! M) z2 J3 l, Z6 j2 h- w% D
};8 F4 g# d9 ?% N' L
7 { B! p* H3 v) astatic void led_dev_release(struct device *dev)
0 I- j; e) j! c" Z5 u4 r{4 H0 g& `. n' ?( Q, R/ K
};. _9 n2 x* T2 y1 t6 L( ^( ]
2 [( H- O9 C4 n
static struct platform_device da850_evm_tl_leds_device = {* M' H7 w1 Q% Y; ?, H! H6 Z' Z
.name = "leds-gpio",1 K) m+ w9 N6 D' ]/ k* m
.id = 1,
1 u* ~2 a, s. U8 R0 C, s' S& n6 I3 _' e .dev = {
$ I5 A# j( J! b/ O4 C! W .platform_data = &da850_evm_tl_leds_pdata,8 \! w* D: H! O9 _& s
.release = led_dev_release,
) |" G! v( f- r8 `; T }
+ y9 m) L( m5 z9 P. i F/ B5 i};2 R4 N' u' n, C2 W/ A V& w# P2 \
; Q% Y( M# m5 {: C* d# ^
static int __init led_platform_init(void)) a( x% ^ f) T* N
{
+ z3 @ s3 b4 {1 O! \: M4 M int ret;2 g- o% f1 I& u
#if 0
" F1 W8 Y; H' y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 q2 G4 l0 `1 |" D7 o) e8 M if (ret)
1 h/ U% @4 p% ~3 C6 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 F4 V. D' \4 p6 H& o "%d\n", ret);2 B. C3 m2 k b9 V
#endif
1 e4 D' G2 r2 [: F6 P ret = platform_device_register(&da850_evm_tl_leds_device);
$ I( Y. |4 n' U5 r0 H" y if (ret)
, v2 o+ B% V" P( V0 ~ pr_warning("Could not register som GPIO expander LEDS");5 f( x% N- O9 Q" [7 q
else
/ x; Q% H4 r6 I& `; K printk(KERN_INFO "LED register sucessful!\n");
, @% f% q3 O7 s/ g/ D8 b
+ l6 B3 O! S7 a% z4 K8 [& f5 Q return ret;7 F) Y! U9 [- P
}1 H8 Y! P1 x) q. ~- g
, [- E1 Z3 J" {$ c) X
static void __exit led_platform_exit(void)
/ }" G7 B! {- k1 W4 d{
& }" s- Q( S0 O4 q; h" b6 z- R platform_device_unregister(&da850_evm_tl_leds_device);
& ^- \. P a1 Q9 _, c
6 z/ Y2 v& |5 I& v2 p printk(KERN_INFO "LED unregister!\n");
6 g8 M3 ]' A# j$ ]7 M}$ _" w; [2 b# T' p; K
. `" i9 o. V8 ~0 c) w
module_init(led_platform_init);# X7 V) c* R# z; W
module_exit(led_platform_exit);/ m8 D& z- D5 `+ N5 @ G
. d4 {, Q e4 M- K6 T' qMODULE_DESCRIPTION("Led platform driver");+ ?& x0 X6 b6 C8 V
MODULE_AUTHOR("Tronlong");$ O% D5 L+ Z- J
MODULE_LICENSE("GPL");
1 b8 u" l) l* Y/ v g
% v+ D" [6 \+ j7 x$ h |
|