|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 [" r2 [- T' q7 K#include <linux/init.h>
; d3 B9 u; k( H( y* ]1 G0 w#include <linux/module.h>
: c# c7 J: c4 G) a6 z. C* U#include <linux/kernel.h>
2 A1 E' a7 G0 _: y% a* q& e) J#include <linux/types.h>* K" G5 ?7 l+ u
#include <linux/gpio.h>5 X, O2 R( ?- d+ O A1 [% ~
#include <linux/leds.h>
" u1 p- l$ f) e3 P+ k" U#include <linux/platform_device.h>
2 H) N X+ V5 d3 t) ^6 P2 M4 P$ ~: K, m0 K( X U8 ]- |
#include <asm/mach-types.h>
+ g" g; L ~2 ^. w! G6 Y( l+ @- U# z#include <asm/mach/arch.h>
! T, t/ z% D) {! @+ l3 h#include <mach/da8xx.h>
9 ?2 q5 H, ^" y8 n- N j5 C#include <mach/mux.h>
( l3 l. H6 Q9 t# T$ b5 z( z7 T' Z7 Y7 ~% V/ ?3 x) Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 g+ ?- P( B+ S$ L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- ~7 S9 w1 a/ d/ }$ u3 v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* A& h8 k' ~& O& N: Q6 ~) _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 [* M9 W5 s* {. T3 Z H8 h. A9 g. {7 W: E/ k
/* assign the tl som board LED-GPIOs*/
9 _# Y# j7 Z4 v/ bstatic const short da850_evm_tl_user_led_pins[] = {
4 @* U3 C4 X* U7 j5 S3 l /* These pins are definition at <mach/mux.h> file */
( Y* C+ _8 O# w# ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. u; [0 ~$ r6 V2 G/ z -1
- Y- p7 p, B R$ r! w1 p; m( k' E! ]) `};
* c3 z9 X; d; P' Y& x. Q x; ^* Y
* B3 p) w; s0 [2 cstatic struct gpio_led da850_evm_tl_leds[] = {' [# R& Z* |# t/ Y4 v9 R3 ?
{
1 p* `3 A, e/ l$ a( I .active_low = 0,
4 x5 O0 K" l* b, e .gpio = DA850_USER_LED0," s) O3 B- P% P* y0 h; v
.name = "user_led0",
1 c. C" U3 U' V4 m$ y" L* o .default_trigger = "default-on",
n; e) K$ F( k/ x& q7 r }, d% c( a3 U( C% ]/ s
{5 w" W: T' b) ~ W. b) K
.active_low = 0,
H g& }' p9 c- l4 |% T5 @, i .gpio = DA850_USER_LED1,
; w* n, g0 ^' }, C/ F& } .name = "user_led1",% j4 B# j) F D' _ u N- R8 o) |
.default_trigger = "default-on",
) j) I: x+ M( N8 B& |( C: r },
" M5 Y; h# l3 Q+ t9 e6 e" a9 e+ D t {5 N% N) `& @8 d2 z0 Q
.active_low = 0,
! Y7 p$ F- v; w$ Y8 m+ d% n' L$ Z5 P .gpio = DA850_USER_LED2,
0 K, [2 W* h' h" G4 F .name = "user_led2",2 z9 [! ]( G7 W% P! {) B6 p
.default_trigger = "default-on",
L% z. m4 ~5 s7 M1 D3 l- } },
/ @$ c& ]+ B, y! n {
7 q4 m! ^) c! z4 j( Q .active_low = 0,
- C3 C+ ^. ^8 z1 h9 a1 c6 z5 F) x .gpio = DA850_USER_LED3,1 m, d+ j! Z) h0 ]9 L. @
.name = "user_led3",
1 x2 K: g) V, W7 p: r .default_trigger = "default-on",
2 [2 f9 F' ~# E7 _; o },3 \7 `6 e- H/ s' |* J9 o: x
};
: m% A N8 R9 y! G3 H* T) Q0 I- |/ \( }9 G% j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% j* b9 \+ W7 d' p' R3 C .leds = da850_evm_tl_leds,
! A0 |7 o, L- a* ~0 |* c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 @% D" n' c) n( D" W* D! X};# V, F( W- p5 F4 s
$ B- O' E5 u7 @
static void led_dev_release(struct device *dev)( k- S% T/ r) a u7 R* m# S
{% h/ |/ G8 w6 j; z3 [: x1 _
};
8 d+ Z* ]6 K/ c% ]
! N' L: t8 L$ x2 x7 \! v0 M8 z3 Mstatic struct platform_device da850_evm_tl_leds_device = {. Y* r1 d6 o* R0 R4 y
.name = "leds-gpio",
- K# g' |0 O6 W3 m' B1 x# A: Q .id = 1,& ^/ O, Q: R2 {( u
.dev = {0 A' q1 ?; i0 Y7 w5 i
.platform_data = &da850_evm_tl_leds_pdata,7 T5 A+ ^* \+ h" X4 G7 J/ W0 r
.release = led_dev_release,7 @0 f. W1 m; _: d2 `, G
}
% U/ X \$ x0 [; L5 t# }) E, B};
9 n0 n# w% u% I3 Y8 c9 h; \! F4 V( A
static int __init led_platform_init(void)
; }* Y% h, v6 i" m/ h{
) j& _) l0 _; Z4 u3 q2 U int ret;+ K G# ^! b! v
#if 04 Z2 n& E2 f p' U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% Y- E3 C4 m* s3 b) y if (ret)
) N9 ?# B& @* c6 [* K4 ~; f8 R0 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 p: K; K) V9 ?7 _% @9 t G$ ]
"%d\n", ret);
9 ^- L+ N2 n2 a' b6 U#endif
5 i4 H" f; |! D% d ret = platform_device_register(&da850_evm_tl_leds_device);9 o& g# J, w* }7 O' Y' h
if (ret)
$ e) ^! Z2 I0 z8 Q* m! E) ~; B5 Q pr_warning("Could not register som GPIO expander LEDS");
/ E# ?& ]9 V3 G& C( U5 E, h else, C& C$ t, u9 |) [
printk(KERN_INFO "LED register sucessful!\n"); r- y" l) [$ R' ^/ z; Q5 e6 p
+ P7 J6 H/ u5 Y( m) B. u# \ return ret;$ i0 v2 u% }9 V0 P& r6 i" p% a$ j
}
% A o: L8 @ k/ E
, M% n/ A- H3 u4 ?' l8 Q" Dstatic void __exit led_platform_exit(void)3 g" }5 h7 k. z4 I, H0 \
{
' b% K1 j- s) d) Y3 U9 p0 w0 }' Y platform_device_unregister(&da850_evm_tl_leds_device);1 c, K- W* X' w; P) h0 a: a0 M
; a) Q- g/ c5 m: U g# i/ H9 d printk(KERN_INFO "LED unregister!\n");
1 O1 t; F6 e: @, L1 v4 A, e}& l" \1 z& |( @; `
9 ?0 K% W' T' O" O7 a6 [( bmodule_init(led_platform_init);) J- z9 p' \1 |$ U2 ^1 Z- ^, m
module_exit(led_platform_exit);
+ f: n3 [8 p- \" V7 |# }- d* m, p* V# Q2 j x# L
MODULE_DESCRIPTION("Led platform driver");9 w* M9 P; w+ S( h% H, t8 Q
MODULE_AUTHOR("Tronlong");
+ R. W' ~1 P: |0 qMODULE_LICENSE("GPL");6 F; y6 g) V Q4 y# _( }# t( [
+ m* m) I1 _* P4 A" [, ^3 g
|
|