|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 x6 T# _, Q% _' O#include <linux/init.h>6 [: q: l5 x' x8 ?, u
#include <linux/module.h>
% y; h+ i7 {5 X7 @6 S8 E#include <linux/kernel.h># w0 m+ n4 M3 a. {! y
#include <linux/types.h>
2 ?& |' X( N. |9 R#include <linux/gpio.h>4 Y/ z' q# \# x- I1 t! m
#include <linux/leds.h>
$ X7 h) @) V& q$ r, w' i#include <linux/platform_device.h>7 f' h. U# x2 [- Y4 ~6 z5 x9 k
( [# z* r0 f2 R8 H. B
#include <asm/mach-types.h>+ L6 S0 j. g+ X3 a V
#include <asm/mach/arch.h>
2 g# q v# B! {; S! i' a#include <mach/da8xx.h>
3 y* c) F% L+ n! B1 Y* q; `- I#include <mach/mux.h>3 v" r- C: J5 u1 O: E4 Q$ R
+ J2 S' s8 h' Y I& R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: g1 w/ ?0 l( S+ e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; } j+ J4 m5 h" ^5 R5 T, m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# N. v- |' ^5 \# t0 v5 M6 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, Q/ h! s x8 ]- t0 Q6 q' o, c2 p {1 a( d' C/ o* _
/* assign the tl som board LED-GPIOs*/; t+ ]( R: Y- }
static const short da850_evm_tl_user_led_pins[] = {
) {# r+ |- y8 R# Z3 @$ f' D /* These pins are definition at <mach/mux.h> file */9 |( Z }* q+ y- e) g3 g H0 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 T; V- X: y* \* i; Z+ T2 x$ v& k -1
2 L) H5 y5 g$ X};: W+ ]* W9 E* S( B
: h# w* {, ^0 @: w4 w, w
static struct gpio_led da850_evm_tl_leds[] = {' b" j: {" Q. t# V
{. o' K7 m5 X7 J! ] S& c, {
.active_low = 0,8 N' o- A3 F3 Q, z3 A( M. `# J
.gpio = DA850_USER_LED0,
# U' g, b4 M: Q8 z% Q% F9 I .name = "user_led0",
( l. U& [- p3 y8 `- \4 e# V .default_trigger = "default-on",
! r6 F: c& x$ Q },
, U+ A5 A5 d# h {
1 ]4 _, |. | q* { I1 K9 C# ~. m .active_low = 0,
0 \9 `7 f! B+ }& B .gpio = DA850_USER_LED1,
0 Y- X* o: |0 ^% `8 M .name = "user_led1",# n8 d# a; ^8 S) g# ]
.default_trigger = "default-on",
% d6 D' d0 y& m- H6 ~+ A, |0 `, { },0 D/ n% o P9 O+ S+ x: H8 S
{
* j/ [; z# D" \& p: O .active_low = 0,# k. c$ Y- |1 x
.gpio = DA850_USER_LED2,
* ]! B' d* `$ s) R# o1 r .name = "user_led2",
. n5 T4 |4 K+ H: X .default_trigger = "default-on",
) I3 E5 ^! A$ x- s },
5 a7 L; t/ U1 W2 E3 y {
: Q4 d% ]( t1 q .active_low = 0,
9 T9 l" J& ~ O& E0 U2 N: J. } .gpio = DA850_USER_LED3,. c7 z8 `9 h7 [& b
.name = "user_led3",
" r, S# B7 Q- s* c% z- f .default_trigger = "default-on",
& o$ q, |9 h) [! r0 N; i+ j },
1 q% I+ o4 ^% x: M; e};
+ \( ^- z6 i+ D) Z0 l. t; i& Q4 t( }) X
/ F: W" t% H0 Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; q, t$ c& z- D5 H: Y3 \" t
.leds = da850_evm_tl_leds,
! J0 X2 o' }0 t# O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 k/ C) F* H1 g
};
& `. s8 a+ K6 j! O
8 V: R# F9 F- V& G" _static void led_dev_release(struct device *dev)% Q4 ^" w! G. X2 ^8 m. Y
{
/ i0 [) b0 v$ |: T};, v2 p* x X* E! @, f$ B* }0 s
: s! y5 Y: h3 c$ b' kstatic struct platform_device da850_evm_tl_leds_device = {
! G* K6 L; ~- K* _1 R; B/ f .name = "leds-gpio",: V% j) _0 b+ a
.id = 1,
4 j0 C, P0 Z, `3 l3 u .dev = {3 J2 f# u0 }0 Q/ H% p
.platform_data = &da850_evm_tl_leds_pdata,( n* D5 F( V8 ]+ _" L/ O6 ~
.release = led_dev_release,
6 ]0 v) T# C5 R" F+ C$ s }
* h# w. z" e5 H: M. U};
' o5 x( d. w' L' H3 [2 S: h) U9 n' s# Z7 U5 y* E- v$ S+ Z9 _8 b
static int __init led_platform_init(void)
0 T2 R9 L, I3 q9 o6 F& G{
# k: T. d% }4 o: ~" ]4 f7 O4 E int ret;
( M9 ], E$ d( ?) M- i#if 0
: z$ a- p A/ F# A8 Q. n' m4 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% m& X" p% k, X if (ret)
" h6 i3 v* ~( L" |7 _6 X3 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ n8 G* q# S- a8 o: K/ r: P
"%d\n", ret);* Y+ t6 d/ X, T; _& a' L
#endif
4 p3 Q) d2 D1 F8 c6 b ret = platform_device_register(&da850_evm_tl_leds_device);) d5 x+ q- Z0 x1 M
if (ret); P: ?9 Z5 C$ E8 s; y2 y
pr_warning("Could not register som GPIO expander LEDS");7 x+ C# P j+ [
else: H2 ]- @! _ `" B0 Y7 e* y
printk(KERN_INFO "LED register sucessful!\n");" I, \+ {' R; r4 L5 d
/ g4 c) @6 P' z4 `- L) E* d2 x return ret;8 F, j B- r* E$ V$ o, o
}" E5 Y* _8 Q/ _3 t0 \, X- s
\4 F, H$ R I- Y ]' V# P$ ystatic void __exit led_platform_exit(void)8 N1 N' ^9 d: ~
{
( k1 U! t- C8 Y1 ^; }9 P platform_device_unregister(&da850_evm_tl_leds_device);" z& M& `! s U) V) v
- ?7 ?& F) d* R0 I, V' Y0 F
printk(KERN_INFO "LED unregister!\n"); ~# j/ ?4 H% V& Z) [% T I
}
2 C" ^8 I- L# S8 H" L- D* S# c* A( d% p) v1 |& y* N
module_init(led_platform_init);
3 Y; b& k5 j Z% Z0 \) P2 tmodule_exit(led_platform_exit);
2 }" _1 Z) _2 h5 E" M9 J
7 i2 t" A( }) n. SMODULE_DESCRIPTION("Led platform driver"); L5 e/ O+ @) x# p
MODULE_AUTHOR("Tronlong");/ u" t {5 e4 f4 a) J, U, @
MODULE_LICENSE("GPL");$ f1 \9 ?1 t4 Y% @- z- m6 H
, f7 \, m/ q \! X& ~ Y0 c! b
|
|