|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; `! W0 n0 Q" M- y( ^
#include <linux/init.h>
4 X% U( w3 P, ^ I' T: p#include <linux/module.h>
, p. ]9 v( {" E( @#include <linux/kernel.h>
* C# J2 Y( C. ]2 E#include <linux/types.h>
. f* T& P( G% d F$ a#include <linux/gpio.h>& s4 d6 e6 r2 e3 r% T
#include <linux/leds.h>
; N3 @# P' K# Q0 T1 y% T#include <linux/platform_device.h>7 N% W5 v; k* B) j- z* Q2 i
" I! |. w& w0 G9 E' m#include <asm/mach-types.h>
: k" Y) E9 l; `. o9 K#include <asm/mach/arch.h>6 e4 z: a2 r/ X
#include <mach/da8xx.h>1 x% O O* ?) m6 y' r- s
#include <mach/mux.h>
8 y. z3 c' o9 k/ a- l" i/ c( f( `! [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) H* r* ^. d# i- e6 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) i! K. Y+ L, V4 N' b2 Q+ V- f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. T+ s6 ~5 {" [$ R* _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 a& z* U* ^) h4 n3 W- t8 ~' m8 Z
& _. f+ F$ T- f0 Z; K. f# |3 u/* assign the tl som board LED-GPIOs*/5 H& Y. X4 x$ f4 l
static const short da850_evm_tl_user_led_pins[] = {. Z Y' i o, \) @+ }( d$ T
/* These pins are definition at <mach/mux.h> file */
) b2 w. l" O& }. r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ {6 V# G! V/ d! k( C) j1 _
-1# w% o2 V2 c1 [
};
6 c7 g+ T+ A- R' u5 e a5 Q' h( Q! V) s
static struct gpio_led da850_evm_tl_leds[] = {) h0 C$ }3 f K, v
{$ X+ g4 j1 m* J# o7 Y
.active_low = 0,, y4 \1 z: w/ v, A2 _( v
.gpio = DA850_USER_LED0," T, K& Z8 h: L4 L& i
.name = "user_led0",
! @- G" \/ W) B0 p5 l& X" e& g .default_trigger = "default-on",
; T5 O0 |: v! u# l3 F0 x' c },
5 M3 N8 C* A9 F/ W1 ` {
# l0 Z9 [* S! @/ n# \- B) j .active_low = 0,( b/ K5 R: s% ?* j
.gpio = DA850_USER_LED1,
8 t6 F6 R& m3 l& [# j .name = "user_led1",
4 S# m" t3 ~0 b! B. Y* `5 ?; A7 G .default_trigger = "default-on",
' a* M! N* v9 o' o. S' J0 Y },
/ {+ C5 T- v3 n; X; O: Y+ x% F! K {: ?7 B/ t5 G7 _! H' f
.active_low = 0,
6 ]$ m3 M. J9 p+ q+ k8 [ D .gpio = DA850_USER_LED2,' I, x" l% |/ q; Z
.name = "user_led2",6 D- u. l; H+ @
.default_trigger = "default-on",( N7 Q4 w- J% j" {: M
},8 ~3 i8 i' g% N' i5 W3 `
{5 U' S% }+ i8 q% D5 J+ ]% s
.active_low = 0,6 ^( l, B' f2 T, b$ H( `' t/ K$ B
.gpio = DA850_USER_LED3," x9 P. I0 G+ p" V2 B- x8 N+ `
.name = "user_led3",
! Q8 {7 Y6 }" i. C9 H .default_trigger = "default-on",
0 Y/ Y' D4 M- E# E( Y5 B },2 J5 m% F) M/ _; I
};( q2 a( e. y$ |' R7 G8 v. w
) K- z# k( O1 T- d4 U$ e: M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: s5 P, |2 C# G+ {) O4 S3 Y, |+ v! @ .leds = da850_evm_tl_leds,
( h, ~. R X+ q, _7 J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- X# g' U( _3 D2 p5 K- L# L5 i};! I8 V2 S: e/ |9 { E
$ m8 {& O/ M4 q' Y
static void led_dev_release(struct device *dev)1 A- ^& m! o" Y
{$ N8 ]( h/ J3 C0 d7 l( M
};
! q5 H2 a2 f: [+ X2 l5 @; n: P5 K6 G3 }& H# d+ a
static struct platform_device da850_evm_tl_leds_device = {8 x& k9 d: D) x# a1 H' d
.name = "leds-gpio",/ H# v& v$ ~. T8 ]# R
.id = 1,/ ?' n/ C3 g0 O# {( u2 L- e0 ^3 x
.dev = {' w k! u7 Q p
.platform_data = &da850_evm_tl_leds_pdata,. P0 c7 @- {& q# N& w
.release = led_dev_release,
1 r3 ~- N8 ?4 d7 i+ [/ K }
3 k9 K# {$ ~# k, L2 h- R};
, I L+ ?4 b* E& Z" q9 K+ e% [0 {3 l$ a2 Z
static int __init led_platform_init(void)# M8 `& P% P7 G( h2 E1 p: s+ |
{
4 u8 \$ p |- t1 @# P! T int ret;
8 f B7 ~; ^& H. {0 R' V+ `#if 0$ Z- E# Y' ]. N/ Q% X; e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& R* a& d. V* ?
if (ret)# V4 P0 a p3 J- b/ }2 f9 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" w6 b5 u L- O9 h
"%d\n", ret);
3 ^( w: u3 T' j#endif; H, i0 X: O) ?% V4 ^! Q6 u" N: U
ret = platform_device_register(&da850_evm_tl_leds_device);6 {+ E% {+ C4 F8 e# k( i h, x( w
if (ret): S2 S7 F( ?+ `
pr_warning("Could not register som GPIO expander LEDS");
/ q' J1 R$ J8 E6 ~$ p0 L1 L else
& h% @+ d4 f9 W& f( w0 i$ z printk(KERN_INFO "LED register sucessful!\n");, A. O& F* }1 Z+ h
. u1 x0 B0 z9 H8 F" }& G$ u
return ret;2 Y* F! `* n2 m$ ^+ G- \* t
}9 G- O4 d" _1 ?. t" k
0 @# o* R9 _# p' S6 ^" m- Q7 Estatic void __exit led_platform_exit(void)
* G7 u$ Q1 }. i8 p) }$ v$ |{
# a+ A/ V5 T$ R7 s7 c0 U platform_device_unregister(&da850_evm_tl_leds_device);
+ w/ U1 a$ `0 x2 D/ F. g3 v$ ?' P' L3 t
printk(KERN_INFO "LED unregister!\n");: q; W* r6 C: h- G2 m; g& O
}
9 V1 U* h# x1 ]& N
/ ?' v! K7 D8 X5 W3 Smodule_init(led_platform_init);
) J% q% S1 r) Z* _2 @3 Pmodule_exit(led_platform_exit);: F! _, u1 q4 x, _4 n
3 z2 e6 W' ?5 S3 F2 S$ G' dMODULE_DESCRIPTION("Led platform driver");5 X3 u. T6 R" u
MODULE_AUTHOR("Tronlong");
' ]. ]8 S0 M$ Q6 y( E+ nMODULE_LICENSE("GPL");
* f J$ A( s$ F& f
5 Q- _& l# L9 N1 \' c7 h8 {4 X, e |
|