|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' z8 R% a7 h) w( N( H5 P#include <linux/init.h>
7 o6 \$ S0 s3 \, O) G. ]9 \( s* t* M#include <linux/module.h>
+ \/ ?9 p. m! w% y#include <linux/kernel.h>6 o) r. T8 C9 w$ F' u. a/ u. `
#include <linux/types.h>
! z1 f2 @( h/ `# B; T#include <linux/gpio.h>
2 K! G5 E) A6 X2 z0 B( C$ j1 t; G#include <linux/leds.h>
- @+ }+ S( e, t! `#include <linux/platform_device.h>
, V. R1 s+ Z) Q9 y8 ]" Q9 z
8 m4 M4 X% r$ W: s" S#include <asm/mach-types.h>: D2 x1 Y; l% g# ]' ]3 E+ t
#include <asm/mach/arch.h>
/ N% L* G7 Y/ }#include <mach/da8xx.h>5 E" k& a1 t4 S) A% J' U, m
#include <mach/mux.h>
$ r) ]4 K5 y3 V, I8 E* N y. E! |1 N6 c& c3 M) ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 N+ m. i+ T0 z2 b' A7 M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 d: B$ o" v6 m' o& U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' R# [1 ]9 ?9 D h1 B% V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% R9 w/ s5 I; O' }" I. P, O" f* f6 v$ [8 Z
/* assign the tl som board LED-GPIOs*/
" I5 h6 c8 T9 M) ~' Mstatic const short da850_evm_tl_user_led_pins[] = {: g9 e' c) |, L5 b+ T& t- \
/* These pins are definition at <mach/mux.h> file */
5 k- Y- S( N9 I1 z5 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 B/ R+ L, P. `/ l) V -1. C. ~% x- r) }6 }) |1 ^8 R
};- s5 K) B, ?$ i/ c* p b) |
+ ~1 t5 b3 Z* _) bstatic struct gpio_led da850_evm_tl_leds[] = {
8 i5 X5 A6 c" h- O {( n3 |* d5 w8 u: t9 r
.active_low = 0,+ U, ]( H; Q7 y9 i, [1 N6 T
.gpio = DA850_USER_LED0,
, Y1 P! {( [2 s) y7 r- u .name = "user_led0",4 k6 {) r" H }
.default_trigger = "default-on",
+ `( l2 C. B8 ?) u. z3 v# k# {8 B },
2 }# Q5 W* s+ Z+ a, }* {+ m {; v2 Q" u+ f- r6 C
.active_low = 0,
, b1 Z/ F# Y* Y4 U4 f9 C .gpio = DA850_USER_LED1,# ?8 Z; s% e- n4 x0 V5 l6 a
.name = "user_led1",; q2 L# x: |# d2 m g2 h* P
.default_trigger = "default-on",+ Q1 N) |% l3 `' {7 [2 x/ o
},$ {# @- h1 H' S. f/ b1 i
{
6 C* ~# m" d/ P# K( b; L .active_low = 0,5 R& b( C9 n/ h+ ]9 p
.gpio = DA850_USER_LED2,7 o6 Q8 m& _8 B' B# J2 r( G
.name = "user_led2",- S( W5 r6 z) U n( v# C& M) ?4 G
.default_trigger = "default-on",6 k8 V1 S8 ]* P# K/ y- y
},6 }; ]. C6 J( k
{$ v7 |% q* }6 C# j" f# a# h( G% _
.active_low = 0,' N7 a$ [1 I. u! U% l5 d
.gpio = DA850_USER_LED3,
- O& U/ h' H* s- c' W; ` .name = "user_led3",2 d; [# F( u p$ {$ [
.default_trigger = "default-on",
+ I; Z5 }" p" r },/ y. _& M6 A M, F1 Z
};
% b: `% N1 Q9 K4 g& o* z, C' H0 u7 f5 ^% z0 p7 z+ x2 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! d. }: n7 `- w, y; m a
.leds = da850_evm_tl_leds,& H& p$ }) I" R( g+ X) `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 y8 P2 m* h+ ^* S' V5 d- _, J: J};
! p! z) p3 }+ d+ B; n! S' h$ _# V8 s! i6 y( p3 J
static void led_dev_release(struct device *dev): g- W+ v7 A e9 ~% i" v& W- Z8 V1 h
{6 c6 k) M c, y* a- k
};5 d3 T( I2 ?! o6 N' o9 ~
2 d X3 R' ~# _, T7 l' Rstatic struct platform_device da850_evm_tl_leds_device = {
# X; h6 h6 h+ v .name = "leds-gpio",' |- `, ~( w) ]0 O* I
.id = 1,: `7 O2 p; c) e' _ `. Y
.dev = {9 [9 w W- ^7 w, h4 c
.platform_data = &da850_evm_tl_leds_pdata," J" Z. b H- y( Y6 `" ~! {8 q, K! a
.release = led_dev_release,4 ~, z, c9 D5 T# d8 ?- `$ q
}
5 e) b/ n9 _, D! c" M- {2 g- W+ p};6 k, {9 K8 w1 R" l5 m. s
+ _1 u3 o& ~5 L* s( e# ]7 x% |0 Xstatic int __init led_platform_init(void)
/ {6 `) r) E3 Q5 X0 X4 }* V{
" l( a+ t3 G( ?. B6 y. y( v( o int ret;
% e% j1 F `" S, }#if 0$ E2 L0 w; ~( @1 I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 R0 o3 C$ [1 G$ j* c$ V
if (ret)5 i- V' A2 D& I8 A- }7 m- N* h" \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 d3 G V; X# W "%d\n", ret); ]. n V# U$ P
#endif: `0 N& d b% H
ret = platform_device_register(&da850_evm_tl_leds_device);# W- @" x1 N* X# f
if (ret)
* h- r8 j) i9 D pr_warning("Could not register som GPIO expander LEDS");+ I+ g4 U) K# M5 y7 ~% u* S* V
else
+ T7 ^: G& |% p$ _9 O printk(KERN_INFO "LED register sucessful!\n");
8 k, ?. C6 P- p0 @0 |' e" E" y: q! b; j( b+ X# a
return ret;% \6 O. [; v/ Q$ v1 M
}/ ^4 H& K O8 h% p
9 q; ^4 }% @: Sstatic void __exit led_platform_exit(void)
7 ]: r/ b- n; g' w{- h/ m9 t2 n% Y" q3 n( {1 h1 m
platform_device_unregister(&da850_evm_tl_leds_device);
9 D0 ]0 k2 a Z9 C& X
( c4 k# H- k5 q @, x' C printk(KERN_INFO "LED unregister!\n");
1 Q. }$ n% k% u) e}! v6 R) Y7 M+ K
( s5 }9 M# e: h2 r' W4 ]3 d/ T
module_init(led_platform_init);
6 O+ B. S8 v6 [: Tmodule_exit(led_platform_exit);) Q4 s0 V: q% C8 V
! Y: Y- y8 R6 G* i$ } u3 Z- l
MODULE_DESCRIPTION("Led platform driver");) ^/ S% Y0 V5 _6 E# m
MODULE_AUTHOR("Tronlong");1 a9 m/ r* i7 l+ j+ [
MODULE_LICENSE("GPL");
$ R$ L" G# V2 q6 X5 R( U- j) c. m, l8 w
|
|