|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 b4 y2 k2 h' I d- K: b+ M$ ]5 B
#include <linux/init.h>
! e+ j6 _! i ~! \& h% z/ a+ d#include <linux/module.h>
b# G5 l2 ^% Y4 U( P" N3 J! D#include <linux/kernel.h>
) m/ V! t2 B! z' o' e#include <linux/types.h>5 _/ y* h( N8 V& q3 @2 |+ h1 J+ T7 G
#include <linux/gpio.h>
$ ? J) ~- G+ T% k9 c2 R% n#include <linux/leds.h>
. ?* E9 L: I+ T# w2 f#include <linux/platform_device.h>
+ r; y3 n6 S2 t8 L! l( Q# W+ B" h$ V. C" |
#include <asm/mach-types.h>1 |; N, a' Z( y: e7 i# Z& q0 r
#include <asm/mach/arch.h>
6 ^" t9 s" i5 K! _$ }. G9 ^#include <mach/da8xx.h>1 n- p9 q* I" G2 p2 ^2 d! D
#include <mach/mux.h>+ Z- g) X( E% E: U5 a
! Y) s& C; Q( I% g" a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 x: n8 [" u! c) \& E% D9 b$ T6 o9 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ B$ q* J0 c, n/ D* x$ p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* L% R J: ~; L$ q1 E; K2 F7 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- j! l, q: }3 |: Z( i0 m5 O& W4 y( X
8 e# I! N+ ^( J; y+ i0 E& W( x
/* assign the tl som board LED-GPIOs*/0 b. m' g6 o5 H5 C* E. G0 y
static const short da850_evm_tl_user_led_pins[] = {
( P' }7 \5 X: h& g* J /* These pins are definition at <mach/mux.h> file */! ?3 m) Y i4 V6 K& Z0 D" ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ d9 b/ j/ `/ g# Z -1- \+ D% ^# f( i
};0 t4 r9 s$ K' h; w
9 E& L" I; ?: @/ j* Y
static struct gpio_led da850_evm_tl_leds[] = {3 I6 _( e* H* E$ W- z
{
' j" Z: [0 T- E' O# s .active_low = 0,
* q: o$ u1 s& a3 h% {( b .gpio = DA850_USER_LED0,
- L) H/ ^8 K0 B" S- y .name = "user_led0",( _( h+ T0 P$ M+ R
.default_trigger = "default-on",
# g5 S+ `7 g% n% T. n, \" Y3 D" a },
9 j9 d% b. S9 v0 O) |+ t/ l {
6 d8 q- ^4 D* ?6 B' n+ }; P .active_low = 0,
% ]7 L8 h6 B/ g/ } .gpio = DA850_USER_LED1,, r3 a3 z( b7 g' b/ W5 |1 P
.name = "user_led1",# [5 O2 j$ ^6 o. C
.default_trigger = "default-on",1 w7 {! t' y G/ m! z9 N
},( R+ {. b0 m% l% s5 d5 `: Z
{0 J3 V4 j' S2 M9 q, V8 E
.active_low = 0,: w1 R; {6 k$ i# o; n# z1 a% Z" Z2 z
.gpio = DA850_USER_LED2,
4 y. o4 }& i) [; T2 y/ V \$ q .name = "user_led2",$ N8 G. P& p+ G' z) H) E* W
.default_trigger = "default-on",
$ U' r( z& K1 w k$ |3 K6 g },, _, K2 i5 R$ T G4 b, E
{* x. |% Z, v7 n1 _
.active_low = 0,
' D( x ]9 x1 i/ p8 B/ O1 v .gpio = DA850_USER_LED3,3 I: N" Z, A) G. g' \
.name = "user_led3",% C. M' G: i! V4 b
.default_trigger = "default-on",
# J% ^( K! O; ~+ v& m/ E- s' y },3 E% s' Q3 @- x/ t% I
};( i6 Z7 P. \( R
% c# m2 g0 X I6 ?5 s& \% vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 H( n+ H1 s$ s" P* }% O& q .leds = da850_evm_tl_leds,7 K$ _# A+ J d [" z* A. r! V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% q' V5 K* T6 W9 s4 \# P( k
};
e+ H2 P$ Y- L3 X
) C; Q9 F7 p# Z6 M& _static void led_dev_release(struct device *dev)4 q' E9 L' [# d$ r
{# P8 \) [& q5 Z! a6 L
};& ^2 E4 N1 g9 K) R% G3 V; t8 b8 d
: }9 [8 P2 r4 ~% ~8 h7 Ustatic struct platform_device da850_evm_tl_leds_device = {# P+ e6 h0 }" \6 l3 S2 L- Y/ D& m
.name = "leds-gpio", `+ p& D4 u4 H4 e
.id = 1,
0 n( c! P( z$ g( _' c .dev = {
; G9 T. r4 d' \6 K7 \ .platform_data = &da850_evm_tl_leds_pdata,; T1 l9 p2 N! R$ n1 M: }2 h
.release = led_dev_release,2 z0 b$ z; S4 r
}0 }$ p) S b3 E5 @6 Y
};
0 \+ w, ?. ^% E; Z0 K) D5 g! |# H* M2 M3 H0 G1 G$ y
static int __init led_platform_init(void)2 P9 E; @ h9 g6 b! F% D
{
$ n1 l W. z! O. @; }7 Y. \, `' s L9 v int ret;
# \0 j& h% u) m8 _8 Y# S0 E3 g#if 0
/ ?2 w! f* B- U6 E( @6 C$ ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 j3 I2 v$ K$ |5 H& a5 w* Q4 S
if (ret)
0 @1 b+ p- e9 `5 ?3 u% G! j% k0 g# c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% s9 D; I+ ?0 ^3 T0 D# V
"%d\n", ret);( y. p- Y+ Q! N! {
#endif3 [' D {( ]9 W* D
ret = platform_device_register(&da850_evm_tl_leds_device);
- `, h- a# F0 \% ^5 m: _ if (ret)# ]4 [) L4 ]7 w5 x8 f
pr_warning("Could not register som GPIO expander LEDS");# U" f* s. _2 J1 {; b3 O6 G9 K
else
% s8 z' D$ l( _3 l* b- j: \ printk(KERN_INFO "LED register sucessful!\n");% b( k3 X6 h3 r
3 K; s( w* g! V N4 ^' O! f
return ret;
6 y6 S' E) i& b: m6 b) G}
4 r' q0 T/ `2 [, t1 X* }" x7 }0 o8 m
$ B9 V* K+ J! @6 Astatic void __exit led_platform_exit(void)$ j6 I! o( e. z# N$ q- T- _; ?2 ]
{
$ ?4 R. N ~0 x( J: v9 \% ^ n- @ platform_device_unregister(&da850_evm_tl_leds_device);$ m5 t. ]! J; Z$ M8 n
% j! ~, A! q( @ U printk(KERN_INFO "LED unregister!\n");- {. P# ^2 T2 B( k, k U/ t
}4 ~; f+ W2 Z" a8 g/ h6 h+ q8 w* x
# A; e7 A7 v$ @: X3 ~) v- {% z
module_init(led_platform_init);
$ E( [( ?! e: g/ l4 p2 v. Hmodule_exit(led_platform_exit);
# |; F2 `4 \- ?6 N1 A
8 ^) c, A; ~6 ?MODULE_DESCRIPTION("Led platform driver");! z5 n- }; ]$ |; c/ `
MODULE_AUTHOR("Tronlong");( |6 x3 Y8 `5 g6 X. B- B& F s
MODULE_LICENSE("GPL");7 Z- S4 W5 M/ D1 @
4 o% }* u% R+ @- W2 B/ U |
|