|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 o7 I' X N& \: b" b
#include <linux/init.h>
1 p1 U" _, ?) y9 Q; K#include <linux/module.h>" ?5 B8 D$ j4 u- o }" B
#include <linux/kernel.h>
: t: W8 ~( C, C#include <linux/types.h># W; h+ M! E& C" Q4 r- E8 I1 Z
#include <linux/gpio.h>
: _7 _( b1 C' J$ u2 N" p5 h5 P. A#include <linux/leds.h>4 b; G' x9 T/ m- p
#include <linux/platform_device.h>
% J! V/ a1 D! F K4 P' w/ ^6 ?& N; |3 Z8 ^2 e4 P, b0 w1 S2 Y$ v+ ~
#include <asm/mach-types.h>: ]. O, y1 }5 t, I
#include <asm/mach/arch.h>% O7 z- G g z4 z5 V$ G
#include <mach/da8xx.h>
3 C# {4 r' g6 s. U* u" |#include <mach/mux.h># o6 T: _! p* k4 `) m9 K
3 r' \& N% l! Y# k5 t" \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). o; d# i" D3 P- I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 {* i& J: U* U0 { @$ h8 R4 _; z, e* [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
h1 W0 `8 w) J. H% [- p- V: \0 X: ]; u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 @' n( l- f/ q4 h0 t- i
. \! B+ J% B1 i, r0 t! |) g
/* assign the tl som board LED-GPIOs*/
' M, m* ?6 M' ?/ s, S) r1 Rstatic const short da850_evm_tl_user_led_pins[] = {
7 I i s4 c5 a8 [0 V) j! X /* These pins are definition at <mach/mux.h> file */
7 a& G m& c$ ^& _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ |4 E. o1 p9 _ N% ^
-1
$ n V$ ~6 T( I" J};
. o! s. ~; Q' |0 H' x8 t. x5 [% }) v; [- Z
static struct gpio_led da850_evm_tl_leds[] = {
% w' [7 u- R: D( s( f {6 J) p; Y( i! b& q! c% ?: U, ?
.active_low = 0,/ \ p* n/ R( V' x# q$ C1 w0 s4 @; o
.gpio = DA850_USER_LED0,- n' i! `- n& V# _" h& g; r" K! T
.name = "user_led0",
) k6 G" z0 t" c5 _) @5 i/ t& X .default_trigger = "default-on", B$ B$ j2 y" e4 m8 q
},
. Q+ w; S+ H, u" [& z {
2 i% p$ c9 G/ k- P3 v% M$ c8 x .active_low = 0,
: [! B0 P, a, W .gpio = DA850_USER_LED1,
. W3 _2 A' ^3 O5 w .name = "user_led1",
: n( e- J& F/ Q. Z6 R% ~ .default_trigger = "default-on",
- ]! e& T# p+ x! W3 _* N& r7 o- Y# `. I },
" \* v4 P9 ^- `0 l {8 B3 i3 |( {0 p/ I" Z- b: k
.active_low = 0,# v a! |) _6 _
.gpio = DA850_USER_LED2,
3 @1 r( w! T/ n6 M& E; E' i. E7 u .name = "user_led2",+ d, V& C/ I' w! F) N+ K* j
.default_trigger = "default-on",
/ g8 [2 a+ Y+ d1 T },8 w) B; C+ C3 @
{
; ?+ l1 ~) J' [1 x' v .active_low = 0,
' X. w1 ]7 C- e6 ^" | .gpio = DA850_USER_LED3,
& c- B3 `2 U" e4 U .name = "user_led3",
. w7 F9 h2 g. N' g, O .default_trigger = "default-on",4 c4 K2 O* Q7 B: a% v% ?5 J
},
9 _2 M7 r3 o8 q/ q};
5 y1 X. `; d; Q
2 P2 Z s. T, Z! H- ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 \# [9 s8 f% V$ W+ u- T. t
.leds = da850_evm_tl_leds,1 r3 ?: r I7 T5 d8 f) f, y) ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. [0 V% d1 G4 p/ z5 I2 J' P};
+ G' q H$ v# Q0 T* ~: k! F. } x$ ^, `6 R
static void led_dev_release(struct device *dev)) J' j% ^3 d: [9 `3 e1 C
{' C+ F' b8 r9 x. z
};
7 U3 E# M( @1 z8 ~9 s$ M/ b3 V4 u7 m+ @; ^6 J% J
static struct platform_device da850_evm_tl_leds_device = {
6 g: O3 i& d. D5 _- R* r; T( _ .name = "leds-gpio",
. K" ~1 M, W3 M5 t" L/ t .id = 1,7 f: Q, @3 l6 H$ H7 L; ~5 N2 y
.dev = {
6 ]% d. Z$ B" d* m( [9 t: H& [ .platform_data = &da850_evm_tl_leds_pdata,0 t2 j, |6 }- L# U4 L
.release = led_dev_release,+ u5 Z1 R& q0 F* e/ K
}
1 {8 r$ G; R) P2 N};0 ?1 I9 E, X0 b& y1 s; t
) D8 m! {9 U, rstatic int __init led_platform_init(void)1 J' N: |; `' ?% B. Y5 |5 Z
{; a. s1 m" w8 X( }8 { K( }' t
int ret;, A/ M: I. a! @
#if 0/ S% E5 P8 ^+ O3 z3 X X7 Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! P0 ?9 q* U$ _ j4 F5 w+ U if (ret)
( Q9 [) z% m$ X* h# [9 w! q. J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 e" l- \9 q1 |% p; M "%d\n", ret);" Y& i7 ?1 X# K/ y: I
#endif
' _) Q& J5 j% y( J ret = platform_device_register(&da850_evm_tl_leds_device); o' g' U3 S5 H+ a( u$ \
if (ret)
0 e$ P/ h7 Q# N+ V9 B pr_warning("Could not register som GPIO expander LEDS");
; e( z! k! B; r5 O! X% B6 d9 Z) U else& b0 i/ v# M2 g, G/ n) k% Y9 E/ }
printk(KERN_INFO "LED register sucessful!\n");
) X3 m* F+ _) l( C9 I: F; L* S5 \6 G6 ^8 R: O$ A; W
return ret;
1 p. O) J! m+ \: X; }}
4 ~! j' q9 \& i; N3 _3 l/ N& h
6 t [. e L9 U* |. L4 hstatic void __exit led_platform_exit(void)
% ^* I1 }- f; _2 Z- h6 ]1 ]{& J1 R- a/ @- d' T! D: \! A, y
platform_device_unregister(&da850_evm_tl_leds_device);, K! Y7 p( E( G- ?
% X. x9 i3 v# u printk(KERN_INFO "LED unregister!\n");+ ?; E! v Y! s9 s, q; {
}
4 q* O" A( O: s, n; L5 o2 m0 Q! ~' r1 h& V2 d1 v
module_init(led_platform_init);
7 Z: a- ], u2 X# _2 _. Gmodule_exit(led_platform_exit);
" F- M+ T, K3 _! j: ^5 x; Q- w2 [2 u: E' l3 i6 p7 `, H7 w
MODULE_DESCRIPTION("Led platform driver");
4 J- O5 L1 h! J& Z1 N0 u/ d, wMODULE_AUTHOR("Tronlong");
9 g* o3 c& M# l, b8 uMODULE_LICENSE("GPL");
4 K1 F0 D* x. V# Y7 f H$ J* e
|
|