|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 c- ?4 v& M/ O; g#include <linux/init.h>! S2 f" j0 m) w( M
#include <linux/module.h>
, y1 m. {$ g! P; y8 Q/ g$ b9 u$ e#include <linux/kernel.h>
# ]# ^. J9 x. H9 {#include <linux/types.h>$ V( i- }+ i8 ?0 p. d/ _0 }
#include <linux/gpio.h>/ [/ Z! O0 w' {; p! f' @4 B
#include <linux/leds.h>
/ ]+ i! G+ ^, |#include <linux/platform_device.h># g- U0 z1 N" ?- T. n
7 B! B; Z o" N% w, x3 [0 U3 i
#include <asm/mach-types.h>$ O* E) d6 a g% `; W6 L! D
#include <asm/mach/arch.h>
# r; m$ k( J' j5 B8 F1 f#include <mach/da8xx.h>
0 B, l+ E8 S& e#include <mach/mux.h>
) y- q* \4 \! x" M
4 _; o" C. W1 K6 f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' M$ r5 o4 C$ A/ l( T$ m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 a1 ~, U. ]( [. V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, T: j% X$ ~; P1 @& j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 G% s, b0 j# M. ~6 y
, N- d) V M: I3 b/* assign the tl som board LED-GPIOs*/7 y2 e7 X6 a$ `: m8 ?/ ^8 t% G
static const short da850_evm_tl_user_led_pins[] = {! a6 p- }. ]7 U
/* These pins are definition at <mach/mux.h> file */
- P/ f: @1 @; S- R3 W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# H' w+ k! k) m
-1 L t( a2 D8 c0 Z3 J, l
};" \) L, K7 |+ B. s
z' `' f" p2 H$ O7 L( @5 P
static struct gpio_led da850_evm_tl_leds[] = {: K* Q" L& s% i+ \
{; u0 o4 W1 G8 A5 ]; [$ G7 o
.active_low = 0,
4 ?+ c8 S' i; l( Q, [ .gpio = DA850_USER_LED0,9 M3 U- |4 ?: \- @
.name = "user_led0",, O* x( k# ^* w( G$ \) u5 D% X% o
.default_trigger = "default-on",0 }( }- G' C4 F, ]6 d/ z! u8 K
},
' U' N5 s8 M" w {
" g' z5 p) c7 i+ ^1 F .active_low = 0,
& `3 m4 s: ^$ U6 q1 D7 x5 [& x6 d2 x& {! F .gpio = DA850_USER_LED1,2 r' Z" t2 l- |1 i4 n/ G
.name = "user_led1",
8 L' S5 e2 V2 h' S( d) h .default_trigger = "default-on",
8 ^" p$ }' }" O },
3 s8 k/ X2 ~& d# u& O+ S {- O% }0 @& Q3 V# @4 R/ l
.active_low = 0,; b* ^2 W+ n8 D% Z8 A, i
.gpio = DA850_USER_LED2,! j) M/ h3 ^) Y
.name = "user_led2",
6 l" l' d4 v! n8 X& L9 x' R .default_trigger = "default-on",
( Z* M+ R- [0 N1 j( T( @4 R },
* u- Y$ w! R. [7 x) r9 V3 i {- c7 ^3 V1 r% G
.active_low = 0,
3 O' v4 V4 g; Y9 Q .gpio = DA850_USER_LED3,4 {+ Q2 A0 L2 o" S! G5 P
.name = "user_led3",& v7 H& K: _ R) B+ j7 V
.default_trigger = "default-on",3 A. ?) Y+ y' b+ q2 V1 y
},$ |9 K4 x9 ^) W3 H0 k( ?: ?: P3 n" N
};
3 E8 f5 ]9 G9 A" F* G1 W/ b' x, M1 ~- ~+ J; P7 m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 g6 V3 L1 F- L7 r .leds = da850_evm_tl_leds,! _8 ~. s Y' X! }8 n" D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 n: C2 @/ ~/ {9 L# S$ P" g2 W};2 f' j( @- l6 A' T2 [
- |; j$ _) x h9 m& U9 B; u
static void led_dev_release(struct device *dev)0 o; H) U& `5 x t) ^
{
H! l- U& w' _};& Z5 H% Y5 C% w/ E( R% L; e
1 O9 E& O. A( C! J/ P
static struct platform_device da850_evm_tl_leds_device = {( {4 e: _) B; J8 L) J: ]
.name = "leds-gpio",3 |1 q- X& i5 \. o W; Y3 I
.id = 1,2 R6 r) g8 c7 l( F! E" B3 z
.dev = {/ f y1 B/ u: ]5 u
.platform_data = &da850_evm_tl_leds_pdata,8 o6 s3 p. X2 u( Y) c) C
.release = led_dev_release,
) z, X( }* S1 Z0 l$ q5 W" ]6 J! I }
9 D2 |# r9 W$ v8 y};
- X9 @* P0 v; c. b) u& s. k& r! \* G. H
static int __init led_platform_init(void)
+ j' w( \: K( `{
* T5 x4 `' L- O' s# @& t int ret;- |4 P! `) f/ e
#if 0. U! n' L) o) o9 _& f5 ] W/ m5 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 C9 M1 K; ]. V2 e2 t if (ret)
% X, t! a4 N+ P! l) y6 ?0 w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 k; N2 v! `) b5 [ n+ W' X
"%d\n", ret);; o* U' K* s) w7 l/ ]( d: `% I
#endif
7 Y9 _ w( P2 \ ret = platform_device_register(&da850_evm_tl_leds_device);
& b, _, P P1 R" d3 h4 C if (ret)
9 C+ w, g5 d+ U" F+ v9 P& ? pr_warning("Could not register som GPIO expander LEDS");8 Z1 E$ g# Y- }+ u' I+ Q
else) h$ J6 B3 i" F6 l
printk(KERN_INFO "LED register sucessful!\n");
. P" k; o# ?+ B: ?6 ]8 t) R5 y9 e
, K0 L5 m1 S1 R7 q9 k1 A return ret;/ q" X, h, |% s9 m9 X: J; a1 o* C
}8 r# {8 ~( i7 y6 h. u+ {
1 l$ W& J) X# u1 M6 S$ Z
static void __exit led_platform_exit(void)
: e: Z5 [5 j/ G2 w* x+ _{$ Q3 W* O7 G' j) _: y1 ?8 P5 y" l" o
platform_device_unregister(&da850_evm_tl_leds_device);; E! a0 \2 i5 `/ M1 u8 W
3 q4 A/ g: W1 v% e' u
printk(KERN_INFO "LED unregister!\n");
# j+ _, z( O% u. _% M}
7 D. G1 n; h* ^' q% g1 w3 z8 A ^) j8 H
module_init(led_platform_init);
/ j3 Q* ?) l1 Y3 L* q0 v/ r' `3 Jmodule_exit(led_platform_exit);
/ W5 f0 q( I8 E. l% S& u. t, [+ d3 W, {
MODULE_DESCRIPTION("Led platform driver");
7 M9 T0 x* ^( L$ j* K' O. L7 `MODULE_AUTHOR("Tronlong");6 `. {' ?' s8 t K" B j
MODULE_LICENSE("GPL");
D% \. Y) a& S' F4 _, u
1 g; e# t/ F! {0 v+ ^ |
|