|
求大神给下面的程序做注解,请稍详细些,谢谢。" [% G4 n3 N! c5 h* T( _) |9 M* ?; V
#include <linux/init.h>$ `- M' i( q g% r2 x# X
#include <linux/module.h>7 R9 F q# z, P; T& y
#include <linux/kernel.h>5 v* @6 Y0 P% a" ^$ C: |9 ^
#include <linux/types.h>
1 ~5 p( W/ X" G! z+ t" Z7 y+ m#include <linux/gpio.h>" a! |. Q2 P- m! k8 f L% ]
#include <linux/leds.h>7 N' l6 T/ [1 {6 l( j/ f, Z9 c
#include <linux/platform_device.h>! I: a% S% @7 k1 Q* `
0 A# S9 A) J4 C. `# ~* L3 O
#include <asm/mach-types.h>
& v* h+ l( y' I4 m/ c/ `2 d8 C#include <asm/mach/arch.h>5 ?9 R' u/ M4 C$ R o! Q2 k: {
#include <mach/da8xx.h>. m% ?' D% h% E% K4 o! ~4 e
#include <mach/mux.h>
C$ ?* S# M$ S- c9 ]* _) {7 v! A+ N6 r1 L2 e( C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, ?! x1 f4 n, ]0 w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) Z6 k! J- o% X6 z" b4 x, n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" \9 X1 o ?- h- @# p4 G& q$ O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 Q' P4 E B+ K. `
$ I6 Y5 d9 C- x# ^" [4 g/* assign the tl som board LED-GPIOs*/
# ?" X- K. \, i2 x" Sstatic const short da850_evm_tl_user_led_pins[] = {
; ^8 A) L- b- y: Q /* These pins are definition at <mach/mux.h> file */6 C$ N6 v0 n, R6 p5 W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, ~0 X! Z# E( d; t3 ], G
-1
6 ]- n/ l, \0 ?" V( ~: C/ L/ @/ D};
. m9 S" x: f' U" s
0 E/ }& ^) Q& K$ O% Hstatic struct gpio_led da850_evm_tl_leds[] = {
) m$ C3 L& u6 P/ M/ l4 J2 A/ q {
0 K+ e. u9 N( e) C; ^6 G W7 w .active_low = 0,
$ S* R7 }3 v: T$ T1 r8 ` C .gpio = DA850_USER_LED0,/ V) `* ?- y' p0 k [7 F
.name = "user_led0",- N+ E) n: o, w5 g9 i7 L* H
.default_trigger = "default-on",! M R1 }7 d! b- r- I, K
}, G% c! H7 s* L4 |5 L. M
{7 j8 Z0 {( M. r0 s4 x4 T& O: ?! z
.active_low = 0," i/ G! r- b$ W! H& E& T) |
.gpio = DA850_USER_LED1,
5 M7 I" Z, C; m .name = "user_led1",( L& U! |( \6 w6 v) e
.default_trigger = "default-on",
- V+ _" c4 e" P% |3 Q },, h4 M; z: u+ e& c
{
, h9 t4 L2 d" z .active_low = 0,
2 ~# b' r. J8 N4 m. h/ E .gpio = DA850_USER_LED2,3 ^; L8 ~. {0 Y
.name = "user_led2",, S3 d6 r$ I6 N& O" e
.default_trigger = "default-on",6 @/ m. X- c9 u& K: W" K) L: o
},8 [8 J0 B: O2 \! O5 @0 \7 F% k
{6 j/ J- @1 S8 T6 u p7 _% Y4 O% G
.active_low = 0,
# \- H& O! p' f! J .gpio = DA850_USER_LED3,: z# Q. |0 M. P W! a1 B! w. Y' N6 @
.name = "user_led3",$ e4 |/ }0 t* Y! }+ u* k: o
.default_trigger = "default-on",; B3 K1 y. |8 H0 {, ], E" M! k
},2 t- I1 M0 Z9 ^7 ? j6 q
};- \$ I' S* K! D( z5 S" S6 x4 f
$ [' @' J+ O; m+ g& }0 o( J- Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ [( i" `" O* }/ X3 K V .leds = da850_evm_tl_leds,
: {6 z2 h0 i+ a+ Y. o2 r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 r/ d3 f0 O' Z0 E7 G6 {3 K, u7 e
};
9 U" }6 e, j2 a% \/ D9 F7 l+ G
# J. G6 V/ `. L/ ^; |static void led_dev_release(struct device *dev)3 R) D6 f: O! \+ R4 W5 u; Q
{
, z/ c9 N; v( z/ a; o; Z};" Y( @1 `1 R3 v7 a, C6 ^
3 _( z/ `+ |8 _static struct platform_device da850_evm_tl_leds_device = {, g- {4 M. ]: _7 M1 y8 S, a5 i
.name = "leds-gpio",
! o3 X0 r( N1 e# _% r .id = 1,
# k) u' L% x8 t7 j/ ^ .dev = {" T+ x( M: g; ?. w3 r5 o$ _
.platform_data = &da850_evm_tl_leds_pdata,
8 ` \8 _! P9 Y* V ~: X7 d+ I .release = led_dev_release,) N0 ?" o) b* E+ S3 u# J
}* X, m/ O) \0 x4 }2 B# m
};
; T( q K4 U/ [1 c
/ G, {9 J; a: P4 r2 o) W2 x) rstatic int __init led_platform_init(void). U# V8 `* o- Q8 e: I
{
5 e" f9 w }: r/ w g! J int ret;5 Y$ b% I. I- {+ S. P! y
#if 0
: v, h' K3 Q+ r5 p: @3 `* x7 K2 t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 d/ N' U, `7 j4 r
if (ret)
. J, s, j6 @+ ]1 R! A$ f% X pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 S/ i# Z! Z3 ~) f
"%d\n", ret);
' h3 x9 \# |7 v* \#endif
) W6 f2 }9 H5 k) o) [# f# H ret = platform_device_register(&da850_evm_tl_leds_device);. p e1 u' E) ?2 V! W" R
if (ret)
) J7 n/ q) e1 M+ c% m' g; Q pr_warning("Could not register som GPIO expander LEDS");, Y+ [- i7 Q! j1 N% f L# B M
else
& G3 H' O1 m- n2 D printk(KERN_INFO "LED register sucessful!\n");8 \* N0 s8 C/ E' V$ E
5 K( v7 u( F( m1 ? return ret;+ m6 A4 I; y9 ]
}
/ C; u7 Q1 A' K% n7 W r) ^! W8 m G- e& c/ i& l" F: T
static void __exit led_platform_exit(void); B0 a+ \* D8 A, ~. ~* @0 D* m
{
- x; u+ w/ L. W# A$ f platform_device_unregister(&da850_evm_tl_leds_device);' e% `, {9 T! Z7 |6 o- \
- E* J0 j! P. C! {8 f5 o- D* I
printk(KERN_INFO "LED unregister!\n");: h5 }; P4 K" O5 d8 U6 A3 V9 P a
}
2 x N: H; F: x
1 U/ {( _" a% ~. @ Vmodule_init(led_platform_init);7 _! v T9 k" ^, U
module_exit(led_platform_exit);+ u7 _- ~9 X; ^4 } C
, B7 \- `- e w' G' ]+ t" N* j
MODULE_DESCRIPTION("Led platform driver");
+ e8 S4 n6 ~. v! l; TMODULE_AUTHOR("Tronlong"); I9 K# S) }9 G+ J
MODULE_LICENSE("GPL");
- M0 x7 ]& y- x$ [( A3 }/ S: ?- @0 N }0 o) l& Q" W$ L
|
|