|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 c8 | j# e3 ?' u; \
#include <linux/init.h>& C. `7 S7 h! m3 Q
#include <linux/module.h>% N0 w6 p* X1 j1 t2 V( U' q$ l
#include <linux/kernel.h> e& s3 p; @" o8 z; N. g7 z+ P5 a
#include <linux/types.h>
2 r8 H7 q9 z: B- Q( @#include <linux/gpio.h>- B( s c8 u3 ~1 Y$ ?, }
#include <linux/leds.h>
! g8 g9 q5 S2 }) i8 B) c7 `#include <linux/platform_device.h>
9 { e) W {2 ]+ L8 r# X
" O. x/ b: g( U% }# {#include <asm/mach-types.h>" D! P2 V3 q/ Z& `
#include <asm/mach/arch.h>2 M" `2 n* o" o9 r6 V" t
#include <mach/da8xx.h>
8 P a8 H: i" P3 H5 N; L" S8 X#include <mach/mux.h>: ~2 n6 w/ `: v1 i/ h; o
% X1 i ~/ v, r2 r& u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- e$ {) I/ j$ n% V* @
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) \4 G& k' a. Z2 W' V* r5 A0 G& R, `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), c* C! }/ l( u9 K
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, ?! f7 S- H* H; {' v. f
& u) t7 c" Z; X Z. a/ S& B) i' g/* assign the tl som board LED-GPIOs*/
; N4 W* ~; [ ~& Y$ d6 o5 x0 Zstatic const short da850_evm_tl_user_led_pins[] = {8 [/ q3 v. p+ X1 [
/* These pins are definition at <mach/mux.h> file */
) O0 n2 K! d2 ^) y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ d3 g$ T' N! p$ O7 o -1( Z9 u" U0 z! o9 }% F
};
`; [# o( r) M9 s& G7 V7 H. r1 c2 [7 `8 i9 ~
static struct gpio_led da850_evm_tl_leds[] = {
9 A9 M* g' C2 ]" R* Q' }$ c3 p$ S! @, Y$ o {
1 s' m6 S5 c0 a/ m4 K .active_low = 0,8 O7 K% H' N( K- l2 Q0 D
.gpio = DA850_USER_LED0,6 r* k- ]# |) i! d* \7 B1 ]
.name = "user_led0",
( O# L0 ` Q& O! j, c .default_trigger = "default-on",' F1 M0 r/ \4 r! h0 d# D8 i* f
},2 c0 y7 {/ G2 m \6 m/ g0 O
{
6 Z$ X* C8 ~/ a; f3 V; W .active_low = 0,
1 k' s1 |, z; m! F* a .gpio = DA850_USER_LED1,
( y# w" R& V7 Y1 B .name = "user_led1",- }3 u0 P* F. a/ o; Q
.default_trigger = "default-on"," e! g# K+ j8 L
}, h7 ]' l+ q9 g' ^ C
{) n+ F2 b. f9 J: Y( [
.active_low = 0,! J7 a# Z! t8 O; e5 B+ E4 K
.gpio = DA850_USER_LED2,
* f. V( Z, j. R0 t# D: b0 \ .name = "user_led2",
$ Z# q9 N* E0 R* L .default_trigger = "default-on",2 _) o& M5 N! L( a
},# g* b; ]; b) V
{
6 D. F: Z* v9 x0 j; k3 H h" @ .active_low = 0,
* v# Z- Z, `1 U/ M: U .gpio = DA850_USER_LED3,
0 R6 x" Q( A5 F/ A, |" L .name = "user_led3",; b. c5 t( W- r! h
.default_trigger = "default-on",* }) O8 O2 X/ l1 s2 r+ G
},
, K/ C Y1 W. v};
3 W, A* n/ N8 z' x1 [: `9 \. O6 b& W8 {, O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; H+ }- E! Q: Q2 _2 V% l& |. `
.leds = da850_evm_tl_leds,+ ~$ E4 [' l2 K, }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' c1 D4 x$ h4 D! f# }' j) N; M
};4 M. F, \% z; v/ H6 y
9 @6 t. F1 l6 Z9 zstatic void led_dev_release(struct device *dev)
) @- ]* i# o8 i \+ x6 z{
& W& d8 L( P8 j; `+ e! `. M};
" y$ @6 B' a& ^) J( ^! v" c& _ w( j$ F& D1 ?( F% [
static struct platform_device da850_evm_tl_leds_device = {
9 q6 l# @8 Z. O* ?* `) z .name = "leds-gpio",
% O6 V8 o# Z+ N% Y .id = 1,; i9 e1 ~6 @5 Q9 ~
.dev = {- o6 z/ g1 @5 r, c( e; V' D% F7 b% l
.platform_data = &da850_evm_tl_leds_pdata,+ q; v- {: d) T3 e" \1 I
.release = led_dev_release,9 \/ J6 }/ c9 Q8 y& @
}
, F1 L; L% m) _};
- i9 m! x- c C8 N
6 B1 ]$ l/ F# t( ~* ^static int __init led_platform_init(void)* w3 R" q& D. h* t$ g
{
8 ~: ~5 y4 E* x6 B* L j int ret;
8 y' I* G# O; a8 B6 V#if 0' b+ A/ f" M" d" {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" w& A% \9 C/ o9 v$ t: A3 A2 ?1 a( G
if (ret)8 Z+ D# U0 h% K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 D+ r7 T$ c8 U* |8 _$ E "%d\n", ret);* N1 V+ m) d: W' T" x
#endif3 I, `5 y5 {* C) W0 e( T
ret = platform_device_register(&da850_evm_tl_leds_device);
$ k7 d0 k' ~: d( @. K if (ret)
, Z3 ~3 l7 K- g1 }1 \ pr_warning("Could not register som GPIO expander LEDS");& }$ A& v. c# \, M+ x
else
u7 p; f) U( H/ w printk(KERN_INFO "LED register sucessful!\n");8 T% b8 V. F! x7 C( d
, B! i+ b* n& o9 j5 X% G' o& P \
return ret;& `% i, { d: Q
}9 Q$ {+ @7 m- x+ q2 m5 Q1 P
$ o, Z+ Q$ \$ g& Jstatic void __exit led_platform_exit(void)* p0 l" D- Z2 J, H
{
, D& x2 i. `7 p9 a$ L platform_device_unregister(&da850_evm_tl_leds_device);1 f# M- Y3 w# [$ a( g# c
6 _# C0 q* s, q. ^; D' C3 L7 B printk(KERN_INFO "LED unregister!\n");
' ^" H* _& P; S c+ R}$ |- ?( ]+ T) f' U! [
8 P4 Q' x5 l" d9 M. K6 e3 O( bmodule_init(led_platform_init);
& `( @1 ?( N" nmodule_exit(led_platform_exit);
4 f2 X- F3 q0 X5 @! n4 u$ p
) X1 i9 I* M) S# A! v# P9 OMODULE_DESCRIPTION("Led platform driver");
4 O0 Z: R$ U. H$ Q. A3 P8 u( wMODULE_AUTHOR("Tronlong");
5 \' }" b% c2 x* r; C! m iMODULE_LICENSE("GPL");
2 _& x! t8 }5 l. ?5 D' t+ O& r* Y' q% }* y2 B7 Z! _& g
|
|