|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 R8 B1 \5 j& I5 p+ E6 x) M#include <linux/init.h>, [* N* g* p1 g* q. ~. h2 O, }
#include <linux/module.h>
8 @* Y7 d3 J7 p) p#include <linux/kernel.h>
+ [) {- [) r* Q. [6 f9 v#include <linux/types.h>
& v! g2 I1 N8 _( D#include <linux/gpio.h>
% T- y5 R. x3 p/ T#include <linux/leds.h>* \ y2 U; ~- Q& w( h
#include <linux/platform_device.h>
& L$ @8 D4 \4 H6 C
& C4 y5 m( |. W- c#include <asm/mach-types.h>& F3 y$ L+ l* T
#include <asm/mach/arch.h>
! ~' ~* W H* j2 }1 A6 ^# z! U# F X#include <mach/da8xx.h>
/ G% [5 h5 p' P: E* I: w#include <mach/mux.h># M3 L9 E( y7 P. \1 `
8 n. R( ^7 L [) R' q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ i" g: {! F$ [7 p% I! s! a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): `/ \# a1 i: N) g6 U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# r" x, D4 U0 Q) D- o: u' K4 c- ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 x" M' k8 @8 ^, R/ W0 q. M* g
7 I% `4 L: \% r. e
/* assign the tl som board LED-GPIOs*/
) c# A2 |: r9 Z- }static const short da850_evm_tl_user_led_pins[] = {
i" \/ Y6 k/ i/ y Z* I" \0 B /* These pins are definition at <mach/mux.h> file */
6 g1 X' S; O _. C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) \ V. ` P# \ -1- K; B$ B u( s- U4 i
};5 X8 R5 i: x y+ }
, z8 k4 F% L3 M3 O5 Kstatic struct gpio_led da850_evm_tl_leds[] = {
: r9 w# U% e8 d& k- [8 L }8 h; J {
' X7 ?. d$ O+ U) X! ^2 a- Z$ L .active_low = 0,
$ y( `) N" a+ l .gpio = DA850_USER_LED0,- |; y7 J5 _4 d/ A6 V! {, D! \* g
.name = "user_led0",* s7 r3 j }% X
.default_trigger = "default-on",
3 Q3 ^1 v. \) ]' _. f9 q },$ B: B! @) \6 w2 B- o# q
{
4 b* z4 _! H" v; N0 B% D& s .active_low = 0,+ N9 j; O! ?/ a5 X
.gpio = DA850_USER_LED1,
% n4 ], |3 H; D; W .name = "user_led1"," R O& r8 [5 }8 ]" C- R' S
.default_trigger = "default-on",7 X* ?, w" \' N; a
},( h9 z) w0 r7 q1 H- R
{
& q$ U4 ]( Q# |6 @) k( m. S .active_low = 0,
& ^" D! a: M% j- n .gpio = DA850_USER_LED2,- Z5 g' i' F( p! i) X
.name = "user_led2",1 ^2 [0 D) n1 m
.default_trigger = "default-on",5 d. f2 w9 j: ]1 Y+ A6 u5 T8 G
},9 {3 j1 u3 m9 m9 V: {# Y
{5 l1 ]4 o: H6 l* y, g% K& ^3 r O
.active_low = 0,1 s9 \) I5 c- S3 J( O- x K8 S
.gpio = DA850_USER_LED3,
0 ~1 N x/ K* q% k n0 K9 n .name = "user_led3",9 E4 I3 ?3 M) y- T, g S& g
.default_trigger = "default-on",) c* t. @6 m$ O- n: g. ]
},% u E0 k0 g0 H/ u' l
};
' E4 _' R& r2 ^
A) ]: M5 r8 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 X" i0 M a' \
.leds = da850_evm_tl_leds,
0 }1 h1 k7 C" q2 J6 f3 J9 G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ {4 k1 }7 H: i# z3 E};- L$ \5 G0 q9 c$ O8 ~ Q
w8 J, _( `2 J Rstatic void led_dev_release(struct device *dev)$ h8 F1 y& z8 R/ Y; i! D1 P
{6 i/ u; E# ?- a+ j. z
};3 ^: e: Q0 W+ @1 x, q
& ]) F O2 V! Gstatic struct platform_device da850_evm_tl_leds_device = {) @+ y0 i c0 w% ~# X
.name = "leds-gpio",! a4 G$ m8 w/ @& q* D2 p! O# j
.id = 1,1 y8 T9 s B: E2 s, f
.dev = {+ _- J" | J- u
.platform_data = &da850_evm_tl_leds_pdata,* W8 e, n s/ ?; j
.release = led_dev_release,) ^" {+ q5 f* D$ w( T4 N
}" e& }5 F l. F5 N" ^( |
};& z% o6 \% g4 H- ~; B5 k/ Z, `) e' w
( c3 e. t6 _7 l0 m/ X% t. v6 sstatic int __init led_platform_init(void)
: {1 T( b+ [" d{* M4 k. L* B7 f o0 T; t3 x- R' I
int ret;
1 ~2 |* }- U. q4 R3 z- p#if 0/ r; V& S: z9 v! ]( X4 B& V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 Y- [% t9 E& \3 Z
if (ret)
+ z. m, R& @0 H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; H7 l! g/ F! r( D# j4 P "%d\n", ret);
$ s" I$ g g, c' o* M% z#endif. O! | L3 G% |/ t* Y
ret = platform_device_register(&da850_evm_tl_leds_device);% _$ x9 K. h6 G6 T X) h" P
if (ret)/ F, J. ]! I+ j! n, |
pr_warning("Could not register som GPIO expander LEDS");
) B; d' v1 k# W- Q" K: R else
3 g& q# Y+ F# z8 l printk(KERN_INFO "LED register sucessful!\n");2 d6 K" U! \2 g9 v; X) B
! I7 z/ B& U! M; k$ c
return ret;
9 y4 W! `" s7 @, }- \}+ {5 w" C$ d0 O5 L# q
/ K( i/ f" g0 S" a0 z2 Mstatic void __exit led_platform_exit(void)
6 q# S* J* x' E7 S2 `: f1 E{
% X, y7 O. [) M& k H$ n platform_device_unregister(&da850_evm_tl_leds_device);
/ F- O( Q% t% |) ~
, r( z/ c% W7 r+ p, Q printk(KERN_INFO "LED unregister!\n");
* f8 X- v: d. L+ U$ F/ R% v}
/ g+ P: |5 Z# f! `8 \- O1 W" v4 s S/ f1 R/ U/ d
module_init(led_platform_init);
% X8 ?+ G# C! p$ H$ v0 fmodule_exit(led_platform_exit);
$ z; U, r, j$ h+ ~, L. j8 O2 s0 J% M0 I8 o
MODULE_DESCRIPTION("Led platform driver");
P1 m! A- y% T2 `3 PMODULE_AUTHOR("Tronlong");
; {# s2 v: X; M# qMODULE_LICENSE("GPL");
1 q4 M. h7 S0 w3 a7 L0 h* }" w+ k8 k7 N; S
|
|