|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! [* c) P$ y5 T6 |1 @7 B: f
#include <linux/init.h>, e' W# f7 }7 c! O2 ?' L
#include <linux/module.h>& i8 B! l; }) t# Q8 F
#include <linux/kernel.h>9 i. V( {# i2 i3 G9 m: ^
#include <linux/types.h>
$ `7 z: D9 @- r/ H#include <linux/gpio.h>& t* P; c9 N! n u7 _
#include <linux/leds.h>2 o j: N3 J# k( W) C2 i$ v! D6 Q; P
#include <linux/platform_device.h>8 N7 L( G1 F' d9 V1 ~! H
! m8 u( ~" E6 x5 Z4 R8 H
#include <asm/mach-types.h>
/ |# K8 a5 S, P( y- v#include <asm/mach/arch.h>7 e/ M- n- W/ r U, ^0 Z" o
#include <mach/da8xx.h>
' W0 s4 ]; v/ m( G7 @#include <mach/mux.h>
. s a4 O" ]8 J4 W
" Q% W- f0 ~7 \: [3 L: [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). s# |$ g- A2 `( V$ T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 N* J# e- |1 e8 r9 K; `) o3 l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& ?! ?$ _& w/ g( x6 t: J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 Y) A7 X# K% B+ z) g# N Z
7 Z+ b; }1 Y; M* e0 U$ R: q/* assign the tl som board LED-GPIOs*/
& T. Y" X; Y _7 `static const short da850_evm_tl_user_led_pins[] = {& l9 z) v2 ? k9 P$ [( { r& G
/* These pins are definition at <mach/mux.h> file */
j2 B- |' V: Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' g1 E) ]9 B1 ~5 ]' f
-1
8 f( G, |5 ^# h};; l% L" \3 E2 v$ w3 y% q G% H
% X) ~# Z( k5 t/ B: R1 Z- [+ q6 Fstatic struct gpio_led da850_evm_tl_leds[] = {
8 c: H, H8 i/ t, \ r2 v% O r* W {6 I6 h" \- j- t( Q9 K
.active_low = 0,' |' d* o/ K) O) t" a0 _( w
.gpio = DA850_USER_LED0,
8 F) M1 i$ K$ X3 I0 q, ~ .name = "user_led0",
. n% Q/ j: K8 p- p .default_trigger = "default-on",- m7 T* f- j" i2 i" Q; r! C! ~
},
1 a$ d* _% R' K; l, S {
0 K- I: T! z4 f% K! M' _( h .active_low = 0,& i- t# p' S7 P* v) v& S
.gpio = DA850_USER_LED1,4 f: h% _) o, v, r+ x2 N% \
.name = "user_led1",
4 L+ _4 L$ r& E3 S7 [3 Z: ^- V' U .default_trigger = "default-on",
- T+ x- W- n- \1 i' i },3 B8 j! e, g n; j- N+ z9 M
{
8 ?7 A9 T' Z1 i) D9 e .active_low = 0,3 I4 J3 m7 R9 Y$ @8 T( f
.gpio = DA850_USER_LED2,
4 ^* t0 h' H$ @( I) | .name = "user_led2",. N& A* j# I3 x
.default_trigger = "default-on",
0 l. {& I+ M8 ` c: E/ e },+ T7 A8 V# y% Q3 A9 p
{8 B9 y2 m% I( b& k& c
.active_low = 0,
0 E0 G, M: ?' U4 p$ n .gpio = DA850_USER_LED3,# M% Q3 B5 i4 I- E3 P
.name = "user_led3",
8 Y* m7 x1 A2 `9 ~# t .default_trigger = "default-on",
& N) K- r8 ~8 n2 U/ K },
2 u5 S& x( P2 g9 {; }};
" Y6 _8 \# @8 [, ?3 P) M6 p. j; M
) Y2 ~" Z& v. j" wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: E: S0 q( E, O# T' Z$ o% `0 n
.leds = da850_evm_tl_leds,, W8 v5 ]( y9 }6 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ C1 T/ v+ K$ c0 `# R6 X% z( n
};0 \8 `/ B8 ^2 x$ l" d
- N8 n! n/ o% N) ^static void led_dev_release(struct device *dev)
( R% d" B4 E/ U{$ X+ _7 H) N% n
};
# r6 l/ |& ^. y1 I/ U& W+ \3 q/ O5 ]! k
static struct platform_device da850_evm_tl_leds_device = {" `4 a2 b9 _) h# n0 G
.name = "leds-gpio",/ |$ A+ _ [- m& |
.id = 1,
7 b+ f1 A" P7 B- \, q' H .dev = {7 k o- N6 t/ o3 H4 [- i
.platform_data = &da850_evm_tl_leds_pdata,
- T; q! h% Q x8 ~- B+ k .release = led_dev_release,- s3 ?# Z& }2 V9 h- k$ s# H
}
' U* R6 l+ T1 v% K% q2 f9 ?};
, V5 L# L/ G. S* u' n. E* ~
- L: g- ~8 B. c2 |; Sstatic int __init led_platform_init(void)3 K( C# c* j+ f# _+ `' _) B v) K5 V
{
! T) @7 |: ?- ^8 j int ret;( v. ?+ Q: ~$ \1 N2 S! k
#if 0, Z( h% a4 E7 U& h& k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* E% U4 S% A0 e. D# X if (ret)
k9 C, E% U& p% ^* d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& }% ~6 y3 k! m" f8 S "%d\n", ret);4 C7 H9 E& m0 t6 l' Z# I
#endif5 y' D3 S* W, T2 P
ret = platform_device_register(&da850_evm_tl_leds_device);
: x' ]! k8 D4 s- R+ p' X9 i5 m if (ret)' |/ u6 h$ O. u0 z
pr_warning("Could not register som GPIO expander LEDS");
9 ]4 d, J& ~+ l) v else
: j- p- `1 K& w/ [. ] printk(KERN_INFO "LED register sucessful!\n");
: |3 D7 M2 ^ o+ N# @
2 J; g ` J/ W8 U) v return ret;4 l/ N4 n8 W k+ M) ~
}' {9 P) n* Y) ?' B1 V* w0 W
. O, ^( W; ]" }- y& ?- U+ T% astatic void __exit led_platform_exit(void)% A2 z$ h4 z4 v# u6 |# O
{# u$ Q' w* g/ O1 f0 T
platform_device_unregister(&da850_evm_tl_leds_device);' W, l/ Y. f! [1 g. k3 E' X
5 r6 i6 P/ B( [, ^) v3 O printk(KERN_INFO "LED unregister!\n");
D! X; s) c& v( G9 @5 M}
8 ?& c' q1 a1 r- B
" Y% |+ p$ ^$ ] h. V9 }9 Amodule_init(led_platform_init);
/ ]* O. c) ^$ I9 a' ^7 [1 K# a4 umodule_exit(led_platform_exit);! i/ Q) @' D. ?9 _! i+ K
! J# t( U$ Q W6 D) s- M9 [
MODULE_DESCRIPTION("Led platform driver");
* s1 `1 L3 |) _$ c" A! |5 hMODULE_AUTHOR("Tronlong");
$ Q+ L: n- k) J2 XMODULE_LICENSE("GPL");5 x8 U1 T7 N$ C# I# e }1 `
/ Y2 ]7 H" D4 p) F+ Q x1 P7 S |
|