|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
|; J8 y, Q' Q6 W, [( K1 K#include <linux/init.h>
( t4 T, B3 B& {8 w V5 d1 j#include <linux/module.h>
D. ~. w3 _2 Y#include <linux/kernel.h> k( {" _* k* K3 E( v& P
#include <linux/types.h>
( W. I; T k# Z# J) M5 p& F. b! K#include <linux/gpio.h>. s* O( N% ]# u/ d. j9 X
#include <linux/leds.h>
F& S2 x8 t8 U1 F2 K0 z' H#include <linux/platform_device.h>7 j' U" v' O# [ p/ P& f4 K% o
t5 w5 m* B3 e. v# {* t
#include <asm/mach-types.h>9 u' ^/ {* `5 a0 ^2 A1 Q% u
#include <asm/mach/arch.h>
: G; k) g( Z! z4 s3 F#include <mach/da8xx.h>
* r3 y) I9 A- D$ G- b#include <mach/mux.h>1 D W7 W; k5 }! \' Q7 B
, X- t3 c# ` c3 `- g' _# R! L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 T) F8 u- c* R3 T" ?2 _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( E( c0 }) _1 R1 z6 W: T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" {3 Z2 ?* |# g4 i7 f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( j6 W- f0 A: W" z/ I* D
$ P7 w6 Q5 X, b! M3 q1 Q/* assign the tl som board LED-GPIOs*/( A4 Q5 A' O4 u8 b) y6 R& \
static const short da850_evm_tl_user_led_pins[] = {) w9 B- `& _. k. J2 v, n5 o4 k5 B7 u
/* These pins are definition at <mach/mux.h> file */
. m, _4 g- l) M& }% Q* `; _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: c! l4 B5 m2 x& b- E9 X -1
" X5 l& _4 q1 c};
; \/ O# L8 p5 M) ?; H' \4 n/ t9 x; A$ R( w+ o7 j
static struct gpio_led da850_evm_tl_leds[] = {; S, _2 K3 i2 ?% C, L: s
{: A0 G4 u5 y! y( B+ O M0 E" d* e
.active_low = 0,0 F0 X- X( A9 U" C$ a( W6 _# P
.gpio = DA850_USER_LED0,
4 Y/ z7 `* u6 \' Z .name = "user_led0",' C% i9 e/ b& Q1 A: z* P1 B
.default_trigger = "default-on",
& W5 b. V! ], @! L8 }! w2 J; x) Z, [) R },* g, l% X8 X1 |- ~+ {7 j$ w
{+ W' w, r( `# s+ v6 [+ j% E" N
.active_low = 0,: [1 T; F/ r2 j7 I; N
.gpio = DA850_USER_LED1,2 l* x, z; G" |) k$ P
.name = "user_led1"," K- S- t- [/ |* n6 S5 [% ^
.default_trigger = "default-on",
$ \6 v& Y3 B2 k. k3 o },
3 {( J$ I9 N1 r4 @/ m7 V3 p {
& L/ h z) _4 H6 ]' r8 Z .active_low = 0,4 y- K+ d9 M& m& f0 n5 C7 y
.gpio = DA850_USER_LED2,: K2 M. N) X" C* R- z
.name = "user_led2",2 F5 _6 [+ b+ a3 b
.default_trigger = "default-on",
3 j& n* ?1 Y T3 w! b* K2 u; V },
/ R' s% v2 N+ i/ y, n; x {
% {- w3 Z5 s2 ~, U9 a4 g .active_low = 0,7 N6 m; @0 `0 ~# E" |& V
.gpio = DA850_USER_LED3,! n2 }' v5 N [8 Q& |9 Z
.name = "user_led3",5 ?9 ?/ @$ D! i& E$ d* |5 L
.default_trigger = "default-on",7 [0 C' X2 h7 u) u9 Y- I8 ~; r' G
},
o) Q: d, s' V6 _9 A5 g1 f};( D0 s/ a& \3 I7 N' d- x
* a5 o4 P) r9 C( e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 k; K4 r/ k) R1 |) m
.leds = da850_evm_tl_leds,; g" v( I# v) c$ H+ M/ Q2 v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, p5 R8 G5 t% ^: g3 t( o1 s}; T7 m1 r" b+ w8 n
: ^1 b+ g- e h7 e7 Ustatic void led_dev_release(struct device *dev)
3 B! `1 V$ p2 ?* n6 E{
& X5 I) v0 N5 e& H};
/ r% g% ?4 b* c
# v; S/ h* D7 C- e- Dstatic struct platform_device da850_evm_tl_leds_device = {
* l* ^* Y, L8 d- R .name = "leds-gpio",2 e8 i" X1 D/ Z% j5 a
.id = 1,
2 `7 `& n6 G; v' F! |. b# Y .dev = {8 ~! ^# @" R ?6 \" p
.platform_data = &da850_evm_tl_leds_pdata,
/ D. M- @/ S4 B7 Y! t .release = led_dev_release,
- H% Q/ Z6 ]8 B- a% J" g- d }
# W- V! p9 h( Y& E& @/ E};
$ q9 q4 Z4 Y8 Q. ~
; B, ?% n$ f( {static int __init led_platform_init(void)- Y: F$ O3 `3 F( ?- u' @
{
" \) A& U3 U0 c# S% h4 y4 v int ret;2 w/ t: h. r5 c( C8 }$ e: w
#if 0
/ D* C& W0 Y' i# ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 l/ @$ g6 D+ h! E if (ret) Y7 P1 u1 g: U% a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# D, R/ G/ ^& J3 k, _ "%d\n", ret);1 g2 M' i( P3 O/ B
#endif" L* ~+ x6 P& @( ?4 _* [" m5 v( ?( e
ret = platform_device_register(&da850_evm_tl_leds_device);
, ^: X9 Q0 e) D7 N. S if (ret)
( t* Y7 i! ~6 t0 V" \3 y( r pr_warning("Could not register som GPIO expander LEDS");$ p q* s7 l3 ~( g, T% r1 o
else
0 K4 _% h6 o8 j printk(KERN_INFO "LED register sucessful!\n");
; c6 ~6 C9 f* @3 J* K) a4 E& i1 f% F$ ^% K7 N+ N* h B- N
return ret;
; ~: [9 G5 o! e0 E" c! |}
. k: J6 S u' I- W; S5 T, J) e" Y, [+ j; t1 B9 X X! ]
static void __exit led_platform_exit(void)6 o2 E& R: e4 d' ^6 k
{
1 u- I2 j' I' }3 U P# a- @ platform_device_unregister(&da850_evm_tl_leds_device);
2 n4 ~" u0 N. E0 ]
A k* O' h1 _ printk(KERN_INFO "LED unregister!\n");
8 G8 I3 D! D+ V}% ~" |" `2 Z9 b
9 b$ E) d% i& J5 ?; b/ A; S
module_init(led_platform_init);7 f% S( G* T: j9 @6 v; Q
module_exit(led_platform_exit);
; ~# U+ e" g; H' S& X
$ |1 r; z8 A( z* n/ fMODULE_DESCRIPTION("Led platform driver");& z9 y: V5 H3 @" E
MODULE_AUTHOR("Tronlong");' G! I ], ~' l' \4 N0 c! [1 M# ^$ c( G
MODULE_LICENSE("GPL");
1 c! M4 H' {8 D9 K4 [$ _' G
- N" m+ o6 N# g9 J. ]" z# f |
|