|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ {! K- }. a7 P$ ~, X, J
#include <linux/init.h>2 ]) p3 B/ x8 W8 K0 F
#include <linux/module.h>
5 o; h, ]6 T1 i# q5 s& \# t#include <linux/kernel.h>
7 K, K ?, }6 J o# @5 d#include <linux/types.h># r) Z7 `4 Q; N$ ]2 J1 Z
#include <linux/gpio.h>$ N% c0 T- y6 F' k& l( l
#include <linux/leds.h>
5 O. n* t7 b. U4 O7 C#include <linux/platform_device.h>
- k/ C6 U/ P9 o% t+ o7 C7 A
6 u/ Q; g' i, v#include <asm/mach-types.h>. R& e) h; E, P! `, s% A
#include <asm/mach/arch.h>
9 @ s) _- Q5 \1 Q- e9 |. d#include <mach/da8xx.h>: C2 M" F, H+ u w6 l
#include <mach/mux.h>4 @* e- ~+ Q% T# x3 [
3 l6 [" l) J# I$ Z1 }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 d+ [9 W) R! a0 Y9 M3 i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' E* W3 ~+ R$ b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( l4 q$ B; G p7 R+ k. h% _9 u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* o, f q- k. c; ^/ x" B
# }# P% _* v' ]
/* assign the tl som board LED-GPIOs*/
$ I# ?6 t \9 _8 s" O; ]static const short da850_evm_tl_user_led_pins[] = {
p0 [. O' X: J6 {% a" R* {& P1 Y# D /* These pins are definition at <mach/mux.h> file *// X+ b7 {; r* H0 Z# X% T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ H* g4 q& P& @, S: s
-1
9 v9 S8 h6 |" k! C1 Y};8 ]0 l2 s8 V+ z. E
9 Z+ j- f+ ]; r' b% Q1 u
static struct gpio_led da850_evm_tl_leds[] = {
- ?* x+ B# I) W4 u3 L7 Y) P {
) \3 E, j' ~* f+ Q) @ H .active_low = 0,
; x6 u# r0 Q0 T4 Z' M6 q .gpio = DA850_USER_LED0,
/ i: a/ |% `9 N6 y4 r# j .name = "user_led0",3 ^3 e) h; ` L: v9 l( v* r
.default_trigger = "default-on",
1 z+ M( X/ E( x: ]* M& H },6 w9 ?) p' f. U) e3 j7 b9 ]& m
{+ e+ M' E$ l' F9 B$ n
.active_low = 0,0 j' N2 V e0 Q8 j2 N
.gpio = DA850_USER_LED1,' z4 Y( \3 I* J5 | ^
.name = "user_led1",- H% K$ C/ g' o
.default_trigger = "default-on",
% Z5 _7 g3 l# C' l },
' P* ?* g; i# L, v( v$ C {) j5 M# l5 r" g) {2 A) e
.active_low = 0,3 s" n: A5 |7 l7 O# y! a
.gpio = DA850_USER_LED2,
7 c! A/ H4 r+ { .name = "user_led2",
u: P+ J' K: C& |- W* v .default_trigger = "default-on",# K) M/ v/ |& H+ E# `' W
},
' t* m2 D4 e W: B/ w {
( W6 a/ f: K1 b* j7 w2 T .active_low = 0,
6 q' J% |# A& j f5 ~ .gpio = DA850_USER_LED3,6 B2 f& c+ ?5 O7 A. f! n
.name = "user_led3",
8 z; Q \) Q) A- C' u! Q( } .default_trigger = "default-on",) @# O1 [/ g- k) k/ \5 k
},* A+ X1 L6 i, `& F+ \$ c( |" ?
};( ^+ N! |4 U! G& E
' K; \" p) ]$ A2 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' ?( G- d/ W2 O0 ^ .leds = da850_evm_tl_leds,2 |; a1 O: t1 y. j4 D q- z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 j( m+ a' F1 H7 f9 Y) S: m3 k};
" r8 c6 E l/ O3 t% j5 ^: z5 ?- d' Z) N0 y8 _1 A
static void led_dev_release(struct device *dev); U* Z9 ^4 G1 o" n) x- A
{( q" [* g0 n4 x# c( O% r: s6 Z: E
};
8 ~; Y- `, ]2 q6 [7 ? k) ~7 w" k5 ]2 E
static struct platform_device da850_evm_tl_leds_device = {
7 Z& M' c; H9 l( _. n .name = "leds-gpio",0 |1 n9 I1 C" ]. }/ z+ [
.id = 1,/ C, J# l( i6 D8 |5 @7 k F
.dev = {- T' H, O) f" r$ v
.platform_data = &da850_evm_tl_leds_pdata,
. _# `* }; T9 p .release = led_dev_release,/ W: _! s h0 H9 t# z
}
7 z: y2 r/ s0 B: f};
8 E! {, q+ ~. Y. _' M
' S2 l# b0 I4 }( y7 Istatic int __init led_platform_init(void)+ R! I4 U3 c' ~# k( d: N
{# x& s$ o6 f& ~
int ret;
% }) A7 Q5 N6 ^( {! v& v- E#if 0
! [7 q/ d% [' N" f$ L1 f( N5 d4 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ u' o4 x. u# T6 W6 [5 g& ~
if (ret)
0 s& W/ d6 O6 y3 p! v2 h) s: J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 k$ E. d* t' R
"%d\n", ret);8 p+ v( g9 s# g# E% V
#endif
/ J( j0 G6 P. a6 r; s& E) F ret = platform_device_register(&da850_evm_tl_leds_device);3 U1 q; t t$ K3 d6 z% F: ?
if (ret)
3 }$ o$ k* B2 f% d! ?6 W# I pr_warning("Could not register som GPIO expander LEDS");
3 ?& _2 m1 G- y {1 R/ M( ? else3 f3 Z; w0 m- y9 w2 ~/ k1 q, }
printk(KERN_INFO "LED register sucessful!\n"); i2 ?2 `7 h9 p; H& T' T
, K6 L: e% r; _7 L% a return ret;6 Y8 y3 N+ d/ {/ ^
}# @8 q1 X/ H' c& q. b
+ L& z- |1 \( N1 E: m0 M3 h% k2 e+ B
static void __exit led_platform_exit(void)) B' S) P1 E8 S2 [/ ?6 T' T
{" v5 G9 e1 j! ?% m9 V8 E
platform_device_unregister(&da850_evm_tl_leds_device);
! [2 H" B$ c& g) j7 S
2 e8 H8 ]# U9 c# H" B5 ?/ k7 h: [ printk(KERN_INFO "LED unregister!\n");! v' g" r! |' @" a$ z6 h
}
; T! r. x Y- ~. v4 S$ |
3 b) C1 `$ O8 l3 ?5 \6 Wmodule_init(led_platform_init);
$ z5 T" j, m, Y' i6 h7 Ymodule_exit(led_platform_exit);
! y6 c7 w/ F7 m; e( r+ k2 c
% m' v+ X( o. O. ^- J% H1 jMODULE_DESCRIPTION("Led platform driver");
2 M4 U; ^$ z9 |0 qMODULE_AUTHOR("Tronlong");
* g; C: }0 d' h1 SMODULE_LICENSE("GPL");
1 [) @% f+ k4 I! _0 q* k* M3 u3 d$ Z( K& ~
|
|