|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. F+ M+ v1 e) c6 Q
#include <linux/init.h>4 C' b3 j3 D8 R
#include <linux/module.h>
2 h$ {- \) z/ n! s/ N1 u; ~0 {7 `#include <linux/kernel.h>
& {7 x. ~3 s1 {#include <linux/types.h>3 C& D" x0 I1 m: E9 V5 m7 I
#include <linux/gpio.h>, u& K* x+ L% p/ V! ]( a, p, e
#include <linux/leds.h>& f7 O6 R$ `, |! m/ N4 m- A
#include <linux/platform_device.h>4 ^* r) a! k% ?
) N0 l, ~; P8 g. w( w8 @
#include <asm/mach-types.h>
6 O/ }/ g& H" `: A5 t) F0 l. F#include <asm/mach/arch.h>0 Y& L2 p5 Y7 O2 J/ p W5 Y
#include <mach/da8xx.h>, P& ~6 w+ s. j& r' L/ E- {/ n& r
#include <mach/mux.h>
! v9 m7 I$ u& d" C
0 h4 h6 _/ \" N3 M% I9 U5 ^, e# x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ C0 j( r# U( y" B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 k0 D' h1 U2 U8 X8 E9 h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* q$ K7 C. c( F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% c1 t. D3 w! U3 c ~. x' P1 T
?: N0 }/ F6 ^
/* assign the tl som board LED-GPIOs*/% k( t" H3 W8 R# ^
static const short da850_evm_tl_user_led_pins[] = {
: p. C7 Q8 S5 H! Q" O8 I+ @ /* These pins are definition at <mach/mux.h> file */
' p! `3 D& W, k' d) }% @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- {" v+ s0 X* [4 A5 M3 M: { -1
( Q9 B: t" c2 m, f};' K% c# _1 H p* g) x9 q; c
& Z. l6 W: W7 A3 \static struct gpio_led da850_evm_tl_leds[] = {
F8 v/ l6 T6 R p1 s4 p {
+ Q2 x5 @' ~6 p, t, | .active_low = 0,
/ G& k3 X+ o! B0 m! B& ~ .gpio = DA850_USER_LED0,
/ W6 |- o5 ^' J, X) B- L .name = "user_led0",1 {/ \% j+ `4 F N! s
.default_trigger = "default-on",( a3 X+ \; z6 ?$ Y2 f! S9 q
},' d" g1 k7 K+ S+ o
{
& S, s: c1 W" _4 A# S1 Z3 u* T .active_low = 0,/ s! e1 B+ S3 v) `. Z
.gpio = DA850_USER_LED1,
$ D8 X2 Y3 E8 l6 D9 ?, d- _ .name = "user_led1",/ Y6 v5 {2 ^! }
.default_trigger = "default-on",
2 H: n k8 n$ {1 @+ v; @7 H },
; _$ B1 Y: N9 f/ @ {
3 j/ B; u5 Y; H0 ]1 i! z .active_low = 0,
9 z' U8 D( }9 e .gpio = DA850_USER_LED2,
# v' w( u l# r4 P% \ .name = "user_led2",
& d7 ^. W0 N! Q+ J: c$ d) l- s .default_trigger = "default-on",
! Z# {$ F$ g5 M9 B- l* w) f- o3 p },' z% M. X' c6 L
{. v. g* [4 V( d; L& H+ Y
.active_low = 0,
; W* n. v) p- Q+ S .gpio = DA850_USER_LED3,
+ ?0 O* I y, v( l8 G. T* z u# n .name = "user_led3",
5 Q1 [! j* d. y2 J, |' q .default_trigger = "default-on",
" s/ e9 {7 T% U3 _, Q2 j7 ~ W },
9 [. a9 G+ N) c};. a% Y4 x& U. B' G
) F" ]1 Q" O- E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( n: C! `+ t: ?/ G" m5 ]
.leds = da850_evm_tl_leds,, r) e$ g ]3 F5 b! ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 @' `. u) x! y; C( ^% h- g};
1 d8 r( ~! N( P0 j1 _) `' E, A
' V, v' S* k* M8 Sstatic void led_dev_release(struct device *dev)
5 Z& I/ x5 Y/ p{
6 v9 _# ~8 u( | L/ \5 @/ u};" d3 V7 n( o- z5 m r
9 O: @/ E' Y- o R9 |
static struct platform_device da850_evm_tl_leds_device = {2 F" U! Y* @5 o/ k0 h
.name = "leds-gpio",( r1 N. C: l% `$ U' x1 W: B
.id = 1,
+ d$ {# M6 m# ~ .dev = {
- ]+ l2 o5 w( f. o. t .platform_data = &da850_evm_tl_leds_pdata,
4 a' `" c. H# a# h; j Q y .release = led_dev_release,
; {6 N6 D! }7 {, ?9 `8 u }
& v7 r8 m: s- f! O1 T7 s};
6 f6 R' Z3 I2 v7 ]" h/ P9 O3 W
& D6 n% r9 {0 \# }/ v8 vstatic int __init led_platform_init(void); b5 v) f: k; S, W: ~" ]8 S2 I
{7 ^/ J9 `: H! q4 S
int ret;
& _$ y% j+ m( x+ n#if 0" O; V; X) M+ |* }0 ?! O+ Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% `, _: i0 {1 W9 G, g% L
if (ret)
) O0 `8 v) w1 v* r, X; |( X, A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 j, ~5 b- X" |# E' x4 N2 \3 y, p. @
"%d\n", ret);
3 I- U: A: Y' J; C2 g#endif
, o ]. U. x( ~( N, j ret = platform_device_register(&da850_evm_tl_leds_device);% V. Y \$ _, z; l
if (ret)9 o$ |4 B0 M3 z1 R2 a+ Q, J) P4 |8 P
pr_warning("Could not register som GPIO expander LEDS");
/ H$ j) I7 q" C7 T else
- z" A+ M, u6 }4 t* O- y( C printk(KERN_INFO "LED register sucessful!\n");
. ]7 Q( W# D% x# A) B* h
6 U% p j" w+ `" v9 D( [3 H" b return ret;
0 r" y0 `6 y8 C9 U6 o}: E3 U W, @: a% h h
& f; o" M7 n6 S6 cstatic void __exit led_platform_exit(void)8 K6 L& n2 i, t$ F! t$ {
{
- G. }( b; H) A3 ]7 c" ?* ^ platform_device_unregister(&da850_evm_tl_leds_device);
. I' }7 r: d* e, H Y5 ?, j4 F$ [$ V. U2 y* E- k! F
printk(KERN_INFO "LED unregister!\n");
" U& l- }4 \& o s}
) c' N% K2 s" G% o; C1 `9 ]2 x3 h& o% `2 K
module_init(led_platform_init);5 j0 w: L- w( S# l
module_exit(led_platform_exit);( N8 O$ K8 K" ?
3 z* D. Y8 l2 F! M! A! z" q
MODULE_DESCRIPTION("Led platform driver");
. P$ J, o( i/ U- pMODULE_AUTHOR("Tronlong");
, J/ c- r3 B; D8 X& {MODULE_LICENSE("GPL");
+ p6 ?4 R, R2 k! ^- I' N( F
0 d/ I9 O7 o8 M$ ?2 Z& v, l, r |
|