|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 {6 F+ f( [) [' {
#include <linux/init.h>
9 S; A" j8 X* S$ e#include <linux/module.h>
+ {" Z7 d! t- I5 E0 ~' ?8 a#include <linux/kernel.h># F9 R6 d5 x9 V2 ^
#include <linux/types.h>
, _8 E6 {, K" r; E* t) T0 w; A) `#include <linux/gpio.h>
7 L3 r# T' J. `3 d, l8 P" B* v#include <linux/leds.h>
1 r8 i9 d" o; C" P#include <linux/platform_device.h>
4 v5 O9 r) U7 Q% o! _& a% b
- ?% G6 J7 o( S; c#include <asm/mach-types.h>
/ I: I$ b; Z" f* c5 o! d0 X#include <asm/mach/arch.h>/ ]; r: {8 o( g
#include <mach/da8xx.h>
9 l& \5 v) W8 E4 ~#include <mach/mux.h>, ?( ^, @3 B2 m0 C, f% B
! ?( y$ \5 Y6 O) x) Q5 } R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( m8 U4 |1 V' |. w( ]( T/ N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 l! R4 `' L- Z( w+ y" s8 i: l( Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, Y* ^. @: p D) P w! {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* F8 J( ~1 K+ ?3 }
* p' G$ M* t2 Q! r
/* assign the tl som board LED-GPIOs*/' U4 p; T0 m$ h! a2 R0 B
static const short da850_evm_tl_user_led_pins[] = {
# d1 i0 \8 s3 k6 T' q /* These pins are definition at <mach/mux.h> file */: Y2 T" r) O2 ^( d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 t- u8 f" o: o; ^1 Y+ U2 r# U -1$ a5 F$ l* r% ^+ J. a
};
+ n! @5 g# j( M
' r8 |) I3 D% U+ [; Qstatic struct gpio_led da850_evm_tl_leds[] = {/ w# i# \6 K* p9 D! |0 S- j
{8 k% \* N2 h( J1 }
.active_low = 0,: ~5 c! O9 S9 z5 p7 N7 Y! s
.gpio = DA850_USER_LED0,9 A2 R8 E* L- D
.name = "user_led0",( Q6 t! S4 s: B+ x) V
.default_trigger = "default-on",2 x$ s: w0 T# ?) ~% m! q
},) C+ Q3 r8 O$ u
{" T' I0 z; a0 ~! |& M
.active_low = 0,
, A3 }+ [1 _* }& C5 U .gpio = DA850_USER_LED1,
6 w. s7 `9 z' H" w* Y1 T1 u7 B .name = "user_led1",
: e1 ~$ l$ a9 w( j; [ .default_trigger = "default-on",
' f9 A4 q& \2 Z0 o7 X) h; a3 W },
]* W6 S5 H; G* f% o! u/ ^6 ` {
+ v% `2 ]1 W! g! Z* Y( t8 \ .active_low = 0,
0 s; t: f" e$ b .gpio = DA850_USER_LED2,' n' v9 H2 O" z: ?- t& \. S, P* c$ o
.name = "user_led2",
3 c8 y7 x$ z! _. Y7 z .default_trigger = "default-on",
3 w5 ?3 E2 Q# ? C( E# h h },/ S X" B ?0 z m
{+ c' g. {) w) ]* W
.active_low = 0,
# [+ s# V1 \8 E, a9 _! _ .gpio = DA850_USER_LED3,
3 _( p! a2 L: Q- @/ L4 i8 b .name = "user_led3",
( u+ T' `0 D: |. A$ G4 D% @ .default_trigger = "default-on",8 {7 T1 k W5 L! G7 k" l' `
},
( I# x* D* O, J- U% Y};
' F( v, P7 M, j5 G/ R. [% o7 s G2 ~3 V$ C. _: c/ @ t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 o% O7 N% Z n ~% g, x .leds = da850_evm_tl_leds,
9 @% t( ]( k9 v" { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& H, f- Z4 {1 E& k. S# f+ Q
};
" c% l% Q q' o0 w: _
! V/ O/ X F- j. W r$ D7 T7 R3 n; sstatic void led_dev_release(struct device *dev): |5 L( C+ L3 E9 ~4 c' p4 O/ ~
{
4 v& L6 {- C/ @};2 J. h5 G7 s# K
6 U( S* X" A+ `( p% y8 {
static struct platform_device da850_evm_tl_leds_device = {
/ {/ g" |- j: |7 A .name = "leds-gpio",
0 v* ]8 `; K f .id = 1,. H; {. h" c) c4 X) i3 [
.dev = {
6 {8 e( k) a4 n C& X7 \9 s# z .platform_data = &da850_evm_tl_leds_pdata,
4 E' N& g2 b' j, Q9 o, J .release = led_dev_release,
0 ?: @3 m0 \, O7 R: O: P }
- x' V' L/ z- F4 P( X};
0 N8 F; D, [- D* Y2 T0 y) f- M1 z' M% ~. G) U
static int __init led_platform_init(void)# o& j: h( @5 C2 A
{
+ J2 z6 ^7 p; i7 @1 f int ret;# K& m& q( ^* e2 j& ]8 g
#if 0% B# h/ v5 ~- s/ i# x. f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 e- z! v! W& s
if (ret). ~$ j( _% G' P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- @+ P) F% X! q& C; `
"%d\n", ret);8 G' r# H) v" }7 y y
#endif7 C/ e. K" z1 U' f7 c
ret = platform_device_register(&da850_evm_tl_leds_device);+ j1 J; J. Z5 n; s6 y6 d
if (ret)
& y7 Y5 d+ X# u" @$ N' H pr_warning("Could not register som GPIO expander LEDS");/ y* y$ A% ~* X7 F" Z/ x1 I
else- @ \& D! L$ v3 q+ e5 I! V% n; z
printk(KERN_INFO "LED register sucessful!\n");* Q8 E0 e* `* F
) ^0 O3 r6 i1 v6 e$ N6 H return ret;( G w( x1 S. y: K
}) S% d* v9 L! ^5 e. p( k
' C% `: K* S& ]% R$ p# Z5 n$ B
static void __exit led_platform_exit(void)
" j9 V6 j! q7 C/ o' @{
- v( z" h6 O& C platform_device_unregister(&da850_evm_tl_leds_device);
1 C* z; R- d2 e" K: l. i
+ C7 A" x6 r# G: d( [ printk(KERN_INFO "LED unregister!\n");' P ^0 ~' o9 R" {9 a5 N: m& k
}
+ D) T$ V- {; k) {5 e) m
. {; X9 q6 A0 v% B% qmodule_init(led_platform_init);
: ?' Y; \0 S7 V( V* P1 B- _module_exit(led_platform_exit);
% ?0 N5 T' b; X3 ~; ~' ?1 W3 c7 B. E) T, A3 Y# R2 O4 I
MODULE_DESCRIPTION("Led platform driver");1 h/ E$ H( e* d8 P
MODULE_AUTHOR("Tronlong"); J+ E( w# \% m9 m
MODULE_LICENSE("GPL");; Z( P$ E8 O9 f# @1 y9 u6 [; B2 @
& V" W& l# J/ N3 {7 n
|
|