|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 A0 ?% a4 |! \3 H7 G8 ~/ L$ `#include <linux/init.h>
" _) a+ B* k+ R' z! N#include <linux/module.h>, l8 s) p/ d8 Q K$ y
#include <linux/kernel.h>( X4 J ^" N7 s% L
#include <linux/types.h>
- U$ U, N- I1 S; L#include <linux/gpio.h>4 n) s) W8 ?* L; l9 d% v
#include <linux/leds.h>
! ~3 _& A, W: w) t' D: G$ J7 m#include <linux/platform_device.h> X2 F/ V8 S( b% f
3 }6 F! U) i& Q9 b n) _
#include <asm/mach-types.h>) k; c5 w7 B9 e: N& V- t2 ?- n
#include <asm/mach/arch.h>8 Y# C- p! t/ Q
#include <mach/da8xx.h>* R( z% S: u9 L( b+ W
#include <mach/mux.h>5 D( k* I+ u* M
* x5 `: Z: @$ [; I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" Z5 W6 @- D6 }2 K* `; h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' i2 M! {+ v$ }; x- E0 O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, i' H- e" U }, h: I+ i6 r) v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) ~2 @+ a1 [ p- ^& E6 \! g
- a" h, z% H( H/* assign the tl som board LED-GPIOs*/
* t6 Q, y) J+ xstatic const short da850_evm_tl_user_led_pins[] = {
* g6 N" w2 \; B9 ~ /* These pins are definition at <mach/mux.h> file */
+ j; |8 V4 m5 h8 u( o: F1 ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ ~4 W- b( X$ w- j3 b; Y* c
-1
' R& h1 V. I0 T- `1 N/ Y. R};
2 d& Z( A# C" m* w4 F$ M/ X" }; |# ?8 ]
7 v+ h# n( P' ~- V) Astatic struct gpio_led da850_evm_tl_leds[] = {
& A( F x7 V# [/ K! B {
- l! g* A! D$ L6 y! g .active_low = 0,
& C/ b1 t; X m9 {5 D .gpio = DA850_USER_LED0,
6 l- z0 f' i+ f, F .name = "user_led0",
4 B, p5 t! }8 u1 L) U .default_trigger = "default-on",5 i# |; R2 ?8 Y' q! P% W
},8 U; ^, [( G0 w+ l$ q1 @
{1 n; C. g: S0 t. z9 F8 n) S
.active_low = 0,
/ `" y/ x, _2 O% \' q .gpio = DA850_USER_LED1,- J7 N9 O& A* P3 a# {3 o
.name = "user_led1",
' H# b- c- b" `' P6 m. @" \5 F .default_trigger = "default-on",; I- k% X4 L0 p
},( L4 l* W1 e8 @& L% l$ C
{
, v% j7 }8 ^, C .active_low = 0,
5 [; k- m i2 O$ W& e) V .gpio = DA850_USER_LED2,
5 J% _6 q4 ^" x" o0 s .name = "user_led2",
& `. U' q0 f5 t) H1 U/ T .default_trigger = "default-on",2 R; S( v6 A' G) A
},' c5 \" {- y0 J7 }
{5 e f- w# y% s# _
.active_low = 0,- K7 p5 f2 F' c- v l# g2 n
.gpio = DA850_USER_LED3,
7 w3 y* t) z6 O, B .name = "user_led3",# L, a! ?% B( y3 q9 n0 R
.default_trigger = "default-on",
( q- V8 [* Z' c ?# Q$ y& A },8 ^- M& \" z( k5 H- ]
};
8 I# c$ I6 x8 g) X+ [" F" A
( A9 L3 x2 h. r& S- D1 Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 {, J5 v+ q3 K' P! ] .leds = da850_evm_tl_leds,/ B4 f( G/ K: u, _1 R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 y; d a5 c& Y. c9 |};
/ s& a, f9 ^8 Y6 l! r: E2 t. u* [; ~* s. z m# `. r& c
static void led_dev_release(struct device *dev)9 f7 t! p0 b8 S
{6 G O) A% S) S# X
};# u' D' W' A6 [/ g) U
3 x2 n1 T8 m. q' @2 tstatic struct platform_device da850_evm_tl_leds_device = {6 M4 F, w" M: Y+ Z. z/ y+ j3 {, [
.name = "leds-gpio", T( `+ ~* w9 k5 c! F
.id = 1,& |4 |( x+ L9 c- B# v' |
.dev = {9 g- w0 G8 z7 N0 A2 ^$ l
.platform_data = &da850_evm_tl_leds_pdata,
+ g5 u! a# V6 Z, P2 c .release = led_dev_release,
( i+ M0 [4 m) Q2 X9 S0 x6 S. V( ^ }
* u4 W* m7 ]( b. W};; B( l3 S% s' ?
& X, k* o" J( t+ k
static int __init led_platform_init(void)
( \! Y0 K9 d8 M7 |- X- f{ W J" M2 d' q% C1 s: ~% i/ K
int ret;! q# x u7 ^5 G# m. e7 O9 Z8 @1 V
#if 0
" [- z# L" J# n% h; I" G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& r, V9 d4 _. O- s7 k1 Z0 Q
if (ret)
* q7 j1 O5 Z R( \3 e- R% N* S& x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: { d$ I, z" W% |7 I "%d\n", ret);
1 C D1 m. s- C- `1 I#endif
& T6 b& ]" G& G6 q. C ret = platform_device_register(&da850_evm_tl_leds_device);) {% J- }& @ {3 t
if (ret)
9 A$ W6 Z$ ^" W T0 e' s) }1 ^ pr_warning("Could not register som GPIO expander LEDS");, Q& P. L* k g z: Y/ O
else- U! w% ]- P+ a x m8 g" b1 N+ t* d
printk(KERN_INFO "LED register sucessful!\n");
0 u. c% S7 C6 ~; i4 `% s. Y' M ^( \8 P8 u; x
return ret;
; z4 M. o# a: v! \- j8 {8 S}4 |+ e. ] V) k2 s) U; o8 x9 c( N
# B5 D0 g; S, ~ r0 v3 T- \static void __exit led_platform_exit(void)
& V A$ A9 P. T3 k0 `$ d& W0 h{( ~" @# Q2 `7 e7 Y7 l) b+ I4 _
platform_device_unregister(&da850_evm_tl_leds_device);
0 N; ~' C0 r( w8 M7 J7 n# K% H7 Z3 h( _0 a8 X: k
printk(KERN_INFO "LED unregister!\n");
9 C2 ]/ g. d% t$ V}. f8 e' a* I% c& A0 J
7 C) G0 Z" {: ^7 z6 P* v1 v9 w
module_init(led_platform_init);
7 ]% a5 {. j d5 g+ t! p( k ]$ @+ Q% ~module_exit(led_platform_exit);
9 x1 H0 l0 Q( i% |9 x) s0 j2 K0 F# N$ X+ s7 Q/ H* y5 w r, q
MODULE_DESCRIPTION("Led platform driver");
+ [/ d$ k; k0 K3 H, O+ P9 }MODULE_AUTHOR("Tronlong");
9 P y |1 Q/ P0 UMODULE_LICENSE("GPL");, B! V1 T/ ^9 ~ p" h; `! L" y
8 ^8 H' ^+ W5 P, |3 m |
|