|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* q/ I& C( J+ L4 d( O#include <linux/init.h> Z* O. \$ T6 u1 t
#include <linux/module.h> F) x& [) ]9 k# D/ k
#include <linux/kernel.h>4 s2 K2 l0 `6 N
#include <linux/types.h>
h, Y( Q) W/ L+ y0 m#include <linux/gpio.h>
9 i" R5 p9 F( G9 R4 }/ W#include <linux/leds.h>4 g8 K, l! @; m+ v. N" u6 `
#include <linux/platform_device.h>& S! ^# J& u) m' x m3 }7 S! Z3 L
, }! z8 ]3 M) V
#include <asm/mach-types.h>' y4 P( ?8 l/ B" x0 L- O9 \
#include <asm/mach/arch.h>
* p/ [% |- ~9 D" m/ p! W2 w M#include <mach/da8xx.h>3 w" z% \' O, R. |
#include <mach/mux.h>. ^$ O7 c g1 N
! o+ w9 ^1 a- H$ h+ ?! v8 I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 ]* h6 A. Q. E) \" Z* _5 u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 R/ a0 i4 V+ s, K7 n+ N. M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& B( H+ H- r9 i* z7 V) z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' `" `6 K& k; r0 T; i* I: W7 O6 q' B& |7 I
/* assign the tl som board LED-GPIOs*/
5 ~: X! c0 Z3 k+ Fstatic const short da850_evm_tl_user_led_pins[] = {
/ U5 @0 }+ v$ E$ y) y+ r& N /* These pins are definition at <mach/mux.h> file */
4 h- \ ^5 {# ]! H5 k' r4 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- s! T1 f( I8 c* ]& Y! M! h
-1
2 x5 ]6 M ?: L7 S* r$ k# L};" P# d6 [0 r( l, ^2 c
3 Q5 I/ a/ d3 s; p0 U% |
static struct gpio_led da850_evm_tl_leds[] = {
# c; M, Q C6 Y# z {
* s9 f( m# }4 |9 B .active_low = 0,. o3 O" x N: H* u. P6 N& F' W8 j
.gpio = DA850_USER_LED0,5 h6 ]6 y& Z5 i# q6 C% {
.name = "user_led0",
, s) Q. H3 v5 \2 J/ S5 p, ?& J .default_trigger = "default-on",5 R+ [. F5 y$ P2 y: ^
},. W4 n+ k& f W# C& E% U: \: }9 Y
{
' K; }( u8 [, Z# e4 b1 B7 b .active_low = 0,6 e% s0 E! q1 W# C' ~9 f/ Y; u
.gpio = DA850_USER_LED1,
2 Z+ c3 X9 a. T( h' p4 Y8 Q2 o( R' h .name = "user_led1",
" q9 i* D# i8 d' q .default_trigger = "default-on",
/ N1 W$ G8 p7 M; p },
8 `" W& ~$ P/ p& h3 t# y {5 {/ l1 Q' `# ?
.active_low = 0,- b( o+ @+ ?5 c% Z5 K0 ^3 ]1 ?! Z/ n
.gpio = DA850_USER_LED2,4 S" F. m' F. @$ Y
.name = "user_led2",7 |8 {& r! F7 J$ o/ U
.default_trigger = "default-on",
T& ?+ u6 [* s% V5 m" Q },4 l5 s9 @4 j, A" ]/ ~% S
{4 F. R- T# G" {, Z, j/ @
.active_low = 0,
* I2 s; ~/ l- `9 d! T a .gpio = DA850_USER_LED3,, ?2 p! j) h9 i( E. Q
.name = "user_led3",
( ]3 c2 g6 c F2 r4 g0 u/ X .default_trigger = "default-on",% B3 m4 i- K( S- |
},
: B- v5 w% _$ \6 A$ |* P0 ^0 I+ |2 J9 I};
{( @$ G* r$ d1 w$ U% v2 D3 _6 \( u" |7 d8 ?* C9 Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- \8 R8 n6 Y+ C% Q
.leds = da850_evm_tl_leds,
9 t: M0 V/ L! U& W( \) [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! G% T/ t% M2 J) I5 ~+ B/ K};8 O- ?$ A* ], S& Z# V
! P5 @+ N# N' H0 S! @- I" x" |static void led_dev_release(struct device *dev)
& d* J; s; K+ m/ ?{( A# ^$ S) D4 L5 s$ n' p0 r; H
};& t( ^ \) ~1 R" g8 X) K; X
6 Y+ @) b" {: y0 B" Hstatic struct platform_device da850_evm_tl_leds_device = {! V- ]3 C: H9 ~5 e* |+ s
.name = "leds-gpio",) O7 Y8 b6 T; h# d+ L( s
.id = 1," T3 C) I, o# z& A5 v
.dev = {
, y3 P$ |3 G P0 [' T9 y1 E .platform_data = &da850_evm_tl_leds_pdata,# ^4 N9 ]# y( Q2 a
.release = led_dev_release,* ~# A# h, `6 @
}3 @2 b. z2 ~( K. i0 Z0 R# I0 \- n
};1 W) L. Z) _3 B$ `0 e- e' E
' G/ I" a9 J& [2 q0 ?0 \3 m5 k Zstatic int __init led_platform_init(void)
( e: |; a0 I4 q+ ^% ` ~{& N9 Z- w7 e- n% N$ E2 U! H3 D
int ret;$ R* l2 u' m4 [& v/ h# p* `
#if 0: D: y+ S% U% x+ ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, D" ~# D5 ]; g& L8 ^4 |7 o, U% f. Z
if (ret)
* ] w8 p$ C1 ~3 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# l6 V- ~2 ?; p! d" A2 V/ }
"%d\n", ret);
; Y1 P) d" p, ~# _#endif$ S: Q& ~8 r: C
ret = platform_device_register(&da850_evm_tl_leds_device);
/ u2 i( j; q1 @+ f; Z if (ret)
r7 _: M |- n& c( ? pr_warning("Could not register som GPIO expander LEDS");# K2 s# e& C& V- N
else
9 J% e1 P2 L8 u8 o% y( ? printk(KERN_INFO "LED register sucessful!\n");
& X/ `( u4 \; Y" x; R7 i
8 t2 @% j) r5 d: V3 A p8 ^! W return ret;
; j J8 F; m+ r Y7 A0 }/ B}
8 q0 e1 C5 M3 F2 \) {! d) S, w2 H* N2 k
static void __exit led_platform_exit(void)
8 I! _0 p! M5 u/ [- Z9 i' f# [* X6 ^{
' j3 c" W& m* n' e platform_device_unregister(&da850_evm_tl_leds_device);
0 k$ \1 {7 k" o. c. Y3 @% o0 |: ~4 |6 h5 H+ K
printk(KERN_INFO "LED unregister!\n");
$ _. w/ v1 x4 T$ B5 E' _}9 H" P1 p9 G' U$ K0 H2 e! x G% v, V
2 Z9 t5 b3 J; o
module_init(led_platform_init);* D) r, u/ X* D; w4 F+ D
module_exit(led_platform_exit);! T: L8 ^# V4 a/ U
5 {3 I% S \ @) C; b G
MODULE_DESCRIPTION("Led platform driver");
9 x* E: f* _! a' cMODULE_AUTHOR("Tronlong");9 q; L1 d! n1 B0 C' R! q# K# q
MODULE_LICENSE("GPL");
' a: o1 ^( M' R" v, _0 u) f' }6 N# E2 ?* E$ ^0 U/ M7 c4 j3 \* S k
|
|