|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! R2 {* E2 ?. z! b#include <linux/init.h>
2 @6 f6 `6 M9 p5 }# {0 z( z#include <linux/module.h>
. g5 k: t* X- W# b4 K- D#include <linux/kernel.h> k& L+ E' F- y
#include <linux/types.h>* C% k2 ~1 N0 M
#include <linux/gpio.h>
* K0 }! A3 @7 k; `7 `9 @2 t3 Z) G#include <linux/leds.h>
7 K' L: ]. M! V& e7 Q4 e9 ^5 |#include <linux/platform_device.h>3 M& V; x' d! F5 g0 q% E0 e( ]2 Z' \. X
$ R! B3 j, M1 o* f0 }/ n3 W! a
#include <asm/mach-types.h>
7 `1 r7 w \5 t#include <asm/mach/arch.h>/ L$ Y# X5 [. U
#include <mach/da8xx.h>1 n! D5 J* G+ H6 S: P7 z' d
#include <mach/mux.h>
$ ]7 `" b7 p( O& k" d. u L! }
7 d" X% t3 @, P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; q+ W4 C1 T5 c$ d& |) m! w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); r- w$ Z1 w- r) v* e9 A7 |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) I) ?1 \2 f1 V& y) ^/ e( ]" i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ v, C% b' |& W5 v7 r3 F/ p
% b. k& r1 ?: |- j: P4 q a/ r' S/* assign the tl som board LED-GPIOs*/
5 o" S' d8 o! V7 r* g$ lstatic const short da850_evm_tl_user_led_pins[] = {* R% |8 r$ e( A' K2 D4 s- h
/* These pins are definition at <mach/mux.h> file */
7 e @4 k5 H: z' @# w" Z" B& | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 S& k- k7 i" Q0 A1 W
-1/ V I( l$ W3 N1 v
};+ R& \$ w# E1 J9 D+ l5 ?
+ E$ Q- d; V% ~& ?1 _static struct gpio_led da850_evm_tl_leds[] = {
" q' w8 ^; D& k {9 d, {9 \& m. m; K0 l4 Z
.active_low = 0,$ c& `, k( E3 |6 t+ V# S5 b
.gpio = DA850_USER_LED0,
& c" I7 w) Y+ I) p .name = "user_led0",
7 e' @+ d( R1 P$ |2 a$ F6 e5 Q .default_trigger = "default-on",
: i/ a. S% O) _# ?3 x },0 r2 K5 ~2 @# D
{
% u: A+ M$ R+ C$ P' F .active_low = 0,9 }( s- X+ y6 p1 c2 t( B1 f
.gpio = DA850_USER_LED1, |* ~1 [4 Q/ c
.name = "user_led1",
8 O: t! `9 I+ z. ]& K d$ b .default_trigger = "default-on",
. p& U* d% f0 t },4 G( M1 u# q5 s" Q
{
# I4 o- ]; H0 h- N/ `) W .active_low = 0,
/ g8 `4 P/ w) [' v .gpio = DA850_USER_LED2,5 M, I+ ^) V" {
.name = "user_led2",
/ R0 H0 ]& O0 W) N9 r, ^; _0 A .default_trigger = "default-on",6 j: L! b9 [/ F. X( b% C- k
},
$ K; {7 u% T: q; I {
) ?9 W+ G" r0 B3 H7 i7 l .active_low = 0,# L! k% r6 t ~4 ^" s7 y, n* B
.gpio = DA850_USER_LED3,! @2 U. F% p A0 r( ^) p1 |
.name = "user_led3",* T- z& d4 y; d& _0 P+ P" z
.default_trigger = "default-on",) n8 q5 B* h" k% f
},7 U8 H5 i% J: a5 j% {% d
};
! y1 Y) |/ ]2 A) D
/ k9 D" x9 y' astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. D+ R5 N9 v- k5 {' k" w$ U& g: ` .leds = da850_evm_tl_leds,. {- F4 f3 ?5 \2 \) ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 o; Y% |$ a# [( P i$ m};# t& P! i# x1 n: Z0 M- U
3 e: ~9 Y' G1 ~# } r# m. M
static void led_dev_release(struct device *dev)$ `0 B6 D+ O- G; R2 @5 e% Y2 W
{
5 e. N) j: L; o' A0 D0 r};
. }+ }0 Y$ `. T8 z2 \* F/ N
: Y1 d/ {/ i% |static struct platform_device da850_evm_tl_leds_device = {& }& E: O9 t1 i" X. q8 Y5 k7 u
.name = "leds-gpio",
( j& h" P0 `, E6 n .id = 1,7 ~6 A0 Z4 M. O+ o0 f
.dev = {. c1 |+ l+ U' X$ @0 r% c" @
.platform_data = &da850_evm_tl_leds_pdata,3 y/ T6 z* D: M' W1 q
.release = led_dev_release,; ]" ]& D7 G. F. E. e5 {( K, ~
}! \8 G1 r5 f" ^+ c C5 D1 o
};
0 Y3 q9 t2 ]% `# b2 j7 W5 v2 K) w1 S- }6 i
static int __init led_platform_init(void)
$ j1 r& m3 q+ r& _9 |7 n{& l. Y% E. w$ C; h* {
int ret;8 I% `2 n1 ^1 V, ~
#if 0
# I ]$ A. m. }) H7 z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* l# U7 z2 g7 c* L% \ if (ret)
/ w* c) Q2 F& k4 }# u( K1 @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 j2 l, \% F# B. T, r( p
"%d\n", ret);
! G7 Z" _$ ?5 ~9 m; X#endif
: z* t- @% j4 e% d1 X5 V ret = platform_device_register(&da850_evm_tl_leds_device);
7 Y" P: ^! R; v: h E$ ]: @6 L if (ret)
7 [5 V; t1 E. Q/ E% R1 L; A pr_warning("Could not register som GPIO expander LEDS");' G* K/ m, q6 ]: W5 {
else* E5 h4 ?" R O, P+ T6 l
printk(KERN_INFO "LED register sucessful!\n");( Z9 B$ N V2 ] H) X8 G; G) C4 ]
}8 H5 R! u& y! ?$ ~2 U' R, H+ S1 V return ret;' \. L# F6 o) p8 d' l6 `" s
}3 p! s! @$ y! \: X$ M [
3 Y: Q, Z+ u3 r) {- a7 Estatic void __exit led_platform_exit(void), J( H: b+ m* X( n
{' c; C; L) ?& L2 x6 j
platform_device_unregister(&da850_evm_tl_leds_device);
/ @! Y( L1 ?1 q9 w- `! h+ r( t- D7 Z4 j' m* X
printk(KERN_INFO "LED unregister!\n");% i, t& h8 X: Z+ n6 b+ h% y: |
}6 x" q2 N" s1 L/ u
K( g2 _4 D; z0 H! L1 i/ tmodule_init(led_platform_init);
4 Y3 A& @4 a h& T [4 h% I4 Omodule_exit(led_platform_exit);
+ D; K$ R; i" i! Y1 Q. T% ~$ W) |2 b) J/ l1 j# ^! s
MODULE_DESCRIPTION("Led platform driver");
. _. x3 U' T: S1 f' R- s4 G, FMODULE_AUTHOR("Tronlong");
( _1 H5 x# \% q$ G+ |, PMODULE_LICENSE("GPL");& L- }1 m& h: [+ v6 B/ v2 Z% R
5 _1 l$ t7 |" M7 H; e6 b
|
|