|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ B" h" R |2 `( E6 U+ J
#include <linux/init.h>
) o0 H% ?, F1 Y$ \: m& M# F#include <linux/module.h>2 T$ H( u3 E0 `! m3 |
#include <linux/kernel.h>. |& x A) d' a) ?, N
#include <linux/types.h>
) I6 E% O5 T6 P- C3 X5 }1 m#include <linux/gpio.h>) M& C, A8 N' u! q+ B
#include <linux/leds.h>
- r+ R8 e* K, R% ?#include <linux/platform_device.h>7 V" d5 k1 s9 J& W% h: l5 O0 t% p
# S1 i* P/ i% t8 ]
#include <asm/mach-types.h>
- L, I! \( u% l j& B" g#include <asm/mach/arch.h>
, G8 |- u& w0 h6 ?#include <mach/da8xx.h>
1 l p' Q3 S! L X8 |. o# J#include <mach/mux.h>: ], K- T0 U, P7 f9 \/ N
' T/ ~& D) C- s2 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% Y0 i* g' [7 \% m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 v. M% P( S- @ H6 e! k' G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
}0 c$ x* [3 B5 A' H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 ?0 _7 m2 u% H, J! r# [& v: ?1 y
# D0 X- ~. y, P9 e/* assign the tl som board LED-GPIOs*/
9 m0 |% d% l- O% ]6 v# `$ ~* mstatic const short da850_evm_tl_user_led_pins[] = {& a: l3 t# a' g" b0 o
/* These pins are definition at <mach/mux.h> file */0 S1 T- U0 T2 @1 P4 z7 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# N1 }! U2 o, I2 V
-1% S1 z5 H2 n7 n- z0 t: W$ V0 \2 Q
};
8 D+ l7 C9 T, m y; i" _5 r8 H9 w, S) S' F
static struct gpio_led da850_evm_tl_leds[] = {; R, q- X) l. i6 {
{
1 m# d1 h' A; }( k0 r. g) b; B" @ .active_low = 0,, r+ V* ^8 \ W4 H: q0 ~
.gpio = DA850_USER_LED0,$ ^( b1 M9 t3 j/ {- x5 v
.name = "user_led0",* u0 ?/ X& X- Z3 Q3 G: d8 P; L: `2 |
.default_trigger = "default-on",
# S, F$ F+ ]9 s8 e) B! M },
3 C" t& [* O6 F# d; l1 R { I S+ B" k! A4 w' V
.active_low = 0,
|7 J- ~- [" F# j; r T) ~ .gpio = DA850_USER_LED1,
4 J; G6 d# i& |5 f. H1 h* B .name = "user_led1",& w e, i7 T% `% |# b2 H
.default_trigger = "default-on",
e, {+ d: U* \" K },5 | q# a5 K9 d7 v; y$ B" ]
{
6 E' R1 a$ Q% n/ F2 D+ {1 J .active_low = 0,# i) [2 E `, a$ E
.gpio = DA850_USER_LED2,
! I5 \# t* v' I0 J .name = "user_led2",
: c" a* s0 D2 X1 O! [" v9 [ .default_trigger = "default-on",5 c4 T3 _4 ? a6 r5 t8 V
},
" t- \" d) o5 M3 p0 | f% y6 ] {
% v3 s" X' C5 @ .active_low = 0,
6 i0 H, V) O- r( C/ V: J .gpio = DA850_USER_LED3,
1 d: ~# `4 @# j% D5 J7 Z- a g% z .name = "user_led3",+ T+ m* x- F" }: q& F; {7 k# a
.default_trigger = "default-on",
; P, |$ m: e) V, p. h- {) k9 z* q0 X },2 r; y' Q% V, B. q& F
};3 ?6 c6 U8 Y ~) l7 C% x# G1 N
2 q* e0 M& m5 W7 F. f1 n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 V1 Z9 o( p+ B; D9 a5 i .leds = da850_evm_tl_leds,4 `* m B5 [/ |. I8 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 S+ a& M, u( p% R8 r0 d5 F
};
9 H, o% m/ Y% v2 N* U: U
* w( a. s7 C5 ?6 _ G# hstatic void led_dev_release(struct device *dev)+ \7 Y! H4 Y; o# x/ E
{
* c" o6 [3 b7 _! b6 L};' e7 e- F" {6 M5 W, Y
7 K6 R- I* r+ _ M* t1 mstatic struct platform_device da850_evm_tl_leds_device = {; R4 z" o& C& g9 c
.name = "leds-gpio",
3 K" [6 a( F h4 w" ? .id = 1,5 Y( [( |4 L B- I
.dev = {
8 I- B6 @9 R( q, Z+ Z$ b3 n .platform_data = &da850_evm_tl_leds_pdata, k0 S% o* |' K1 J+ I2 l" |
.release = led_dev_release, g8 a, v# L% B3 _) n5 r
}
" S) \ r3 X/ q% r! I( S};2 e0 n- G0 f* |% h- c
4 X' J9 B& J. _+ z$ H
static int __init led_platform_init(void)$ l$ G+ o1 a2 C, v* P
{# D' t# J: J T+ O
int ret;7 g- e, C. L2 x! f& i0 z
#if 0$ F- _( K9 u$ F8 S1 \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- t- A% O5 ^& g4 t( S, v, ?6 A if (ret): [$ V6 \$ N) @3 B8 Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 Z4 w1 F' b8 U: X; \: v( \ "%d\n", ret);
, o5 b7 g' Q0 Y% i#endif
% |# Y' t8 u6 c# m ret = platform_device_register(&da850_evm_tl_leds_device);
$ I& M- Q2 \# |3 v1 K if (ret)
! k3 k6 ?6 s- o8 x& I \' \ pr_warning("Could not register som GPIO expander LEDS");' V8 L% v9 o% V7 P
else9 R4 p- `# l' i$ d& l4 d
printk(KERN_INFO "LED register sucessful!\n");: u9 U4 n+ V c( F1 ~" q
$ R5 T& J- n6 H0 ?8 r$ S
return ret;1 h& W6 c3 W; a
}
, }$ }+ g5 S5 s+ b
4 e Z: Q. S1 R$ D) B6 `, a& pstatic void __exit led_platform_exit(void)
$ b. m" ^* ]% z) m& n{
4 L9 C$ M7 n; N& ^, s( r. g8 f platform_device_unregister(&da850_evm_tl_leds_device);! v9 j# u0 k3 b
% F; S+ e1 {9 N8 [" k- T l
printk(KERN_INFO "LED unregister!\n");
; l3 m- }6 z$ g0 f}% L3 U9 [! F8 O# G' J/ X0 p9 ^
% `+ ]$ d; e. ^; |5 N* O" F& ~
module_init(led_platform_init); \2 W% o: }, |% R& k2 o1 G
module_exit(led_platform_exit);; G; P) Z+ ?/ D
5 A" b* i* S' _) d( h
MODULE_DESCRIPTION("Led platform driver");* d! u, x: B/ C6 J% c( o
MODULE_AUTHOR("Tronlong");
% n" a2 h% H d+ N/ LMODULE_LICENSE("GPL");
8 z* U4 s$ L* ~+ D
: ]# I$ Z/ ^5 s: X% @1 \ |
|