|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 {0 O7 N% F8 x, x n: M* E#include <linux/init.h>1 f$ E8 k3 ]" c8 b$ M
#include <linux/module.h>
b2 D( o6 n9 E3 X F( g; Z#include <linux/kernel.h>
( t# g8 Q* N6 v/ @& p& e$ O#include <linux/types.h>
! T [2 c' N& M Y: f, _" t#include <linux/gpio.h>
; _ J3 z1 S) g+ Y# {5 H; \#include <linux/leds.h>
{5 a, ^" `+ S7 d8 K W) z* i#include <linux/platform_device.h>6 w, `! v0 u* R) c5 I
" R S Q% Y# n4 P* x: x#include <asm/mach-types.h>
5 \' z. q- L# p6 d#include <asm/mach/arch.h>2 v# L1 Q- r% }; G) i
#include <mach/da8xx.h>
4 J* q* b% Z( t& I#include <mach/mux.h>2 N/ p7 F9 C6 h
, Z' @4 D0 p! p; \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! i% m. E$ h3 k/ O6 u3 O/ z$ d7 u( o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 X0 X) p# ^" m7 s+ s D* d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, |. b0 S4 d3 _7 u/ Y8 ]2 k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# F0 ], v6 |0 J2 A$ d ]# K/ D2 d1 T2 m" j
/* assign the tl som board LED-GPIOs*/
/ V2 a2 r' t* P1 A4 h1 f2 P5 `, a- Lstatic const short da850_evm_tl_user_led_pins[] = {
/ |. F0 V6 ^# M1 W3 S7 l+ G' p /* These pins are definition at <mach/mux.h> file */! I, a) p: s$ j4 c5 d) P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ J- G& Y! D. d+ T* G0 g -1
. W$ i7 j9 R. i7 Z};1 M- D/ ~: R. G% b$ O, Y
+ h$ y: c' q( m7 K' p
static struct gpio_led da850_evm_tl_leds[] = {
, `& P, E) T9 ]- d. y$ V7 u: n2 d; b# | {
. H- | M, X5 f( v7 H/ g .active_low = 0,
3 b0 }* y* f5 z2 G& |( L% M) ^ .gpio = DA850_USER_LED0,5 e% T/ ^2 b2 k$ ]' @$ j
.name = "user_led0",
2 i6 X* v1 d2 C5 x! ? .default_trigger = "default-on",
" y d8 U7 v/ |' Y },+ S- r5 U8 o+ b1 c
{
; \$ L: _5 N' s$ {% V& ]7 d# X .active_low = 0,
' Q2 Z) ?1 U& G3 a- F- \ .gpio = DA850_USER_LED1,& [& A! r2 r# [8 h
.name = "user_led1",
" a% Z) C. I2 Y' J& i& J .default_trigger = "default-on",; X+ h2 K8 z" e2 @% \
},/ ?. x6 n" o7 |, d8 W! u& `+ x
{
" F! P- Y3 G4 g .active_low = 0,
! z; k4 z3 {8 B. i0 ^ .gpio = DA850_USER_LED2,; h: k. r) y0 O9 N
.name = "user_led2",! H) e1 f6 J5 J2 ~2 `. M* d
.default_trigger = "default-on",
& K9 v& g8 q9 B, ~. `' e) V },2 [ u' Z. M" ]
{8 c5 x5 X5 ]1 t7 q+ R
.active_low = 0,' f9 ~/ H% w- @$ _- s' T
.gpio = DA850_USER_LED3,
; H: f1 S# e# O* I$ C! E# B9 { .name = "user_led3",
0 e. N% z/ N* W* c. N% k .default_trigger = "default-on",) c/ \. [# T' c
},& `; u0 _* H. x# k7 R
};: @% }% S$ v, a' A' \% E8 k
5 |( c9 T' ?* p" T$ w2 H6 `0 R+ Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 K) B7 h$ N! h9 F6 s9 x& G8 |
.leds = da850_evm_tl_leds,+ ]! p4 _' @8 G! p( T0 D7 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 P: R/ Q; H. B
};
* b% L. Z: G$ h2 q* N6 F
# Z: l; Y7 z: ^: Lstatic void led_dev_release(struct device *dev)8 ]; q1 q" t F- C- Q0 ~5 p- ]" w
{
4 Y5 M' v" h0 x* f2 w( z};2 v! S: E& ^" {
7 Q5 @) K+ y5 m' V" ]static struct platform_device da850_evm_tl_leds_device = {5 L' F1 r A$ H: Z2 _1 M
.name = "leds-gpio",1 y( v, k- c {) D- ~
.id = 1,, w c% w9 x# j+ n# a2 ]* N8 F# }+ f
.dev = {
2 O5 |7 V, ~8 j" b- q7 F8 H2 @ .platform_data = &da850_evm_tl_leds_pdata,
- ]9 y/ s# f/ T; \/ Z V .release = led_dev_release,
& J! A N' p8 _ }0 j5 I" J, x) j& P7 Q) k' @
};3 Y' H" j9 y, v
, |: V2 f4 T1 Y/ m+ {* {6 x% e3 E
static int __init led_platform_init(void)
) T. j `4 t5 o4 \/ o' e0 G{3 Q( K" H7 T0 P9 a1 O0 D
int ret; N* Y4 i O0 ]6 f
#if 0, B+ N- Z0 A. Q+ ~' d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 d. U3 u4 b& Y* J6 X
if (ret)
! W8 g9 r: l. {3 I5 X6 d8 j6 s( q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( m) Y4 F, |. E# s. S6 D; } r! _, o "%d\n", ret);' ?; G% e; j& a) {; Q* D0 h" F b8 U
#endif7 V5 [7 u) A8 _6 B9 A Y- s
ret = platform_device_register(&da850_evm_tl_leds_device);
h) I2 f/ C; ] if (ret)* O; ^" R# @( g9 Y: k+ ~
pr_warning("Could not register som GPIO expander LEDS");8 J3 W* B, o; G; g# F& h9 s1 i
else) {/ F7 m# h( k! |
printk(KERN_INFO "LED register sucessful!\n");, u' Y% _& z2 _% `! S6 j$ K
9 u* a9 a, m" \+ S! W( P
return ret;
1 \0 u% B2 s: Z% S1 u}% F" P. e, \) L: i& ^
: p: t$ N3 L9 u( O7 Pstatic void __exit led_platform_exit(void)
3 w9 ?! m$ u* y5 B) ]7 p0 \; u) D{
! i: s/ a5 A6 G) V$ ~ platform_device_unregister(&da850_evm_tl_leds_device);- ^5 g: A4 N7 s4 J4 `5 l
4 F, y3 y: Y- K M' B, \! x9 d printk(KERN_INFO "LED unregister!\n");
' G+ _/ }: i( T4 u$ n}; i4 |6 F% `- O- R% o
5 E* u* d6 N% ~5 dmodule_init(led_platform_init);
G1 b9 m' \6 f( Hmodule_exit(led_platform_exit);& Y) m0 @, I* p! g0 s
$ j, [- C3 Q J( F n* e& ~
MODULE_DESCRIPTION("Led platform driver");0 Q9 z5 f3 `5 b) J
MODULE_AUTHOR("Tronlong");/ q% L5 ?. Y% K8 n
MODULE_LICENSE("GPL");
7 N' j) A+ b' a' p8 j# T; O; {% M. r3 O. F6 f
|
|