|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# w% T b+ }4 t+ [, B
#include <linux/init.h>
" N/ H' ^3 C; E8 z. b3 s+ V8 T#include <linux/module.h>5 h D" p4 v1 q, Q+ i r, @
#include <linux/kernel.h>6 e; t0 h B3 [! O1 x
#include <linux/types.h>
( u4 S6 @0 o3 O8 X; @#include <linux/gpio.h>
* b, m. y" q9 S- G) k#include <linux/leds.h>
8 L& S& D& j. ~$ U! g. k#include <linux/platform_device.h>
! J# B: ]6 G2 G$ D0 b0 J. k) Y5 Z0 P9 U: c3 B7 Y
#include <asm/mach-types.h>
: j/ N; O$ l. [6 C" ^$ U- b( c#include <asm/mach/arch.h>+ B6 }9 @; j' b) l4 X; D
#include <mach/da8xx.h>
9 h3 `) E) @* s. G3 ^$ v#include <mach/mux.h>
3 h. w9 |( h- s" S; W
2 e5 M0 A" ?; q# k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, s0 F: z# Y S/ [1 \; W5 e$ d" F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: T9 Q' Y @& @' U& ^" Q5 Q5 ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 I( b/ ?1 c. ~) S! z; V4 Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* S6 l$ V$ Y- C7 U% _
% l5 d- V& N& ?9 b/* assign the tl som board LED-GPIOs*/
) H+ y7 A# g" z8 Cstatic const short da850_evm_tl_user_led_pins[] = {
; \! U/ k% X' g) E* G /* These pins are definition at <mach/mux.h> file */
/ ?4 | O$ @/ |0 e v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' u; C) K _* O+ w% }
-1
' ]# _0 T% F7 l6 G6 |( w};/ O! M, s3 T4 l0 a: u4 a8 W0 v
5 j7 ?: n; Q, I5 f$ Q8 ]9 u
static struct gpio_led da850_evm_tl_leds[] = {
: s. k. {6 j, X( X* w1 v {
+ k% c& U* j) f3 V' [! J .active_low = 0,
" P5 e* { t+ Q/ f .gpio = DA850_USER_LED0,) q* O* `5 p/ W: |& T8 P) c
.name = "user_led0",
' Y$ h$ t9 F. m .default_trigger = "default-on",
" Y7 o/ j( ^9 Z }, d7 f( e# T( j! L% n8 d
{
6 l4 I b( ^% V+ V1 T3 p$ @. A+ M .active_low = 0,0 o7 d ]" ^0 t2 ~' D, Q# Z: C
.gpio = DA850_USER_LED1,
$ v" y* q6 b% Z$ i/ N .name = "user_led1",
( F4 X, l. j5 d1 h2 Y .default_trigger = "default-on",2 D3 F! ?1 [( p7 K( g O' c; y9 E- A# w
},
' X, [' J$ X! [6 V {! y0 o) A# R6 a2 v+ v
.active_low = 0,8 V F6 D% K" w7 {3 D x, L4 }
.gpio = DA850_USER_LED2,
! W R1 M9 S7 S8 E2 p- B+ v1 `$ P .name = "user_led2",, M8 U4 a& c3 N% ~
.default_trigger = "default-on",7 P8 c( G3 i* K' ^
},. v' }1 c# x0 g7 U% |2 w
{
/ M( q" {. n: K$ b9 L .active_low = 0,$ V' w: a. n5 z/ T6 {
.gpio = DA850_USER_LED3,
) w4 t# F1 w- n& B .name = "user_led3",
1 o; `0 |: \7 Q+ k u .default_trigger = "default-on",
3 [9 X7 {1 e, r& |5 r+ k },- y% Z9 G/ O7 O p0 x4 a" t
};
- P1 P4 v% Q0 x. Y
( I' e5 L6 L1 o, sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 A5 u! p0 S! C .leds = da850_evm_tl_leds,7 o8 Z/ V3 ]7 D/ R( q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- k' ~) g0 Z, C2 c: G
};/ L4 t. P- q: }' y3 X
8 @5 `+ v9 N6 D1 ]3 ]% V) L5 W
static void led_dev_release(struct device *dev)
3 h3 j" D9 n& C( B% R{ H7 [; j+ I6 w0 h* x- ~( e
};
% |7 Z t* c b$ [1 Y) V8 J0 E j; e( P- T1 A
static struct platform_device da850_evm_tl_leds_device = {6 `. r7 d b2 C1 F5 ~
.name = "leds-gpio",
7 S' z3 o- E! P7 n2 b3 R .id = 1,
" s. D- S K& M2 ?1 k: h .dev = {
3 z; ]% |; c5 g: i9 x) u .platform_data = &da850_evm_tl_leds_pdata,5 d8 ~, n6 j8 Y% U7 \2 Z, w* P; z
.release = led_dev_release,
$ a; z0 g2 W3 Z C }* F/ q r) b6 K* t% \7 ^$ L
}; _1 s* O5 X0 {6 _6 Q( s
4 O+ x# T& R$ y+ Cstatic int __init led_platform_init(void)6 j% Z3 u7 o6 k/ o
{6 _- T' k2 k+ w5 |
int ret;
P5 i1 w* T9 X, v5 U- {: l5 G" V#if 0# A* B. C: o1 J( z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 y6 }, H: X' r9 d6 E3 z+ q if (ret)
/ }: n: m( t* d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 o! n- {; t' R
"%d\n", ret);
# j0 }, ?. N% V' }#endif
: t2 S& r4 S @; e' y* ]( b8 O+ G ret = platform_device_register(&da850_evm_tl_leds_device);0 ? w. u3 K% U! q7 r3 o) V" X2 |/ x$ {
if (ret). _, _0 ?1 z5 G% K& Y
pr_warning("Could not register som GPIO expander LEDS");* t. G0 j7 o2 l% ?: M
else
$ d& G0 f1 d( X w, h7 ^6 U( C, B- U printk(KERN_INFO "LED register sucessful!\n");% m& x% D6 T, e7 R$ n* Y! J
4 B" t# m/ k: u3 r
return ret;! v3 t B. E# b7 i* D# K1 v6 e9 J
}' @ G4 A. p$ M5 k- X0 x6 {3 I
0 `4 M% M' h5 |+ m [ ?
static void __exit led_platform_exit(void)% ?$ I$ L+ e0 L% v4 Y
{" x5 P* Z* k. u0 y) q: F
platform_device_unregister(&da850_evm_tl_leds_device);
* ^2 `; D1 \2 s. l2 f6 }" w8 `6 W4 u7 `! Z
printk(KERN_INFO "LED unregister!\n");: |. M2 B: `# P K, t Q O
}
) M% R5 G3 l) C( P ]
, @4 L" L& P: m% S! O2 tmodule_init(led_platform_init);
& s: r: M& P* ^' Jmodule_exit(led_platform_exit);
* v) t: m1 n# q! o0 L* U" L9 o6 h! q: g+ t; {
MODULE_DESCRIPTION("Led platform driver");: v, i* r4 g" w; T5 _- V4 ?. s# _
MODULE_AUTHOR("Tronlong");
! V- W. z( g1 b7 d4 d5 b% GMODULE_LICENSE("GPL");
2 m# S, t( l1 L3 I* A+ u3 e1 d3 T* Q) E& S
|
|