|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) O; S$ T7 ~* Y#include <linux/init.h>
& w8 R) q2 w; R8 O+ }9 L#include <linux/module.h>
1 d! B+ ]$ b+ z" p0 ]0 U% E3 E. o#include <linux/kernel.h>
( O2 o8 k" y3 P' ]5 A7 y8 H#include <linux/types.h>7 `# C5 B: W7 x4 ?+ [2 U
#include <linux/gpio.h>
( r6 B6 z O5 z#include <linux/leds.h>
1 @) g8 M; X4 V5 O. m6 ^. }3 J ?; x#include <linux/platform_device.h># r+ N3 ~* r" h+ X. l
: i* W% Z3 k+ e+ m6 k
#include <asm/mach-types.h>0 g$ g! ]+ N) J
#include <asm/mach/arch.h>
8 y' p( F" h8 h0 P- s! X#include <mach/da8xx.h>
) Q' \' ]' _, a o. x' P#include <mach/mux.h>3 k( ^( L o: q! C: e' M
d5 S. z! F" k4 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 t! _$ x2 Y+ e0 }' q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 Q$ C8 H8 O( x2 g, D#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), m' w9 Q$ N, `; O& F; `& W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 C7 M) _0 Y# i7 r. V& i/ V
: V# S o* w. M3 w x- A% J: X/* assign the tl som board LED-GPIOs*/
7 V8 C) @' b1 Zstatic const short da850_evm_tl_user_led_pins[] = {
/ c) M Q% P/ k /* These pins are definition at <mach/mux.h> file */3 e0 E- S6 W- j7 _; B$ S! d& d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 W6 d2 \. o. A: ]& | -13 ^8 \/ Y* `/ J L7 w
};
6 J# u7 ]! R3 o s7 \1 Y8 e9 _- b) L1 h \' {8 a3 _+ j
static struct gpio_led da850_evm_tl_leds[] = {
8 u& v% N. ?, e3 N5 F {+ r8 @7 x- k5 p9 U# u
.active_low = 0,
1 ~; s* t! R( ^ .gpio = DA850_USER_LED0," y9 l2 s. l( u8 k7 @1 w) W
.name = "user_led0",. v7 K5 `( v& R3 M2 I8 c8 b8 G
.default_trigger = "default-on",
5 J. L* J% e" d* [' R, C: M },
$ e2 A" m7 ?+ G- Q! E3 P8 S( K {5 t* N. I) F, K. ^3 e( G
.active_low = 0,
# ~. G" E R% \. B2 C. s7 O .gpio = DA850_USER_LED1,) P2 C5 ?+ ], m0 d" C" f; d* R( ~; s
.name = "user_led1",
4 D* I3 T% j( E& u, o .default_trigger = "default-on",
' X0 m, C v( W" @, h6 t+ }9 T },6 U# a+ |) C1 ]
{' x$ {! e6 r# \% s! T
.active_low = 0, ^/ c& H2 F1 n4 {: q, q- J$ k
.gpio = DA850_USER_LED2,0 d/ r% V/ T2 I. o) [
.name = "user_led2",
. P6 |6 W; T' j0 O3 y- `. c* A( O# @5 o9 q .default_trigger = "default-on",$ C6 X& v( A9 B
},! }% L$ P2 t+ p0 ~- ^
{
+ y7 s! V' y, E5 q" A, d .active_low = 0,8 n4 A* b' {. _/ R/ [
.gpio = DA850_USER_LED3,
8 V' t1 Y5 a7 z .name = "user_led3",
( l9 d; n5 K4 |8 C* T" I2 L .default_trigger = "default-on",6 B7 ^' @! a3 L" Z
},
/ i& f4 F, w9 c" E};
* _- v7 g7 m5 s+ E. o9 h, v1 e4 @, W0 B/ d3 y$ [ K0 C* v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 l9 S; }2 V; \$ r* j .leds = da850_evm_tl_leds,1 a& \. Y2 D' [& F9 w, k+ b! N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 Q O) d- g" z, G& ?0 D, P y' i
};- v! |2 N/ D! \' C2 ]0 n1 {
5 D8 E) J: W$ Y6 v! u) Y& A7 Wstatic void led_dev_release(struct device *dev)
( I3 w, s' ?# w, K{
+ R% t( n5 u7 x$ p q};
5 n W- w! ?8 }. R1 y! |/ z- N3 m
7 b% W7 T: x5 O2 d0 Ystatic struct platform_device da850_evm_tl_leds_device = {
0 D: F* l$ C4 ?3 K .name = "leds-gpio",
, x5 n# K' D$ q. j* H; P( ~ .id = 1,! D5 p8 a5 b; ?
.dev = {5 |2 y: D. b+ t- P4 N6 m- _0 F
.platform_data = &da850_evm_tl_leds_pdata,* Y! `' k# r4 u9 Q2 Q
.release = led_dev_release,! [0 |0 j8 X! j3 C$ z* v
}/ U: I: x) P- V. ^& D6 M' m: E
};3 p$ J B4 Q# E# G8 C0 z
4 |$ D5 b7 ~( W6 ]0 p" ` F
static int __init led_platform_init(void)% T3 ~ g% O+ n
{
4 i' S) m. y& g; R' Q7 ? int ret;" O3 r' I7 Z4 Z1 c2 ]# Z
#if 0
0 ]& N) O7 f* e2 W3 d: E' y" u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; D: U2 C6 F& ^3 U
if (ret)) j1 R! W$ ^% \/ g( c! E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ ?* G+ V) W5 `
"%d\n", ret);2 j! n! p4 s7 v! D0 X
#endif
8 n$ Y$ ]) |' A" S% L8 i ret = platform_device_register(&da850_evm_tl_leds_device);
+ a# k" [$ I& a4 J- K2 B: ?# r, l if (ret)
# R* e# H7 O! _. ]# f: ? pr_warning("Could not register som GPIO expander LEDS");" d" m# o, X4 {) G7 R! j, f. O
else
1 X: D0 p- a+ ~8 i4 K& a7 p printk(KERN_INFO "LED register sucessful!\n");* F( g/ c( t2 v, y* b4 ~ K
) ~7 ~9 L5 ?! _6 Y' a return ret;- N* C- u" E8 p2 O5 l
}6 M u5 u, W1 i( o. R
5 Z$ j' ?' D& pstatic void __exit led_platform_exit(void)0 r8 o% i! L" x4 H5 Q$ O. b
{- j7 J O+ b! N0 _
platform_device_unregister(&da850_evm_tl_leds_device);# d% [2 B3 P( K( f9 ` m
0 b* \: V1 _. T printk(KERN_INFO "LED unregister!\n");, N0 ^+ w" N" H: [, J
}5 }9 `' A9 Z& s# @
1 a+ w! Q4 ^: F; {' _module_init(led_platform_init);
9 F4 t/ J$ J3 f% V- M' _' A- xmodule_exit(led_platform_exit);
6 q; T3 f z$ r* }. W% g# a# F& I: Y, Z5 ?" z1 {# u
MODULE_DESCRIPTION("Led platform driver");
2 T8 C" S# f# g* `2 B$ dMODULE_AUTHOR("Tronlong");& e, E' D! a0 m7 z! `
MODULE_LICENSE("GPL");
1 G) X3 m8 M9 L1 j/ M( R3 g# [, z$ w* I
|
|