|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
W3 H( [# l3 {- C#include <linux/init.h>1 Q$ `4 I1 r) c7 [7 s" o
#include <linux/module.h>
p, {- f1 X1 w+ E7 z; m#include <linux/kernel.h>
8 L E4 F; W+ n" z, A) k! \#include <linux/types.h>4 G% I# j9 A% W& |) Q7 p
#include <linux/gpio.h>
8 ~, M; ]- q" u/ C#include <linux/leds.h>( k0 |; n+ p/ u, R
#include <linux/platform_device.h>
5 N0 N; l# n+ A6 b$ ]. M) B& `. n) ?* z. {4 c7 U2 n
#include <asm/mach-types.h>" b0 [, x/ l8 m; _6 [
#include <asm/mach/arch.h>
" y& i/ x+ L* X/ x# h7 y#include <mach/da8xx.h>; f$ R% B$ |' R4 \7 }, Y. h
#include <mach/mux.h>, _2 B% v5 A% ]' [
2 B. w6 [9 O6 y9 }& f J1 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" n3 }. |7 E! k5 g; n9 k7 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: K, ]$ x9 c; C/ \ p1 F e E3 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); V: P) v8 V; E/ e" j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# J4 Y5 F/ t3 P, n4 M) ?& K$ t
/ l8 M8 B4 k& C# G/* assign the tl som board LED-GPIOs*/$ C6 w0 n/ b( R9 v9 F
static const short da850_evm_tl_user_led_pins[] = {
, m# r! s; k2 G3 N# L /* These pins are definition at <mach/mux.h> file */
* W/ T, F: J0 k/ o* n. n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, }$ o/ I* ?5 J
-1
3 X% z" ]6 k& P. X4 t6 H8 o6 l" J};
$ }+ p- s# ^6 T
3 B; F0 }; F; |) \9 [/ Mstatic struct gpio_led da850_evm_tl_leds[] = {( G9 P+ {/ p/ a4 Z U6 l* K& W. a
{- e5 K+ |, f2 o1 O$ y; \/ C0 s
.active_low = 0,$ B- | e8 @, w) Z& g* M R, n
.gpio = DA850_USER_LED0,
: p( z! b( h! T1 {, m .name = "user_led0",
4 u) k4 _& h' E* x .default_trigger = "default-on",
$ ]% t- m9 C" H, C' ~/ P8 m. z },: l) \% f: g ?+ K) O! j
{2 [5 f2 A9 M* V2 P
.active_low = 0,
! p1 z/ C* }6 w7 _ .gpio = DA850_USER_LED1,
+ C! h- o7 V1 [, H7 Q$ G .name = "user_led1",5 N5 X& E; H( ]5 x
.default_trigger = "default-on",6 f. p/ v; s4 s5 G
},
- ? n: n. {) d) |0 E& @3 i/ @. a% {% t {9 h4 J- _) e- F8 H: T
.active_low = 0,
: s, n$ p& N" Z, F1 } .gpio = DA850_USER_LED2,1 E z+ ^7 L# W
.name = "user_led2",, N7 h: E+ [2 Z* T) Y3 ^
.default_trigger = "default-on",
# L9 U* D+ W, M) B0 Q* r/ e },6 T. _$ g N+ q8 K2 s. t
{- v/ I7 `( Q5 g! I) x7 M
.active_low = 0,6 {5 w6 }( z7 B! J
.gpio = DA850_USER_LED3,' F+ i1 \; L: {2 C6 B% |8 ]1 y
.name = "user_led3",, o4 Y+ I+ @2 r, [3 L2 }4 z8 y. g4 S3 R4 x
.default_trigger = "default-on",! Z3 H, i4 f% _* T* X2 P4 @
},
# C! J& g q8 r& ]. p. n* ^/ H( G};
) ^) Q8 z" M2 W
! y8 n* U9 R h1 S' C* }$ m, f2 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. d- U8 }( |/ Z- W# h* z .leds = da850_evm_tl_leds,
: E2 m8 X. n6 J9 s, N3 \+ l. D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* x( t' s6 e1 D0 z$ J7 m0 J; g9 P};+ ]( i" N- N4 L2 j
, j+ D* T5 T x3 d3 Mstatic void led_dev_release(struct device *dev), E$ H* }3 l2 g+ T
{
9 D: {2 }+ f* `0 {+ \. p7 a};: ^5 O9 d/ l; |% u' t, I: b
$ f2 d/ o* I/ m7 B' q5 ?% N
static struct platform_device da850_evm_tl_leds_device = {8 r% @5 V$ E1 H2 L
.name = "leds-gpio",- a/ G) N' ]9 Y; W/ O- V: {6 A
.id = 1,7 V3 ?" h* `4 z; N1 M
.dev = {
3 }! C& N& j9 ~6 ]3 k .platform_data = &da850_evm_tl_leds_pdata,
; s, c! E/ Y% q, j/ o .release = led_dev_release,% U; d/ A6 [5 t$ V$ c2 {3 Q0 j* h
}+ r7 g0 Q+ r4 d0 G4 l
};. R/ C$ ` K2 u/ j2 [* d2 _2 M7 |
/ g% ^ H% g1 u1 q$ v# R
static int __init led_platform_init(void)5 }; w) W# K9 I
{
( P o; G3 m, F; Z4 n5 x; ]& G3 ` int ret;6 m, f/ H7 Z0 i& w- R D" ?
#if 0$ U k2 j% X# m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: X |- M+ s# A4 Q+ D: F
if (ret)
/ Y Y9 [1 k E# S8 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, v2 Q8 Q9 `, p4 ? {5 S "%d\n", ret);2 c! h8 u6 o, P
#endif) s, b% [1 B! c# H& U4 D
ret = platform_device_register(&da850_evm_tl_leds_device);
3 M1 w7 v5 a5 L0 x if (ret). O+ U6 C# w& w
pr_warning("Could not register som GPIO expander LEDS");( T b4 O+ ?3 I8 _/ v$ F
else2 b( G! i$ M2 x! h8 ~! t
printk(KERN_INFO "LED register sucessful!\n");
6 k; \. R [) ?7 o( }9 ~6 t
$ w, S0 l7 U( Q/ ] y return ret;
9 y, p( J" C8 @ d$ ?}
. p( I; |+ Q7 B, f; L, H4 x6 b- _8 L
static void __exit led_platform_exit(void)+ \7 f3 i3 p; _! n
{: N. j: D, H1 Y3 t# Y" s* U, k* o
platform_device_unregister(&da850_evm_tl_leds_device);
: U, h* w5 m2 l! t! V% ^$ \$ a0 j# b2 Z7 e1 X! v; B; v
printk(KERN_INFO "LED unregister!\n");
9 i4 v( P/ H7 T ]- M, |9 n}6 S6 L3 j' u$ F+ D% O! j
/ m4 Y/ }8 i7 m
module_init(led_platform_init);
# ^; {" S3 s) a+ ]' M4 omodule_exit(led_platform_exit);
1 o8 ?" Q( P% L' m% C% G7 u
* G' X& o( H$ j9 A; B+ B. G; nMODULE_DESCRIPTION("Led platform driver");
0 w$ i* c- T5 MMODULE_AUTHOR("Tronlong");1 O6 t% X7 I& g
MODULE_LICENSE("GPL");
7 m; }8 Y, @+ U. V! r5 x, ?' y8 }: w
|
|