|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 l. T* O$ `+ S4 ~( ] i) q& x#include <linux/init.h>+ ?9 Q: e* z# Q! W0 p
#include <linux/module.h>
. a& y' @) o0 f: t( p#include <linux/kernel.h>6 N" M6 w `8 B, C) y& s& B
#include <linux/types.h>) J- H3 W; }/ Q/ V. c& v. f4 t
#include <linux/gpio.h># t: d/ g' j" V5 u
#include <linux/leds.h>( T5 M v9 m7 E1 q2 n% r
#include <linux/platform_device.h>; E% ~) d7 X s Q
- j1 T3 j" L0 n) [: V) ]* _! y+ V
#include <asm/mach-types.h>
, h6 N5 W5 ~7 v#include <asm/mach/arch.h>
# V1 L3 }: Q! {#include <mach/da8xx.h>
$ G. z% g6 E- h, }4 y#include <mach/mux.h>
* }7 j9 [; v) w) O; N0 I% {! c& t Q! Q- }3 F0 d
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 H$ ]. W* k& S% ^, m) _* J6 A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 [! o) X1 X! c: o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- A1 V+ J# w* o% p1 Q |+ N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 d2 u. d: d! _6 d$ k3 _
& f# E- j! C P, m$ A3 j/* assign the tl som board LED-GPIOs*/1 Y7 x) |4 c. W$ `' V
static const short da850_evm_tl_user_led_pins[] = {
, L! S+ P, X, h: W! ~ /* These pins are definition at <mach/mux.h> file */
0 [! P/ G3 {4 ?/ f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) g/ O" H" ?# I9 Q& [* ] D
-1
7 I6 Q9 Q5 I5 I; p};
+ _: v: g2 e' W& P. `% S( z2 Q4 x) ~9 _; G" W" V% ?1 x
static struct gpio_led da850_evm_tl_leds[] = {, A0 U) ?+ L& v# D/ P, m
{. P0 M2 N* G% P# D R
.active_low = 0,
% ?1 j7 F& z; p, Y* C" S .gpio = DA850_USER_LED0,
: _! Q6 V9 S/ w# U .name = "user_led0",
' Y7 r! j9 V7 ^' d) b Z" a .default_trigger = "default-on",% g7 `, \8 Y" f \% k/ Z
},# a4 `( p9 C5 t$ r3 e6 j& P, }
{
7 Q0 Q6 N& `0 ]5 S7 s4 d! Z# E2 b .active_low = 0,
: m/ [5 P$ q7 ~2 A: I .gpio = DA850_USER_LED1,
6 }4 R( b) H6 U+ L0 m .name = "user_led1",
7 v. H. D: H4 D& g .default_trigger = "default-on",) b# |' \) R# K9 j
},
: S# M: z, o4 w" t8 s {5 h+ K; V" h% @/ [$ v
.active_low = 0,# A+ p5 L" r, U* P( s/ ~
.gpio = DA850_USER_LED2,
0 x' `' E; d# H .name = "user_led2",
% l C4 @% e# m9 Q; J2 m .default_trigger = "default-on",
- h) `4 Y* s& h; i: R, ] },
/ Q' @4 S& m. @4 i$ h( K {
) Y$ O+ ?# ^' P .active_low = 0,4 p' y9 V K& Z) z2 D: O6 s
.gpio = DA850_USER_LED3,
7 B1 o1 ~+ Y4 X( i' c .name = "user_led3",- G, h3 V4 Z8 W- A; @6 N+ a
.default_trigger = "default-on",( B+ T! V4 Q: k; }/ g5 q- u, y% \
},3 y! v$ j1 ^: M% j, `6 Y
};4 ?( ] n, ~# m
$ r8 [1 y/ W9 x4 F% s( ~7 i. q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! x( e, T) G1 H T, u: @ .leds = da850_evm_tl_leds,7 @" B! h }, h2 u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% N! ~: }! p S7 J, X p};
8 X5 Q& R4 j8 ]$ ~" e+ W: ~1 _( Z3 E z# ]% j' e1 z/ |, ^
static void led_dev_release(struct device *dev)8 J1 `5 C( B& `1 C0 V
{- T( [% O1 }4 Z& p L' }: ?! D, _
};% n# W! @$ Q( L6 D
5 V8 n+ i) Z! J8 [; T) _
static struct platform_device da850_evm_tl_leds_device = {: Z! G6 `: I( C' H
.name = "leds-gpio",' z9 |% P$ r8 S: N8 a% B
.id = 1,2 F, A. ?; K1 P
.dev = {
E5 b2 M7 M2 O7 u .platform_data = &da850_evm_tl_leds_pdata," H6 o! N2 ^# C/ t7 _* R" \- K
.release = led_dev_release,
2 v2 P N( j, ]9 g' P8 c8 t6 c1 V6 q }
. z, g* S8 Y2 I# w};
: U+ [% ?9 k0 ], C! h6 I6 O3 n3 G. N' T: u7 \" A7 q
static int __init led_platform_init(void)
4 a% e: N8 J2 T# y' S" M{
# o! }4 v c' f g2 V# V int ret;2 A, Q! g. L" \/ g
#if 0
2 x: y5 f U$ m8 n o% R) u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 g9 j' d( ~% n3 e7 `6 r$ S& y0 N- I if (ret)
{2 _) r2 F" q4 ]; q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) W, H, J+ A" I% {" H "%d\n", ret);
) h0 r4 a2 L" }& W8 {% w' \- A$ E d#endif
3 G/ c* t4 `4 g7 H5 g8 y ret = platform_device_register(&da850_evm_tl_leds_device);
# k7 X M6 Q9 ^; k9 a6 `( r if (ret)4 b6 B8 X, d1 Z; b( X
pr_warning("Could not register som GPIO expander LEDS");. d4 ] }2 Z5 k! L
else5 b$ @/ l; D; z/ _) M! K! G
printk(KERN_INFO "LED register sucessful!\n");& F# B! M! y& S% O R
1 f9 Z. g0 J1 o9 g5 N) K# C% x& K, R return ret;
* W5 a8 F# W9 s& q8 w' D; H; S}7 {5 r9 C4 Z3 ^: J8 J$ Y9 x1 f5 N8 d
7 j- R* n# [& y9 {9 } }8 V$ w
static void __exit led_platform_exit(void)
- c2 y6 ^! N7 a{& X1 Q# i. M9 i4 ^( p# G
platform_device_unregister(&da850_evm_tl_leds_device);; I; J& N' b. H* c9 L/ z4 y
$ _! H( c8 L1 {
printk(KERN_INFO "LED unregister!\n");( r' Y& q- D' S. f$ O
}% N$ _3 |0 E z% E, |- n! I
( j) s& y. G6 z6 L7 gmodule_init(led_platform_init);( M' Q4 x( ]. l2 Y8 Z# H
module_exit(led_platform_exit);
& W: _7 Z/ Y6 V' z" N
" W. N: O; |/ |' u( q& PMODULE_DESCRIPTION("Led platform driver");
+ c" Y( _3 b/ ?/ g9 v: MMODULE_AUTHOR("Tronlong");
! S/ U$ f) _& d" U* o; k$ j9 l- J2 VMODULE_LICENSE("GPL");/ \; M# [2 @) ]" b P4 d
+ h; y3 k5 d; t4 P% Q# a. q |
|