|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 L% S6 c" e6 v. y#include <linux/init.h>
" |' R3 l' b3 \0 p1 V#include <linux/module.h>, I R& e) e( F1 m* F7 x: t
#include <linux/kernel.h>
~1 ^8 Z! `! d5 u" l, y4 c; x#include <linux/types.h>
" d: \2 E+ I1 w! j#include <linux/gpio.h>
: p8 T- n* d4 n& O* h. F; k- ~#include <linux/leds.h>
2 m, W# f' `( Q' P2 Q9 {: o#include <linux/platform_device.h># d5 u; a9 g8 z' t
4 f, f: k8 K: h+ g
#include <asm/mach-types.h>
" l* F, j- X1 E5 L, {& `#include <asm/mach/arch.h>) s9 u2 B! i; u5 I0 v( v1 W
#include <mach/da8xx.h>
! f1 E; ]' E. ?8 S#include <mach/mux.h>
8 Z& t v5 j1 E
! ~% {1 C/ ?( j: X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 r6 M2 M0 Z# |/ J4 W) W1 F4 _* e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 ^- g6 Z) T6 `& w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" V. S; w. K% N7 G) \# L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) r- o* |0 y; ?2 }8 _( B% o
& q9 M9 _! Z4 ]& N% F/* assign the tl som board LED-GPIOs*/
0 L& @( P9 `. P( F" \/ E( p# Lstatic const short da850_evm_tl_user_led_pins[] = {
' C/ L) C' C* P2 s5 L4 F /* These pins are definition at <mach/mux.h> file */! w5 M+ \$ p% r B+ U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ d X- T1 b3 ]1 Y Q -1
# s" Z! c/ l8 O0 \};/ }# x" ]! k6 s
5 | s( {# [2 J8 o! j# Tstatic struct gpio_led da850_evm_tl_leds[] = {
: i# f" V3 F7 e0 `* q, A" C {7 |7 A7 a, U! e9 k
.active_low = 0,
* I+ Q& g, l0 w- v) [ .gpio = DA850_USER_LED0,2 [2 l" P3 o' n% w' j& J
.name = "user_led0",) h* d0 `3 Q" N
.default_trigger = "default-on",
8 ?* k5 A6 f: H9 y( ?4 @3 e },
7 C& T/ S% Z1 ]' z/ ~3 ]/ B {
$ ?' U; t( P u+ { .active_low = 0,+ W0 F" H4 {) N" `8 [9 |' o, @& z
.gpio = DA850_USER_LED1,0 d- T9 q/ a& h9 [
.name = "user_led1",; f9 P: l1 p& M, Y
.default_trigger = "default-on",) Q7 t' P& n2 P5 m
},5 }5 K' V; K( _9 N' F; \
{6 q/ X- V# e- K* L' _8 y( g
.active_low = 0,
) ]( Z+ [2 }# G* l: I* |" J .gpio = DA850_USER_LED2,* y) @! k+ v k
.name = "user_led2",
6 B7 F5 x# z: ]9 _ i .default_trigger = "default-on",
$ d7 c) o3 N# \4 s T! }4 q- m5 y },
/ y1 T) ^& C8 ]& a! x" {* M {" F" \& I( F$ r) F: e5 A" Y
.active_low = 0,, O. {( m' z' {% H* d
.gpio = DA850_USER_LED3,: ~% G2 R' l2 R _% G2 B2 r
.name = "user_led3",
5 ~+ X6 j3 U1 O+ `. t t9 Y .default_trigger = "default-on",4 |" D& V. S- Z3 d6 v" K
},8 Z- E+ d) o: u' o
};1 W' y0 k& j) Z% n! }( ?5 A" a
h% s# q, G5 H! j" ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; K2 [; w1 c" _# z7 Z$ _
.leds = da850_evm_tl_leds,
$ N: F9 l/ a K* b: u+ A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* h: ~' \% }2 ?3 Q; J$ H
};
# p' [; }$ u2 J0 y7 k; J# M' J5 v
# Z! Q2 y2 V' O, Y* |* I0 b' [static void led_dev_release(struct device *dev)4 G* m- k8 _0 d9 _% J
{. r/ J: `6 d9 r
};+ o. r V( a0 q9 q6 q
/ q7 |% j! }" B2 T
static struct platform_device da850_evm_tl_leds_device = { f- |/ F% ~+ ], E @: ?! M" n; I
.name = "leds-gpio",6 W3 o0 Q$ K, ?
.id = 1,
6 ]. q# O1 z% w7 }2 q$ f .dev = {
; Q- E# M0 G9 Y .platform_data = &da850_evm_tl_leds_pdata,
5 z4 n% R, [* F7 V9 W* e .release = led_dev_release,6 {! T9 o* q& D% P9 ~. g6 D0 T2 h
}
$ R. y' O( H. a* i};/ `1 }- ~" E( |. X' J/ A! x7 n! g. _
/ Y4 v1 U; X* ]1 n" J4 vstatic int __init led_platform_init(void)" s; H' D, l2 C
{
' n5 P8 c; s* b: Q3 W7 M+ F7 w int ret;9 {. M# z! i4 j1 }7 e
#if 0
7 H4 x: J) N; C& H6 j& h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" b5 r7 G8 I% j$ Y8 @
if (ret)4 @6 f" |3 q% O6 E$ e0 ~4 N7 W+ @5 I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% @3 ~; n i( t9 p/ c D) Y "%d\n", ret);. f$ R; U* ]8 Y# ?* @
#endif
& T5 W6 X- R7 g0 ]/ ]) \+ u3 N* O ret = platform_device_register(&da850_evm_tl_leds_device);) [1 b" I( H- c* u' r M1 A
if (ret)1 B) t$ g1 V+ B
pr_warning("Could not register som GPIO expander LEDS");9 Y' v4 C, N, P s
else
) X- W) _: N4 k printk(KERN_INFO "LED register sucessful!\n");
6 c1 }- _ k8 s6 I* {& Z T: }* j6 m8 S: H( a1 s2 E& @
return ret;
- g8 |6 |& H' H# V0 [}9 ~8 b. E1 Z# ^1 l0 C: a6 M
% G, r8 V O+ s" [static void __exit led_platform_exit(void)
3 G: k. `/ l( M0 O{: q% A% n( b9 C. v% B
platform_device_unregister(&da850_evm_tl_leds_device);
7 {8 F3 L/ _1 C! o( B! J$ q4 n; [7 k* v+ o) O# E) l; ]2 h
printk(KERN_INFO "LED unregister!\n");
6 ^9 G, M$ A6 A5 e3 S}0 g! ?# r3 y E9 I" b6 {& l9 S' y
2 [9 O/ w [4 C, N& Emodule_init(led_platform_init);
6 |2 |( }1 w% N* ~0 xmodule_exit(led_platform_exit);
7 H" L) G4 `% k' C: Y0 j
! y( l4 S# F. PMODULE_DESCRIPTION("Led platform driver");
2 W8 ~, i, B8 ~2 DMODULE_AUTHOR("Tronlong");9 G- b) A7 h! K5 P9 h$ {
MODULE_LICENSE("GPL");+ y( j8 h/ x! B2 |
1 l9 n2 n5 S8 L9 O. E; d- s0 m3 Q
|
|