|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 o3 Y$ X3 |9 c: V
#include <linux/init.h>" ]. l7 n7 m5 ^$ M; }
#include <linux/module.h>
+ k0 i/ K N" t4 E- G. [4 ]#include <linux/kernel.h>
# r# T4 F J; \( Z; i2 R#include <linux/types.h>8 Z+ V) U* b' S7 |6 n/ _4 g
#include <linux/gpio.h># Y' \$ P( Z. S+ h/ a9 r
#include <linux/leds.h>4 y/ w Z: a# O% `0 a( d
#include <linux/platform_device.h>
; x! y) d. ]; C' V, @! B% {7 \( N! v& d
#include <asm/mach-types.h>* I$ B' {: C! S
#include <asm/mach/arch.h>: t) \) G' E9 Z/ J; ?4 U8 G
#include <mach/da8xx.h>% J, k) N$ R# a4 Z
#include <mach/mux.h>' ` d) s/ H: Q" G, q% x* V7 @
% t3 J& J9 D" F$ F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 w, ~1 s% p- u/ o+ O" o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ V+ K* v. G) `3 u2 c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# E( i! O/ n7 t5 k8 A) @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( w( w3 Y/ O8 ]" ^; P+ i- p, i1 [
3 b# T8 U" X, g: |' |! c/* assign the tl som board LED-GPIOs*/8 k9 P9 R. Q, L. m+ K5 S) V
static const short da850_evm_tl_user_led_pins[] = {
' a* E' L& V( f /* These pins are definition at <mach/mux.h> file */
+ ?5 J4 |5 Q+ P" {; j+ D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ x1 s+ K7 ~0 |; t, Y
-1
" a9 F# f3 j) R/ [: Z% _, J; r};, `! t! l& u; ^& ?, h
' C7 s! ]- s" v1 N& p3 V
static struct gpio_led da850_evm_tl_leds[] = {# j8 ]8 [' `3 R9 G, v
{
% \* F! s" I y- `7 G ?% H |$ { .active_low = 0,6 @- `% C. w+ ~% O( C
.gpio = DA850_USER_LED0,
& a7 y8 c& r0 u& v, C( k; k% h) B .name = "user_led0",) ]6 P* z' i$ F3 ~$ h
.default_trigger = "default-on",
0 |) c: b2 L( q/ \" Q9 f }," R6 T3 f% z: t' \9 k
{
. J8 ]) ~( f# g% O! j# r .active_low = 0,
7 q& x) E3 Y0 Q, T9 H .gpio = DA850_USER_LED1,
# q h% _4 w m; j3 P7 I .name = "user_led1",
1 X- q& v8 Z3 z8 D .default_trigger = "default-on",
8 p0 g/ f. Z5 T i/ z0 Q6 T },; M- [1 l) {) H: S2 @6 W7 o
{# B' a& y) h- }- m& H \4 v
.active_low = 0,8 A0 O7 s" n. s8 q- P
.gpio = DA850_USER_LED2,
; H% _( X b$ B. R# y' J .name = "user_led2",
4 `4 _" y/ \ e6 h& t .default_trigger = "default-on",
, p- ?% `# G1 ~4 w },
' s( @+ t6 p% C ?- ^7 I5 c/ i$ \3 ` {+ O+ `% d* w/ d" c5 q5 {
.active_low = 0,7 Q. C: Q* y8 N! V# D
.gpio = DA850_USER_LED3,) [( j0 Z2 H% E5 h! }: U: t
.name = "user_led3",
2 r) u6 z) X" A .default_trigger = "default-on",3 ?6 A& k8 d* @" E* ]8 `% w
},
2 p0 z& S; ]1 o+ X$ \$ i8 Z" O};
+ c- M4 R: q2 q& E- E0 p
" X* i( ^, }6 c! s- S) C" fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( W5 {2 Y5 R P7 n; @ .leds = da850_evm_tl_leds,0 w* i" k2 H% ^& ]4 W" n# u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 S s4 }$ d2 p4 a) i+ \( O
}; F' d- u ?4 C2 ~" ?& p9 |8 f. ?
6 V3 e; d, @) h9 j! O2 c& B! J
static void led_dev_release(struct device *dev) o' w. v M& k9 l7 `# l% F9 Q* S
{
6 t, t; A6 W2 n: v: k; I. B};
) [1 x2 F4 t3 M- N/ {
8 `2 V9 C, {2 \static struct platform_device da850_evm_tl_leds_device = {& ^+ @/ f: q% I% D2 K
.name = "leds-gpio",+ N; W1 X. ]4 ]8 F
.id = 1,& y, J9 Q0 W) i: j9 u9 d
.dev = {
/ j8 L- T R" v9 d3 L" b5 F .platform_data = &da850_evm_tl_leds_pdata,* o0 f- E$ e r! l3 V8 |
.release = led_dev_release,
# I: P M# c' j5 l6 i _4 e7 C }
$ _. N& G" D3 m a};( a2 P+ ?5 |6 y1 X G; Y
; e4 K5 t9 _% q* N8 Ustatic int __init led_platform_init(void)
; |7 Z7 w, u; t' e( {& ~5 G' F* I{& a+ R/ F. l& P+ @' L2 t
int ret;
- {- q- ^. g/ H& ~#if 0* c7 W5 v2 q) x0 a( T( J* r7 T3 h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 c6 F2 J Z0 k) C) \8 l0 z
if (ret): z0 j9 K) b3 |( _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; A: }. D3 T: ] "%d\n", ret);! |/ ^$ `/ V* G, |: b
#endif
, N& f- ]# H( y% J5 Y9 W ret = platform_device_register(&da850_evm_tl_leds_device);' s0 K+ K$ _" \4 O0 o# Q: b
if (ret)
1 F/ ~ a# a& H/ R% Q. G0 z pr_warning("Could not register som GPIO expander LEDS");4 t/ r+ n7 x4 K* v; M
else
9 ?0 P2 r6 R& h. o printk(KERN_INFO "LED register sucessful!\n");
) C. v9 _7 w- U. @2 W/ x. @6 Q" q E$ W% { q$ q
return ret;
( O6 M7 u# X1 a+ c( `. M$ U2 P}
+ J8 ^, |6 Y8 V1 P: ]" A
- U! {0 \2 a" U1 C$ `% }" o9 gstatic void __exit led_platform_exit(void)# ]. D8 Z) U8 k" R& P
{
! O0 l1 q. T# E- m platform_device_unregister(&da850_evm_tl_leds_device);7 t& Z& a% F8 r5 M3 e+ ]( T; [* n
$ j- [; F; Z/ i7 R `: p
printk(KERN_INFO "LED unregister!\n"); `2 Y8 N! @& n: P8 N& s/ S
}
' w0 I, q/ W- K( g' n
6 x$ b% T4 n+ r6 R& tmodule_init(led_platform_init);
/ N7 e6 O$ k+ Y$ ~/ Xmodule_exit(led_platform_exit);
$ p2 d# T: n1 R$ y; Z! m& L( q
1 K3 ^3 A" K7 h" w1 F- p+ W+ z4 cMODULE_DESCRIPTION("Led platform driver");* A' }* {0 i5 q
MODULE_AUTHOR("Tronlong");) n; J' w. M1 p u |% F
MODULE_LICENSE("GPL");+ c% R% o2 Y7 X1 Y8 i, f
& s3 ^8 n7 y: Y
|
|