|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: y6 X$ }1 P" t% A( B! Z#include <linux/init.h>" I: ]' [* f" e
#include <linux/module.h>2 m( J( J, |; a) {
#include <linux/kernel.h>; M7 w5 X" o' `: A/ A
#include <linux/types.h>+ y" C& K# m. ]7 U" ^
#include <linux/gpio.h>' X3 }+ x- u6 b$ S g
#include <linux/leds.h>
/ S, t A5 A/ u5 i( g* w- p#include <linux/platform_device.h>
$ X+ f# w$ E h6 L6 Q
0 i, V, @! D/ ], P#include <asm/mach-types.h>! ]) ]! v' i" W6 C' ?$ R; O
#include <asm/mach/arch.h>: L) Q) E5 ]/ x
#include <mach/da8xx.h>
- P6 x; ^+ [. l#include <mach/mux.h>
& h6 N' M F1 W( M: a( C- D$ @/ r- h8 Q7 X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), _& Q' z6 F, x4 e, ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 r5 T/ u( I$ ?- r3 |" w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
O$ F( O% c1 W2 D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# T' N+ \; c. p6 q& T: n- p
: T, {: w* _; v4 c* i/* assign the tl som board LED-GPIOs*/. A; c: W; _) U5 V
static const short da850_evm_tl_user_led_pins[] = {
4 d$ i z/ k7 W( D# M6 t /* These pins are definition at <mach/mux.h> file */& n: o: d" ]8 p0 o, }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) A' L+ M4 P% h: T: @# N -1
% ~! k& K# I) o6 k: w' V};& \5 u3 `: u3 z: R2 T
/ z% V9 r/ F1 R7 G) j: Qstatic struct gpio_led da850_evm_tl_leds[] = {
% {$ m! ]: W- m9 f. ?+ L `1 m {+ O" z3 I q$ m' y0 P4 y
.active_low = 0," U, W3 P! |% `$ w$ C4 W# L. n
.gpio = DA850_USER_LED0,
, n3 M/ y" S: r( q1 w .name = "user_led0",
% A/ I" F" m( r: Q3 @ .default_trigger = "default-on",' w# v! }8 d8 v* I5 v: e
},/ ]$ M6 k4 T2 A8 C# J% h, P; m
{/ C6 ^* b# p9 ^+ } H
.active_low = 0,! X" O5 F5 w! q' q9 v4 k" l' m4 a: ^0 S
.gpio = DA850_USER_LED1,
+ W; ^' m3 z( x" t6 H8 Y4 i% ~ .name = "user_led1",
8 Y4 E, V+ r. S) n .default_trigger = "default-on",
. _ M' K1 ~7 l },
! D$ w- `0 }" l8 x0 T1 M {
/ h( q+ g5 A3 O .active_low = 0,
]& g/ M9 V. `# } .gpio = DA850_USER_LED2,
, m' G* M% N5 q/ g4 {0 | .name = "user_led2",
! c/ m: l7 Y3 E6 N .default_trigger = "default-on",2 G- E8 _% o* W& `" j7 G
},
8 E& C" r" \. k {$ E5 u% V/ K7 U8 h7 o% f4 O
.active_low = 0,
+ I, t8 N" E; ^ .gpio = DA850_USER_LED3,
8 x* D# G( `4 @$ F1 y .name = "user_led3",1 J$ K: t, W, m
.default_trigger = "default-on",
& w2 R c( N& c z! m0 P' h9 H& q }," A( |7 ^% z: X# ^+ O
};- C! v" g8 A! P. t
; ?2 d8 ]2 ]# f, P, i- [. l; D; z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, Y, W# r# v4 W5 `: [ .leds = da850_evm_tl_leds,
b; A8 ~$ u* w9 L* w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& J! {$ j8 T( o" g9 i5 E};7 A9 v8 F( o5 N$ S9 K( O; G! G5 Q! A
6 U5 t+ }) }3 f4 V# S5 x" ^4 }) Astatic void led_dev_release(struct device *dev)
" g1 X0 t( t) i; Y1 [$ Q- m F- b3 E{
7 r2 g" U" ~4 \( z2 r};/ w, c4 G% E2 \0 u
, _0 y* \7 e% ~% O+ g1 K
static struct platform_device da850_evm_tl_leds_device = {1 F, G- [; u( Q* x" w' c
.name = "leds-gpio",$ v( y6 y- Y/ B: a
.id = 1,9 |& _" K t0 v/ ]5 }9 D% a
.dev = {/ }; z% |5 v% i- j
.platform_data = &da850_evm_tl_leds_pdata,
3 s7 u$ z) M- t+ _# Q M8 j0 u .release = led_dev_release,
* r5 I. ?$ H+ Y- y4 }: `9 I }
8 Z7 P Z* W& b2 E [6 a};
4 h7 I1 x" U: M+ ?5 S! m4 P! y; U' ~# t# _' W; k6 u
static int __init led_platform_init(void)
$ d' F" F4 W Z0 J# q{
3 q/ a# i5 W3 U" c: [+ X int ret;7 V# c8 e/ U' o
#if 03 q+ I/ r$ V/ b I) P: l1 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. q$ X& ^! y) m2 {- z# Q: O
if (ret)+ f* G: g5 v/ R6 p) B& w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 [% p9 G( j: _% h6 w0 ? "%d\n", ret);
' a4 S% G, l! p#endif
. T7 z2 x8 S4 U P+ K! m% k' Q! Z ret = platform_device_register(&da850_evm_tl_leds_device);
& F% T- c1 H3 Z L5 `8 [* x' _ if (ret)
; q, U5 N) f! O& B4 j9 U/ U pr_warning("Could not register som GPIO expander LEDS");0 X% L$ e& s( K; T+ r! X& K3 u
else
4 U5 D$ ~; t: C& b! `8 N printk(KERN_INFO "LED register sucessful!\n");* |! X; g" k1 @' s0 w1 @
; W0 s. f8 B+ w& D3 i0 D' b return ret;' X+ X1 ?2 K$ R5 j4 c- S
}
; g9 S( F B v6 v! c+ E: c4 t0 C4 c0 ]" Y' j$ {4 Q
static void __exit led_platform_exit(void)
$ x: A. K$ [2 m2 ?3 F{
: y+ b. P8 _: S3 C; J1 o6 j( ]% @$ O platform_device_unregister(&da850_evm_tl_leds_device);. r& Z: Y( E: T4 _8 q! J
+ R. n* D5 C G: j printk(KERN_INFO "LED unregister!\n");; V0 ~4 M3 G' }' T7 k
}
+ M8 V( Y! }& _3 V1 k' u! ~9 k$ _3 o5 H% M' B
module_init(led_platform_init);2 \! J1 h7 d% H- q6 e+ Y% I6 m4 h
module_exit(led_platform_exit);
5 m' v* O" F b, J. u* X7 M v3 s H# I! `
MODULE_DESCRIPTION("Led platform driver");" [4 m7 o2 v4 r9 g* o
MODULE_AUTHOR("Tronlong");) \) p* R8 J) i, S$ m
MODULE_LICENSE("GPL");
/ R& J5 s6 I# {) k% _3 W' g3 q; r6 p
9 n1 d. G' b' M6 m7 S9 K |
|