|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# w& P, {& t% ]- }9 P W5 v; ~2 M" m#include <linux/init.h>8 D4 p1 B! m$ q, a4 n- s3 j$ A
#include <linux/module.h># k) O. N% [( K- R/ `
#include <linux/kernel.h>( S; q, D3 ? X( q2 M" f1 i
#include <linux/types.h>4 ^5 T) X; b/ f E6 W) `4 U
#include <linux/gpio.h>: ?* n; P5 C: t' U
#include <linux/leds.h>4 c7 S- I- H( [. L
#include <linux/platform_device.h>: r0 b; U1 P4 B2 K
" G- Y$ r0 R) o" Q3 D! Y' \, ]
#include <asm/mach-types.h>
" _( m1 b0 x7 ~" K3 o% |#include <asm/mach/arch.h>' y* \% h! L4 Y5 u: W, n+ J) u; S
#include <mach/da8xx.h>, R% s! E; b) f! m
#include <mach/mux.h>1 ]) Z" L0 E0 g4 l w& P* X, j
3 X" u/ C& o2 W5 X+ c. K& r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- h- y2 E; B# f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" j# x& X, r: K! n; c0 K. q5 d% q+ e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ a4 I& m4 w Y9 n, S3 y7 m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- R! @. L9 f8 b) b
9 u% O% |6 ?7 I
/* assign the tl som board LED-GPIOs*// G) n$ d# A: F
static const short da850_evm_tl_user_led_pins[] = {
& i6 ^. A# a S' b+ u, z /* These pins are definition at <mach/mux.h> file */
3 M8 u; ~- Q$ N% }! y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ f' n' B# A; r) J5 S4 u
-1
* U( v0 [' x6 H3 {( e4 `8 l; L7 a};- V, ~6 D' V& N5 S) n
' n0 X* {3 O x& B* E6 mstatic struct gpio_led da850_evm_tl_leds[] = {
% Z. o/ t8 X1 k {; a+ M4 a9 |8 k$ E
.active_low = 0,+ z7 I+ i K; h0 }' B
.gpio = DA850_USER_LED0,7 F, z) n6 `, E* B2 q& i- U. W; H' G
.name = "user_led0",8 O/ Y4 A: S$ \$ a Q8 o& a
.default_trigger = "default-on",
3 l& D" t2 {& Q8 X },
" ~1 S) D! F' }& d" V" n3 ?. e {3 ?% f& d0 _/ n+ G* N
.active_low = 0,
2 A, _7 ]7 [" ~9 v/ ?. N .gpio = DA850_USER_LED1,
/ Q, C- h8 W) X7 Z .name = "user_led1",
$ {: `# C* g7 E+ @) w0 |1 E .default_trigger = "default-on",% o# W- q: r ~$ x! _ b
},
3 r4 a l$ G# v% I {" z; N( G6 T4 Z. _
.active_low = 0,: \" }2 o7 }8 x2 }/ k2 m- A* R& Y# W
.gpio = DA850_USER_LED2,
6 C3 G3 y/ y. S, C: {, f# K .name = "user_led2",9 m3 _$ G# x& f) \# D) D9 A
.default_trigger = "default-on",4 i! J8 P% p" ^' o3 `
},8 B. d+ J' C8 N) \ }
{
8 ^9 m" U, s2 V# @; q @$ P .active_low = 0,
) D& U6 ^5 @5 ?+ O" i: I( p .gpio = DA850_USER_LED3,% J6 d" d& l$ K4 b6 v4 c; ^
.name = "user_led3",! b" P% W4 Z4 a; c3 k7 a
.default_trigger = "default-on",& Y. \, I1 }$ B: K1 u! }
},! V" A( l7 }+ M" h. `# I2 H2 ] j/ o
};0 u& r" k6 i6 P5 [: {2 j+ p
! s5 H% B' p+ S) ?# M7 n" B, Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 Z9 P) F/ i- f( c9 |% _
.leds = da850_evm_tl_leds,
- k# q/ ]' V4 b1 R) x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 W) V8 ^8 u; k4 `2 r! ^2 Y- }};: _6 D0 N# i2 f
( o5 n3 I' n6 r. S
static void led_dev_release(struct device *dev): p6 s: {! m+ Q, F
{$ z. J7 @0 O( L4 @; R+ H5 Y
};. C" y7 Z. r2 f% ]# v
+ m Q, A; w0 W, }$ k% Lstatic struct platform_device da850_evm_tl_leds_device = {% }% F' m: o) I. w
.name = "leds-gpio",
: a. ~2 a" P7 F! j) Q x1 w .id = 1,& ~2 Z) U$ ]; I* C8 ~# y
.dev = {
! k; S. V7 I% M" o8 h .platform_data = &da850_evm_tl_leds_pdata,4 |5 i; C! }4 T9 M
.release = led_dev_release,
1 H* Y7 {! D2 p }
; i$ Y1 X, o7 T3 k. A* O};, R% M2 P& ~3 K- c, v% N8 N
$ S; P5 s+ B- ^$ b
static int __init led_platform_init(void)4 \* z" y. I3 ^/ z
{
}* A* Y) E; V6 Q int ret;- k" [, a8 g3 `+ ?) w* P) y6 E
#if 0
! X' z# s: i+ [1 k- Q! _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& v, v% \/ q, l9 G& e* T& v7 D if (ret)8 ~& y7 X* L. Q$ m) \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 }; I1 a2 r; \7 z
"%d\n", ret);
7 l4 z( l4 o F$ S4 Q2 q6 w! l#endif
2 `4 m+ b! L( [0 @7 }& i: F J ret = platform_device_register(&da850_evm_tl_leds_device);
) E9 t% a. D4 ^3 ?1 T7 c if (ret)
2 r. ?3 X$ R& C( R pr_warning("Could not register som GPIO expander LEDS");
9 D1 z6 I) d; f else
! d+ q, e: v/ r printk(KERN_INFO "LED register sucessful!\n");% L1 t& @7 G3 h
% I) A" P8 @" z. o3 S: m. x7 U6 U return ret;8 ?, z4 ]5 ~ B, y7 u" M
}) H" f! N/ a% l* J
: ]! e+ p/ X8 a8 l, j% e
static void __exit led_platform_exit(void)! n# N; u) Y& o& ^- c8 w
{. d& T; n+ s4 T5 r N' S
platform_device_unregister(&da850_evm_tl_leds_device);" b+ l; d$ F- g8 V9 k* W6 H
. M; w0 y' |( p _5 E& {, E8 D R
printk(KERN_INFO "LED unregister!\n");# P6 \: C- q. G% E" D+ K0 s
}, A$ A8 E( q' S: r# \ ], [9 w
. Y9 l& j/ E- O8 a3 A9 t, f! l! |
module_init(led_platform_init);& v3 t7 K2 P" n1 d
module_exit(led_platform_exit);$ o/ \/ m8 \3 E4 ?$ R6 q
9 t0 _8 b$ d) H- x3 R5 ?! nMODULE_DESCRIPTION("Led platform driver");
' P9 x. G" S. S k. L* ?. t% ZMODULE_AUTHOR("Tronlong");- Y+ n r' c; Z' F
MODULE_LICENSE("GPL");) H4 S& r( a5 a
. t/ O. K5 B% j. v& Z' o4 Y
|
|