|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 m5 m2 }( F! A9 d+ I# k8 T
#include <linux/init.h>
' S! [4 q8 o8 s$ O, Z0 n3 _* D2 w4 P" K#include <linux/module.h>) ? e+ ]$ {( ~$ P; k1 L
#include <linux/kernel.h>! U6 h0 x+ p& D5 h
#include <linux/types.h>
$ I2 v4 M* i: o. F4 z# n4 X#include <linux/gpio.h>2 N0 J/ K3 k0 x3 z9 A' Y
#include <linux/leds.h>& I$ G t( O' y# E& D2 u; u
#include <linux/platform_device.h>
: d0 \' l3 B1 b5 v" e' S/ w' V" o# y4 w( h
#include <asm/mach-types.h>( `1 i* g# g0 N P# G% p7 ^, E& F+ O
#include <asm/mach/arch.h>
* q1 P' c/ ?8 m( ]#include <mach/da8xx.h>! v. K- D, i5 V+ N. V% h* c0 S7 }6 l
#include <mach/mux.h>
2 o+ z! J0 ]& I" z2 ~) Y% o5 h# e4 N. m0 R8 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 r A# G6 J- y3 Z5 p, W$ H& U, y% j& f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* g/ `! w6 n( O! J1 l2 Y* U- \3 k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): i3 Y9 w2 G) w4 q! ]. \3 N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* p ~" o2 j% A
* }% g D9 f2 {0 f: E8 b/* assign the tl som board LED-GPIOs*/
* R1 K2 {) V$ sstatic const short da850_evm_tl_user_led_pins[] = {' G3 {! Q3 ^ l+ x
/* These pins are definition at <mach/mux.h> file */% P$ D2 r- o. _: r4 B, v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. i& d( s& L/ H6 M! f( I$ {
-1$ j+ ^+ e, d' I3 h" p
};; y1 C) I3 T" U: j5 ^# |
5 M8 I) {' ]4 Y
static struct gpio_led da850_evm_tl_leds[] = {
; u- @2 `! K+ [- {& L! \ e, ^ {+ _ |# L5 ?) Z, a* N
.active_low = 0,5 p+ t+ t1 w5 n" s# N: a, K8 j
.gpio = DA850_USER_LED0,, r& d Q% }2 v P. v, B
.name = "user_led0",$ O! I3 k! P9 y, T5 x/ v# L' T
.default_trigger = "default-on",
1 J P+ S$ p( } },$ H$ K8 a, m5 x# U M
{
+ ^6 l) n9 q0 r1 N- X% v .active_low = 0,
& V4 n: o1 J5 _7 W1 p; L .gpio = DA850_USER_LED1,. j7 R( b7 ]* o- O8 U1 Z& j
.name = "user_led1",
1 r( M/ j( O3 s9 d$ s! @( Q) ] .default_trigger = "default-on",
% q, @! t' [8 }+ k. \0 j },5 h" o# R+ g K& A, a- `( i, ~
{, R! f) I8 G7 M) I6 D
.active_low = 0,
, i$ U: O& x+ ~# R$ @ .gpio = DA850_USER_LED2,
) w5 K% m8 _. D4 M: `6 l1 o .name = "user_led2",
& ~- y" `( W$ D) j .default_trigger = "default-on",
, o7 _3 }8 q& {- `& @ },5 P3 \9 F$ w: W {( i0 h' c
{
' ]: b3 h8 f; B/ L Y .active_low = 0,
; W3 G( o4 b/ H# s w+ `( O .gpio = DA850_USER_LED3,$ W3 X4 B1 L: z0 X0 N1 x# ?6 Z* A
.name = "user_led3",
6 Y+ L4 D! ?+ q+ P' z' N .default_trigger = "default-on",' j- f7 o1 s! h, i9 I
},
9 Y% g, q' F/ G) x. @' t/ @};5 l$ b1 I/ S z2 J
& L' y' Y4 g) ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( f m: h5 Q' o! R% ]3 C .leds = da850_evm_tl_leds,! C, ^! l" @6 u. `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. \; M! z' P" b+ _, n* C};. G. D3 E [7 i
( ~; \1 h5 k1 O8 Cstatic void led_dev_release(struct device *dev)4 h! ?. y" R; S" z3 U9 M
{
8 s3 z$ a+ b8 z8 c8 s};# x1 w- S, I; h) a+ o8 f
/ r2 X" Q& ]. \8 Y" Vstatic struct platform_device da850_evm_tl_leds_device = {
& H3 X8 a- g4 Z4 h' O' D7 \ .name = "leds-gpio",! u' {/ q$ K: f! C8 L# M
.id = 1,3 E2 g: Y# w* v
.dev = {
+ A' c5 {' P! W' \- ?+ b; J) b .platform_data = &da850_evm_tl_leds_pdata,
2 m; X( L/ n1 _- @ .release = led_dev_release,9 I2 {) Q% \! ~+ s5 ]' L k
}7 F, Q" q c2 h( h
};
' U- `! w4 p% r; X6 W# I N% \, M+ A$ c! @. l, G l% p; R
static int __init led_platform_init(void)
+ O( g) @7 \, Q o" [& x( y{
+ P% a$ w$ H u- z. l0 R6 b: d9 Z( B( [ int ret;: i. z4 \3 ~5 {
#if 0
+ S7 l9 j `. ^3 E) G& I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 F" k* g. T, |2 _ if (ret)
0 d b2 W1 B+ K$ N; d' o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; t3 V6 J E4 u3 m
"%d\n", ret);
+ A7 R1 b- z0 P$ `" R& X' w; S#endif
- D& ^4 B- z( ~& _) R) X0 {& D ret = platform_device_register(&da850_evm_tl_leds_device);( c0 B! L+ X2 ` b1 I* F9 p
if (ret)
7 y. w1 |" v+ z' }6 i3 @& w" Y pr_warning("Could not register som GPIO expander LEDS");
. a2 v1 L7 _; g5 a5 w% ?/ h/ } else
( S& s! T1 V' u0 R8 X( t, p printk(KERN_INFO "LED register sucessful!\n");8 w1 c/ A, |" ?9 Q5 Z* b L; A
9 ~5 g! A1 A( g- C
return ret;
0 U6 c& j3 W4 z7 t0 H# a}/ b% e( P k' b; B
& ^6 q5 a+ L& r6 s/ g( R- G
static void __exit led_platform_exit(void)1 N' y V7 W% G4 O
{5 }) A9 q& L* B
platform_device_unregister(&da850_evm_tl_leds_device);
7 y/ e. ]' W. Z! |7 }/ i) L8 M' x; M
printk(KERN_INFO "LED unregister!\n");
! E- K+ H* }% t8 Q0 ]: W}
5 Z. R( T! l# D4 \- K, g
% w! q# x3 K( b. i& I8 wmodule_init(led_platform_init);& H3 W2 q4 ?7 Q3 R9 ^+ j8 Z
module_exit(led_platform_exit);2 Z/ G) Y |# e5 n- V+ u
% S% S% T, r& m
MODULE_DESCRIPTION("Led platform driver");
# G- C7 q; r1 jMODULE_AUTHOR("Tronlong");
7 g% ^! j& D1 u: S# Z% f4 `MODULE_LICENSE("GPL");
" e1 h2 n. ^# n8 @4 C) Q- F
9 ? r2 [" K" u$ Z6 R0 r |
|