|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ y: O. u; @% u6 y9 {3 l) F! E
#include <linux/init.h>
1 \2 O/ o' V5 G. p' m, p#include <linux/module.h># U: K/ m# a/ B5 U' L% p- S. {, G6 k
#include <linux/kernel.h>7 F' u& p% u f) j+ a+ i2 \2 ]
#include <linux/types.h>' p p2 h# T( l7 l
#include <linux/gpio.h>
: v" d V. v, _' ]#include <linux/leds.h>* h, e( |# N0 I& Z
#include <linux/platform_device.h>
5 v- i( F# l- F5 M1 j& {5 s6 Y7 L8 O D
#include <asm/mach-types.h>' T6 Q* k' i2 u; k) f9 d
#include <asm/mach/arch.h>: U3 g; Q% S& s2 i/ S
#include <mach/da8xx.h>
- [* q3 U5 Y9 p) P! V* B* w#include <mach/mux.h>$ [# _' i" t7 v* f% C6 q& ~* P4 \
6 ^6 }$ i3 f1 }4 u* C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- B0 q* f1 ~1 k8 W+ S3 e( k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): y9 R n$ [" E8 b, |2 r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 A$ \3 p2 c1 e6 N9 |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ A1 s' A& _5 x$ H6 A
8 k+ Y6 g* {. ^1 G
/* assign the tl som board LED-GPIOs*/+ c) B+ X O N, W6 a* x9 y
static const short da850_evm_tl_user_led_pins[] = {: w6 H! [* A. F6 p; }6 S ]7 j4 o
/* These pins are definition at <mach/mux.h> file */
6 h8 Q6 A% z& z* ~) E5 e7 B' M) R+ A DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; m; N0 k4 ?/ O$ ]1 K3 j -1
& _* M/ W h# i2 t};% h" `- F, S/ W. E2 M' ?0 q
6 o j# |* O6 F2 b) }3 a
static struct gpio_led da850_evm_tl_leds[] = {
$ u/ A* f1 G X- l) l1 j( z {: u$ R5 |3 [' S2 {; {8 g
.active_low = 0,
$ @" ?& m- o; Q, ~3 K .gpio = DA850_USER_LED0,( @5 _. a6 J5 @6 U
.name = "user_led0",$ y$ K* l& y! p( e0 t; Q
.default_trigger = "default-on",0 o# R& l0 |: w+ L0 D0 Y
},
8 q; ~; a1 G# _/ U, b1 i3 U, q8 ^ {
" c) H% J& U4 h% [. a& ~ .active_low = 0,
# A) e, R/ p% W; e3 I) s& }0 @ .gpio = DA850_USER_LED1,
. o& c8 R+ s# w: ]4 ^- c, N .name = "user_led1",
3 b! }& I* X O" h8 x2 i5 ^+ p .default_trigger = "default-on",
0 }- v2 a$ |8 |( Q& E/ ^+ E },
@7 b. Z# ^, E# x& q/ _ {1 [) v! y2 A- ~5 L
.active_low = 0,
) {" ?( [: \0 Y6 I2 A9 I) d .gpio = DA850_USER_LED2,
& F5 z& Q0 N0 m4 X6 X .name = "user_led2",* S, ?) S4 D4 J4 o8 c- b
.default_trigger = "default-on",+ J# d/ w) v1 F% }* a2 |2 e
},. u( |' z, y$ U2 H4 _# p: `
{7 y2 N+ _0 ^, x' R# `
.active_low = 0,
3 S6 q9 E7 l, p' t2 I+ i .gpio = DA850_USER_LED3,
& O T$ i$ A/ b" K( ?- g6 [0 t .name = "user_led3",
' V" b6 N# Z# Z .default_trigger = "default-on",1 U. Y7 v& Y( K# P& V# l$ \5 L
},6 H3 }/ M0 V; _8 d5 }
};
( t" V- Q# J$ W1 v2 f8 t8 j& q* W4 @- G" c) k' v5 L& U& L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 ~6 l5 s( }8 x( F% c1 r* ~3 G$ B .leds = da850_evm_tl_leds,) f0 b z) b) K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: k9 E; \0 ]0 Z: s A9 n) h};
( L* i. j7 f) _0 J3 v' c: t
& E0 ^7 f7 `: [* Y$ V8 mstatic void led_dev_release(struct device *dev)
! K) _8 p$ k$ ?0 z% l% \7 F{" V- j! @% L* ]* x" G9 ]# ?
};( R9 t3 Z( C5 B0 {" k; t
! l R& n# q& ]$ _$ F* H
static struct platform_device da850_evm_tl_leds_device = {# P% w8 A7 l3 s/ {0 L
.name = "leds-gpio",
. W* V! l& w' Q .id = 1," f6 A) ^! }8 J1 T
.dev = {
. Z; ~* ?8 m7 a6 x R5 \! o. q @ .platform_data = &da850_evm_tl_leds_pdata,: O# o% r4 Z# W; t5 @6 v
.release = led_dev_release,
9 V8 ~5 ? C5 g( W# ~ }/ y; Z1 q( J' L0 q+ u" ]
};
' _3 v$ V( L' n; T: E: b O: O
# ~& O( x- U& a- N, X3 t4 dstatic int __init led_platform_init(void). Y: \: N# w3 s+ v, M
{0 k0 z: M& {; m- S9 u) p4 z
int ret;3 T* s9 s; ?7 W, |
#if 0
* F4 d/ q( @- Z& _' W! l$ s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" z. C6 }. a; m. t
if (ret)$ i: T. ~. E/ Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ {1 K- X( W1 f "%d\n", ret);0 \! d/ E' d' ~ [) ^
#endif# f/ X' @& L) c
ret = platform_device_register(&da850_evm_tl_leds_device);
7 b' X* [% A A- k! D( y3 D0 a& M if (ret)/ e( V0 f/ D `
pr_warning("Could not register som GPIO expander LEDS");
$ u5 K/ d( X/ i4 q/ t+ j else
, L G( Q; h% J8 e) e) [ i printk(KERN_INFO "LED register sucessful!\n");) P0 D4 g! k/ ~. s a+ ?
" g" r) n" A# T: u* W$ x9 t return ret; `, \( n. F+ p% ?; ?( ?- `
}2 W0 x$ h6 u6 G; j
+ \( U, z& ]$ `* Fstatic void __exit led_platform_exit(void)$ {7 a I' W A- _# P g1 I( G
{) U; l" z5 P# I: Z5 p
platform_device_unregister(&da850_evm_tl_leds_device);. i/ [* L, Z3 F: H2 v( G
! M9 c, B' G" D6 n
printk(KERN_INFO "LED unregister!\n");# w7 C: u$ a9 b3 v2 x
}, f' \$ |! y$ [4 |! r% w" A$ ?' ]+ l
6 G7 m) e( G) M7 o7 V
module_init(led_platform_init);5 E7 J) P) E' e! `4 @
module_exit(led_platform_exit);
% D- f' M% I/ A3 N2 X
# F3 c4 h# g2 P8 ]MODULE_DESCRIPTION("Led platform driver");$ j+ m. L7 {3 T" L
MODULE_AUTHOR("Tronlong");
. T* ^6 h5 W5 b, I( C0 k& @! F4 q1 gMODULE_LICENSE("GPL");8 w; |0 }+ ^' K7 z3 f2 D6 u: L# Q: B; A
/ |( V7 @* \8 a: H" P, @! f |
|