|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 \$ w6 H6 A6 M" x, {# E0 Z; i, U#include <linux/init.h>+ l' y9 ~2 e/ o# m. T- \
#include <linux/module.h>
# K- D8 C& \, O& _9 ~& p) G3 p% F5 _#include <linux/kernel.h>
& i/ q9 i0 h9 u( ]- r) t#include <linux/types.h>
' E) a: e8 v6 U- J3 c#include <linux/gpio.h>3 Y: M) d$ Q/ L. u1 Q' }
#include <linux/leds.h>
5 _$ c2 g5 Z, n0 y1 S" z& n#include <linux/platform_device.h>
( B9 P8 A' R1 X. i3 ]: {5 Q# n' M! ~9 |$ Z. `5 d
#include <asm/mach-types.h>
4 s3 {/ f" W* X9 L9 Z9 e#include <asm/mach/arch.h>3 A% c3 ]* T# v& _
#include <mach/da8xx.h>
4 `5 ~* L' x8 B) c- @#include <mach/mux.h>
" {+ B$ i0 g/ ~- E- _6 e
0 |7 {+ b* W4 u1 i, a. |8 y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* \$ f/ q- m8 j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 C1 t5 n; y, d7 j6 g/ ?0 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; [3 }* M; y0 g8 \5 ?2 O, H' ]: S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) Q( v$ N0 T0 E6 L/ d5 h+ R
1 s0 n) }. a' [. W2 D: x7 |+ A5 ~
/* assign the tl som board LED-GPIOs*/
5 z5 G) B3 o- g# f0 G, F; ?+ Fstatic const short da850_evm_tl_user_led_pins[] = {, k0 P/ q) e: `4 J) E
/* These pins are definition at <mach/mux.h> file */# v3 H1 Z8 [3 T+ r8 x+ e$ A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. l# S+ l- h/ L
-1
5 w( [) z+ ~4 T% b9 d% p0 \* x2 p, Q) }};, l' b5 G: b6 c- A
' O2 S$ \5 X; l
static struct gpio_led da850_evm_tl_leds[] = {! x2 ^+ [9 ?' m9 _0 v
{3 U7 B; }2 K& A& G2 J) G h* S
.active_low = 0,
- B F# R2 t; o. j .gpio = DA850_USER_LED0,, Q( _9 F! o) g- T
.name = "user_led0",
# k8 x7 {: j" ^8 e' v$ I9 h .default_trigger = "default-on",/ w3 H! r, J/ s4 R
},# o7 g7 f" X) e4 _2 s# W
{
6 q- F* N5 o7 `( X3 e: f! o .active_low = 0,
. f6 P; T! u4 F7 @3 e7 g/ a2 W! o" Z3 G .gpio = DA850_USER_LED1,2 m& i& J+ ^) E+ J- D
.name = "user_led1",
1 |! ^7 ?7 u! V9 R% i .default_trigger = "default-on",* q0 `6 q, l. c! k, i* i7 i& [
},
0 J( U8 t+ I/ Z6 H; D/ j {
, v# R( E! ^5 q2 ]$ H, C" y- M7 B0 p .active_low = 0,) T8 S ]9 N- J4 F8 m% S/ W* N1 a$ ]2 P
.gpio = DA850_USER_LED2,0 u: ?5 z$ h7 K; P5 P
.name = "user_led2",
. e: ^* F6 ^5 f; D. C" @ .default_trigger = "default-on",7 A5 e; A, a' j
},
. V2 l4 P) r3 K; f7 Q$ w1 ^ {
1 N) D7 b6 o) H8 j! z .active_low = 0,- A# C0 E1 D9 s5 M" }
.gpio = DA850_USER_LED3,1 Q. c6 [" T5 ^6 _( o0 z, x: J
.name = "user_led3",% d a9 Q% ~/ U$ n9 G, S
.default_trigger = "default-on",
4 M- v& e0 m; I$ m },
2 c4 p+ U: J" @7 v }3 V}; L/ j5 j6 @$ V% u5 X
; V- h" j" w. A; b3 V% ~" @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 S# P7 f& M. A: u$ K% z .leds = da850_evm_tl_leds,
8 r4 S; M% A9 q% o, J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# i0 C" r) h+ z3 L% H
};
3 C% v6 f/ P) d" `& T. k& D: {. N, [" ^9 [7 K/ Q
static void led_dev_release(struct device *dev)
# S, G- H- S$ Q( T% J/ f( y{
% C( H1 j( p! ?! M3 _' Y};
' r- X- @+ |/ m% \; F% ^
# ?: P8 k" N+ o+ ~ m0 S! S/ dstatic struct platform_device da850_evm_tl_leds_device = {0 ?3 r5 F/ A! {& `1 A6 H
.name = "leds-gpio",
4 Q( i* A3 i$ A .id = 1,+ W# m% ]' U, ?) M6 s8 j5 n$ }: M$ J
.dev = {0 u6 Z+ _& S3 D: Q( I/ R2 g
.platform_data = &da850_evm_tl_leds_pdata,
5 N, H' F7 b& M: f) ?1 x% ?- m .release = led_dev_release,1 n3 V8 a' {" L. g
}
6 ?; j9 L; Z0 M};2 r6 \- n% G; v& D5 ]
4 b0 |, z; Y4 Hstatic int __init led_platform_init(void)* Q! p' a2 ^ K' O) V
{2 }/ g1 k* s: h# t% @' A$ {. d- A
int ret;& _/ A+ V6 a( s4 \( L7 q! H! e9 R
#if 0; S/ v& S" J& v2 c, |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 K* j& p/ I# Y, y if (ret)+ `( H+ C5 G7 {3 c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", Y# M$ G, s1 ^0 }
"%d\n", ret);
8 D4 k+ D" t8 F/ ?/ E- l$ ^#endif4 O0 D! A- v1 m: z! Z6 f g
ret = platform_device_register(&da850_evm_tl_leds_device);1 H! r) N2 [! v E1 x
if (ret)
; @- i" G8 ~/ [( h i pr_warning("Could not register som GPIO expander LEDS");. c0 [1 J: v# ^/ a% C: k/ c
else3 X% F/ C$ ^0 [
printk(KERN_INFO "LED register sucessful!\n");( z: t( f8 U% k% {
a& j+ v' \- \ return ret;
4 i g3 C# l% P6 g3 e- d}2 z+ i6 B8 C- S" S
) o/ W6 B5 f$ Z; M$ |' t+ ?
static void __exit led_platform_exit(void)! ~6 l z; k" f' c# b
{
# b! q: n5 u2 s! F, ^' R, n3 k platform_device_unregister(&da850_evm_tl_leds_device);1 ~/ K; F) f7 n) |. M1 G8 ~" {
7 Z* I+ ^1 Z$ ~' s4 O printk(KERN_INFO "LED unregister!\n");" S9 w; X+ T! e0 t7 T& O; \5 U
}
" N0 n6 m1 F p5 ~$ y J3 ^
, w8 A) R: ~6 P) `8 P$ hmodule_init(led_platform_init);
5 ~9 W, ~; ^9 V5 T, Xmodule_exit(led_platform_exit);
I7 o& K% P4 @4 F9 P5 s* ]! k g# O. x `' A
MODULE_DESCRIPTION("Led platform driver");
% [* }' b# Q- K% FMODULE_AUTHOR("Tronlong");. x3 H+ `3 i6 H' ?, G" s( Y7 \
MODULE_LICENSE("GPL");
Q9 u4 g- h. _$ b# n3 D Y3 c6 a& {/ Z
|
|