|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( L, v: L( D& ^3 ~9 Q2 a y* M6 @
#include <linux/init.h>
l! r2 b- a* [# j#include <linux/module.h>
$ C* p) C8 q- D+ X& V1 u6 y#include <linux/kernel.h>
" Z9 j' |! X& [/ c( }; N/ ^ W) T#include <linux/types.h>3 `" }4 o, P1 T) c6 }. @! ~
#include <linux/gpio.h>+ L* Z; I+ T5 F. p. [
#include <linux/leds.h>2 |( X; J2 |) e. ?1 d+ }
#include <linux/platform_device.h>
/ m0 n+ \7 A6 f1 `* T. m
6 J w6 @9 e B$ V$ |7 e#include <asm/mach-types.h>
# M) k; Z0 l7 ` g#include <asm/mach/arch.h>/ |3 e/ c' T. J4 n/ Y# @( d! R5 @
#include <mach/da8xx.h>2 r# v8 Z9 F( i& `/ S# o& R
#include <mach/mux.h>; @* E# T$ F& _) M# C) i7 }
0 Q$ c$ T; D" X2 w: I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) u. g' q' h2 r* z/ x) K4 R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- ]4 E' W* l# w4 t9 D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ ?1 P6 f8 f2 ?2 T( N8 T2 G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 v, k, t" A2 z! o% F
% W' q& o7 f6 ]: u3 ^/* assign the tl som board LED-GPIOs*/7 m5 `9 J4 S$ `: P+ w, x! O! {
static const short da850_evm_tl_user_led_pins[] = {
9 s1 A4 z9 ~- t- ?- z! b /* These pins are definition at <mach/mux.h> file */* c: I- P: ?9 B' V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! I' ]3 k% o2 X1 Q& d) p( l& y -1
L( e: f- |. d+ G};0 p- Y; v3 N+ { r4 l
2 ?9 Z/ q8 \' ]- ^+ w. Z% ]
static struct gpio_led da850_evm_tl_leds[] = {
, I% g" i2 x$ ~, f6 K {
- k3 g! V0 h) f' Z B. x$ \$ T .active_low = 0,
0 W( h& h* K. N5 e- u$ L- O .gpio = DA850_USER_LED0,2 |- Q+ O& s3 y1 ~# L/ B/ i
.name = "user_led0",0 E$ ~ U$ C4 b
.default_trigger = "default-on",4 J4 R' n; N% ]; J: {, W; C4 e% ^
},$ h0 X v9 e( S; [) A4 _
{
) b0 s8 ?4 c3 D6 y5 V) Q .active_low = 0,
$ Q% [* s. ]) J% P .gpio = DA850_USER_LED1,
0 t. D: O i! K0 o3 { .name = "user_led1",
) x6 C0 Y" j2 } .default_trigger = "default-on",
) e; e$ z( v* \) R4 Y },
( W5 N* G' @; J7 G {7 Z6 `, ^4 s9 _) I7 d; @
.active_low = 0,
$ e2 I' u% I5 t; X! v/ \. Y. w4 X .gpio = DA850_USER_LED2,
0 ~8 z1 f, q9 X9 T% D8 v. G .name = "user_led2"," T9 H' P# n/ m/ N5 W, Z! R
.default_trigger = "default-on",
1 p# E- X3 y' h },; g# h. t# P) X
{
5 k( v( f: H! g0 D0 j% W .active_low = 0,. h2 v1 S1 B* y# o3 r
.gpio = DA850_USER_LED3,
- _- ]9 V! E r8 O( {% @" { .name = "user_led3",% r7 W. y& i8 I
.default_trigger = "default-on",& r& p. S# o9 ?' b" q4 ?; T- C1 c
},
2 C% ?0 b6 |; A! A* D, W};
5 u! x3 C4 f, G, n- W3 L L' p" N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: Q6 W {7 }; c/ S .leds = da850_evm_tl_leds,+ t6 X% R0 M3 R" B# A# {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 v$ J% U E+ t: l4 L! ~};4 ?/ _$ \5 a$ i
3 G4 R) p/ c& o. L7 ^; Y
static void led_dev_release(struct device *dev)! u& u: }/ i) D2 t6 \7 l
{
}( Q, R! O! b( r};, x) o4 m9 w7 ~: F" o% v
1 g" G7 y" a1 D. o2 m4 Y
static struct platform_device da850_evm_tl_leds_device = {
1 x7 u# [+ ?$ w4 z; @ .name = "leds-gpio",
1 @% j% U1 p2 x4 E d) X .id = 1,
$ f$ ^" ]! o, n9 m0 G3 i .dev = {+ K4 O. i# @" x; Q
.platform_data = &da850_evm_tl_leds_pdata,
+ ~ z4 [' e4 l7 O7 m$ n' D .release = led_dev_release,
6 O$ n& d. P. _! S, g8 _2 T/ r }% X/ k3 b/ q1 Z' y3 m. P
};$ G& c5 b% |3 r3 n
5 d! O, p. |+ q8 W# V# {
static int __init led_platform_init(void)
1 r* x, J( S: A: u! y0 q6 i3 D3 T{
& s. w- T e' A7 h" K! K int ret;: c* C- {8 D, I, |( z8 T( p
#if 0
v" d# s: @" v$ z2 D4 t' r; T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 x2 y d2 h. D
if (ret)
, T' G5 v k, N# M, f1 E& L; G pr_warning("da850_evm_tl_leds_init : User LED mux failed :". B3 h! {! G; ^4 d' s8 A
"%d\n", ret);, |! J) C$ ^3 l2 s
#endif1 j9 j6 t2 A% J ~; D. Y
ret = platform_device_register(&da850_evm_tl_leds_device);
" d6 K: E- L& |2 U if (ret)
" o2 y% U. A/ s1 T7 j D% E pr_warning("Could not register som GPIO expander LEDS");
" N2 Z% G7 \8 E5 M9 b else1 B' j; J1 X2 v; Z! J) ?/ g7 z
printk(KERN_INFO "LED register sucessful!\n");
( N, `. h& c8 v) p& _) Q! V0 C8 d/ |" r% S0 h. F
return ret; ~8 L1 V, U0 y/ {- K9 P h
}
5 g: s( b5 n3 E% \* g) p0 ] K7 W' p+ W8 S, \" V% p" c
static void __exit led_platform_exit(void)
% g1 r* ]9 `0 b' s7 Z! ]9 h; |{
: O6 e7 W" k- ?4 P platform_device_unregister(&da850_evm_tl_leds_device);
5 ?3 }3 K& C: ]) A3 m
( L, |; e, t0 b5 M/ `; {1 d. M, v printk(KERN_INFO "LED unregister!\n");
6 K/ ?! N2 R/ k" ^}& X! f, @4 e: d" _
) u. c2 x& X# ]2 f; \/ c( k( M
module_init(led_platform_init);! h# S8 X# w D8 K9 A2 A
module_exit(led_platform_exit);
5 }. Q6 d4 J, V9 y' ?4 x
* t7 h& _) U: k2 d" D, _* fMODULE_DESCRIPTION("Led platform driver");: j0 I0 c+ }7 D
MODULE_AUTHOR("Tronlong");
1 K8 A2 d3 H8 a+ R Q* sMODULE_LICENSE("GPL");" N9 I/ h* H/ o4 p
( K3 ?: k( S6 j, |+ t |
|