|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 g/ l9 \+ j1 J# s' [2 F2 f#include <linux/init.h>
4 P" ^; V! C9 Y9 n/ B0 U; s#include <linux/module.h>
4 G# k% A# n) W#include <linux/kernel.h>% s, S% T" `( i: w& J' e) W, w6 W2 m
#include <linux/types.h>4 B$ v8 u+ n }5 }+ l
#include <linux/gpio.h>& q/ P. Z; T1 m
#include <linux/leds.h>
R! Z* w' |, _0 T, q, ~2 n ^5 |#include <linux/platform_device.h>4 Q7 A' b* E# p) i3 ^) z
' z7 E, u) |- Q V# y( w5 w
#include <asm/mach-types.h>5 \# y/ u/ F5 C' ~
#include <asm/mach/arch.h>
- F& |6 k6 t! o; B% o! O#include <mach/da8xx.h>1 f1 ~& G& [6 i
#include <mach/mux.h>) x1 I, V+ F9 s* H) _0 c9 v
8 z, C& h$ Q1 F3 p: H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- \5 S4 |6 F/ a' ~! ?3 r- s1 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! b, L8 e7 O; I2 [5 G
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 i* @# q @( u. W m" S, w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ d. ^6 P; T# K8 m
, R9 }9 w" u7 x% L) V
/* assign the tl som board LED-GPIOs*/6 [$ h, P- K+ t' @1 O
static const short da850_evm_tl_user_led_pins[] = {9 m0 k: i2 H# N# E/ J- t4 n- i, T
/* These pins are definition at <mach/mux.h> file */
\! ~2 K( H; O; N+ [3 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," h7 s$ ]* z- M6 \0 K, I
-1" F- ~7 S) {5 r y
};$ S5 D+ @* ?6 ]. }% `. ~) R% b% [
0 O& H8 B: f D- z5 Q
static struct gpio_led da850_evm_tl_leds[] = {
& k3 ]+ [, W4 X$ w' K {. n" i- \, ?' }7 P$ q) ]# d
.active_low = 0,& j4 ~1 h8 l, t( `# d
.gpio = DA850_USER_LED0,
7 B6 `7 _5 W3 G7 G% i l .name = "user_led0",% Q# F y+ h4 E6 |0 k6 x# n* R
.default_trigger = "default-on",
) ~2 g5 C3 j9 Z) s! f; h },
' G6 {6 D3 h2 \4 j {: t: b5 j2 u. x2 U' e) F; e3 r
.active_low = 0,
+ K4 ]: S o. i( R9 q .gpio = DA850_USER_LED1,. N8 H' ?; {# R' H
.name = "user_led1",/ V; t1 @" D S" H' b
.default_trigger = "default-on",
2 _& l2 N( n$ |) ]% @$ h! J* |4 Y4 p },. Q! F; U6 r- J
{4 t3 X$ ^3 t! ~, N$ ]5 h( K
.active_low = 0,$ x I8 b1 z& `9 z
.gpio = DA850_USER_LED2,/ D0 {; Q" x! J9 D+ t: T
.name = "user_led2",3 x, U0 z' s+ J2 |
.default_trigger = "default-on",
2 A& B4 w' D0 m8 [4 o3 z2 P2 I },
. x* H: f& o; [ C1 V. a5 h& X# g7 F% R) a {
( S* Q7 u8 F' A) M .active_low = 0,
) X* @) ^7 u" c7 S* C0 L; J- H .gpio = DA850_USER_LED3,
x" t+ U, l. C. k% r .name = "user_led3",
6 V' V, m/ C3 Y$ u( t/ g" d .default_trigger = "default-on",
, \& z6 q8 I9 H; Y, T },
# `8 V4 ~+ d% q3 `: y};( d7 y. z; W, ]/ c% M
; @. k/ z0 Q& ?5 v& f# m- O; estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ h/ Z' Y' h0 E4 w .leds = da850_evm_tl_leds,
; k) o( `% s, n0 ]- r1 B( _$ O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 G& Z& H' q7 k* O
};4 c5 l0 g/ a, a8 x
- n" X; g1 U1 q8 G) `- N# \static void led_dev_release(struct device *dev)7 ^& q* @# u6 e0 R( Q* z5 P
{
' M* C. m5 ^8 F9 n) N" `; t) |};. J! _6 {* y" v/ I" q
9 [1 y% ~3 h# U# m/ b
static struct platform_device da850_evm_tl_leds_device = {
6 c, q- O. T: n" n .name = "leds-gpio",
4 V1 T% R2 \. E- ]. _# }; w" k .id = 1,9 U" Q' q6 ]" L+ Y4 T6 a8 [
.dev = {
+ T; n) {- ~# D8 m; ~ .platform_data = &da850_evm_tl_leds_pdata,% c2 J& ^$ {3 @- c1 ?$ k. ^
.release = led_dev_release,5 G; x9 L q8 @1 `. S- O
}/ b6 e6 O! y3 z2 n( A% _
};5 L o- s! y8 h: y
1 E) \ Y" E5 k! ]0 y
static int __init led_platform_init(void)
" y( z, Z x2 A) r8 w3 ]3 d{
( W( n H6 L1 D2 ? int ret;4 I7 b& T6 L, ?( t% Q+ J$ V8 M; b
#if 0
4 s8 x$ g' i& y+ o% m" `! w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 M' w4 l9 e! w2 x) x; c if (ret)) u- n5 x$ N/ Q( h6 D) x0 e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
D$ Z: j& F$ f2 a" _ "%d\n", ret);; t- \! p! V- L. w5 K
#endif
4 V2 K$ w$ H8 e& l+ v b5 R4 s ret = platform_device_register(&da850_evm_tl_leds_device);
! h" l. O' R; V6 g @, ^ if (ret)6 p0 B7 G, k9 W- x6 ~& E
pr_warning("Could not register som GPIO expander LEDS");$ r5 ?# n: w, s9 P3 K
else, A; F- O- B* `9 J! l
printk(KERN_INFO "LED register sucessful!\n");
1 v& d! P" N$ X4 } q4 [* a8 X$ } `& M8 T1 ~/ |8 Z
return ret;$ g; B3 w4 z- G$ K( J9 ?+ M% z
}
$ D1 a& e+ }; z4 i
; n& C+ I# z( ^static void __exit led_platform_exit(void)
/ v+ A6 E& G; L* H: r{
" C! K/ C2 F# R+ E4 v) @3 T platform_device_unregister(&da850_evm_tl_leds_device);' D( A! A5 ]* E! J, R! y5 A* i
1 t% S: T1 ^7 I: I
printk(KERN_INFO "LED unregister!\n"); [ L* S( ?2 t" o& t9 R
}
# E* k0 a" b, z* ^: W, p4 _. o: [, |# m9 W. h
module_init(led_platform_init);, {, m! t4 S6 }
module_exit(led_platform_exit);6 K* f8 e' |: P* K& _4 T( k
. _0 I" X% D& ]) G5 kMODULE_DESCRIPTION("Led platform driver");
! `/ J4 W0 A0 R. i. HMODULE_AUTHOR("Tronlong");/ f3 ?& K$ H/ F \' F
MODULE_LICENSE("GPL");
8 j3 I6 e' D8 x' ^% N4 C i* V3 G5 y, c! G( n% k# K
|
|