|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 P! H9 u6 L7 P6 `& @' t! _5 B/ W @* t#include <linux/init.h>7 N* N7 O/ n6 e' N& I" h6 E L
#include <linux/module.h>
n F2 U- v( H: @. W#include <linux/kernel.h>4 ^0 A2 E: L4 `2 K
#include <linux/types.h>
- b. b! w% Y8 N, u& E#include <linux/gpio.h>. ?9 D4 Y6 U' M; a% Y& q
#include <linux/leds.h>
, Z! ?: W' ?9 K( l8 @5 I#include <linux/platform_device.h>9 G/ e n9 }2 z+ r' l
( i7 q2 p& {/ Y#include <asm/mach-types.h>6 O5 C* z L5 g z' Q
#include <asm/mach/arch.h>
& G# e1 y: Z$ R# y#include <mach/da8xx.h>5 x* v, U2 [7 t" r5 U' I# {
#include <mach/mux.h>' g$ F- C/ C# Z" A" n0 q
/ s" J( x2 P* S5 K& n: h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 y5 l: z) U0 A# r' l9 S. ]2 Z* a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 Y/ B8 F ^7 E q, ]4 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ Q1 m' y. }& b$ v9 c* U#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ n* I: T) ]* N1 O0 k: [
* p6 L$ b" n8 ]' ]/* assign the tl som board LED-GPIOs*/
7 z3 P6 A" Y. h6 mstatic const short da850_evm_tl_user_led_pins[] = {
+ Q8 O7 ]$ O3 h /* These pins are definition at <mach/mux.h> file */
3 n' s6 h. v" h. o, o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 C& H% z9 \+ E -1
3 t# q& k- i {2 B+ Z& X};; e8 ^# Y" A6 W% ]. e/ G" T0 O9 @
6 D1 \7 S9 x7 O6 \static struct gpio_led da850_evm_tl_leds[] = {
) B" E$ L9 L/ Q- [; J, m {4 `5 O5 m6 B) W A& q/ _3 ^; t
.active_low = 0,( h" A+ K& a- l6 K7 R( P# `
.gpio = DA850_USER_LED0,
: n5 m) U1 p1 M .name = "user_led0",
; z* t' N+ Q/ A1 u! y .default_trigger = "default-on", `8 S: T9 @+ k7 J6 B$ i' q
},
4 r/ V ]& ~. k {+ j( z8 X5 v. t: ~
.active_low = 0,5 J, T# ^7 U* ?8 y* a" T
.gpio = DA850_USER_LED1,0 p: i! k2 w {! E! l; o: H+ q
.name = "user_led1",
1 r6 @; A, r7 ^ .default_trigger = "default-on",& o( P6 k( L0 I6 a& o7 k7 c% @
},. j5 j* M J9 O2 N7 d: M
{
7 q! z# c) i9 p; P- T% J .active_low = 0,
9 E% o" G' Q* A1 u .gpio = DA850_USER_LED2,
' J, e- r5 a- j% _* g/ q .name = "user_led2",
' ^% J. U t. {8 F: y6 z1 X .default_trigger = "default-on",
0 d4 X: \2 Q4 {1 W0 t },5 X3 o$ [) E7 o; M8 _' B
{1 H2 _9 y4 Z: m. }) C3 c2 d8 E
.active_low = 0,4 J1 T; F8 ~; c; ^
.gpio = DA850_USER_LED3,3 H8 r. |6 R. g/ I F' P$ Q- O0 I
.name = "user_led3",& C n: x3 @9 q* e8 C0 X
.default_trigger = "default-on",. ?0 }3 Z0 v# t2 O) I# I; Z
},
7 m* N+ C4 n2 M, m};0 q! Q7 l6 @, p: \3 @! K, G
! ^- h4 R4 X3 @( D; V4 D8 e# ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 w) [" }; ]+ `4 A" ^2 ]4 | .leds = da850_evm_tl_leds,
6 d2 W' `+ L3 C) Z. Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ H" w P* y$ Z1 Q};. n: D2 M( b2 d( E
+ w5 I) [& m# ?* d% c
static void led_dev_release(struct device *dev)1 I r1 z# V% Q7 { p; ^4 ]# G0 ^) u
{
. b6 O9 ^: L6 O};% L8 M9 m1 @0 p1 |8 d0 ~2 ]! u
, b" j. J. E5 G$ x6 w; k' C3 ?/ R
static struct platform_device da850_evm_tl_leds_device = {
6 Z5 o( n/ J& O6 h" i .name = "leds-gpio",* {7 {. g' e4 J+ @' I- x
.id = 1,; w* |& n l( |9 R8 `' u
.dev = {; @ r2 s0 C; e4 p; I
.platform_data = &da850_evm_tl_leds_pdata,
' J0 h# E3 g2 a# z) h: b .release = led_dev_release,9 Z( P; ~5 L9 z p
}
2 u% S/ d0 u" M& Q A};
2 l5 H; V$ w4 V5 X3 K2 k* f" ^4 I7 p2 X1 v. O( m9 @8 G
static int __init led_platform_init(void)
( C( L6 N4 j6 h% Q{. I$ E+ `" m% }/ G9 I9 X& C* z( b
int ret;
3 k# `$ W- s$ b4 P- J- E#if 0
8 K& g0 t$ E- t5 P& K# W0 Y+ ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 E: J, z( Z' g
if (ret)
. v/ W: T0 F% Q# | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ N; z1 @; B( t, |& v9 |7 b+ `9 {- h- c "%d\n", ret);0 `. c0 l6 c5 D1 |' y: M0 ^
#endif
* ]2 m; |3 p4 c% v; ? ret = platform_device_register(&da850_evm_tl_leds_device);5 S( I& s3 D% ~* t2 p5 h
if (ret)
8 A/ \3 D& K# o! \ pr_warning("Could not register som GPIO expander LEDS");5 j# \* x; C2 v7 b
else
( e& h4 g3 `' _; c% |1 J3 b- Z printk(KERN_INFO "LED register sucessful!\n");
' \. A- ]# W6 n3 d
, J! F+ ?. _; L1 _ return ret;7 z, c' J$ r/ v2 z! {2 a3 I/ c1 w
}
8 n' Z2 b, x( G/ R. [# V. Y) [7 J0 S6 o$ g
static void __exit led_platform_exit(void)5 O% m5 ?) Y3 Q% K3 Z0 m
{
1 X/ {# N. j7 n4 h, c" O. ^' v5 _$ p platform_device_unregister(&da850_evm_tl_leds_device);) L7 k- z4 E* s8 F
. [ W+ i1 ?0 B
printk(KERN_INFO "LED unregister!\n");6 k/ M2 J) H- k9 b4 A0 U/ h
}
; ^& N q6 X9 N& P3 O2 t0 [3 {' {: ~" [0 p( G4 \9 t4 v
module_init(led_platform_init);
- C4 W& p6 d$ h0 g7 }$ lmodule_exit(led_platform_exit);
$ g* Z8 f3 p# D# f6 W# [% y, n0 J, X/ p( ~
MODULE_DESCRIPTION("Led platform driver");
3 |; U3 T6 e$ u3 J: z% vMODULE_AUTHOR("Tronlong");
9 `; `9 n. N9 J" oMODULE_LICENSE("GPL");
+ u' s% h& W# u% m4 t1 T' ]: [4 X& C* _
|
|