|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- [6 _ Y. L1 k) A6 t
#include <linux/init.h>
* G, J7 v) W M. y#include <linux/module.h>" E; O* G- @4 ^) n) v9 M
#include <linux/kernel.h>
! h0 t! p: M# |! h" P" ?* |+ [#include <linux/types.h>- g& s: ~# R9 T# |1 n4 r" E
#include <linux/gpio.h>
0 M" n* C) V" O0 L4 E9 @1 K#include <linux/leds.h>' U" t1 n* X5 z* t" O; `6 D
#include <linux/platform_device.h>
. u) J! }1 {4 |7 q. n' f V, H9 n$ O
: t( |% d1 y: r) Q7 O#include <asm/mach-types.h>$ u) n3 L+ p3 c; ]. C0 k* i
#include <asm/mach/arch.h>8 }; \! k+ G: U E
#include <mach/da8xx.h>( ^) e; g0 e& ~
#include <mach/mux.h>
( D9 L$ Y* w0 M9 v* j- f4 O( J6 ^5 s& I$ B" p* P/ p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, Q* s7 W7 u1 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: m* e0 Q1 A' R7 I X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 W5 e" Y, Z8 t( [( F8 q( ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) r: o5 v2 P5 B- A4 x3 {
|' z ^# U" C' N& G) N* ^/* assign the tl som board LED-GPIOs*/
# c1 c l9 g5 Y; K% i& [static const short da850_evm_tl_user_led_pins[] = {( P v0 m, H& @* ]# ?: a4 ^# c
/* These pins are definition at <mach/mux.h> file */
# c$ t0 ^, u+ D+ \& O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; u& v0 E% d; D
-1
. P2 v V, [- R2 {, z& H- Z" L};
+ C, v) {7 E4 J& m! R) M- ]% Y$ }1 ?* W4 x `5 p) A
static struct gpio_led da850_evm_tl_leds[] = {$ t' _: u* W* I+ M
{9 @, M: K8 v. H" x
.active_low = 0," s# x4 ] i1 n
.gpio = DA850_USER_LED0,
3 t; ^9 a; t3 _# C .name = "user_led0",
9 p/ h2 }; T! b! ~" o( _ .default_trigger = "default-on",8 j" m# B3 g1 i: v
},
) e& Z9 m: I+ v4 e9 u) m3 ?1 T5 W {
1 [9 S8 m; u7 H* |& k4 k; P/ @8 E* T .active_low = 0,; ^+ }5 D3 J8 z* ^2 C
.gpio = DA850_USER_LED1, e( _% n& l& @, q3 R7 l
.name = "user_led1",
) B3 M6 O- v" T) L& _# z .default_trigger = "default-on",
% y5 X9 a% p4 d },
0 s# L* @# _: u E {
" J, ?7 w9 ] M .active_low = 0,
. V$ `" }+ B) Q' p8 T$ x' d .gpio = DA850_USER_LED2,
+ V% g. y- U/ u .name = "user_led2",/ K, `. o- H0 f- I
.default_trigger = "default-on",/ O# L# q4 i4 L% P0 \3 w: b
},9 _5 {( V% y; l+ p: g6 j
{
2 T7 l6 H, @% q9 u# h$ X4 D/ A; u .active_low = 0,
( J% W {$ V1 U! J a .gpio = DA850_USER_LED3,
0 Y2 z m/ y8 \5 C. C* l9 i5 y .name = "user_led3",& U0 |4 M8 S3 `' T( Y/ ^
.default_trigger = "default-on",( x# y8 J9 Q8 k n% y9 f. k4 x
},/ ^2 n [& r) B4 I5 d8 P, \
};
' J& N& K( n" x4 C3 t" H( ?4 T! E/ _( G7 e* Q! y K; J5 B, I4 Q0 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& X5 _1 ~3 X* w) A
.leds = da850_evm_tl_leds,, O, e% n. \* l- V- f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ T+ Y; t; n8 ^# z- t6 p3 _
};* B0 ^$ Z$ d/ W8 D. U, X
! ~) Y: e5 U6 X7 Y3 N" p& astatic void led_dev_release(struct device *dev)
6 Y& H B+ R; A/ K" o7 b# W5 Y7 N3 f{0 W4 T8 T/ W: d6 a9 ^! L! ?
};
4 t3 N* M0 Z, k
; n6 h E8 {' T0 n. [3 H$ k- Kstatic struct platform_device da850_evm_tl_leds_device = {
. v( c' N% Z% ?6 H+ a8 W0 z- P .name = "leds-gpio",
; E: [- p6 a X .id = 1,7 X# U3 |5 g( T5 |4 P3 X
.dev = {
1 L* g4 w/ S% j1 W j3 B .platform_data = &da850_evm_tl_leds_pdata,! c7 T! |; n0 b% o h+ e
.release = led_dev_release,/ ~- |9 V( ~: v2 ]2 K3 N; I' F
}; w& I! A! A q9 R' V
};% L( Y _( N4 x5 Y( k, P, @
; ~0 B( J9 B5 M: sstatic int __init led_platform_init(void)& t8 w+ A; H4 M) s2 M
{% I+ I$ _. {8 v z o
int ret;+ t1 P0 W! O! C5 Q& e. k% v w+ V
#if 06 i+ v% ?. W! Z; h( i; g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# K+ \; z W0 ]9 n$ i& }: [% Z
if (ret)
5 m# ?) k& K* K# ]3 N3 S: p4 t5 o4 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :" b: x4 e& t* {( e9 _+ N
"%d\n", ret);4 r+ \" ~4 u* H) W
#endif0 t' U5 Q, x: B4 F( a
ret = platform_device_register(&da850_evm_tl_leds_device);! v' z( M0 T- F
if (ret)
+ e, W+ Q' y5 C pr_warning("Could not register som GPIO expander LEDS");2 \5 T7 ~1 X7 R+ x# x+ |; m0 }
else
9 k) `6 b9 [, u. x+ R printk(KERN_INFO "LED register sucessful!\n");) E6 ^1 } Z( b. l+ N! G2 ~$ m
) C3 h. v' f$ F% [; | { return ret;' h3 {) f8 v2 n1 k( l% T
}6 i# W5 J# u! D
+ O6 e( S) d2 B7 j: j1 i: bstatic void __exit led_platform_exit(void)
# c7 l3 G" e+ e8 z6 g7 r R{
: ^8 ^7 B- y- e$ J platform_device_unregister(&da850_evm_tl_leds_device);0 L/ @6 l4 i/ z3 X6 \: h
" O1 k" J( V" \
printk(KERN_INFO "LED unregister!\n");
3 a! y% A! |5 o, U$ _}
1 ~; T& b4 ]/ `, B- \- W3 T( d' |* k% t# }. v& y' T
module_init(led_platform_init);+ P1 L# x$ p, {5 [
module_exit(led_platform_exit);! t3 j# h. |9 U+ i# s+ j1 s, [& c
9 T+ V$ [1 W' B
MODULE_DESCRIPTION("Led platform driver");0 ]/ a! P2 Z/ a$ }; F, Z; O
MODULE_AUTHOR("Tronlong");
- x1 g3 Z& V) ~( B5 Y: I& FMODULE_LICENSE("GPL");$ t- Z3 [9 T b! I& t# j
5 N% P: W" p' T( i/ n4 o% P |
|