|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 P3 b) l9 Z4 N; F0 G: A3 @( Z) Q#include <linux/init.h>
$ x3 ^. n2 ^0 w( t# L#include <linux/module.h>1 ]% y% W5 u$ e* @( t6 n/ R
#include <linux/kernel.h>
1 z8 [! A: t/ A! v" @, g {5 J#include <linux/types.h>
2 G2 q+ m; j( S6 E/ z#include <linux/gpio.h>
2 u9 n- b+ J6 f#include <linux/leds.h>
) a7 J% v$ o, ?& y, Z) P4 v#include <linux/platform_device.h>
]/ Y8 A( \3 d" ~' [5 z4 F& o4 V5 J& s }3 w3 B& `
#include <asm/mach-types.h>
$ ]! @& q Z* y% ^#include <asm/mach/arch.h>4 Z8 M" k' z8 m7 M' W
#include <mach/da8xx.h>; e, ^7 R# l! |, Y9 R' d# z/ P8 b
#include <mach/mux.h>6 @/ g* K% ?/ @ I- i7 M
: t# j; u0 o7 N, a6 e+ z7 |( F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ Y# O D# B2 [$ j# k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 O) ]# W( b0 s1 C. |5 L4 E8 A! [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# `, C# D6 c2 ?! G, ?6 ~# p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 f. s+ i, r( G9 k, C) _" \3 ^* j$ k9 \" s" B2 l& _ q
/* assign the tl som board LED-GPIOs*/
( n1 S, g9 F4 R# f7 D9 F9 ~( |9 G+ vstatic const short da850_evm_tl_user_led_pins[] = {2 `* h" h5 J- ]0 i5 F/ J
/* These pins are definition at <mach/mux.h> file */
7 d" ^% q2 p2 J& x( } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 d3 X) d! E5 o9 f: W
-1" D2 E6 F! ^, ~1 c5 B9 u
};
I! W9 |2 ~: c- O! f6 p: R0 I, ]- H4 l: I9 N+ e( K% F
static struct gpio_led da850_evm_tl_leds[] = {% F/ b" q h. }# L: H1 p
{
8 F& V. O" j8 T% W8 W+ [0 K: ^ .active_low = 0,% I' A& L7 R; K% W. R( n
.gpio = DA850_USER_LED0,0 V0 G3 K$ V6 J6 p; D3 m' R& h
.name = "user_led0",2 t. }( K, D! T$ N( R2 E2 `
.default_trigger = "default-on",
4 W. n5 f+ O( r5 [4 h- ^ },
" _0 T; d, v. p) T- o& Y* w% c {
3 a* ]) J, m' L .active_low = 0," T" J7 f, s# \# T; f
.gpio = DA850_USER_LED1,+ E3 P5 u9 e' O& s/ \
.name = "user_led1",
3 _" j6 y0 t5 V$ i9 o* w9 n! [" J .default_trigger = "default-on",7 y6 a. ?" t7 S: {- q( R6 ?0 Z1 [
},
4 C7 f5 S |5 P4 L1 k {1 N D7 E! ]+ V
.active_low = 0,
2 R' X7 r3 P5 O' P4 m( J .gpio = DA850_USER_LED2,
& q( \* @3 K) t7 U2 R .name = "user_led2",. @. e# x& @, [1 i5 H9 c
.default_trigger = "default-on",. c/ `$ U# r8 f* u1 w+ P
}," r& T+ r% `% t& _8 T: l
{7 H/ h! ]* `/ _& W# r
.active_low = 0,
Y6 _/ f. J$ O2 j+ U' { .gpio = DA850_USER_LED3,
- v8 i& q$ u; G% `; [, Y$ N. m .name = "user_led3",3 g' H- Z2 l8 C0 A2 U1 l$ g
.default_trigger = "default-on",
; \9 {, T T- W6 G9 @: s },7 k: R$ C% [. p7 ~
};, m* F5 I6 ?5 L7 S( k G* c
* r. f8 z% k& L% P- T" l" ?8 h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 K$ Y; m. P) ?% A S1 ] .leds = da850_evm_tl_leds,
' J U( }& i1 @6 B- f$ t% X. J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
V' z# p" P5 I$ H};; \) q+ \* A$ g& |
: n: o( ]2 W4 u6 |5 c
static void led_dev_release(struct device *dev)
# ^- K0 T2 C. H9 Y) x- J{
! Z7 h' E& Y/ B. w7 L9 _};5 `4 b5 Y8 o9 G4 [- l% D1 G* b" `
7 b3 N3 u. H3 @$ {. Qstatic struct platform_device da850_evm_tl_leds_device = {6 I# {4 `2 m+ ^
.name = "leds-gpio",4 ]) k/ V7 B$ g7 B( I9 o3 Y4 v3 }* a" V
.id = 1,
1 D* F8 \9 D- M( | .dev = {
* R' H% v1 L( ~1 H .platform_data = &da850_evm_tl_leds_pdata,% z$ j; M( U& E( x9 b
.release = led_dev_release,* G. v- M7 a( e
}
7 B8 O" X$ N# f: l4 D% X! Q) R};+ F, ?* }1 L. t7 y% ~+ g y8 u# A
Y8 [& [4 r" n6 N8 estatic int __init led_platform_init(void)! z5 v8 Q# T" x. ?/ L% E
{
& Y% M, N5 s8 G1 ?2 p7 f5 I/ }" p int ret;
9 u6 W( Y" D1 l. L- y6 \8 {#if 0
% @7 [3 B6 W) j% q% K: ?+ s( n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 b2 U0 w% Y3 B" x* w if (ret)" Z8 E. k5 S3 E7 s5 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 ]* ]" I5 A5 c7 A
"%d\n", ret);8 b. I6 f) J5 K/ J# \
#endif+ w" \2 g1 U! A( C# `' S5 b* f
ret = platform_device_register(&da850_evm_tl_leds_device);$ l" ]6 J# d* E/ Q6 K# A# M4 F1 a
if (ret)
+ o) b/ Q( i8 G/ G$ a) _5 e& M pr_warning("Could not register som GPIO expander LEDS");
) K) R! G5 I. [ else
, c& M0 T* [$ ]) s4 q; ?! g& W' o: S, ] printk(KERN_INFO "LED register sucessful!\n");7 \/ N% w* P8 y- Q3 X
" W" m$ F2 T. j$ M return ret;% `8 q5 g7 V7 h. Q' O
}
, A! g( I8 \: H: N! h B
+ p. K; i6 B/ _/ z, T: w; Vstatic void __exit led_platform_exit(void)! I* j$ Q( J& w/ w+ _
{2 }: @6 D9 D+ n+ p# S
platform_device_unregister(&da850_evm_tl_leds_device);) D1 p; P; \, }5 N
# Q2 H" I- l/ F/ `% v; v, p( \ printk(KERN_INFO "LED unregister!\n");) G& A+ F, A- D& _
}
2 m. z0 ~! Q/ ]- a6 I1 ]
$ j& w4 S- |6 ?" @. ^) c0 Pmodule_init(led_platform_init);
# H! |2 y6 X7 t4 n9 f' rmodule_exit(led_platform_exit);
. n* F8 I/ W& k0 F) W9 c# T" ^
2 G: O+ ^/ f1 rMODULE_DESCRIPTION("Led platform driver");. a! r# q! i0 t# y; q
MODULE_AUTHOR("Tronlong");: b) t( @. c8 V7 s6 L- j! e# ^
MODULE_LICENSE("GPL");
7 r: ]$ |; C) S! l
. G( y" i% {! u2 J |
|