|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 f7 E9 r( Y4 L( B- M7 k4 r
#include <linux/init.h>9 T6 ?& S7 C3 V8 F$ r7 v
#include <linux/module.h>& O. ]+ d4 W7 i% G8 S
#include <linux/kernel.h>0 ]1 i5 B2 U& O- Q0 W2 C( Y& k. {; j
#include <linux/types.h>
, S$ g" h1 q. G4 u% X. m: d#include <linux/gpio.h>2 Q- w; s6 T4 Q2 ^% E' y7 Q' q4 {" H3 J
#include <linux/leds.h>7 P( m/ C- a- W" {( |, A
#include <linux/platform_device.h>
8 S0 M: b7 o$ R% U* I
- N0 y% q7 r8 Q- W6 s, P#include <asm/mach-types.h>- b6 o, B# v9 E5 Z6 c
#include <asm/mach/arch.h>+ F2 \% j2 T. _' D! I x3 G1 f/ n
#include <mach/da8xx.h>7 ]' `) A+ B0 A8 O$ w5 t% i+ q
#include <mach/mux.h>. ^7 o5 i. g" i, D L
& W& p j6 ~& `: x% ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! J4 O/ x6 O3 y7 }9 k8 x- c" b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ g; Q! Z( {8 g) N3 n1 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 Q. j6 G% m- B5 }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 H6 a+ O4 i/ h5 o
; l# s/ ` F7 l/* assign the tl som board LED-GPIOs*/; {$ N% D I0 t/ ^) E: Z0 ~, t
static const short da850_evm_tl_user_led_pins[] = {
) r0 i# |3 U" Q3 O /* These pins are definition at <mach/mux.h> file */
, |, E# v0 ^4 u* H" }% `5 z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 Z/ _/ p% K* u- ?# @8 I8 | -1. B- n- j8 w9 ? t" {& Y2 {8 Q" l% c5 z
};
: K- P& B2 j8 G: d0 J
3 u7 z0 W5 `3 K, ^static struct gpio_led da850_evm_tl_leds[] = {
7 \3 H# t/ z% v" U5 |4 U {
# i; S$ z, b% |# Q$ z .active_low = 0,: P; l$ Z4 d ]/ z
.gpio = DA850_USER_LED0,5 G0 ~9 X/ Z% _- L/ [1 h) s
.name = "user_led0",2 z; ~0 Y" a1 ]1 H
.default_trigger = "default-on",
4 p! H1 b8 t8 H- \ },
! h2 p5 u+ y8 { {- }+ [4 c7 S2 W4 y8 @3 S$ i1 i
.active_low = 0,
) n5 A. W6 b9 J- @0 M .gpio = DA850_USER_LED1, C3 P5 y7 d! q7 A: f
.name = "user_led1",# S b7 p8 ?- ~
.default_trigger = "default-on",6 o, w, v/ o0 u( y
},* o: y: B8 T z! ^* v% ^9 ]/ x
{8 ^9 v. n. i/ c* a, g
.active_low = 0,$ K; h1 Q- ~. J, l2 u
.gpio = DA850_USER_LED2,
. A' D' F6 x: `% K p# o .name = "user_led2",, a9 f% s2 k# M( e3 j2 C4 D: @ N9 N
.default_trigger = "default-on",
- ?7 l- ]8 J q }," g7 k7 @3 M+ a8 X6 K+ X8 ~
{- h. v( ]- T% T
.active_low = 0,
1 S& a6 D+ ?4 j- d! r3 N# k .gpio = DA850_USER_LED3,
1 O1 }+ [: }1 l- K" U( ` .name = "user_led3",, w: {3 C/ \2 F0 ?, d1 l
.default_trigger = "default-on",
5 M+ I1 j r5 W: |, w6 [/ q },
) q7 P6 N+ A4 b, T7 ~7 q* |# g};
; K- E7 K# B+ m; T8 K: {3 ?% ^7 d* O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 R- e0 p! N% `) u6 ^
.leds = da850_evm_tl_leds,
/ |& b5 X1 g% J! t% H9 }3 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 @6 Q& N# u+ k8 O4 m& w5 ^4 @};
, X8 c) N, h1 V0 O+ a+ g5 m
$ J6 g" i0 K! a4 o7 Istatic void led_dev_release(struct device *dev)
9 W% O% E3 ~* R$ K2 b2 q{
, _5 P; ] G# w9 h};4 x" U4 q/ u- M- }. T {1 T! x2 J
/ n2 X/ \, c2 @5 I$ b$ o# cstatic struct platform_device da850_evm_tl_leds_device = {
& A) x: G6 T1 L7 b .name = "leds-gpio", j% }+ k& ~3 }' l3 n9 i" E# Q
.id = 1,
& a7 P, A0 O G _" f' f" u! J .dev = {
' r4 [) r- k( M0 e .platform_data = &da850_evm_tl_leds_pdata,9 }! M4 m, e3 c$ B4 v$ }- o9 t0 T
.release = led_dev_release,
3 Y, o- r* h0 Q( c* S }
2 k! ]$ Q& i: q2 d};
6 j# a% R% e Q& Q7 Z# L4 E
4 w& R. [; J- Dstatic int __init led_platform_init(void)
# B' V8 Y2 ^ }$ u{3 V" X2 N! T0 M; L
int ret;( J4 k: R% A$ B1 J) y1 H P) e2 y
#if 0
& H: W- `* c/ C% M& u' P& Y6 f& Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 K4 U: y5 C( x4 w/ T6 R
if (ret)" m8 l% L1 H" p6 U- `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ ~: {) G' ?, T: `- K% c "%d\n", ret);1 d' n5 ~ Y3 Q; f; ?' D: q7 J
#endif
& I: O1 G; T3 t F; d N ret = platform_device_register(&da850_evm_tl_leds_device);
) o% `" U2 q: z& S if (ret)4 E) F, A. H/ D1 N g% P
pr_warning("Could not register som GPIO expander LEDS");5 s% @+ {' w' j! S6 V- {# E# z+ c- U
else) ^- [7 M* Y7 E# a( p. I3 t
printk(KERN_INFO "LED register sucessful!\n");
! W$ P1 C0 c! O2 {) ~$ W) t+ ]) g4 ?# Z4 @% }
return ret;" b. A/ ^$ ?& o/ T
}
9 v" j3 k& t8 m4 m$ C( h+ E8 H, m0 \3 v% `
static void __exit led_platform_exit(void)
( Z& l) d; S0 v) e) l4 p) _: T{
* K t) z. S7 I- P$ w- w0 }, ? platform_device_unregister(&da850_evm_tl_leds_device);
. c2 {. J9 u# G. Z- d
* ?$ C% K- {2 l; Q! d& ?+ P printk(KERN_INFO "LED unregister!\n");
4 A& N; G$ ?* a/ Q/ \9 V}
" @6 c- ~5 b# t& D
2 i9 E. O' I6 I2 w. imodule_init(led_platform_init);
& @) Q4 O! b/ E* b& \module_exit(led_platform_exit);
+ D" P( s, g& N0 g6 z2 H2 v7 N
; b* x# t) g' ~$ YMODULE_DESCRIPTION("Led platform driver");
) {" |4 p4 s% V# p* P3 d* TMODULE_AUTHOR("Tronlong");
) V9 v8 @7 ~7 s. aMODULE_LICENSE("GPL"); q( c7 P3 o+ W
, \( B" q8 T( s
|
|