|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, P3 ^5 v5 r0 J' b2 V#include <linux/init.h>
1 ^: o- p) _& a. e#include <linux/module.h>
, \ T) B7 Z2 k$ ^$ {; a#include <linux/kernel.h>$ n! A* W |+ E. k9 x
#include <linux/types.h>
: [0 \3 P# G' T* d* k# F#include <linux/gpio.h>
% m9 o" y9 r! z( f$ j6 K#include <linux/leds.h>/ x' O8 v, M7 ~6 a! k
#include <linux/platform_device.h>; k% B2 o4 a R, t
5 l! h; H: e# ]) f#include <asm/mach-types.h> g( j- X; I% ]
#include <asm/mach/arch.h>
j4 M+ x) i/ o) c' @& \! w7 u6 w#include <mach/da8xx.h>
% l4 b" `) J( }2 w W#include <mach/mux.h>
3 }; G0 H9 D4 B6 d; t# S9 W
0 ^3 n! W: ?: N. k9 s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ o) p5 F2 o9 L! {% h9 f0 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' {$ @" v7 t1 J* S0 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. X# C" b3 i/ x! n6 W( F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; g+ I9 s& a. i; s' o
5 e" T* I+ B) h2 q- _0 F3 G/* assign the tl som board LED-GPIOs*// o4 [& s, E+ W2 k: B
static const short da850_evm_tl_user_led_pins[] = {4 D- T( d0 z4 z2 m5 ~
/* These pins are definition at <mach/mux.h> file */+ T4 E! Y3 ]. q! `( S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! s$ F' \7 r! h) q& F! w3 @ -1
* ~3 s4 }& m, z' B};; z* |- L7 x6 m* _8 I
: w* f/ d6 R% [0 x* C p ustatic struct gpio_led da850_evm_tl_leds[] = {
+ M+ f* |7 ]( O) h) Z {
7 \" Q6 Z. u( s) `* A .active_low = 0,
7 ^1 b# v+ Q! q& H4 ] .gpio = DA850_USER_LED0,
! q* \2 w! H! W2 X( T" a y, E .name = "user_led0",
# _& e0 n# c% n, j# F0 l .default_trigger = "default-on",
3 x; f" Z8 D r },
w. w2 }& z$ Y6 A" f7 o {- L% v* E# G* A1 r {4 R" q' l, V
.active_low = 0,
" q; Y% n3 h. ^% K8 e( b4 J! v .gpio = DA850_USER_LED1,
6 M! J5 @; \1 J .name = "user_led1",6 h4 `4 Z$ m# Y( m' k, M7 J- P
.default_trigger = "default-on",1 Z" |$ `2 q: B( f4 y! d
},
5 ?* o2 Q! i0 l0 w7 K9 i {! J2 h' K/ m) T3 F
.active_low = 0,
+ Q6 C% m3 L8 I& I( ]/ O3 S) ^ .gpio = DA850_USER_LED2,
. t, f4 C: Z4 I .name = "user_led2",
- Q* X! X ?7 u .default_trigger = "default-on",
( B4 k/ w' W' G( z p4 N },
( r$ {8 B1 ^+ S; n {
" J6 G0 S& ^2 G! ~5 U .active_low = 0,
/ X( I6 V' h1 Q' t, \, e .gpio = DA850_USER_LED3,
8 }: i8 k) D* ~2 d .name = "user_led3",0 ]; l5 j3 f0 _( @5 C- i
.default_trigger = "default-on",
% [! O. } \6 N) ? },% I- I1 D- c/ w$ N, R. V
};! g4 Y& e# p) E+ I F
& t! Z0 B n3 s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { |9 m5 i( S4 `) j5 z1 [" V
.leds = da850_evm_tl_leds,: g9 A6 m r( C3 y2 @' K* D1 m' `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 y6 U! ?& ~# s2 _3 S};- c4 e5 f5 H. v5 P' ?$ {6 H/ }
- K) b- x. Z {' V1 Pstatic void led_dev_release(struct device *dev)& n7 T2 n( t9 x4 U% _* ~
{4 ?& Y& q7 J6 m* z: ]2 ?
};
# I# z, M* H! R
) n* |' M/ L9 b$ X9 g. Ustatic struct platform_device da850_evm_tl_leds_device = {3 p, x; c' q2 E9 Q- p
.name = "leds-gpio",
& s5 U# Q. u' a! s" T. E4 E& g .id = 1,$ h S! a9 c- j3 q5 y
.dev = {( X" Y1 ~+ [) `
.platform_data = &da850_evm_tl_leds_pdata,+ `( E1 J9 C: F4 V4 z# M6 a; t' x
.release = led_dev_release," ?& f6 s9 S: @, o0 p: M
}
2 }( g' P j" ?- M( k};
# H. y6 ^: X& w
& b3 L' }; T$ G8 K& g4 P' Ustatic int __init led_platform_init(void)
, V; }+ x6 Z5 K z/ K8 j: K{
5 l" M+ @" W5 I; _ int ret; P* |" b) \' l& J7 {1 K
#if 0
' k8 v9 O3 {6 Q8 {. d4 {9 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. W' n0 A# I/ o" q. t7 t, l if (ret)
3 F' J- k6 \" T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 m+ b- C3 I+ ]' `, S' | "%d\n", ret);* ?0 d# w M; v ? u) @" `
#endif
' x" {- B) m8 `/ C8 Q ret = platform_device_register(&da850_evm_tl_leds_device);$ o* a! t5 Z- c3 B$ L
if (ret)* S5 s0 o) L& l# B$ F( u
pr_warning("Could not register som GPIO expander LEDS");, x0 ], b5 v+ u4 z& R5 h
else0 x! d2 X" s# y0 ]& F: i
printk(KERN_INFO "LED register sucessful!\n");% H: Z( t2 ^' N8 ?% i7 a: }
, v5 ^4 ] T" H# _9 y/ ] return ret;" Y% o% x/ b. [& f6 i3 m' J' E" g
}% u5 ?" ~; A* _% c
2 A8 ?! c4 b% ^7 y" x1 B
static void __exit led_platform_exit(void)
6 D& l$ n2 k/ D9 f{1 V/ m. E& D" `
platform_device_unregister(&da850_evm_tl_leds_device);# B2 O* Z* ]! [! Y. d
. g& j. { w- Q1 }
printk(KERN_INFO "LED unregister!\n");
( o% D$ F" e0 H4 }}' `5 A* C; i8 U2 B/ u! g; S9 z5 ~
& r& t( G# ]& \8 x/ ~module_init(led_platform_init);7 k/ [. P- Y4 I, k( j
module_exit(led_platform_exit);
! W9 T- C/ i) q+ ]) m/ ?6 B5 a1 e3 N
; }* k3 ^, H$ v4 f# q' YMODULE_DESCRIPTION("Led platform driver");4 O `) |& B0 b. g5 W$ Z1 ~
MODULE_AUTHOR("Tronlong");# u, v5 [ A3 K1 S
MODULE_LICENSE("GPL");- i) F$ D5 H9 b L! l6 k* j
0 y# d# Y! G* [/ Q/ q
|
|