|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 H; d( m, }% x4 N1 n8 i
#include <linux/init.h>
0 v- O/ B$ u3 S9 @#include <linux/module.h>( s8 x0 ^, j& [7 C; S0 E5 i5 i5 K
#include <linux/kernel.h>
# V1 m1 V& b/ E* [#include <linux/types.h>
5 j6 t! j# t/ ~& u6 U9 U#include <linux/gpio.h>
; _. r; U1 D, Y; |4 q, K#include <linux/leds.h>8 U: ?1 @! s( c/ M j6 |9 Z8 j
#include <linux/platform_device.h>1 F7 z: B$ J4 m
: p5 c1 ?/ J4 u0 h#include <asm/mach-types.h>
c0 N; N* N+ K( w z#include <asm/mach/arch.h>2 @# N8 X+ m( @! `
#include <mach/da8xx.h>
( o' E5 j4 z3 q! ^+ g/ \( z#include <mach/mux.h>: N+ Z. @% l# u# m" \
& I6 ]) Q# C v' g6 W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" e7 z7 j1 z+ N$ C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 ^+ f+ |7 }; `; A' K% k s2 Z3 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. ]9 b6 _4 r, D' l5 D5 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, A8 y9 ^6 O3 j( e" O H4 \! i& V8 f1 i1 D! e
/* assign the tl som board LED-GPIOs*/ b* j6 F" z0 h6 O w
static const short da850_evm_tl_user_led_pins[] = {
+ E8 H- A; ]- B4 u /* These pins are definition at <mach/mux.h> file */9 O: |' q5 D5 b3 [# E% k/ q4 _* c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% G e; s/ O2 B; H! [8 _+ u -1
8 A# l1 h6 S' l4 B};
1 o" _3 [- k# S1 v3 m9 v
; o7 T- ^1 y6 A9 I, b% B- s( p/ s* L1 |static struct gpio_led da850_evm_tl_leds[] = {8 D7 h# j# B4 U1 f) n
{
* x$ K" `9 g# |* \; z9 i .active_low = 0,
9 x' J% }3 ?" ~2 Y) b) i! E .gpio = DA850_USER_LED0,# k) h Y. B2 L/ |0 _
.name = "user_led0",
& @% g# i9 K* e) N2 A .default_trigger = "default-on",* j3 P6 N1 C( D1 q4 ]
},
. E# h0 |$ P1 A7 B, t" F! ? {
$ r& U( J* `7 u .active_low = 0,
1 z0 z0 i* @5 I. J .gpio = DA850_USER_LED1," D5 B R' W# C1 _& ~( H0 p, Q
.name = "user_led1",
3 v$ j& z' c @4 h8 i8 } .default_trigger = "default-on"," |+ j! c4 }0 I
},# C* L1 Q6 C) e" d' R1 d" ]: x
{
2 |4 T7 ~$ P j Y4 u& W5 ]' Q .active_low = 0,
2 Q" _' p# I& x" g7 D .gpio = DA850_USER_LED2,
3 f& n7 K b% H# }+ X .name = "user_led2",
" H, |7 O& ?' j" n* P5 B- T1 U .default_trigger = "default-on",
' b9 o( s& V' H% _8 b# L; @ },
i# @; n4 \- O9 `/ E {
; `$ v; l3 n# M! b" W .active_low = 0,( E# x: i; M r" z
.gpio = DA850_USER_LED3,
4 C4 P0 D2 m: |$ ^: V2 x .name = "user_led3",
7 v- M: z5 o: _" ~1 ^ .default_trigger = "default-on",
' u/ R3 V( u' Y8 z( _ },
6 L5 y$ P+ I0 z; C& _+ p};) N9 W' @" W3 ^) R' t
. K. M* }! I" A; w: R6 x1 B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 h3 E8 _4 z& c( U7 `4 o
.leds = da850_evm_tl_leds,2 y& n6 c2 j4 L9 H, X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ i/ ~$ A9 X2 c& _};
2 Z. \; d0 f. [) f& M0 v/ q0 ?9 q0 ^' H2 @$ b0 V7 i3 n( b' f8 f
static void led_dev_release(struct device *dev)3 `- a* F7 `: o' W2 C% n* S
{
( ~1 B- o8 m) ^1 M. D};
, f# A! ~" g, Z+ T
5 v7 M& W2 g0 ?8 M: H0 dstatic struct platform_device da850_evm_tl_leds_device = {
" Q6 P0 a! q! j .name = "leds-gpio",
- u# X* u6 e6 F+ a: p1 B) ^ .id = 1,
/ l& A) u1 ?- I @) Y .dev = {
$ _1 U9 } `8 b2 L4 g .platform_data = &da850_evm_tl_leds_pdata,, Q9 e+ q( c/ R) ~4 p4 M! ~6 b
.release = led_dev_release,+ \3 b, V8 z! m2 a! k, f
}
6 u8 y9 H8 Z; R5 \% q7 I" {5 z};% H7 Q" X: Z" l9 a, s
: ]) y, J) c3 B1 }: P1 fstatic int __init led_platform_init(void)
' `# q- T# B" B G{
6 T4 p) Q. q! y- n g int ret;
! o! I9 i6 t! j$ P+ W4 @9 e#if 0
. u- T. S6 B( Q% B$ X% @/ V! d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ ^+ k' o/ A6 G% C. T1 a" _% w/ J if (ret)/ k- x7 P( | F+ q! }! d+ b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ ]8 X/ ~4 Q! c5 p$ w( p% _. y
"%d\n", ret);# a; j& J/ q/ f1 E5 |
#endif
) A4 u3 N5 @- A& k: M ret = platform_device_register(&da850_evm_tl_leds_device);6 T0 I" }& K+ C) |0 h: p! T
if (ret)
: O4 O9 e( k% x) n! D pr_warning("Could not register som GPIO expander LEDS");
5 U3 i" C) b' _/ |; t: Q' Z else. {$ U" l" B' |; D' z' C. V
printk(KERN_INFO "LED register sucessful!\n");0 N4 [. f5 o7 e& X% y7 a; Y0 u; D
) h& ?- A4 v8 c5 O6 Y return ret;5 p& d/ m4 Z* ]6 K" S
}5 M9 y$ k/ X' H9 K6 M/ ?( ]: {8 s2 s0 Q
( C4 U! v) {, S5 [" |+ V% c) t
static void __exit led_platform_exit(void)9 m6 T' e3 r5 K" I! D0 o
{
7 L& ^% {' w9 @ platform_device_unregister(&da850_evm_tl_leds_device);
; z# Y( J9 ]. @6 m0 R* A! ^6 l7 Y2 n: A' M& H
printk(KERN_INFO "LED unregister!\n");
$ H, [7 N9 W5 V$ K3 |" ?- Q}" ], s6 o" c/ y5 I
7 h7 ^2 {: V' `$ o1 ~
module_init(led_platform_init);8 v2 C0 E0 f: }( A2 B9 U4 P
module_exit(led_platform_exit);* ^6 {( D6 r" j" f
4 L X3 i6 ?5 n- q! `) z) `
MODULE_DESCRIPTION("Led platform driver");
" T5 e9 W4 n. F WMODULE_AUTHOR("Tronlong");
' Y2 y) c& I' T$ _# n" H( CMODULE_LICENSE("GPL");
3 c" |; j8 ?4 L% t5 i
& h0 L2 h9 J- F; w3 `6 F# Q S |
|