|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% ? `4 q% j( d" l( @. s2 D5 y#include <linux/init.h>
3 }* R7 c- G( m4 {) I#include <linux/module.h>
- S- B' A' i: W1 T$ F) G#include <linux/kernel.h>
- a! K. o$ i, Q9 `- o: }, V#include <linux/types.h>
6 j0 e6 h6 W7 g$ s; M- R8 g#include <linux/gpio.h>2 O& A; }& b* o& U' y1 X
#include <linux/leds.h>$ j8 Y/ g& Z3 S9 H
#include <linux/platform_device.h>- D/ G; ], E k8 B8 w1 b) h; o
) s6 i5 w/ }( n% m) q0 C6 p6 ?
#include <asm/mach-types.h>
' c: g) y8 t9 f7 O0 t4 y#include <asm/mach/arch.h>
* d+ s* U+ P1 A- U6 i#include <mach/da8xx.h>
) _% t7 ~3 j) d# C- V! T5 }#include <mach/mux.h>% t, r" @) ?2 d* V7 K
& z7 v' U! e5 f) \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 z' j1 h+ k" H! P# b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' E$ j6 n2 n" @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): _) B; F. M! h6 o2 v: |- E1 P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 o$ e0 P/ G( N" O0 ]( c& E( P) z/ o9 N7 u' z8 U" j
/* assign the tl som board LED-GPIOs*/4 A% _: n1 _' d' w
static const short da850_evm_tl_user_led_pins[] = {4 g0 z( h9 Y! L
/* These pins are definition at <mach/mux.h> file */; Y0 S4 e5 c3 r8 b7 |5 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 \$ a! X! A: O1 ?1 T -1
' O6 ]! m1 l* g' L2 N: Z1 Y; ?! Z};& N/ k' Z7 [8 j
# `4 r7 G3 C6 ?; T7 ~static struct gpio_led da850_evm_tl_leds[] = {2 M$ q) X- N0 F3 O' L
{
3 l8 B! z1 ?( B2 F/ S .active_low = 0,: T% {) z0 H# ^8 n2 o6 R' U1 e# ~
.gpio = DA850_USER_LED0,. g ^ q$ {) ~* d8 S
.name = "user_led0",0 Z! o: }: p, K" |5 T5 W+ X
.default_trigger = "default-on",
6 s! c" r- S+ l3 F: U% [4 f },3 Q3 L. K2 N2 C1 A
{
0 r- K8 s) ]! r% m2 w .active_low = 0,
8 `$ u8 J& H1 m .gpio = DA850_USER_LED1,
# ~8 G4 f( f+ U .name = "user_led1",
/ ]/ w' I, {% z .default_trigger = "default-on",0 h% i0 n6 K) d6 {6 t! [5 T- G
},
2 c! j* r: I) H {# |7 b0 B) a O& e! W" f
.active_low = 0,
0 z/ D$ I( z/ T .gpio = DA850_USER_LED2,% s1 q( S5 q$ C
.name = "user_led2",
; Z# D" z5 Q: V, F .default_trigger = "default-on",
& q" r0 d Z" d, P5 ~; \ },* m' J" p1 l* p' H
{; }; d' k; C8 E. h2 b- }# c
.active_low = 0,! H0 L- d% G& `# w3 A2 B' `1 p/ X9 z
.gpio = DA850_USER_LED3," k; }# r/ u5 R6 U
.name = "user_led3",9 g1 e O4 b# V; T7 v2 q$ E
.default_trigger = "default-on",! | B4 U/ s$ g
},* R2 x: L& Z1 p% \6 }# K
};
) N0 D y) w. M. y# F$ E, ~+ l0 D6 _. t- k2 `! s7 W2 v. N# ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( s) M8 }+ A, M; ^' ~2 M6 V9 m
.leds = da850_evm_tl_leds,/ d; H) u" d; L) j/ q, T- |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 j( |0 `3 G8 j1 K};, L$ m+ ^5 u" L
+ f2 q' O: R' C4 U7 ?1 a
static void led_dev_release(struct device *dev)8 g3 E2 X8 z- M
{
$ T- c, G: ?' h4 `. q! e; L5 u};
; V: k: L @5 o8 U3 s2 m% X
6 r( n" b7 Q5 kstatic struct platform_device da850_evm_tl_leds_device = {) q/ q" T4 u; B5 J; _) G& t
.name = "leds-gpio",
% N" [3 ?, y) j: w* G6 x .id = 1,
2 y' G. a p/ |' ? .dev = {
o; |0 ?" ]3 K/ R* [! m) U8 r i .platform_data = &da850_evm_tl_leds_pdata,
9 P& s0 T- R$ n' _ .release = led_dev_release,
4 j: [* H6 |# X& N+ C }1 G5 Q N0 h2 g9 A" B- M/ G8 z
};, x2 q9 p6 R+ Q4 i. Z
7 Q' V7 D# [( U8 D$ a# L
static int __init led_platform_init(void)
1 T# u! f) h3 I" F) _% l{
' q4 c8 Y% h* U8 _+ o% X int ret;
R# C. F i( U, J- O#if 0
6 V2 a- v( h2 P8 A, ~3 u" k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- n/ j# d; M1 C1 G if (ret)
' x" ^7 _& D0 x. e# z6 y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( I5 d* U F8 h& J0 ?: u
"%d\n", ret);' P* X9 f4 P& U& }
#endif
3 T' M" r7 s5 m ret = platform_device_register(&da850_evm_tl_leds_device);, @& [/ }' M+ s2 `
if (ret)
; V; _- Z& _; t4 u pr_warning("Could not register som GPIO expander LEDS");
% E+ G2 ~1 {# ~9 f. w else5 w9 c+ \# }% ^/ }
printk(KERN_INFO "LED register sucessful!\n");
5 q, s& A2 \3 n' c& M+ v. r
; G+ d `3 o6 X( o4 _" S return ret;
% V3 c! B1 _/ R" \3 a2 P}
0 A: ?( q# x" B
. n# l' i0 J3 W, g. [static void __exit led_platform_exit(void)
w4 V1 d* j; L+ m: u+ x/ o/ m- b{
O/ G6 } {: i* D( R platform_device_unregister(&da850_evm_tl_leds_device);
" V f: F% a" d' b) c. x$ }& h+ M' [ D5 f" u5 k
printk(KERN_INFO "LED unregister!\n");6 N0 K4 M" r( J4 h; \+ y0 D% J
}
& @) O7 d( j3 R6 Y6 o2 |* p) P7 T( h1 a5 B7 H& y6 E& W
module_init(led_platform_init);4 B+ x+ h" O4 T' g& K4 d q
module_exit(led_platform_exit);. n8 y" U7 W9 s3 X, a- w: h
. b/ s+ ~# j/ l/ ~
MODULE_DESCRIPTION("Led platform driver");
1 b6 A8 J5 `4 j* W4 t$ RMODULE_AUTHOR("Tronlong");
: l' x- W0 Y6 \MODULE_LICENSE("GPL");7 c) x7 u: R: R# s
1 ]# m9 X3 m( I! d+ `. W
|
|