|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 l* q: H2 T! r$ `# ]- S% F) T+ G
#include <linux/init.h>
* f6 [) [, c. g( J0 T, y# X/ d#include <linux/module.h># J" d* i3 e4 u) l/ w7 Z
#include <linux/kernel.h>7 f( u* q/ i' Y) O; l
#include <linux/types.h>. [; ?; h, D! o
#include <linux/gpio.h>+ x, _9 e- |3 ^, Y# B/ c3 b
#include <linux/leds.h>4 ?+ f9 j) N5 F5 T7 k8 A
#include <linux/platform_device.h>
' h6 W+ N5 y& \9 t3 v) l& b6 z8 }6 w; A5 k3 ?/ H
#include <asm/mach-types.h>
5 t* L+ W+ F; E' T5 P; p! g/ G#include <asm/mach/arch.h>
) Z9 l5 K& R9 M% i: c1 E4 Z#include <mach/da8xx.h>( S# B& O, S2 H# Z" A5 g1 ]9 M
#include <mach/mux.h>
9 A" \% Y3 |1 y) L& M5 U6 \% c) F& l& T& N4 M! H8 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 T% w2 S/ b5 s2 K' r) C* d" D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" u1 O! A' s4 O" y. A1 P/ {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( K$ s$ Z% C! U8 a0 ^$ W" M$ S7 Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 F6 N# d% B0 J8 q9 M9 ~# @. z; I9 q/ b! Y
/* assign the tl som board LED-GPIOs*/3 y7 S4 ]; g. Q; z! `" T; [
static const short da850_evm_tl_user_led_pins[] = {) o& `, o, n" R& K+ H& G2 Q$ k
/* These pins are definition at <mach/mux.h> file */
5 L. a/ J' w2 z: o2 b$ x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," A0 a3 q( E. u' G5 u
-1
: _' o* s& s% k8 S, G};; N1 |/ d5 u7 r( J5 w
- F& k+ ?* Q3 D& F' w+ B
static struct gpio_led da850_evm_tl_leds[] = {
$ t+ o, T& X$ A7 B; x* I4 g {* N* z8 t8 S' ?5 }7 }0 O" L& d
.active_low = 0,
* |9 @, m; g0 O3 [0 _1 f. g .gpio = DA850_USER_LED0,
; U8 {, u$ D) G% G .name = "user_led0",6 M6 F p! l8 _" q! w% r
.default_trigger = "default-on",$ E6 B8 S( a/ @5 l
},; N+ J% Q7 H) {. N$ c
{; H6 w7 ]/ o8 @4 B8 P3 ~
.active_low = 0,
; c2 `2 X" p4 H. {. \ c+ ? .gpio = DA850_USER_LED1,. r& k6 J% M; L4 h" m9 ?
.name = "user_led1",* K8 h1 n+ M: b9 I# O% S
.default_trigger = "default-on",
" p4 C7 r( l7 E0 r s, B/ N },- F1 Z: D) W" N
{
8 R W+ k& l5 z .active_low = 0,6 h4 F x$ Z. n! p% i
.gpio = DA850_USER_LED2,
" n3 W# H9 _& s3 r7 o; }& z .name = "user_led2",3 R# h5 t7 k5 e; z: `3 r, _
.default_trigger = "default-on",
( y) J1 {( P/ Z },
1 f2 T J6 V; c+ s. O' x( `, ^9 u {
1 f: r- A6 o% l/ X+ Y .active_low = 0,
; U, d/ S3 X0 S X6 n2 {$ w .gpio = DA850_USER_LED3,
5 q& g6 J: Y( `) |/ B: N; N5 Y .name = "user_led3"," H6 V& e, m3 Y( N. k
.default_trigger = "default-on",
7 W# Q5 U4 B( V },2 e& J# @% y! ?' B
};
5 T q4 V0 Z7 ~; k2 x9 J
: N$ n4 [, q& _$ o( J* C- bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: u7 F4 E7 N z/ j U
.leds = da850_evm_tl_leds,
2 `: d* g/ R% }+ K" H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- g. x' |1 w! U: j4 O% s( A( o
};
$ R1 L/ |. g R6 `$ |4 N$ n' x' {3 K/ B
static void led_dev_release(struct device *dev)2 K# _1 q9 ?# R% r$ G
{
3 K) I2 v V; q' {};
: d8 ?% J [5 Q2 e* [/ e9 p; s8 ]/ j
/ T" j, _$ I* u( Sstatic struct platform_device da850_evm_tl_leds_device = {
: s1 P7 H3 D0 o .name = "leds-gpio",9 q4 I4 ?5 T! s4 r
.id = 1, A2 M- V. E/ e9 d; L# ~
.dev = {; x' A3 i0 p2 u! o) f8 r, ], w
.platform_data = &da850_evm_tl_leds_pdata,
6 d5 b+ S& v: Y7 K$ W! Y .release = led_dev_release,
% P' [. q' J; y- I }; v0 i. h9 N; s5 [
};6 C& M9 ^5 i, F, I2 p
4 C' c& [7 a9 u& d
static int __init led_platform_init(void)
% C2 ^; {" ?6 v, b5 O{! K9 X7 T. h% d& ]! ?% M/ G8 R
int ret;; H9 O# b- K) {' m1 k
#if 0 m6 n7 K8 s' @8 ]; j/ d; u0 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 u- [2 |% E8 p" d+ j; {7 a: A if (ret)
9 d! A; a) R9 Z) b- O% [6 F. F" [% `, b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( e1 G$ v. T- \0 ~( {/ I "%d\n", ret);6 u, b7 ^$ e. {: {- N
#endif
" H& Y$ C/ S9 I) {) I1 N ret = platform_device_register(&da850_evm_tl_leds_device);
. j& i2 A' w6 h+ } r if (ret)$ B$ a0 S( H9 Q ^. j
pr_warning("Could not register som GPIO expander LEDS");) t! R; z: ^* L& k2 C/ M
else
* M9 \7 c+ }. |* @" X7 ~0 z' I) b printk(KERN_INFO "LED register sucessful!\n");
: O, K) q, e9 Q/ c' o9 ]+ f, Y) q. N* w6 L/ d
return ret;* b0 {& t& i% m- ~ E
}- ?: _9 \3 o+ O: ~. W
1 C! k% X6 f6 u% F
static void __exit led_platform_exit(void) A; T/ X- i6 }& p( }, \
{; U; U! v5 T. N* F q* z5 i
platform_device_unregister(&da850_evm_tl_leds_device);
7 C+ z4 f% i* {) O" e* m) J1 n: O( D K
printk(KERN_INFO "LED unregister!\n");4 i4 e: N( k3 A: k2 @# V/ P# ~" `
}
3 Y" m! S7 W/ j, j1 g% ]+ [' b: ]. u9 A* w1 S8 H0 B
module_init(led_platform_init);
; ~5 ~2 {( A \4 F* F! Umodule_exit(led_platform_exit);
$ R% b: O& G* y/ ]
% c6 k, @, [3 t. k1 XMODULE_DESCRIPTION("Led platform driver"); J- S7 i) ]/ m6 y* {) v
MODULE_AUTHOR("Tronlong");
9 B! F3 W( B9 h3 l. CMODULE_LICENSE("GPL");5 i( j# J: x( F2 n, h) S
+ `) P" |. l) Q# X6 C: x |
|