|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& W# O2 l0 C7 G6 |7 l4 p#include <linux/init.h>9 A# f) `/ v& m6 O8 w6 f, M- c
#include <linux/module.h>9 U; d4 T1 N/ H( E
#include <linux/kernel.h>6 v6 Y2 V) _$ ]' H+ ^
#include <linux/types.h>
1 b$ h9 z0 S: J/ r, w5 y: p#include <linux/gpio.h>; o5 S9 k# v% k j* ?5 `3 S
#include <linux/leds.h>
9 P+ Y! L/ }1 R) s1 ]* g! L3 A, b#include <linux/platform_device.h>) M( U% H' H; ?! L
! O/ W* [ s3 O* {6 }#include <asm/mach-types.h>% ~$ q- Q; R* L$ ~
#include <asm/mach/arch.h>
! z6 L/ [6 I( N1 W: ^7 P. }#include <mach/da8xx.h>( p6 O8 \4 P' {$ v$ J9 }# S( S
#include <mach/mux.h>
3 I8 [! b+ Z/ ^! K2 y* w1 b8 U" N- p8 D
) X P, k# D: G3 X* Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 I6 `3 Q/ q% u* f+ ?& a7 j& F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ r- ~4 M- f% V; R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 S4 @" Q$ y# e( R7 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( L. S9 ~9 p( o' d& e* r# n- F
1 Y! v0 P0 o( e# j) v/* assign the tl som board LED-GPIOs*/
5 [! S' Q1 X; a* vstatic const short da850_evm_tl_user_led_pins[] = {
+ l. H" n9 e! ~& J2 Y# l4 M( u/ ~ /* These pins are definition at <mach/mux.h> file */) v3 z# d: j7 P! p& c1 b5 ~* J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( m$ ^8 R# d4 n
-1" ~1 p; e c5 f1 @( r& U* F
};
K, l! _9 `$ H5 i! @) C* m
$ r* s# I8 T, k6 n: ]static struct gpio_led da850_evm_tl_leds[] = {. N: W7 i% G2 a9 L* c
{8 y8 w3 c# a! K7 M: B$ P
.active_low = 0,
) j! t- n' \" K+ Y- @9 }8 A .gpio = DA850_USER_LED0,1 W# r5 E" ]( c% |1 d& }
.name = "user_led0",0 l: j+ T- I2 x! _( `3 r
.default_trigger = "default-on",
/ a% b$ q [1 v9 X& F },* a4 O/ N! R s* m6 ]
{# b& @) [4 x& a7 n3 S% p" _6 j1 B
.active_low = 0,
1 w! R0 d2 {: R% U% I .gpio = DA850_USER_LED1,
+ ?8 ~+ L( Z- F' R/ ?0 Q5 V2 S8 t .name = "user_led1",9 i" `2 r9 N+ q) |( H6 y. |
.default_trigger = "default-on",
0 Z. d8 E: [3 }5 q {% G, Y" a },$ X3 X; _0 I" d/ _3 _
{6 X0 O, P% C# G' I& Z
.active_low = 0,7 }2 B1 }# `& q
.gpio = DA850_USER_LED2,9 r, d' X6 t! o% W
.name = "user_led2",
1 D4 I$ z% S3 B1 H9 h. g( S* A3 r .default_trigger = "default-on",
- k B w) n# R4 h: O7 Z+ _ ~7 d },
0 `' i( E% H4 y3 q0 N {
) I, M( f% G# T/ R- a5 ^ .active_low = 0,! R. T/ [& Q; H& O
.gpio = DA850_USER_LED3,& I. @6 m3 q9 e( @& r1 O
.name = "user_led3",
u3 c, y( I. u2 x, z4 @/ d .default_trigger = "default-on",: z+ |, r& o+ [
},. t; F7 u) B# e6 Y1 F9 K% E2 G
};8 Y/ ^8 c2 W8 O' _
& u% Q7 Y" r3 u( u4 f: y/ H# T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& e/ Z+ G0 g3 k4 R; y
.leds = da850_evm_tl_leds,9 Y! g7 M/ g: v# `# ~4 s' W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 M7 s# x" R% v2 L+ W
};) m$ T9 i( t, Q
( \8 _6 \$ _/ E0 E& a8 i5 V4 w: Ustatic void led_dev_release(struct device *dev)
! P" U2 l% d5 w; Z/ A, M! l4 f1 C k{+ d: U4 m O+ [6 G- b, h
};/ F6 ]. x) J7 I8 F% M! B8 R& [0 Q" V
0 I/ ?9 V/ s) g. D# }+ q' ?1 lstatic struct platform_device da850_evm_tl_leds_device = {
7 J( J' l5 l! P) x! N .name = "leds-gpio",
, V7 S" |8 p$ u .id = 1,8 }% t0 |0 \: o( t/ B
.dev = {/ m8 ^& `2 X: j% @% Y
.platform_data = &da850_evm_tl_leds_pdata,
! v+ L5 {/ F& w* U- t1 X .release = led_dev_release,- \8 k# f7 k1 {4 l- O. N" z
}
% i( _# I6 E+ M5 z};8 g6 L# z( U- |" G3 U9 C
+ y9 `# f* d# G8 Y0 h( `
static int __init led_platform_init(void)7 r3 _- p6 _2 M# ~- _$ t
{
6 T* [+ J, W2 `5 |% b% ?, d int ret;
. C, m/ n, U8 p+ |8 }! n2 Y#if 03 {- b' L: f. z2 ^, p) L' Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 M4 g8 O, @% z' Q/ Z" V
if (ret)
' Z3 m! S( ^9 a" M+ d( O4 L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( w/ x. _& p1 f1 x+ q% p( Y: u/ t. D "%d\n", ret);
6 X9 V4 R3 R+ Q1 {- ]# Q& v+ _& d#endif8 Q+ ~( w$ Y6 z ^, i" V
ret = platform_device_register(&da850_evm_tl_leds_device);: C! p& c% ?- A- {! F1 Z' m
if (ret)
( C1 z/ h, P! `( k( u pr_warning("Could not register som GPIO expander LEDS");9 R: h1 b; Q/ p. D
else
8 C8 B: S2 ?9 ~2 y printk(KERN_INFO "LED register sucessful!\n");
' I# i l i* J2 ^; }
0 m) j5 K+ e9 e! E3 s return ret;# ~$ l1 G8 I" y2 u4 X3 @
}5 S8 T; l0 e6 M5 z! u
+ Y( S# M' {) l2 gstatic void __exit led_platform_exit(void)
: ?% _% k0 Z9 K/ V& Q5 _3 T{ o B, r6 B6 v) E' G J* `( l% {
platform_device_unregister(&da850_evm_tl_leds_device);
4 H9 w+ J/ ~3 d% e
p# Q, {& t3 h4 r- W2 [6 e printk(KERN_INFO "LED unregister!\n");
q; |' V1 w* E+ b}' O0 F' m8 e' _+ A9 U! V
0 z* U: t( |; M% E& T2 \4 a
module_init(led_platform_init);' s5 ]5 z+ S5 e
module_exit(led_platform_exit);
% ^, P; M; S+ V
# k: ^2 |" {2 z/ F1 z6 nMODULE_DESCRIPTION("Led platform driver");( ?9 `9 \7 d0 d3 b9 Z& U
MODULE_AUTHOR("Tronlong");9 n, t3 G1 Y$ ]8 P) \) m! a: k
MODULE_LICENSE("GPL");
0 }( z/ p& `3 |2 I9 m
% \7 Z) v# |( E1 \" O- }+ R |
|