|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ G3 |1 y0 G0 x2 U6 X: [9 d& Z#include <linux/init.h>
+ y2 Q1 a* c9 ^- g* Z, K* n. a& M#include <linux/module.h>% u9 v' t; r; b4 K7 ^% V9 V$ K
#include <linux/kernel.h>" n6 S" a" V1 i) M
#include <linux/types.h>% `. F" { l4 z" q& [7 l
#include <linux/gpio.h>
: U8 u% T# F& y# R* a#include <linux/leds.h>
( D& E' J6 w3 r0 N5 q( B#include <linux/platform_device.h>$ ^: r1 v( i8 X) _8 W6 L) k3 h3 Q
" d# R* s& w. i' p
#include <asm/mach-types.h>, x! r# {8 P! j2 e" M
#include <asm/mach/arch.h>
, z4 u( l+ k* g#include <mach/da8xx.h>7 ]" W+ x* t2 f* g# x0 H
#include <mach/mux.h>
4 Y6 Z, F( i B' D
1 T3 [7 ^0 h5 C, i3 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- }. v$ o0 R1 h8 V7 B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 a% m! |) s- C" A& Y8 p3 M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) i! q( B6 c& E# d g1 Q* d" t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 n* _, k, V) d6 p; y# k2 B
) J/ ]( j3 G/ x z/* assign the tl som board LED-GPIOs*/
( n2 E: U: p; x! astatic const short da850_evm_tl_user_led_pins[] = {5 Y& H( D! G5 ~
/* These pins are definition at <mach/mux.h> file */
/ E$ F! ^. }9 @6 k& _4 O; P2 s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# w6 w' p/ o; `$ F' s+ N -1' m0 s t: U$ b$ _4 _
};# ` A! c7 O- {. o( t. \
/ N6 B! \ G) q; ]5 o8 ^6 p( c
static struct gpio_led da850_evm_tl_leds[] = {
) |& p& k* @' ]( W {( _, m2 q6 j) h% D
.active_low = 0,5 @" H* m% E' D% a5 {3 M
.gpio = DA850_USER_LED0,
; ?( v, p/ m% Z0 K. Q5 e .name = "user_led0",
( ~7 s _2 L) s6 s: h# B" y0 G5 _ .default_trigger = "default-on"," _; B. Q2 k2 {9 X# f( f4 p) r; |
},
, p2 G, g* j: ^' }2 ^4 m$ \ {2 L9 }$ P- Q8 V6 B- p& F2 O
.active_low = 0,
$ }4 U. V6 T7 d1 z5 r; r2 q .gpio = DA850_USER_LED1,1 m; i# A9 n1 {1 \) q# \1 G
.name = "user_led1",
# @! \) C9 t0 V" U! {" D .default_trigger = "default-on",
- h+ ?& p* A8 c4 }: r; H },
0 L0 Q+ Z! p$ ]4 ]" y {
+ w2 s; ^; S# { .active_low = 0,$ o5 v! p4 w z$ y W
.gpio = DA850_USER_LED2,
. ?' k9 V3 q' \! e, H8 d .name = "user_led2",* d' A; M; h3 X- c m) t
.default_trigger = "default-on", X' u0 t0 F' S* f
},3 T& _: P2 k6 D$ r( V
{+ K+ g5 I- R- J) N
.active_low = 0,
, [9 e; F$ A- X* b .gpio = DA850_USER_LED3,
3 J5 V& C! l; e$ K9 B( N+ G4 [$ [ .name = "user_led3", g( t% V* n% `2 U4 J
.default_trigger = "default-on",- l, a: p- f0 H! U) d
},
/ H% S# p2 a( [' G* u};
" G6 v. `+ z# F+ I# X7 t" k' D3 _+ K/ \' ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- h5 Y$ Y \$ p! r* w$ B0 x" R .leds = da850_evm_tl_leds,
3 ~% S# E1 U4 |! l .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
V) d8 f+ R# F3 \};" O0 p0 S$ W" O0 L2 x4 d
* s0 H4 n+ [% h N
static void led_dev_release(struct device *dev)% V. P+ G6 \2 Y( n* Y' B3 A
{- c' ?" m/ [2 j" h3 J
};' E7 M( ^7 J* {! J2 m1 B
, X5 ^5 F0 u4 [( ?4 [6 Zstatic struct platform_device da850_evm_tl_leds_device = {
5 x6 `5 I- @; q6 y .name = "leds-gpio",8 m0 q5 h6 D; {, c0 v# K
.id = 1,
! ~/ p% a' n3 F8 h+ f& K; j# E' x .dev = {% A$ F1 R: c& N
.platform_data = &da850_evm_tl_leds_pdata,) o1 o5 n8 R* E
.release = led_dev_release,! F/ r. A1 Y" C$ l
}
; C5 _6 z- ?8 ^}; e1 w& t0 ]8 k4 t# @, V" i
$ \" H- Z3 J" [- h K' ?& B7 Istatic int __init led_platform_init(void): M/ T8 ~6 v* s
{. K1 d( z% N5 f0 m! T% J4 E
int ret;
; {& w% ]8 x. ]! f* w) y1 P#if 0
% j4 U; C; B. l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 ]& C S. b$ b2 X4 k
if (ret)
+ d7 l- w: |! u# O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" I; k6 _ g1 P# q# I! Q, B* X" ~7 W "%d\n", ret);
! z( ]* Y+ p- l( S8 p#endif
+ u0 e; v: @) a# A+ |3 \! \ ret = platform_device_register(&da850_evm_tl_leds_device);$ q- \( E9 w: v! s, I
if (ret)7 w5 g+ a) K6 c3 p$ a
pr_warning("Could not register som GPIO expander LEDS");! G. w. ?: z6 _! v
else
' m2 ^7 g& s& |$ K printk(KERN_INFO "LED register sucessful!\n");
S9 g9 e& m5 v' X# w/ `" D; S$ r( G2 O
return ret;
: F" P0 a2 b% Z% ?% Z8 P}
" Y5 B5 p1 O+ A0 _: {5 H% R
' J2 q8 S/ [- u6 h( Q' ^% Dstatic void __exit led_platform_exit(void)0 t- D! V7 J5 @. L1 l1 H8 X
{
; G/ j, \5 n g- i- n$ ] platform_device_unregister(&da850_evm_tl_leds_device);$ D6 U1 R- Z* ~8 r* t/ }
0 r% Z1 [* {2 ^& }
printk(KERN_INFO "LED unregister!\n");
6 t5 h* Q6 [6 @& D& Z}7 l+ E4 v* H8 J7 F) L( ~; U6 q+ s
0 j7 O C6 J x! X* N/ u7 m
module_init(led_platform_init);6 @' z8 M W8 I3 @
module_exit(led_platform_exit);; r; @( A! P' Z1 o4 u
% u' c/ I6 J( Z: l0 Q9 Y# ^
MODULE_DESCRIPTION("Led platform driver");
5 i! }4 j. o: w8 A5 _MODULE_AUTHOR("Tronlong");/ B- u4 ]5 A: J& Y2 g
MODULE_LICENSE("GPL");
2 |4 s! a% g: J. L# L! D- @2 z; u) P" m6 J9 d& ^4 M% b. n5 U* o! Q
|
|