|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 N: H7 h1 ~5 E
#include <linux/init.h>
7 q. f! L* {% J$ Y8 j# }/ s K$ m#include <linux/module.h>0 n0 W& N) l# r; [$ j; x T! S
#include <linux/kernel.h>* K& J. D7 i% |6 m ?; l6 ]1 m
#include <linux/types.h>
/ X2 `- B! [! {/ u. C3 ]& \/ d3 V#include <linux/gpio.h>! q& S/ a* T. o. g
#include <linux/leds.h>* e. M+ U, s ?; x- i7 k7 T
#include <linux/platform_device.h>
5 O- }$ `( f" v: i: _' K6 A1 {' B" Q, z7 d
#include <asm/mach-types.h>
* p- L9 |) m* l: L- J( ]; h" U#include <asm/mach/arch.h>- F' L. E' j- Y
#include <mach/da8xx.h>
! h/ N2 e* w8 ?! g#include <mach/mux.h> \) l2 A2 G0 ?2 ~& {
2 v. }0 _* W( U( d% O" L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 {% {) o% p# e2 b$ S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 m. G6 N- q+ H& g1 F5 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# y! a1 _% u. |$ W/ M9 F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); l& l0 w7 T( B* z
5 X! l5 f1 [, c4 G. e
/* assign the tl som board LED-GPIOs*/% T, V# ]' R; }0 z6 W& v% z
static const short da850_evm_tl_user_led_pins[] = {
$ y) V! B4 j6 _* ]% w6 }# b /* These pins are definition at <mach/mux.h> file */
0 G8 @/ o( U) | \) B; z8 M& `" e% _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" ?3 S$ I) L1 A' Z2 F" m; p -1* E( X2 G8 ?; ]/ _" m& E z& X
};& H0 ^$ I- x; A- z v0 V+ u' ?$ |
( C2 {+ l4 J6 t h0 l p* f# ~) a
static struct gpio_led da850_evm_tl_leds[] = {
7 F5 i% Y, a9 Q' W% o {
% C# c7 I3 D7 K E" X+ k/ d; n .active_low = 0,
- T& D! D j: f: r7 X! l- r& r .gpio = DA850_USER_LED0,
9 `+ L9 ` ^ f! c* c .name = "user_led0",
, \' F+ _+ X6 O5 P& }/ ]9 z" a .default_trigger = "default-on",! A( {5 t5 Q; L' |7 G2 ~9 } @
},
% U0 p8 N; S* I2 g& o {
( B: s/ U) n8 t .active_low = 0,1 S# _0 v# q/ g/ W2 m
.gpio = DA850_USER_LED1,. T" s: ^. b: r% j/ z+ L
.name = "user_led1",, b4 I% q8 B d0 z6 t
.default_trigger = "default-on",6 z2 c5 [7 k% P
},' a" I( Q4 m7 z0 a9 y; g
{7 J* C% T6 s4 g( ~2 A, a) s
.active_low = 0,9 u- q/ m2 _) x6 k$ p
.gpio = DA850_USER_LED2," r2 T) y2 _" N* y; c$ a, q- k
.name = "user_led2",9 e2 `7 q2 Z% M- {5 ^
.default_trigger = "default-on",7 Z/ q9 B( s# b! H
},8 k1 }: q9 p6 U
{
2 {7 o1 p2 }& X( I" }: _ H .active_low = 0,) v/ q; l2 E3 E
.gpio = DA850_USER_LED3,
+ V7 t. `% T. {1 M, `% @ .name = "user_led3",
! m. j7 N) E, V Z5 {8 v .default_trigger = "default-on", [/ Y B: ^# C$ n
},
! O: f( P% k9 ^& H};- Q, R( y. ~. t, y" Q, Z& e
* W8 \ N, j A( Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) m- h# I; \- q .leds = da850_evm_tl_leds,
; t. y# a2 [* f5 i8 x* d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! e- J2 U+ q1 s( y: b};2 v- s' m9 S* y' t+ i4 e
9 l: B. v5 a2 O; Jstatic void led_dev_release(struct device *dev)
) T2 z( j5 f8 H0 X$ @{) y! Z% f6 ^; \( ]& X
};
9 g, g* c; |" B; R- [& Q! ?9 G
4 ^7 e/ _9 z# {- K) z4 [static struct platform_device da850_evm_tl_leds_device = {7 i/ i! v! W% s; t- o
.name = "leds-gpio",4 P. C) C& }" m2 B
.id = 1,
* C) V! Y( U) U6 } .dev = {
% Y3 M6 U1 w( ^5 p5 o8 N .platform_data = &da850_evm_tl_leds_pdata,9 B& j/ {# U: ^) n% U' Y) W
.release = led_dev_release,
5 O8 t* l& d# u& F: x; W0 X+ q& S; t }
( v u( G O/ C+ P6 R};
) L q, k' [9 D4 T8 b: H3 k/ u, G4 W& \ d5 \: N
static int __init led_platform_init(void)' c1 \! ^7 c6 d7 _
{2 w4 D9 O3 G: f5 T. @- v1 C
int ret;5 O6 N% C7 f# Z* ], @8 }. B
#if 0! H$ g- x- w7 |7 D' O( s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, G1 A* n1 m' N* K if (ret)
* k6 C- T* i5 D0 Q9 t- F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& g9 o; }7 Q! ^* u "%d\n", ret);
/ ^" ^/ A" ~: y7 K( c' O/ A#endif
$ C/ t* C0 }% y ret = platform_device_register(&da850_evm_tl_leds_device);
( E, ~# o) I( N if (ret)7 U! `: H3 M' `
pr_warning("Could not register som GPIO expander LEDS");
" F3 h# O9 o' g# \3 l else
5 j3 F. c5 P. ?; K0 ^" } printk(KERN_INFO "LED register sucessful!\n");
! g6 t& B* J3 R7 |% D1 x7 u4 j
- z% k; L3 Z6 s" @0 L return ret;4 f& ?# _& u1 r1 i9 _
}
6 v( ?$ l# i$ m* P N- U8 y& m4 F5 e$ G+ H: @3 e
static void __exit led_platform_exit(void)
" ~& L, S+ K* F; B% E: V1 s$ [{0 m$ |9 [& W1 V( p7 a$ c
platform_device_unregister(&da850_evm_tl_leds_device);! r1 ]: u1 D/ M& i
* j a1 B$ K% D8 L9 V printk(KERN_INFO "LED unregister!\n");; Z! m( r$ r- ]* h# u9 @
} _& d4 U6 @8 s0 c. f
1 D. j" p" Q. ~module_init(led_platform_init);: a$ K; I- o- x6 D+ d
module_exit(led_platform_exit);9 p/ f0 m6 j8 n( O) g8 e
+ T. k F8 `9 |% h+ _
MODULE_DESCRIPTION("Led platform driver");" k7 j8 o* \' ~
MODULE_AUTHOR("Tronlong");( @! H2 x$ a+ f* i
MODULE_LICENSE("GPL");2 F v1 S x( E7 _# d A$ r% o
0 K% L/ e4 F4 K% |" Q' J |
|