|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 H9 J! D m% q: O3 t#include <linux/init.h>1 [; Q1 K- F! y+ j1 U5 o: L
#include <linux/module.h>
8 z9 P9 [% |1 D#include <linux/kernel.h>- y4 r: N; p; `" W$ ?1 ^
#include <linux/types.h>
" ~% ~& k9 |& }) H4 j#include <linux/gpio.h>
) e3 Z, r2 s3 y# e# o2 h#include <linux/leds.h>0 K# i8 F- m% N+ x4 ]' v8 `
#include <linux/platform_device.h>
0 T0 F) [# ]3 X) T' A- x* k+ k3 K$ v3 j( S: P9 F" c/ G# c
#include <asm/mach-types.h>
9 `1 k+ \$ f; A) v6 F* t#include <asm/mach/arch.h>! q; r. V2 |8 ~* S% R6 ^
#include <mach/da8xx.h>5 j& J: S# J. G K, }; S! J
#include <mach/mux.h>+ Q$ Y: j2 G8 I4 g! H9 D7 y
1 q2 n! q7 s# A# R3 O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: H0 K- [7 R1 Y0 R' W3 d2 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 p6 p8 x* d) |+ q% X5 `0 z- Z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" I; ]4 j, F# M. @/ Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 {' a6 Y% F1 M( m; q
0 L8 G* p8 p% o/* assign the tl som board LED-GPIOs*/
2 S) r- C2 E F4 u) Qstatic const short da850_evm_tl_user_led_pins[] = {6 M# c5 h _4 ?. ]0 H8 `% q
/* These pins are definition at <mach/mux.h> file */
. C4 Y. r5 x3 r2 d* p' i# k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 m! E& j3 U( r, {! M2 F -1# e q. _! V( }0 {
};
, {3 f5 j& F0 f. X, n/ u) S. d
W6 h U8 T7 b& E; f& Istatic struct gpio_led da850_evm_tl_leds[] = {
2 K& J6 s A! |' ^$ O) M0 K( P {
6 o' @. Q8 r! a .active_low = 0,. s9 H. ^- c0 O' R
.gpio = DA850_USER_LED0,4 N: P) h u7 X1 N5 ]; ^$ B a
.name = "user_led0",
2 u* W, |- o. G" i .default_trigger = "default-on",
8 S5 Y* R5 _. V0 y) }& N: q! j }," o) o t9 r- G
{
9 r5 b l4 d' p. z( a- o .active_low = 0,8 t- {' o% L: e: m# G
.gpio = DA850_USER_LED1,. ?: Q$ K1 @4 A& m. R% d2 z$ {/ A
.name = "user_led1",9 R1 f1 V0 o5 h& E1 n1 H% j0 v
.default_trigger = "default-on",- R' n% ^% H5 X r
},- M# G$ l1 p4 T
{
8 s9 j% A. V. ^9 l2 {2 a .active_low = 0,7 \* L" d- ?0 E
.gpio = DA850_USER_LED2,4 X5 v+ j- K9 |5 T* F G
.name = "user_led2", `/ B3 _. ?+ t9 O/ s' p) n; ^
.default_trigger = "default-on",& h/ Y+ u! r( @: R- H) y% n9 g! N
},$ _5 H. z3 d5 J5 ^# \0 W% k
{0 o; u! j, }' Y2 x; y! |
.active_low = 0,; S8 P: Q. a( Q0 L+ t/ } E3 }2 {' E% w
.gpio = DA850_USER_LED3,
8 a+ b( f+ A; H( a% a .name = "user_led3",! P. g0 B' I/ c9 k
.default_trigger = "default-on",
' X5 _0 U4 p1 s4 x! ]/ S- X },
1 h9 |& W( R' w% @. N. ]5 P};# U9 A4 d. T9 t
) V% ]/ z y9 ]( `- [8 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( g* x4 c! p' p$ n4 z .leds = da850_evm_tl_leds,
5 l9 v+ ~) p# Q, M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: [& n B0 D" }7 {6 R0 T
};0 b; d6 I$ l, }) t- i
. Z6 J5 }" i! pstatic void led_dev_release(struct device *dev)' w+ @5 {# m$ K, D8 [/ a# o
{
! A8 ]* x' T, [$ D* v# c0 m};
9 j" `7 Z9 l3 u& W9 ~9 N- z. M
7 y& A* v, g: u. b3 O. m- p6 _static struct platform_device da850_evm_tl_leds_device = {0 q* n I' B! z1 X5 ?; _' D
.name = "leds-gpio",
( R1 @/ D. ~# a! D1 \( X8 ~( ^ .id = 1,
* c9 w& H6 f% d& }# V .dev = {
2 T; j2 n: a" O! W/ l6 i& z0 V .platform_data = &da850_evm_tl_leds_pdata,
0 S4 ?0 b, x D7 H, ] .release = led_dev_release,' h5 f, I1 m; n0 P8 P8 B
}/ p/ k0 {( q- a$ v
};. p* A" s2 A6 X* O& O
" h) B* u; ?, G7 }: Y: e7 dstatic int __init led_platform_init(void)
0 D5 R0 v9 ?) t) l4 l# X9 l) n( }{
5 p3 N1 Y3 d5 i' H. O3 E# H int ret;
% T( R. @! ^& h$ B#if 0! D* U( p" A/ H: R/ Q' W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: S$ j4 a+ R3 n- R
if (ret)/ f# O+ }6 F5 S/ h$ k; E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* D& u. Y. M' y$ j* A4 J$ G7 c% P
"%d\n", ret);
# U/ D6 C8 E+ |$ _4 }% e/ c#endif
n, w3 i5 |% d+ V$ [: x6 _ ret = platform_device_register(&da850_evm_tl_leds_device);
$ y$ {7 l0 D( h' [ if (ret)
- Q$ `$ y1 i c5 H5 e pr_warning("Could not register som GPIO expander LEDS");" {# a' B, S4 H7 X! T. b, Y( O
else5 q1 P- s8 A% {( A
printk(KERN_INFO "LED register sucessful!\n");
4 T+ T, q; b( j0 s2 X; x* O& I/ \2 f7 x
return ret;/ f0 ?9 Z; c1 [% W2 x! u8 A. Q
}
, [+ }" w. Y, J8 s z# v" B/ G# K9 d% d8 [; V
static void __exit led_platform_exit(void)- M1 k1 c# H- d' Z: U
{
. o! Q3 ~4 O v- x platform_device_unregister(&da850_evm_tl_leds_device);
$ r8 ~; i4 C$ i5 W( _, e& F8 K$ e
) | J5 _* m }+ k3 s printk(KERN_INFO "LED unregister!\n");
K) k* e: b, y- n, ~4 i3 [0 I}
, e) g7 e" d& @( V( Y; }9 N
0 q/ X: W% Y( w X6 a0 r. w. nmodule_init(led_platform_init);: ]% _$ O$ h$ A
module_exit(led_platform_exit);
) g* o9 X" [9 m2 L; k. Q9 N/ R/ }( ?( v3 f ?! S3 a
MODULE_DESCRIPTION("Led platform driver");
& R U3 n) X( n% g8 {, t/ U- eMODULE_AUTHOR("Tronlong");0 n! L- @* B- L! K& R6 y
MODULE_LICENSE("GPL");
" k0 D1 ?7 [! u! D' T
8 U9 y. W/ n. i |
|