|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! S) F6 v0 c I% j) a9 W f#include <linux/init.h>* Z9 e. |" ]9 g
#include <linux/module.h>1 V' [4 i/ v! {2 D& r! v5 B
#include <linux/kernel.h>3 p: b+ b! V, P# j: c
#include <linux/types.h>2 h& [# c: \5 m8 j# i, T% `
#include <linux/gpio.h>7 h% {5 F' z7 b3 k2 z) S
#include <linux/leds.h> R8 W3 a, _7 P# L" V2 q& j9 i
#include <linux/platform_device.h>
1 @2 N" M& F& E1 q* G3 j( U9 ^3 A+ T0 m( j/ s h' R2 _1 Q3 y
#include <asm/mach-types.h>
5 u8 d1 g$ \4 ?8 J' r, [7 D#include <asm/mach/arch.h>
, f5 Z) H0 g4 Q, ?1 J: m#include <mach/da8xx.h>+ P) q& \5 k1 d& o6 B
#include <mach/mux.h>$ V* ], `. b6 i
3 d7 H: A+ {4 H$ j f |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ @1 R" x" K: v2 D- P% b+ J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! v- a `3 }) z. A& o7 Z7 x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, o2 o6 J7 h; X# A: i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" H; S3 n5 d$ i/ o" ]
* L$ }4 u0 V6 e
/* assign the tl som board LED-GPIOs*/
' ^' W5 B8 [5 u9 u/ C P" estatic const short da850_evm_tl_user_led_pins[] = {. w7 N) y: D( G) q' D* V" I
/* These pins are definition at <mach/mux.h> file */( b2 E; h- B j: v1 |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 @! o |5 g. R& c6 P( x -1
' G* n1 L4 B$ l1 X$ X" p};
3 b. r1 z/ S | B+ @
+ G4 e& Z. i. Y6 ustatic struct gpio_led da850_evm_tl_leds[] = {
* Z3 \: I% r v2 {1 s7 @3 r' A3 ~ {: S- i7 n/ v0 {+ G2 Y: I/ w
.active_low = 0,
7 v( x6 t! n' B1 z/ ]: S .gpio = DA850_USER_LED0,
2 d: K8 a3 r+ l" X5 _ .name = "user_led0",- ^0 }8 F* ^0 f3 @+ O
.default_trigger = "default-on",8 j3 D7 X( M7 X9 o: X8 Q" Y2 l
},6 z3 l/ M: H$ w3 U5 s4 n
{, w( f+ r$ U5 Z9 ?: p' k d! X
.active_low = 0,
+ B$ v, {/ \, E; H8 K+ {/ E/ n5 M .gpio = DA850_USER_LED1,
# Q' z, D2 u. d$ b. Y .name = "user_led1",) R9 e, J3 ^" W
.default_trigger = "default-on"," F9 O: c. y' m6 B0 h# H
},+ m- y/ ? c& D$ R
{
% C- y! x7 x7 b. [+ E& a .active_low = 0,
3 J$ [" K# l. q+ R* L1 e" G .gpio = DA850_USER_LED2,! N6 v& r4 _5 x$ r8 H" \
.name = "user_led2",
! L$ V$ M9 ~8 x; B% A, } .default_trigger = "default-on"," f2 j; @6 x; L1 G8 E# Z J
},
$ S7 R' F3 j" |" L! @4 i' E {: ~( ` j6 O( D- I. Z; e3 c
.active_low = 0,
- d; f9 B( _) \8 X7 ?' _0 _1 M .gpio = DA850_USER_LED3,. p* h$ k/ ?8 C- ~% K% j7 Q
.name = "user_led3",, J& M8 y; M% z& B1 [
.default_trigger = "default-on",1 t; U; i' `' F* a9 x9 N" q
},$ ?( K( H& Y# _# d- u" h v
};! x" |$ {$ w$ s
1 I( G8 V& q/ b4 a/ ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 F; B8 p: Z7 B
.leds = da850_evm_tl_leds,
! ]( ^0 n) {6 E ]' o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 B! h( f( D9 T. A2 J};
' c2 H6 e; ~- P, K( k$ j5 ?3 z- @; U v% K( s
static void led_dev_release(struct device *dev)9 c% V2 h/ A9 }9 K* ?6 t( B/ j
{" F# ?$ S8 e0 f/ {
};" M" K+ I, }) M# M
( T7 A( h8 l% q. K
static struct platform_device da850_evm_tl_leds_device = {
& M% g! x4 ^! I: o! A .name = "leds-gpio",
1 {4 K3 r% ~' K: Y) L9 g- U .id = 1,
3 I) b: s" t! E, c, V% y! d/ W0 q5 A .dev = { D/ l0 b; O/ ?% a% N5 X$ K+ L
.platform_data = &da850_evm_tl_leds_pdata,2 I% f7 n- O* ]' U
.release = led_dev_release,9 H5 v$ r- I. S% J
}
; j) U/ G6 F( F( i};" d0 ]# T* w# M
& K: T! ? W2 o) i, rstatic int __init led_platform_init(void)* g" g- d; G3 w$ `$ V+ m
{
( T+ I0 |) M! L% c5 A5 f int ret;
c# R' i* m. T# k7 e5 ~#if 0
4 V0 c1 G- A2 i; u, I/ z/ C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ B& b k3 c5 D; ` if (ret)
- @9 u+ t( u* v. v2 v* M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 t2 ]2 l8 j, n% C0 m "%d\n", ret); _/ e! F4 P+ n8 Z* W
#endif% O: `% Q8 C7 \6 C" [2 o0 q
ret = platform_device_register(&da850_evm_tl_leds_device);# ?7 b2 l4 U9 a7 i1 } U
if (ret)
( ^) j% H7 J. p, i4 {9 `. q+ ] pr_warning("Could not register som GPIO expander LEDS");
/ G! O2 |1 O2 R! J1 d else
+ s/ L# Y5 m4 Y" K7 H* _ printk(KERN_INFO "LED register sucessful!\n");7 j6 k, m5 n4 e9 r8 k/ d
& E1 c, k# i2 {+ ~! F return ret;
% T1 m. k" D& y} L$ H7 K/ Z. F( G6 | Z9 l2 s
% q% K; W, e7 _. L& K! d
static void __exit led_platform_exit(void)9 P& V6 h, P; g2 X7 w1 J1 b# G
{
: ^! @) W) }( P$ Q }2 ` platform_device_unregister(&da850_evm_tl_leds_device);8 Q( M v) V! R0 F# N6 q
$ {/ l( I; p7 K# u: F7 n printk(KERN_INFO "LED unregister!\n");
2 A% a7 q, C# }( F% _6 E3 n}: N* G% o9 s( n5 ]7 A! x# s/ Z) {! B
2 n4 n- i) P! c& dmodule_init(led_platform_init);
4 N- b" C/ e* N, U( f: w5 fmodule_exit(led_platform_exit);. p2 ~7 E1 z, h, v) s
7 s/ n" A5 M1 p8 z4 Z7 q* H0 lMODULE_DESCRIPTION("Led platform driver");
/ y) j0 P0 b3 U6 m" B$ a8 DMODULE_AUTHOR("Tronlong");
/ T h4 d5 A$ b: qMODULE_LICENSE("GPL");7 z: a2 G; u! I( A- r
$ s6 k8 b* u- q2 l% |4 n( j
|
|