|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, A4 x" T; ~0 I! n# T( q
#include <linux/init.h>5 D: u& E6 j' ]# K+ A
#include <linux/module.h>
. p' ~" K$ D5 d) l# C#include <linux/kernel.h>
" O7 p0 d0 z$ O; B+ B( A& | T8 g#include <linux/types.h>8 Z' v4 V( Y7 }2 D
#include <linux/gpio.h>* d( y. k2 ~, ?: Y) R) k* r4 Y. O4 h) t
#include <linux/leds.h>
! f+ m+ V8 |; W6 v$ s8 ^8 p: w7 n#include <linux/platform_device.h>- [& c4 j" r- J# O) a3 F
* j- J" s2 ^7 q9 `! _
#include <asm/mach-types.h>
( M# @5 S/ H, t#include <asm/mach/arch.h>
5 Q& I3 R1 x$ g% o5 e1 z- |$ u* ~#include <mach/da8xx.h>
7 ~# ]# R: i" P( Z" ?* P#include <mach/mux.h>
( n t' ~. w7 k+ x% y g: C5 e1 d6 e' W ?9 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 ^0 T2 u& }' ]1 [, c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 M2 K7 B# _: a8 u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 q4 ^6 G1 z$ |- K/ G0 F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ c7 G2 L5 A2 O5 S! W Q) E& K7 @
/ T# _ Z, ?& _+ x1 e1 s1 H/* assign the tl som board LED-GPIOs*/% T+ `) S9 m$ v" M- @
static const short da850_evm_tl_user_led_pins[] = {4 p/ y+ K9 k& B( q# K; r# _
/* These pins are definition at <mach/mux.h> file */
$ ~; P2 E4 ^/ V' T; |' Z6 c$ W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ {, z; Z8 U0 o
-1; [3 |: Y4 `3 S( I3 u* O
};3 ~; d- p) u1 P( ~! U
6 N% N* f, q' |; A* W
static struct gpio_led da850_evm_tl_leds[] = {6 t+ }) Y: b" e$ f
{: U: c; K/ K" m' |
.active_low = 0,
4 u' s8 P+ s6 x8 m4 A5 B0 X# s; ~ .gpio = DA850_USER_LED0,9 q8 W" a) V( k$ S
.name = "user_led0",
7 B1 D2 Q$ l1 K4 ^/ j .default_trigger = "default-on",3 F% {! z6 X1 \
},
! v# \! G- T, X) H5 L9 D2 g5 W {
B$ s+ z" u/ d& R) g" x5 V .active_low = 0,/ l, C. x+ m/ ~$ ~% B1 U
.gpio = DA850_USER_LED1,
# s2 ?! \% |3 n% ^ .name = "user_led1",$ _: E3 K: a0 J! p1 ^
.default_trigger = "default-on",
3 Q8 Q# P+ a$ o- d) q: @7 o },; u+ l! L! Q, ~+ h7 | `3 l
{1 _2 b/ U$ r% h. h$ @: M, ~8 a2 {- `* J
.active_low = 0,/ x8 U6 o1 E# Y! f0 ?0 l
.gpio = DA850_USER_LED2,
' W5 B: P( R5 ~; T .name = "user_led2",
% `7 F. A: C: z% a .default_trigger = "default-on",
4 Q: k! k. W6 H$ T* | },
# ~2 P/ H6 Z2 S2 y# H8 C3 E. f. ?8 @ {
/ v! ~! b& Z3 w: S .active_low = 0,
% Z, v w0 L' p4 d .gpio = DA850_USER_LED3,
7 p* J/ W& }( y. f5 w .name = "user_led3",
4 j/ f% }- J* @/ [6 c8 e .default_trigger = "default-on",* |# H: _2 x* _2 q& E8 g9 }2 J
},6 `' t$ O1 {/ I, P0 |
};
) i" y& Z& u& ^" h3 ~5 f% `- W. ^8 }$ p+ i0 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: Z Y6 L3 v1 _) N& ?- t% @
.leds = da850_evm_tl_leds,5 X# v Z" j: G/ `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 L$ c. A j# R9 R9 `+ X};9 ^3 t! L, h4 m+ s; \+ M
$ G) g) m, W* Z) W5 s7 d' w" Y
static void led_dev_release(struct device *dev)
2 X( P$ S0 M1 k* q3 [0 o{! z% C; a. f$ O1 r' m( U9 V. c
};
9 [$ Z' j- k& x9 |5 E f
: W Q% u: I2 R6 U4 l) ^static struct platform_device da850_evm_tl_leds_device = {
( b) _0 l+ X2 a& j; | .name = "leds-gpio",2 C6 X3 s! g3 }( L2 d+ q9 h9 l
.id = 1,* o0 t. v! l+ Q/ G( ?( l
.dev = {
$ v2 u3 M5 }: M. ?$ }( w; I .platform_data = &da850_evm_tl_leds_pdata,
& ~; y; t1 g P$ ^/ q .release = led_dev_release,
9 l, z: c0 y$ m) t. `( \2 m- D( T3 N }: X) y! k( E2 l v8 }- U& A
};' \- m! p8 R" R6 \- @. _
2 ?7 \6 O7 }* m4 N3 X# h3 Astatic int __init led_platform_init(void)7 Q' V0 t$ A V3 f9 ^4 R- p7 p
{* I6 l- |4 z) a" r) k4 i
int ret;9 I- a: C a0 |4 I5 J
#if 0
8 k* ?( C! X- d6 T8 _9 t+ P2 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( A) r4 w c$ D! Y
if (ret)' G) {( S" S; i: z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", N6 }; I; t/ I+ m5 g
"%d\n", ret);8 }) [0 A) o" q4 F2 w( e
#endif
* |, {- l! u3 _/ W9 e ret = platform_device_register(&da850_evm_tl_leds_device);
/ U- f- i. p" _5 e7 }$ E5 D if (ret)
9 Q' Q* E' _2 ]' T1 Q6 g p$ T pr_warning("Could not register som GPIO expander LEDS");
% ^: }' s7 V6 R1 d- {( G- O) u2 _ else
+ a# K2 {' n1 B! E" C5 K2 h* n% K printk(KERN_INFO "LED register sucessful!\n");
, E6 p% x' _! g( C3 H v) K ]3 _
return ret;
5 Q/ y5 Y5 j, t) u9 {5 `8 {' q}- X2 g: q. p& E/ P* W& l
: m2 t0 z8 x) w6 _% k5 E3 E s3 qstatic void __exit led_platform_exit(void)! S; E0 Z9 f! A2 \
{* ]* V) U- ~; m# J
platform_device_unregister(&da850_evm_tl_leds_device);& F4 e( f5 E' h% I1 H( e
: Q5 B/ k: \# z4 N: K+ u% K printk(KERN_INFO "LED unregister!\n");
$ `( |( a0 Q+ N7 s4 n4 ?}
1 a3 @; d9 Y9 ]4 S2 F3 k0 K$ o: t* ^2 N8 V3 u; R3 X
module_init(led_platform_init);
7 | c, c1 h4 V% kmodule_exit(led_platform_exit);
x5 k3 {4 s8 g: |! p7 [ h0 a% q# \. H; H6 Z, @
MODULE_DESCRIPTION("Led platform driver");
8 y" e- E5 S% x& Z% o7 M: m. LMODULE_AUTHOR("Tronlong");
/ X) }# W- E% p9 n. _MODULE_LICENSE("GPL");4 o6 L7 V6 a9 \: ]2 P& Z- U$ R+ y
+ v7 @: l) ]& r8 e2 j. k |
|