|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* p3 n5 w& Q' G" q2 R% ]
#include <linux/init.h>
. H" k0 Z8 i+ b X1 X#include <linux/module.h>
E! Q$ B( G2 {$ M$ L#include <linux/kernel.h>
8 S7 g. P1 v$ J8 `, n& Y" \1 ?#include <linux/types.h>
; K! {8 y' m# ^$ B9 O: j+ L# H3 p#include <linux/gpio.h>8 x" j/ V4 M# g: M& f
#include <linux/leds.h>/ ]# E! c; X) {
#include <linux/platform_device.h>
# O J3 ?* A5 M* X
2 Z# j- u( O& O0 b0 y( Y#include <asm/mach-types.h>( }# M/ r: e: B0 p
#include <asm/mach/arch.h>- _$ K* i/ S5 A, a( |0 U% b8 h
#include <mach/da8xx.h>7 }% k& x& A; A- k, h
#include <mach/mux.h>
0 A3 f6 `, U: ^4 X( Q
, [' I; _1 F7 m) d" F u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) q; N( T' e3 G+ K# q3 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 b) o: v' Q) D7 _( W$ F7 n% @; [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 a' ^1 h; ]0 s4 i0 E) c0 t1 t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% }: G, F+ e4 C8 X
5 @" V- a/ Y9 m5 p/* assign the tl som board LED-GPIOs*/8 ?6 a; q" x8 `0 k9 G3 U
static const short da850_evm_tl_user_led_pins[] = {! G# {) x5 Z4 N/ w, w( w
/* These pins are definition at <mach/mux.h> file */
6 X9 p( C/ [' F6 Q) B2 a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 x, m* }2 Y! p1 ^) q
-1- e3 f; [ z! B: {3 |4 s
};
f9 s Z7 G- T) y1 I. }# ]
( n& p" I$ Q3 H1 E& Bstatic struct gpio_led da850_evm_tl_leds[] = {4 K; K8 v6 @; ^+ u5 m: {
{- f3 T1 |. l0 l! a; |- ^+ R
.active_low = 0,; z+ k; U: K( t% k% N# n: z
.gpio = DA850_USER_LED0,
7 Q" G1 y% w) u .name = "user_led0"," c1 c0 ]9 a0 J5 U% X' ~6 v4 h3 t; M
.default_trigger = "default-on",8 l* O$ P/ U8 G* ?- y( u/ X
},
7 \8 Y3 A, K9 Y$ c3 R! l {
8 o- \* s* n0 s* K, G .active_low = 0,
& z f. b# D. ?+ a .gpio = DA850_USER_LED1,& E! _9 m7 B/ m: W1 c5 F
.name = "user_led1",
8 ^% ?& [# k N$ ^, x4 ]# W# b .default_trigger = "default-on",3 _$ @8 {1 S4 `( r, \
},+ o% i+ }5 Q; v7 O3 N( p+ m
{% u: |5 p/ V/ n$ }2 Z
.active_low = 0,
8 E8 W- s+ i* o .gpio = DA850_USER_LED2,. [6 L5 G ^5 u9 f4 {
.name = "user_led2",2 r3 f$ {; X( e
.default_trigger = "default-on",
/ R" C6 A* f% ~) T },& M3 P% I- C4 M' w4 A; u
{- j2 p8 w8 d1 a& Z: n
.active_low = 0,3 m& ~0 \3 O" u
.gpio = DA850_USER_LED3,; F2 F# }) T! Z, f0 q
.name = "user_led3",: Q* u4 g1 @0 Q+ h/ \
.default_trigger = "default-on",
( z9 b, A/ }6 E },
# M0 I4 c; N4 L/ r};
* p3 S6 |% s( s
4 J/ i* }/ j; a* d9 fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- L& o) V5 p4 Y4 j- X( n ? .leds = da850_evm_tl_leds,3 C8 p' ^, a4 L0 ~1 R/ C3 _+ }; r& ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' C$ I3 ^* h) d};
! C0 e7 _8 w* c$ Y( D' P j1 Z' C
static void led_dev_release(struct device *dev)6 i5 H2 i" Z. ~- n( T+ D5 b5 q
{/ ]# H4 P) ?1 F+ f: R
};
( S* P0 o7 {1 E; @% m! ?* d G5 [" r4 ], l2 \
static struct platform_device da850_evm_tl_leds_device = {1 U& V' z2 D7 F# t
.name = "leds-gpio",
% l2 l. ]/ V3 G6 v1 a .id = 1,! M6 F: ^" o* x E1 B
.dev = {5 v8 C, ^+ B+ e* e. N7 Y7 ~
.platform_data = &da850_evm_tl_leds_pdata,! H0 H( X: f) @9 H4 n% ]
.release = led_dev_release,
\% I- i; D+ u" ~- e; e2 Y }
6 t% ]" E; Z8 O: a};
* j( |, q8 S! H# }. {7 T2 t# \1 ~: q/ j0 s/ z# v0 b
static int __init led_platform_init(void)3 `; V7 Z% h$ ?! c
{
# V) ]7 d& d0 J) v int ret;
0 {( S" H4 O4 d. a8 l#if 0
' Z: V2 }8 H! ]% c1 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( }$ n* M' H" C0 _( H: {2 J y0 [ if (ret)
2 r: [, q9 |8 d$ U* W" S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& J; }& ^5 h. O
"%d\n", ret);
4 P9 V2 j3 v$ I, l6 |#endif
1 [6 C1 R- O. [2 i6 B3 x ret = platform_device_register(&da850_evm_tl_leds_device);
& Q0 t# X# j c+ k6 V, [7 w if (ret)1 R' {1 Q/ j8 m9 J7 V8 L8 q3 J3 @
pr_warning("Could not register som GPIO expander LEDS");! J Z, I9 W8 j$ l, X
else7 W9 H( F* K' ^5 d# z
printk(KERN_INFO "LED register sucessful!\n");5 {& v- M: R1 {% x5 T0 I
7 w p3 v3 M4 K
return ret;
: ]9 p4 C- {% y4 ]% |: \}1 T& }- t. B) v+ K
' B `5 Y {3 _static void __exit led_platform_exit(void)
& T8 q" e: [- m5 `: Y! e{
% O( C- `) n- R7 l2 M9 ?' q platform_device_unregister(&da850_evm_tl_leds_device);
4 ?% \) j T5 v2 E' O1 `2 o S9 O% C, N7 z- M+ @9 d
printk(KERN_INFO "LED unregister!\n");
* y) S. W2 ]# I}# p1 H" A" }& ]5 D0 f- o& l
# t& n# Q9 Z3 D9 x/ J
module_init(led_platform_init);+ G9 U1 ~- w0 {/ F5 c
module_exit(led_platform_exit);) l- x; x* q. R. m* d+ `, l1 W
( Y K9 U$ i$ q8 M, \% Q0 X* F9 cMODULE_DESCRIPTION("Led platform driver");
; [' }/ [) e, a4 G& UMODULE_AUTHOR("Tronlong");
% U: r1 l# _) S" _- VMODULE_LICENSE("GPL");0 d6 x' _1 }% r6 ^# g
9 g$ u6 m. P, `/ y: P$ c A |
|