|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 @, }! f6 ?8 e9 w6 d- Y0 L#include <linux/init.h>! M$ a, c. b% l8 Z
#include <linux/module.h>
) E. U# K0 u' w$ Z' o3 Y; H#include <linux/kernel.h>
% e8 E. h1 U6 o/ Z. C9 ^5 \#include <linux/types.h>' h' l6 N) n6 `8 u9 f( F! a
#include <linux/gpio.h>: |( X2 ^7 t4 f" z4 C8 d7 y
#include <linux/leds.h>
" k% Y! ?" f$ I9 R1 I9 x#include <linux/platform_device.h>
4 T/ |' m8 Z; T8 z; ?
( v/ T1 z& Y. R% h8 _- j#include <asm/mach-types.h>; m4 Y8 J) k. I) V0 K
#include <asm/mach/arch.h>
$ w$ [+ \ B/ z# |9 y& a, s#include <mach/da8xx.h>( s! x: O* O$ W1 F) @; O
#include <mach/mux.h>
- ~ A7 z+ O6 l9 z* U2 H9 V) Z$ ]3 z# @! c; ]# P. N% D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' w/ B, p2 I. A5 d! W2 N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" N. ` }& C& ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% H- b% U9 p# x) k7 S* ~9 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) q! ?6 B0 ~: P
% U" |# t, i* O/* assign the tl som board LED-GPIOs*/8 A8 O# q( Z i
static const short da850_evm_tl_user_led_pins[] = {
( x. p9 V+ e% H% {* Y# R /* These pins are definition at <mach/mux.h> file */$ u4 c# L0 q- b8 {+ y; Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; |/ q: R- g* h5 H' R -1) F& w' Q' r7 r0 |5 \
};: | y# d2 {1 l7 _" W8 W+ v; }
3 w {: j# y4 J# n" {
static struct gpio_led da850_evm_tl_leds[] = {. y& E( C7 Z; H, v- U" p, J
{# o9 ?, Z. m3 \$ o) c
.active_low = 0,
" a+ i8 G; B, Q8 c2 s2 E# _* p, f .gpio = DA850_USER_LED0,3 e6 |! f# |) C3 |
.name = "user_led0",8 s; j' U3 Y& H- g% T T
.default_trigger = "default-on",
3 ~% q; ^8 e; l5 w' {: |/ F4 W },
3 C3 F* z% n) Y0 {9 w- g0 t {
# t. _* s+ B' b. w e .active_low = 0,2 o3 u9 y' a) \" b$ }! ~, v3 `
.gpio = DA850_USER_LED1,
! t. T7 G6 Z4 \6 s .name = "user_led1"," z+ V1 l/ {! i* c: f z4 P6 O
.default_trigger = "default-on",
9 n# v0 f4 v* b2 t* e },( m& ~0 G1 ]- M( Q$ x1 n- v) E" f8 X
{
9 \( r' J# x: k* [0 n6 { .active_low = 0,
% a3 s/ L) N! c: R& w .gpio = DA850_USER_LED2,! G! C5 U9 n3 o) l2 X
.name = "user_led2",
$ k9 Q0 {+ w; |9 F8 B6 S; a1 Q .default_trigger = "default-on",9 q9 _- D0 p4 d( G; H; i/ @9 A
},
' E( m {' o6 }/ i" {5 V7 u9 K+ @ {
- B3 q/ @* U6 J) V: f .active_low = 0,: `: e- |8 g* o f% p; y C. Q
.gpio = DA850_USER_LED3,* h; g: x+ V4 U8 r8 m) f
.name = "user_led3",) j6 h0 V2 t$ H v! z' X2 a
.default_trigger = "default-on",1 s9 i! G x+ T, Z5 t) Y! ]7 H1 b
},
# u5 n3 _8 X3 I; ?, l4 Z};
6 c' f* _+ `& F6 t$ b/ I: C* I
% g. Q; X# l4 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ }0 |0 s q4 F& [
.leds = da850_evm_tl_leds,, S. y9 B( S- T1 g7 ]+ R' G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 |# h2 p0 J4 L; K};/ s- q4 [0 U6 X: ~6 ~# E
- Q+ J5 X' @7 Hstatic void led_dev_release(struct device *dev)5 i# B6 I$ h3 d) Z" q& p
{( M+ q8 D$ q: O; @- Z! ^1 e
};. x: a) t7 T- K0 _+ E8 Z
1 X4 C' e9 {1 e$ a7 Z. A2 r/ nstatic struct platform_device da850_evm_tl_leds_device = { `& J/ }7 [; H& s# B2 h
.name = "leds-gpio",
, n# E' U6 \9 Z, w2 W .id = 1,) T3 k/ b/ I8 b2 R. T
.dev = {/ |# V& J+ ~* ]$ w& k) K
.platform_data = &da850_evm_tl_leds_pdata,
J$ T6 y$ y' z+ @' |6 ^$ u .release = led_dev_release,% z! r8 j1 _9 R4 A
}
% O" d! O) i1 B; H+ Q; {$ r};
1 i; M* a/ m. ^4 c5 q+ b6 ?
4 c: u; M4 N5 O2 L3 [- W3 Estatic int __init led_platform_init(void)
$ X; o: W" @) O6 a{
5 Y, \( C5 D1 a- \7 v5 ] int ret;
p2 H& a- T, @! d#if 0
8 P" L/ ~! f8 [4 x1 A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 f2 y* {' q' x$ g2 A D( F2 Q$ R if (ret): M4 R5 I1 ~* D0 _! A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( D' I5 O( I: d n" N: B, v5 Y) ^ "%d\n", ret);
3 o/ P0 `8 [5 q7 [# |' t' w#endif
+ \8 D, M+ q! p- |* p) w' H ret = platform_device_register(&da850_evm_tl_leds_device);3 G+ F- I1 r4 ]4 A
if (ret)" p4 m$ ^+ D- N+ B
pr_warning("Could not register som GPIO expander LEDS");
: h$ S. Q) N# \' `7 f else
$ X" k7 c! e# t printk(KERN_INFO "LED register sucessful!\n");; X$ t3 D9 q- G
, K9 a4 W5 p% t; v
return ret;' k* u' U% k# A
}, N( W- `! G: @4 P; }
- f2 w. A6 s0 I4 J! Z% C4 \ e
static void __exit led_platform_exit(void)7 J% e$ t, K0 t( E* Y) X
{
, j5 r) z0 x( Z" o platform_device_unregister(&da850_evm_tl_leds_device);
* Q8 _; ]5 Z3 H/ J! @' t1 U# c7 G! |
6 P3 i5 o' o' ]4 ?; N# o' ` printk(KERN_INFO "LED unregister!\n");$ B/ F4 t$ ?' X6 s
}* E" u4 z' b* m7 t& K/ | v5 D
0 v/ y$ i& `7 f6 X
module_init(led_platform_init);6 |4 s5 Q4 Q" u- v8 j
module_exit(led_platform_exit);; M& X6 x d9 L& t
' w x4 `" r$ v$ b) XMODULE_DESCRIPTION("Led platform driver");
/ t% ~* Y; Z: w$ wMODULE_AUTHOR("Tronlong");
# ^ c3 {. O8 g% d- B/ p3 @/ Y5 QMODULE_LICENSE("GPL");8 `7 Q6 ~# ^ p
a4 z J# B, d, ]9 R0 O0 z u" G
|
|