|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( ^% w6 n9 n! E, K7 j
#include <linux/init.h>
+ ^; r9 b1 c5 \0 i" c#include <linux/module.h>. K0 z5 t3 r. u
#include <linux/kernel.h>
5 z4 z8 s; ~/ \ w+ `#include <linux/types.h>1 P# n' _- |4 ^. G1 I2 u7 l
#include <linux/gpio.h>7 H% d1 H' [3 K8 i& x* w- }
#include <linux/leds.h>
! Q* p; \+ V8 k* o#include <linux/platform_device.h>
, r0 k3 N7 T4 s; m6 X: `# \; `8 P [! U* {+ V' p6 C- Y& R
#include <asm/mach-types.h>
- t3 Y- f4 w9 X* D, a#include <asm/mach/arch.h>
; s3 x4 I6 E5 U) U0 A0 S#include <mach/da8xx.h>" w$ g& W( n. I0 _8 y
#include <mach/mux.h>1 D2 D6 g8 l7 f
- x7 t. U1 }: Z2 V) n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ c3 I7 c# ~4 ?8 }$ S( z2 {; g# E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 n y+ y( r" {8 d w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 m( x# e; `! F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 U1 O3 |9 S0 P6 E9 l( I+ ^
3 L F7 d! ~3 c3 Y& l/* assign the tl som board LED-GPIOs*/
" O' e$ Y' a# _; \* Zstatic const short da850_evm_tl_user_led_pins[] = {9 G1 I E1 N- b* }4 K
/* These pins are definition at <mach/mux.h> file */. P. w! Z1 ~. T3 h+ q& B* `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' s! `% e7 `! V( i: G$ A -1& N4 H' u4 O& M8 H$ B1 _
};) Z; L1 G2 F3 E5 S: @- `
! b5 j9 Z! n9 S& u B% B$ N% Z; z2 Hstatic struct gpio_led da850_evm_tl_leds[] = {
, M; B7 _' p0 c: J( j$ b {1 c, E5 j0 G8 q1 B
.active_low = 0,
" J- V E* V: V ~, x .gpio = DA850_USER_LED0,
" e1 ^8 N5 w [' o: Q .name = "user_led0",
# c7 D2 X! T* m, a+ a, l3 ` .default_trigger = "default-on",( z" |4 x' M, J/ L
},' g6 y3 z1 Q' Y$ A5 [
{
, A, H! f) U8 x: Q* Q* ~3 z2 u. o# D .active_low = 0,
4 }- N4 l/ N$ @ B9 v .gpio = DA850_USER_LED1,8 [( i" I: `# n8 ]2 `
.name = "user_led1",
; H8 \& z8 g7 P .default_trigger = "default-on",; s+ l+ g4 a$ L* X8 o
},
& `/ ?- Q( T/ C4 I2 r {
- ^' p" @- C, S6 E$ k1 ? .active_low = 0,
, i! L1 _# ~( m) H: ^6 d# t .gpio = DA850_USER_LED2,, z) T/ P# P. J6 _ o
.name = "user_led2",6 C# F) K0 b! b( v
.default_trigger = "default-on",
- \; u! S! C1 J' p. P },
8 | t" Q- Z2 p3 T( K. W8 O {* t: _/ b7 A, N" }( t
.active_low = 0,
/ b. w9 o# R }' i2 O. C .gpio = DA850_USER_LED3,
" }1 n+ n7 f2 [) \5 s .name = "user_led3",
( X$ p4 K. W6 k( Z- P* k2 G. O, i' U .default_trigger = "default-on",
4 |! Z" O5 L6 [) q },) B/ {$ G+ F9 F8 p: x
};' |' j1 s+ a# L
' X5 N# P5 h* }+ R( K$ jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' _( u) p! s, w
.leds = da850_evm_tl_leds,
$ \+ {7 V" Q2 c1 @8 i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 U0 r" E! O; n- i5 L/ P' C9 T/ r
};2 N4 L5 h9 L. K; Q
: O5 w+ i* k" {/ q1 W* G; Nstatic void led_dev_release(struct device *dev)& k! }0 v6 e/ ^ }: C
{
9 p5 e: K/ n; _) u$ R" ^};
; ]2 x. i, c. i- M1 n! o0 Z6 f5 t# e3 v
static struct platform_device da850_evm_tl_leds_device = {
3 K" p8 }, D4 P8 Z .name = "leds-gpio",
& Z( f% ~- {, o G' C: F/ G. R .id = 1,
3 i. z3 b" I+ i7 Y5 U' W .dev = {1 Z* h5 p5 x8 N4 ]
.platform_data = &da850_evm_tl_leds_pdata,9 n$ W& o! a1 _9 F! N" ]) J3 q
.release = led_dev_release,
3 X9 O- a+ s4 t5 i# @! J }7 [& U; Y. _0 F
};. e% Q1 ` k1 H- j' k
* p6 D) o. i' S2 t& O/ Vstatic int __init led_platform_init(void)
2 A7 D- J J) M) O' h1 o' m{, p( r1 W3 R1 r0 C( G7 ?) x. P
int ret;9 `, S- E9 G D* c9 @3 y
#if 0
# r2 Q2 h9 |% n: Z0 t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* c+ a; I9 g) ]8 H/ E6 f; t6 Z if (ret). t: q/ q: N# o5 S- P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 k% h5 b: I( a; @ "%d\n", ret);
, d% A& J3 J5 m+ ?#endif
" o1 s% k/ e9 j0 } ret = platform_device_register(&da850_evm_tl_leds_device);, i/ \# |/ a& E2 \
if (ret)9 o1 V. i; f! t" o! F
pr_warning("Could not register som GPIO expander LEDS");
; _* L& d7 r* E5 v0 }" @8 G else. A! Z" s1 ] N) F1 L! k+ Y
printk(KERN_INFO "LED register sucessful!\n");
, f! E* P9 A) h- u u4 b% ^6 A9 Z" Q5 U8 j2 k0 Y2 J
return ret;
8 s! K8 Q, S+ Y4 S+ c}
" }7 S( @9 g! j a4 g j
( |- Y5 A. f, q) L" _static void __exit led_platform_exit(void)* g* \1 D/ i9 \1 x1 }) Z
{
; ~; |4 o1 B3 a2 b; S! @7 r3 |5 A9 y platform_device_unregister(&da850_evm_tl_leds_device);
- H6 E4 a) X) R5 b9 V
' O) Q4 s4 E% b$ x3 V" S printk(KERN_INFO "LED unregister!\n");
8 `8 T1 [ ^) ]: t0 r/ h}% C6 ~# F) g' I2 }+ O( U) O
; _7 X" ^: B+ Pmodule_init(led_platform_init);
7 @2 W9 s5 b1 R3 M% x$ O& Jmodule_exit(led_platform_exit);7 o8 a8 M. ~4 J1 S z
( a% D# Q: |' J& I: ?MODULE_DESCRIPTION("Led platform driver");0 v4 C# i$ t* j+ B3 A
MODULE_AUTHOR("Tronlong");; W2 T: {! z2 f# \% D
MODULE_LICENSE("GPL");" M. \6 ~& o5 [) ?* _3 E6 Q$ q
/ I: `7 y, M7 C7 q0 n9 w
|
|