|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( @& {; m! z7 c0 o, j* U# \' d#include <linux/init.h>
( S. A0 a% S4 Q2 U. @#include <linux/module.h>
; m, J) O) E" m$ j#include <linux/kernel.h>
7 C( U, }# z6 L$ W( P: c* i. r% `#include <linux/types.h>
. y, z# S o8 {" W) T* I#include <linux/gpio.h>4 b. S/ r8 ?& W5 B; @! P- k/ Z6 }
#include <linux/leds.h>* s, {" D6 A7 N/ p0 r9 o
#include <linux/platform_device.h>
4 ^8 g0 O% P- m& q- d! G0 a
" j2 ~- ~' A' l& _4 o5 k" `#include <asm/mach-types.h>
$ |7 B Z! J. Y3 ]! r3 P#include <asm/mach/arch.h>
8 m6 q8 x% Y: Z6 F, v; \#include <mach/da8xx.h># {4 `, h ^: O" [ W2 r6 A# V% p
#include <mach/mux.h>
) q' B( l2 T+ x& W( h' f1 X I5 A3 ?& ~4 H; l3 v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 m" N, w6 ~' ^ ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. z! g/ }" d2 D; l2 e9 Q# f1 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); P1 L% B" o, [( E4 g" [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); |2 g2 F- W2 \1 ]8 U# l4 e) L" j
' e- d: O% I) Y
/* assign the tl som board LED-GPIOs*/
: `& \! F" t3 wstatic const short da850_evm_tl_user_led_pins[] = {
, E4 ~% ^0 ^3 _' v4 @* ^ /* These pins are definition at <mach/mux.h> file */! p$ g f% x( ?8 l+ j% x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* Q- h/ A3 W+ _4 ]% `' n
-1
9 U7 ]+ M* g `' l9 R# z};
5 H9 H% s7 u$ ?/ A" N. U" }
9 k, l& M1 W. Fstatic struct gpio_led da850_evm_tl_leds[] = {" W3 M% `4 h; z& |) S
{
5 z1 u6 g# A, l .active_low = 0,+ v! N3 w' z& I3 Y1 k. ]
.gpio = DA850_USER_LED0,
/ h& k5 M3 A i; Z0 k3 t O .name = "user_led0",
; N3 |+ L5 ~2 \5 N0 i' y .default_trigger = "default-on",
# z" t& I. K' t' ?- j" Y },
* t7 I; g5 P( e1 q {/ n" h" h, r. w7 ]( E) y
.active_low = 0,6 x* f8 B1 I1 f1 }+ }4 I+ m
.gpio = DA850_USER_LED1,, b& N8 j3 c o! x; @1 Q- ?
.name = "user_led1",
! [ I2 \9 z+ @2 C7 P( `- A$ k1 x2 x .default_trigger = "default-on",
0 W: z& n1 y7 ^1 J2 _3 z. G },% J/ P* V1 W, k; ?2 M' k
{( ~" w2 t- \" h |8 d8 ?: q
.active_low = 0,2 [3 `( V. t) A3 s* [
.gpio = DA850_USER_LED2,
0 |: ]( _- V4 e: A7 b( z .name = "user_led2",$ G+ b+ i3 ]" ~; G- ]+ n
.default_trigger = "default-on",7 Y- a H) n# O2 E4 P& y' ]* c% v
},, a$ @* I1 Y. G/ t+ h; S h
{/ P) R% v) ?/ I2 b% y
.active_low = 0,
, f: Y! Q7 ^. o- B" U, p+ @6 B .gpio = DA850_USER_LED3,
( i+ `7 D3 a3 h: i7 v8 Q .name = "user_led3",7 b7 t" ?) C( N w2 b f; B
.default_trigger = "default-on",
2 n3 Z* ?2 q* e. B C },
9 @) `. p/ y" e H, m3 ]3 p};+ h) N' i u! {* ]" C
/ }: n4 j1 j+ I$ i" ~+ [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. ~0 \/ U4 A) U( ^7 N& }1 o .leds = da850_evm_tl_leds, Z& x; }( F% u; ~8 } A) ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ L. j) G5 v" {& {# A
};
) s6 u/ ?0 {9 x: B$ ?- X- s% v% R% d
+ J7 B2 v& _ W9 ^! tstatic void led_dev_release(struct device *dev), h6 q, z- i% n$ m
{4 K+ J* i# E, Q* }! ~/ r
};
. K/ s* B- j9 U& p6 c5 L6 w! I( i. G4 Y2 g6 J; V8 N: p
static struct platform_device da850_evm_tl_leds_device = {
" w$ c6 P3 o. O" G6 ] .name = "leds-gpio",
, t( }8 M; e9 c3 x3 n9 ^8 O .id = 1,
0 i" m9 a5 S2 s2 o .dev = {! q j5 }" w: F: z7 n
.platform_data = &da850_evm_tl_leds_pdata,; S" w7 D. B6 m2 z9 [
.release = led_dev_release,
3 e" l- `2 }8 D' L; T; V: p3 k" Q }+ [0 j0 m% m' f+ R% Z' f* Y0 R
};
& ? X9 C' u& x. F+ B. m! ^
0 ]0 }9 z! K& pstatic int __init led_platform_init(void)! h* J1 ~3 m: M) P& E
{0 \: s% p$ V V
int ret;
. l2 E! h0 h% A) T#if 0
5 D5 T. u: V1 D: a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, H$ R: ]) Y2 `: X7 Y
if (ret)
' O+ y7 ]; I+ z, |8 n+ ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# {# d/ @* J( m8 \ "%d\n", ret);
. H& \4 c* `+ i#endif. t3 m8 ~+ V! F) Q
ret = platform_device_register(&da850_evm_tl_leds_device);
# [' A: v( s( _: E if (ret)
A4 A& P; O1 e pr_warning("Could not register som GPIO expander LEDS");
$ W5 U2 s+ g( a else
/ K( V* W4 y3 P" D' {+ D% u+ L printk(KERN_INFO "LED register sucessful!\n");
/ Z; E. h0 j1 h8 ]7 {
; R$ f. b. v) g4 i' K: r4 U return ret;
- n0 s& L5 F q' v}
9 v" U9 \4 u- H2 L/ p6 w" ^8 N' l' V' l0 E
static void __exit led_platform_exit(void)
* X! }/ P E- O' ^, n{
! T7 t# J. _$ y8 u) a+ A% F7 k platform_device_unregister(&da850_evm_tl_leds_device);
0 W' n" b" }( K% _6 F9 R U+ M
1 _& Z) r! z9 E) @5 p% | printk(KERN_INFO "LED unregister!\n");, J- U3 t0 _7 Z: v; w
}* h) F7 L) n0 f3 c/ c5 g$ c
+ h$ p- \! N9 P% U0 b- Wmodule_init(led_platform_init);5 @( Q8 o) h0 {: u* j$ Y8 s3 r2 \
module_exit(led_platform_exit);
7 L0 M$ p* Z- l# E+ w2 |# F9 P8 S) K7 u
MODULE_DESCRIPTION("Led platform driver");0 N l: a( c' ]' j! }4 j
MODULE_AUTHOR("Tronlong");
* c: B1 m$ T/ @" iMODULE_LICENSE("GPL");
4 i/ k* e( G5 A! a* I Y) Q1 Y
+ K) a; u* J: ` |
|