|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 }. e0 |/ Q1 e1 b9 L#include <linux/init.h>
$ Z& |& e+ t3 w0 d% T' J, |" N# N#include <linux/module.h>8 M5 Y% N8 ?* t* e8 l! o2 P
#include <linux/kernel.h>% t5 N2 _+ R6 f; k
#include <linux/types.h>
6 G0 V( { _: F$ S l" T: j#include <linux/gpio.h>
8 y+ t' _# S8 N! z#include <linux/leds.h>: o, D& m n1 }) D( r: K
#include <linux/platform_device.h>: ]& `& x- n4 X9 l
; j# D4 I9 ^6 U. x: ?
#include <asm/mach-types.h>
+ B" I! q; w& z! W1 {' e8 {$ P#include <asm/mach/arch.h>) c. m) _0 P3 D$ ~& h) K% u
#include <mach/da8xx.h>' i: \; Z9 H7 }! y6 h3 `( f c
#include <mach/mux.h>* x- x- W. Z3 ?$ o! Y
/ Y5 v2 B& }* ~3 P# R! M, Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 c. \0 _% l$ W& r" h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). r" W4 H# Y1 b: h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" a1 l% D- E7 P2 m! o7 W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 T4 V, f( [: a; ?1 f9 R# w/ V
! j: P4 I3 \8 Q. q5 v) Y8 _( j' ?5 H/* assign the tl som board LED-GPIOs*/' n6 n$ F+ k& ^' P+ m
static const short da850_evm_tl_user_led_pins[] = {
+ k6 T- M! P* r5 T/ K+ F! A /* These pins are definition at <mach/mux.h> file */
% h4 r& e' S9 ?8 K* | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" q6 x2 g% O, s0 b5 }6 j8 S -1
% m8 s% K! Q1 B/ m* C};
" B* Z6 e B7 X, m8 D
- |4 `2 Z7 G& N# e2 P! k( e0 gstatic struct gpio_led da850_evm_tl_leds[] = {; P; ^- C+ v3 B j) \+ c
{6 J3 u* E0 _& K) M
.active_low = 0,
+ l9 v& |; ~: _ .gpio = DA850_USER_LED0,
/ f! ]: W; H; e7 Q4 o; A! o .name = "user_led0",
# s' c9 o, O2 u. n1 ~1 o8 @ .default_trigger = "default-on",% D/ [6 f+ u& C
},/ u$ `; p, ^! D$ Q+ m
{2 l- j0 h2 w: d+ ~/ c
.active_low = 0,1 q" I3 h8 \9 |
.gpio = DA850_USER_LED1,
/ P0 R$ f2 d9 |( v$ I0 K .name = "user_led1",$ Y6 e8 ^" d, t2 f7 Y
.default_trigger = "default-on",: E l# O& |) K1 V
},1 O1 q) V0 S9 t5 f7 T& T* v
{+ i% o$ w9 K) u& v. x* d9 A5 l" p
.active_low = 0,3 B: _) d! w/ E" \: a7 l
.gpio = DA850_USER_LED2,
+ a* {: R: S8 ~# Q" e. C/ g .name = "user_led2",* p4 U$ E+ j! h/ s# |
.default_trigger = "default-on",) F4 _8 v. S' v1 @1 ]
},+ i/ e: s7 f6 R! l
{; T% m% d+ g0 K, p& k
.active_low = 0,
6 w: l f5 o p6 m8 p" O: X8 _ .gpio = DA850_USER_LED3,
6 ~. M2 Y2 I0 X( ?' ? .name = "user_led3",3 k: J" F ^6 e" K
.default_trigger = "default-on",0 q) K4 C* P9 \3 k5 S1 }
},( U! J8 b0 G6 K$ }( q2 d
};
7 w' O% }3 p6 B. {4 L# X9 g
% p9 e, m6 a. }7 q2 l: Y! pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 Z- @- y; n, v [! t6 N4 y2 x
.leds = da850_evm_tl_leds,7 F/ t1 J0 [$ H2 I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) v/ j, S H7 }6 b3 z. k- J6 p}; q: y3 Y* V/ H* |: p8 y
1 K: r- z" s' m. k" z( A. l
static void led_dev_release(struct device *dev)
/ l5 J# E: c: G$ J{
) d/ ?; n% P \6 b};
1 D# H% V8 {/ z9 d, n3 i- i2 S$ u# ^; B+ \6 j" k' @
static struct platform_device da850_evm_tl_leds_device = {1 J; ]! H* Y; a9 m \5 j
.name = "leds-gpio",
3 p9 G- O1 n4 v/ _) [ .id = 1,
2 Y) y) x4 H; ~; u .dev = {& x# {6 \' @3 U# e1 m3 @0 _
.platform_data = &da850_evm_tl_leds_pdata,
4 G I4 {* s. O+ Z. E9 _ .release = led_dev_release,
+ _& w" D3 J3 F n* r4 H }3 D9 M0 J9 P) X) r. E) {* u+ c; S9 b9 o
};
: w) ^* W( W% |; e5 E
# M7 ~3 I2 N" U1 w# Tstatic int __init led_platform_init(void)4 l7 |0 E0 ^' ~- l) x$ ? c$ v, u0 m
{( }$ l0 u5 l9 P5 r
int ret;+ C; O* b: y+ D P( k- k
#if 0+ n; h3 y1 E9 ~8 Z' u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; h# l( f( i0 W8 h: o
if (ret)
# t1 b& f& M# { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 {) S' ^# O0 G, N$ z
"%d\n", ret);7 F/ g' Z+ a' N1 [2 v
#endif4 d% ?% J( j) s9 Q6 W {0 \) d
ret = platform_device_register(&da850_evm_tl_leds_device);
; L6 W9 y8 q3 r! W4 W- p/ z if (ret)
' Y) D U8 T* u7 @0 g, e pr_warning("Could not register som GPIO expander LEDS");* R; E% Z1 D0 ^- `% m
else+ [9 x: Q. D0 V3 X- ]$ n
printk(KERN_INFO "LED register sucessful!\n");" j" q6 ~" W1 ^
1 K6 S. r1 \( x return ret;% S) W# C4 o! c. q' v
}
( Z) p) E. Q8 X u! b) I3 x# T/ h: [& }- \9 g2 r Z; o0 e- U4 P
static void __exit led_platform_exit(void); d7 a% ]' `$ i0 Y. x
{
( ]' l) O+ D, j( } platform_device_unregister(&da850_evm_tl_leds_device);0 q% e5 C: G6 W- W6 {# ]
: A0 L: Y5 H9 B6 M# A9 \0 v
printk(KERN_INFO "LED unregister!\n");
+ Y4 {1 ~& B2 g G% a0 ?% R/ @: Q# \} Z/ [! W- c; X/ v- ~% S# W$ x/ S
' m K5 o1 x: e1 E3 x, w) X j
module_init(led_platform_init);
& V% U7 F$ r/ ]$ qmodule_exit(led_platform_exit);8 p: Z! ^" P. H5 S
: n: C9 i7 R! l6 O, a3 k5 RMODULE_DESCRIPTION("Led platform driver");
% D& I' Q, x$ N; zMODULE_AUTHOR("Tronlong");$ Z* `; [) @- P E% ?
MODULE_LICENSE("GPL");7 L" l3 g% g, u+ x3 _ k5 E: N
* n) ]8 Q+ t8 w$ ~
|
|