|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 j x. H& @% n#include <linux/init.h>! }/ q' |2 u0 d/ [9 Z/ p0 M3 y
#include <linux/module.h>
6 ]. M$ I; Z: Z% |#include <linux/kernel.h>
5 m+ |5 b# _( j6 x& {#include <linux/types.h>
+ y% V6 V& Q7 O0 ~#include <linux/gpio.h>- v5 ]* Q+ A# m5 }
#include <linux/leds.h>
$ [( w. F$ h; m4 x U) {5 a#include <linux/platform_device.h>
9 q: I6 ~. v5 E* G. N& |% |& o6 `& ]* Y
#include <asm/mach-types.h>
0 Y$ s, t2 ]- w#include <asm/mach/arch.h>
$ ?- b% G3 w+ L$ {4 k#include <mach/da8xx.h>- M/ X1 B& ^. t7 l8 l1 B
#include <mach/mux.h>
# M1 e9 x$ x: T e# u j1 N6 n3 o; F& a; b' z! a4 [7 z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! |: r4 I6 w' B: f5 |: U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( i# L: }/ a- S3 N) n1 b2 K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 P* X+ @2 Z0 ~* H( s+ n$ n, ?0 g% r: l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ Z; t: ^! m Y
0 L x* |; Q/ ]- ]
/* assign the tl som board LED-GPIOs*/
$ X9 _) ]9 Z2 Ostatic const short da850_evm_tl_user_led_pins[] = {
4 D7 B4 v4 p2 B5 K: ^2 s4 y /* These pins are definition at <mach/mux.h> file */( e! c; \: J' V& Z( S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) `' I7 C9 P0 s& [! c9 M! A' ?
-1( Z- H9 v9 ^0 m( ^' d% A: k
};( I% `5 Y( n/ j. J, A
! G( J: |. G2 l3 N9 D$ z9 N+ Y
static struct gpio_led da850_evm_tl_leds[] = {( c) T: X9 t6 N
{0 C! r, F3 B) w- I+ Q
.active_low = 0,: ~# F1 q; C5 h5 q3 i
.gpio = DA850_USER_LED0,
, d+ A' [% e: A% h: U9 H% h .name = "user_led0",
: X: `, B9 [4 h/ F9 E4 R& L/ b .default_trigger = "default-on",8 Q$ x9 j; Y& K v; ?7 ?
},; m; l& Z. i( Z: T0 c: s& Q& V
{+ S8 Q& P* A1 }+ s
.active_low = 0,8 j3 s% a j" t
.gpio = DA850_USER_LED1,! m) C: E5 E$ c2 @0 R6 P3 }- I
.name = "user_led1",. y+ K8 |/ }& Y( ?# e3 f
.default_trigger = "default-on",
+ g$ ^+ G! a/ T4 s& f3 d },' `: z& _- ]( ]8 E
{
4 X! J5 `8 ~. c }; i .active_low = 0,) F9 a# D0 t7 p; c& P4 k
.gpio = DA850_USER_LED2,! W h f0 L- ~5 C9 S, J& L' @
.name = "user_led2",( ^: D4 [1 K3 W( V( X. Q/ o" Z
.default_trigger = "default-on",# V( `8 N5 n" ^1 F
},
# ]. ~8 ?/ R) C# o1 O# f {
; S0 i j6 \/ m! t8 } .active_low = 0,
7 w' h# {% w( `- x$ C) `% h .gpio = DA850_USER_LED3,
: d7 U" L B: S5 k' g .name = "user_led3",- a, q+ {% P' j8 B
.default_trigger = "default-on",2 ]9 j M4 W3 U; p; ?: @
},
: t" Y/ W2 D7 ^3 J};
: i; C* n8 q% |; ~/ L0 D' o) x
/ w9 C4 S1 J6 |) j$ estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& p+ j; T& b& b$ t .leds = da850_evm_tl_leds,
) K e( W" C7 ]4 y6 u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 `' [# j2 T0 ^$ ?9 V" [
};, r1 t h' \$ z0 b8 ~$ W' ~* L5 F
4 G/ }* |$ g9 R6 l# ~6 ]
static void led_dev_release(struct device *dev)- x6 I( m$ s% L8 i; i0 y% P& @
{
% c1 O9 c! o2 t- `4 w0 ~& G};
" o# P9 r+ {$ x' O
8 C" O0 X0 e1 U6 n/ tstatic struct platform_device da850_evm_tl_leds_device = {
+ O) e" j5 Y1 ~6 o .name = "leds-gpio",/ x+ U& s4 c* A" _* a7 |
.id = 1,
3 a: v: R5 `' F .dev = {$ ?& q1 R, [* H$ C& t; _
.platform_data = &da850_evm_tl_leds_pdata,
. {- }! D/ x$ d* W3 B .release = led_dev_release,1 u) Y! b( x" d) C4 X7 P* a
}/ U" j3 X. @ h5 [7 b' \
};
. V* L6 V3 {3 C: b( G; U5 Y0 B, _! m" @% f3 [+ o" U+ R x
static int __init led_platform_init(void)
- A* `/ W0 \5 X{
9 g: M, n( o7 y4 H& O4 V0 B int ret;" ~ e. F1 @" a3 L& [2 [7 s5 y: z( Q
#if 0
# }) T7 W# ~6 I# e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 P+ P( J8 d8 d, \5 ], y( a2 F n
if (ret)
' W$ q- {4 k! L; r" L0 u/ j# i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 a0 {! a, W; _, m4 r% e "%d\n", ret);
) L; N: s' K" A2 G' u" ?9 T7 o5 e/ P( x#endif- z6 ]" q% v6 R, c0 P
ret = platform_device_register(&da850_evm_tl_leds_device);
- d. w& |4 t( _/ H2 }1 ~; K if (ret)! Y2 A [ I& n: D* K. z7 j
pr_warning("Could not register som GPIO expander LEDS");
6 a# q3 r5 M# S4 { else
, ]" q0 q6 E* b printk(KERN_INFO "LED register sucessful!\n");1 [" ]! L- ?* j5 D
% ?" `8 X9 d3 ?" d return ret;
& `+ d% X8 ~: k& c}! _5 f" s7 d" f( o. Y0 Y8 U0 K
" L" ^- i/ N; F. ?static void __exit led_platform_exit(void)5 I) m3 G; D J6 N4 T2 X* F, R0 q, u
{( a, o3 y5 X( H) c7 Z
platform_device_unregister(&da850_evm_tl_leds_device);
) ]7 T4 \- N0 j0 z. O9 [) I* E, R) y+ D' p! j3 ]0 M$ V4 j) S' u
printk(KERN_INFO "LED unregister!\n");
( W4 o% Z# }9 E3 ^' S/ o+ \! r8 i}
2 [( Y3 r, ~0 v- F* f( _ k7 y, t- ^& x, H! u2 E. X' w
module_init(led_platform_init);
6 G4 P0 @ X! C6 Y5 j: ?module_exit(led_platform_exit);
( b3 k/ a! S5 P" g# g4 X& }' U; m; k- m# g" y
MODULE_DESCRIPTION("Led platform driver");
$ F7 }2 j% D o0 N& z9 v/ UMODULE_AUTHOR("Tronlong");" c1 H9 @0 I" C. m. ^& z
MODULE_LICENSE("GPL");
5 h* x! a$ [. W7 Y
- J; K; [; m# |; \ |
|