|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 W3 I/ w! L" _' p1 L- i, b. {
#include <linux/init.h>
8 S% E4 H3 R R$ q$ `& Z8 Z/ ?#include <linux/module.h>
( w* W/ I' D' p* V0 f* r" [0 v#include <linux/kernel.h>
; J7 O9 W3 g# q% G& D3 [: a#include <linux/types.h>/ G/ D$ R9 B0 `2 O- D; |
#include <linux/gpio.h>
, a3 Y- \4 Y3 K2 v/ l6 ]8 b7 _' G#include <linux/leds.h># M! Q! k- t& t, Q5 O
#include <linux/platform_device.h>
+ Q2 P2 l: w$ O9 u
9 W- ?$ e# v- S S2 d" x$ Q I#include <asm/mach-types.h>
9 x0 t8 [) i8 r; \* ^9 ]% n+ Z3 K#include <asm/mach/arch.h>! t3 O$ Y h8 e3 Y
#include <mach/da8xx.h>
. G2 B, ]' P1 a( l1 d#include <mach/mux.h>
+ k6 J9 r" }& I, [/ B# z) {0 O
6 }" n4 j& ]8 G0 P3 O0 a' ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% c. R6 v5 F; a* ]' C7 E2 n: J" P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 K2 H9 \% L/ ~8 T! L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& Q1 K" S4 Y2 d2 F5 v& i P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 X+ a& \$ Q) L& Z
- m; e3 T$ k, X/ U5 _% }( @/* assign the tl som board LED-GPIOs*/
* S6 q1 u! ]- Zstatic const short da850_evm_tl_user_led_pins[] = {
" P* e& m$ W" k3 R0 I; l# ?. m. S /* These pins are definition at <mach/mux.h> file */
a- a5 v" z' e: D( S/ k! ]0 X8 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( ]; E. T$ }+ {7 ?
-10 b0 ]9 j; w$ o
};
- y6 o' ^+ g1 i, w( r6 Q9 r( S" ?% D9 e* ?8 t; d$ n
static struct gpio_led da850_evm_tl_leds[] = {
2 M! v8 z- H! N; _5 X/ V) _ {* x# B) q) B; |+ j
.active_low = 0,1 Q1 R1 Y: }! R) |# x
.gpio = DA850_USER_LED0," x1 W; [" O' E/ k
.name = "user_led0",6 s" a7 ?# m7 e l$ V
.default_trigger = "default-on",
! F' h& W W( E" C& |% h+ @ },, E- `* _) k0 X4 @2 M( j' C
{
3 b# h. Y8 ~- F1 [" d8 @; P1 O .active_low = 0, h/ E+ P1 x" E. Q
.gpio = DA850_USER_LED1,
) e) O; @( Y3 w" H% _ v .name = "user_led1",
' {1 Q/ S6 ]" y3 L4 n4 R .default_trigger = "default-on",6 P1 M- ]5 h7 C5 ~4 t
},
3 V5 h7 W& ?0 ^: ^' |9 e$ A/ h {
2 l8 i o- J p0 ^+ g .active_low = 0,
8 c( R9 `0 l ?% w: t+ _ .gpio = DA850_USER_LED2,
3 E( l4 w% Y' x; j- O .name = "user_led2",
+ j% j; u, d- N7 D0 `" X. z6 v G .default_trigger = "default-on",1 W3 S6 n' k; p' J; M: r& ~( k
},1 z3 [7 C1 y! i
{& m- K% e. u" z, U
.active_low = 0,
/ v: y' S0 M1 {$ J; o8 _6 ] .gpio = DA850_USER_LED3,3 q4 Y! z E6 H5 _1 A) @8 x
.name = "user_led3",$ Z+ q4 k+ M) Y+ y- U! q4 M5 L& @
.default_trigger = "default-on",4 L( t5 { I* ]; w, G
},
( h, c# }3 D% {5 K% s( |};
/ k$ w5 D: w& E! u* C% b
! P% Q/ ~ d$ A$ @+ }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% B( p) i& b- F* D4 B- n
.leds = da850_evm_tl_leds,# l. s+ y5 d/ M) n+ {. ]/ w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! @- g5 k& }6 t" x6 E% S& Q9 s# N};
) h( U3 X) O% F! F
( c' }" k" h+ qstatic void led_dev_release(struct device *dev)
" W- Y! S9 q1 d0 ^" J# m{
2 m7 i5 I( S" Z1 {};8 P# j3 v3 D% Y8 t
3 I* p+ w. l N. _- [2 U, vstatic struct platform_device da850_evm_tl_leds_device = {
& r6 W2 S% o1 K .name = "leds-gpio",
8 i. K8 x0 P! k9 ^0 ]* Q7 v .id = 1,
: W5 t( b: H- v( e .dev = {
; U1 R* D. S" H .platform_data = &da850_evm_tl_leds_pdata,
$ h+ V! {& ]# r6 g x .release = led_dev_release,
" ^, e0 }2 M* w9 P5 X }
% `# M0 S/ H; i& h, T, ^0 e3 i};
* |0 @! T8 i1 Z- V% Q9 l( y& k! Q& W }; S$ z P& |4 b
static int __init led_platform_init(void)6 S" G* U* w. E- m3 _6 q) ~
{
$ S* I% {$ `2 ?9 o0 C int ret;
0 i7 N0 M2 t' M& } [- ?& }#if 0
4 y9 s4 Y2 i. Q& S; E9 A, [4 z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 k) I3 m! N5 x/ J- \' p
if (ret): p) f) a [3 f G5 _/ v7 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# B* t3 c8 z, l A b; F "%d\n", ret);, c: m8 i, K. d, t
#endif4 M3 L5 y- i0 U% v% c! O
ret = platform_device_register(&da850_evm_tl_leds_device);
$ X& ]5 ?1 J5 h1 X' m' T if (ret)9 j5 V. u! B: n" {6 \. o
pr_warning("Could not register som GPIO expander LEDS");( j' z# W) e8 G% U) {8 N- P
else5 o5 F) i0 f& c- z4 ?& j- [
printk(KERN_INFO "LED register sucessful!\n");. K$ Y* H7 @6 c8 O! F U3 A5 \
4 h- `2 I/ d9 e return ret;
# E' z, Z; M- B0 F/ W1 b}2 ^: N* E" r2 b; r- X; }9 _& X2 C
+ [, [$ ~9 V( b' }5 \, @3 @: ]: N
static void __exit led_platform_exit(void)! q% Y% [! V' b4 o4 ^: W3 |& k
{. @3 V% }" P) P
platform_device_unregister(&da850_evm_tl_leds_device);
4 Q( }$ T5 c5 P( a4 V9 k
3 F$ }6 S( [% g printk(KERN_INFO "LED unregister!\n");8 ]' L: ]4 L6 b$ h* K
}3 r# v7 X$ D# X+ K" O! {3 w/ l
- \5 T; x9 a6 W4 Jmodule_init(led_platform_init);& T7 x+ a. I# ~1 U
module_exit(led_platform_exit);7 B8 o8 q8 E+ F+ s* f! b2 l* _% A
! y8 d. ?+ h/ o7 n+ V
MODULE_DESCRIPTION("Led platform driver");
" A! h, B: D2 P9 S9 p2 S7 g) NMODULE_AUTHOR("Tronlong");0 o& b3 r& y& L& C9 R
MODULE_LICENSE("GPL");
/ N, x3 `4 t/ U4 x: c- s) ]4 T+ g1 z* T. N0 N+ R# [3 N
|
|