|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! ?) b+ g0 g/ v# n#include <linux/init.h>. a- E2 J5 f# l6 R
#include <linux/module.h>1 d- S2 K6 g j* I$ b
#include <linux/kernel.h>
6 ~1 ?1 D2 `2 d0 ?4 v0 z* P#include <linux/types.h>
6 ?; _3 X1 r) M( I d( r3 ?#include <linux/gpio.h>
8 e: K' D$ P6 x4 f: I+ A# @#include <linux/leds.h>
: T) ?. n1 ?* |; P) V$ q& p6 U#include <linux/platform_device.h>1 S1 F0 N' U$ I U
1 Q. f# c+ {: I1 C6 M& G, u1 A#include <asm/mach-types.h>
* }* }8 U7 d* S$ m3 Q$ i# q1 C#include <asm/mach/arch.h>8 v+ v' b5 a7 v/ ^7 w
#include <mach/da8xx.h>6 }- i! U$ L9 m8 ^" n
#include <mach/mux.h>/ k% y+ D o& @, G" _$ P
4 D l" ~, N7 {! M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): x0 j8 l8 B3 V# `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, K' y1 P9 j2 ?% N$ W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( a' z9 U/ I. ]; D% p9 F, B3 k0 J; o4 D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" {- P& o! G9 y# Y/ x7 ?
, I% P/ M8 c& O- d0 y/* assign the tl som board LED-GPIOs*/
) Q( B* T. X4 C+ Y9 Rstatic const short da850_evm_tl_user_led_pins[] = {4 `" P v) }2 R8 f
/* These pins are definition at <mach/mux.h> file */4 Y6 A5 a! v: `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 ]( i* B! ^4 O9 i
-16 N8 M, T# s. h( N: q
};/ p' m7 |3 Q5 G' W
& r, F6 J* q; a, gstatic struct gpio_led da850_evm_tl_leds[] = {% z* B8 A! |+ o# `0 b
{* e4 |; A& k% K3 ?5 ?9 B" k/ i
.active_low = 0,/ D. r$ F# \2 B) {# v
.gpio = DA850_USER_LED0,: S6 \3 t4 M6 a: b
.name = "user_led0",3 F; v [/ d3 A: m
.default_trigger = "default-on",
& U+ C# p! u* X" h5 t7 G },5 }6 i. r$ O L j' U
{
1 m% a$ J) R; L/ X* j: O .active_low = 0,
/ o* b& b0 M O' v `9 x# ^( i .gpio = DA850_USER_LED1,
* X0 p6 m8 Q3 ~ .name = "user_led1",
' q+ P- v- ]% b0 D7 U. { .default_trigger = "default-on",* }$ c/ |$ ^8 }5 x& r+ m
},8 Z/ T y: W' X8 T
{
; u, y. g- d9 X9 G; [0 @4 [$ b) T .active_low = 0,
/ K% h: N! f) [$ v1 ] .gpio = DA850_USER_LED2,
$ H3 @! t' a4 ]2 i& d6 X( c M .name = "user_led2",' o$ B& I- R/ B2 a. d0 t0 ]
.default_trigger = "default-on",. X, X& p0 M! y
},
E( ?# B7 s$ U+ U {/ Y/ k0 w4 p! P' O, b
.active_low = 0,
4 I2 v7 ?- X! d .gpio = DA850_USER_LED3,! I8 L8 w. P/ g( k% N- E
.name = "user_led3",+ r' c" v* U. ]6 L, S: [+ @6 r) e
.default_trigger = "default-on",/ c1 ?3 b1 [3 D) j" \$ o0 j& N
},$ v1 a+ g' h" `4 c1 O9 N
};
2 L( x- U" n9 R
! f. c; n6 P) O2 X$ r) A6 B3 z+ Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* t: ~( W) Q' w$ q( ?" G .leds = da850_evm_tl_leds,
U- q9 J0 r: |% t* G. [0 d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, d0 m) d+ A Q};! S- _1 {9 y3 L. I0 A8 Q
/ o. H. a, D J! V* z' P# astatic void led_dev_release(struct device *dev)4 c+ ~3 v$ m2 D3 d2 x
{
5 ~* S7 I9 ~ {/ x* _5 ^5 `! u" y}; p y1 k3 }7 j" O9 x. Q
) H, [2 `3 M, V6 s- `6 estatic struct platform_device da850_evm_tl_leds_device = {* L# F: [2 P$ v1 c* W, n
.name = "leds-gpio",
* Z$ ?5 F2 e/ l0 [1 M .id = 1,
& A$ {" ]$ G. u v .dev = {" Z! W# @( g2 @2 ?" O7 j4 k
.platform_data = &da850_evm_tl_leds_pdata,
" a( R6 D9 ^: m% L4 L% x .release = led_dev_release,0 R o$ S$ p* Z7 c. E% `
}
7 K9 |1 Q# a& o7 y# | z4 ]};1 M' }. z9 o8 ?* ^- g
) h) A d. j* q+ F$ ^
static int __init led_platform_init(void)
! J e- y7 p7 n" g. i{, U& Q, x; Z; j6 o5 z
int ret;3 W, A/ a6 b. t& H6 u
#if 05 y+ r& S( _ m) g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 j _( p; D7 o0 Z if (ret)! O0 g6 l9 K2 e0 S2 |' s3 p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 Q4 H; V, f8 L4 @7 k "%d\n", ret);
j9 K+ `6 M) K8 \/ h2 q) g#endif
! A' R2 ~# ^1 h0 R& d( `# g ret = platform_device_register(&da850_evm_tl_leds_device);7 b3 K* O% {# K: R/ u# y
if (ret)
* y0 k" G7 m$ m1 j. K) q& m pr_warning("Could not register som GPIO expander LEDS");8 s8 G$ B! L3 \
else
0 a+ U7 k6 N: t; y printk(KERN_INFO "LED register sucessful!\n");. u6 S* q. h% Y7 b* S6 Q1 }
: S. k* U+ A) n, F3 l1 ~: i, q return ret;- z4 X( K; J0 F# {$ Q( M
}
9 Q7 `1 c2 V5 C/ s6 U* Q7 T1 n- Q/ X( s7 T3 y" l
static void __exit led_platform_exit(void); D0 p9 I: P) m# `& }2 E* g
{* E1 v4 q8 B4 W' b8 b
platform_device_unregister(&da850_evm_tl_leds_device);
& H7 Q: M+ k2 m* J
) K" y! d, [+ x4 k9 s3 d* t8 m. _) a3 h4 ?2 d printk(KERN_INFO "LED unregister!\n");
6 n1 Z; T& x1 J, _9 D8 S} i' d2 r3 N4 Z
+ M* G/ E! x1 x% E5 ^module_init(led_platform_init);$ K7 |4 o% h' Y7 ?7 p
module_exit(led_platform_exit);
2 f2 @) T/ m+ n( a4 @* [7 v6 A) _5 A! K5 A2 R( w9 E& G4 }
MODULE_DESCRIPTION("Led platform driver");
9 i* f% ]$ J7 }5 W3 xMODULE_AUTHOR("Tronlong");/ \: d+ u% n& S1 J% l6 I" A
MODULE_LICENSE("GPL");
* F0 n7 Q' ~6 d" |6 S. h7 L, W; @4 |/ t- z
|
|