|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ U1 y6 U* \( Q#include <linux/init.h>. x U9 \9 u- P( n; c. L+ [7 d
#include <linux/module.h>& D& j% V3 i( m. q
#include <linux/kernel.h>$ H. U! C5 }0 u# D$ u3 r
#include <linux/types.h>$ @- _2 i3 u3 V7 B3 s; a2 T9 t8 h" G
#include <linux/gpio.h>
/ I# x2 [$ k+ Z" R#include <linux/leds.h>) s3 H; z8 x% w, ^
#include <linux/platform_device.h>
( j' \3 u- k* l6 ~' G1 P" J4 M+ z7 o8 k) V0 g, D
#include <asm/mach-types.h>
% E5 C+ Q/ O' P/ @$ P#include <asm/mach/arch.h>( p# K% k/ J2 r1 Y
#include <mach/da8xx.h>
3 ~& H* X* N! t#include <mach/mux.h>8 _2 v( k/ C2 E+ Y- j' v
( k: `# _+ }9 v e ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ I" m# F8 o# h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 L" u; w4 n8 `* _/ A+ E' b, F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 P% W' F; L0 j; F9 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ E4 z9 T. n! }' }
, x, }' J) ~$ [' P" M% T
/* assign the tl som board LED-GPIOs*/
2 z/ {" H- E" a5 wstatic const short da850_evm_tl_user_led_pins[] = {
, i' s1 `+ P) e! X( d /* These pins are definition at <mach/mux.h> file */
; S- {8 i; B+ | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 J2 E/ F2 g* \
-1
7 M- A3 \. T& P( l6 e e2 Y! B};/ J7 z% e) A9 [
2 w& _" }/ L5 istatic struct gpio_led da850_evm_tl_leds[] = {! f$ y* e+ u6 v; [/ j) A
{2 |% m/ z i1 T' o' y! y' ^ `
.active_low = 0,
p- t/ u' e( j3 ]: U .gpio = DA850_USER_LED0,4 p3 m) i& z4 J9 D" f
.name = "user_led0",
& H- K& T% o7 d( C! \ .default_trigger = "default-on",# X. r# M* [& m1 f7 [) ^1 f: [
},4 f1 ^9 i2 s# I; Y0 e+ S
{) x. ?! I: W8 u* ?' e
.active_low = 0,# n. f0 }9 X/ s0 {0 v* h
.gpio = DA850_USER_LED1,, } D. z# X X6 d
.name = "user_led1",9 t$ Y# I9 ]2 x: J
.default_trigger = "default-on",3 I3 `( f9 E( U: q
},
+ S" Q3 Y; v. X0 c: e9 g {
2 ]9 h! `! ~1 K* {) K. w; b' l .active_low = 0,- \$ D- b8 |, u0 q1 t, E5 u
.gpio = DA850_USER_LED2,6 L& l5 n& ^4 E @
.name = "user_led2",& L( {( K' u7 @! I0 K4 ?
.default_trigger = "default-on",4 J: w! E N+ @
},
. O- O/ V2 Y) I- P, I$ g {, O# g( y* `0 H6 v5 U8 x8 M; c
.active_low = 0,0 n# W) S- t- A! c1 K) r4 W
.gpio = DA850_USER_LED3,
- M0 H) H, `# w) D .name = "user_led3",1 N, ` V; I. O" J8 g
.default_trigger = "default-on",
+ ?$ T: Q. b* [1 J! N+ b },
3 U. `# ^0 Z8 h};$ m: c9 V, q2 |$ C
: s0 G0 _9 N# o- b( q/ f1 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 A) D% F/ j& c% }& u .leds = da850_evm_tl_leds,$ @% l! M" v' A5 e/ c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& s4 ]6 B2 D" \# i" `4 C4 p
};7 G) V% M3 e( G: Z6 P
+ h2 D) T+ J: f" r8 O8 z) T4 h6 pstatic void led_dev_release(struct device *dev)& V1 ?, F* Y; e3 u" p- k
{3 s2 {" s5 P! h& R G) K4 k
};: c9 e7 H/ d/ A- ]; l& L
% a2 Q0 s) Z6 P1 K( rstatic struct platform_device da850_evm_tl_leds_device = {
9 g3 l! r' J1 \+ |+ ~& W: y: g; j" @ .name = "leds-gpio",
. O) \$ _& L1 U9 f+ h- R i .id = 1,+ v+ }8 S1 u) A% G) ~! Y4 d9 S1 n
.dev = {3 E, U( X9 F" u7 j
.platform_data = &da850_evm_tl_leds_pdata,
2 Y/ |* ^/ m" ~; o% v/ a b .release = led_dev_release,
. _% Z) g2 C" V& X }( Z! X* \6 y8 v! Z- r
};+ z5 C9 V! T1 C* e% b- q
+ p! m t! w |+ s( B
static int __init led_platform_init(void)
. ]" c8 E4 _9 }& [# [" q{
8 H5 r+ X) A! B: O+ I6 \ int ret;
[. U; {* Z) a$ a5 }7 B4 Q#if 0
0 ]+ y1 G7 ~$ V* t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- Q- J5 O' E9 X) `/ j if (ret)
; W% L' h% ?! D/ c5 L4 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 a1 S9 z4 B7 r6 |' d z "%d\n", ret);
4 L5 Y3 v6 M9 a0 O0 T#endif7 W' B7 E- ^/ B4 I9 }8 ]
ret = platform_device_register(&da850_evm_tl_leds_device);$ G y! ?% z6 A4 C# @+ V2 z& `( n
if (ret)' u S8 M3 l! w9 `9 r. A+ ?
pr_warning("Could not register som GPIO expander LEDS");3 u5 }. x9 c* K2 p7 }
else8 k- L# X( }" ]- {2 v: N: a
printk(KERN_INFO "LED register sucessful!\n");
- U# T: _6 t4 G0 \: u9 G- t, x
* b3 ^% a3 ^2 X: S8 ~6 ` return ret;
5 w5 C! ?6 w( b9 p1 m& n& i}
% K. I% e h0 {; s) s8 a0 E+ F0 u- T! o2 c, F# L
static void __exit led_platform_exit(void), D. x) {. \- V) ?7 P
{
2 @; R! K3 g( E, J3 F platform_device_unregister(&da850_evm_tl_leds_device);" M- ?" ]( T/ g' J& m) I( a% |
4 v8 X& r% W4 F4 g& P- M printk(KERN_INFO "LED unregister!\n");5 S% l% b% |' ~' f/ j, O
}" v* Y( J) E4 z! j4 ?2 Y
- ?4 X6 L7 N' P
module_init(led_platform_init);: Q+ N5 B8 X+ f' _
module_exit(led_platform_exit);
4 @$ d; w- L& c% D
: n* d6 r) ?6 j; U3 L i) {; rMODULE_DESCRIPTION("Led platform driver");
3 e3 j7 V/ l: b: F) g# JMODULE_AUTHOR("Tronlong");
6 r' E' J: E1 O | T6 ^7 k3 [* P& G$ a! fMODULE_LICENSE("GPL");
. Y. r* l' C0 P
w2 Q3 R3 e0 H4 Z/ ?+ c |
|