|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: t. v, B8 e" ^! j1 ^#include <linux/init.h>
: {) _$ h4 X3 z8 J/ _#include <linux/module.h> z% u. h: y6 D
#include <linux/kernel.h>
1 M6 @& `8 j9 J8 \#include <linux/types.h>, U) u) [$ e2 n3 G. {
#include <linux/gpio.h>
( J! i: V, s" E' Q8 h) F' z5 Z#include <linux/leds.h>
/ v5 f+ {9 C5 y( i#include <linux/platform_device.h># [% r5 P2 i* I2 r
: n2 m8 I6 @1 \) b9 X9 I
#include <asm/mach-types.h>" g/ Q6 A9 c6 h8 b$ L% j' M! r- Q
#include <asm/mach/arch.h> K, C# j% k4 A
#include <mach/da8xx.h>
( p# N) `! F5 c5 @#include <mach/mux.h>
% B( q; g% J: T* P& [
% J* H4 b& J) V2 n+ A# A9 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), O! W0 ?9 c1 x$ U# S$ K+ k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 Y, Q3 g _4 n3 `( B V+ g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 ?6 B9 `! S p. X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): i& T' |. |2 C9 n0 d4 |7 K
! d% C! x9 ] s- _8 n a/* assign the tl som board LED-GPIOs*/
8 ~7 m4 [4 W/ }/ V9 ~9 B- ostatic const short da850_evm_tl_user_led_pins[] = {
: L; J4 ]" N+ [4 e* [* g5 V /* These pins are definition at <mach/mux.h> file */8 V& H. D4 H, G) w- |# N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% F ^. N8 [/ U+ h( T% l" f0 B9 w -1
9 N" Q7 G7 C1 k' M- M% {}; T" Y% x# c7 f' n: e5 f: b5 T
5 l1 |) S. T9 N& C# G) G: p; }! mstatic struct gpio_led da850_evm_tl_leds[] = {
$ B# d7 q* W Q4 v2 }2 n {1 M3 u: y; u) D3 L
.active_low = 0,
0 R5 X7 p8 D. k .gpio = DA850_USER_LED0,
# Z8 l; ^8 i6 ]5 l( L% t+ ? .name = "user_led0",
8 \, N1 u7 u* T$ h .default_trigger = "default-on",
( ^# Q; U0 K7 j: e& W/ i },; M8 x( Q9 t* w+ L9 F
{/ @3 s8 x& ]* P: f
.active_low = 0,
5 V1 }2 Y4 `5 U" @7 i" j- P .gpio = DA850_USER_LED1,
. n1 o2 r* G7 a9 {; x# x .name = "user_led1",9 j# |) E; J% i9 }! d
.default_trigger = "default-on",
+ J- u6 ]* j# v2 p },9 C2 j% X$ `" L# |# S" R
{& _; Y- i; x/ N, ]# T' f* j. ?( T: o9 D
.active_low = 0,
2 Y6 i9 ?; X# w5 S) t .gpio = DA850_USER_LED2," J# C0 I$ f3 e2 H
.name = "user_led2",
+ g$ w6 M, G9 w2 b' V' t .default_trigger = "default-on",
7 S6 e5 G d; T4 |3 Z( `2 r },: @& J3 V4 P; k
{) Q9 ~2 P2 h; x$ `" C2 B: d& `
.active_low = 0,. i# m0 J {# ~- c. h
.gpio = DA850_USER_LED3,
9 E, D* D! G# |1 V4 o: e& p" v1 O .name = "user_led3",+ ^, A8 q8 Y- c) b' {1 ? R; z
.default_trigger = "default-on",
k" L" X2 N$ r },
! U; Y( m; j9 A0 |) U4 k( U};) }) y$ [! i* f" H% k3 G5 L6 Q" t
8 W( X! A+ m" \4 d* L+ O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" {. c3 ?: D, b9 T8 B) L+ H+ p6 b
.leds = da850_evm_tl_leds, A) ~# M2 z2 v5 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
K2 y, t" |/ {3 o};# ^: H" ^. w4 r; H& Y+ G
, h, V8 e5 a F3 x0 v
static void led_dev_release(struct device *dev)
9 t* C. O2 K U* C: v3 a- A& e{
! {) _3 T6 ~3 q l5 u |};# f% z8 r ?4 d0 `3 |' s7 H0 u0 E
! m Z" L( F6 X# I
static struct platform_device da850_evm_tl_leds_device = {
% |- ~& \4 H" b .name = "leds-gpio",
8 e9 C: i( P5 L1 R/ O .id = 1,
6 q% Y- R( |: n# W# y5 z) m .dev = {# a* L1 t5 W" y: b
.platform_data = &da850_evm_tl_leds_pdata,% l4 {$ K8 y2 F3 d% j k+ k
.release = led_dev_release,6 c3 C2 a! i' c+ q( Z3 P9 ?
}7 Y ?' E d! a2 c G8 R7 a6 d; {
};
" p4 H( F$ ~ x# @# @: x9 ~% ^$ M1 }, A, h1 }" r
static int __init led_platform_init(void)
& C! y! g R' z$ C" z9 F{
" v. j2 |- J- G+ y: }& p% h int ret;9 n- o# a$ r+ B1 {! o& ^! q
#if 0* f3 L; P; K1 k" C$ X& v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 X3 P( a# ]. G: A if (ret)
$ Z( c4 Y+ R' z- V+ S8 i6 k& n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* N5 k4 \) f1 e- \8 f. d7 ] "%d\n", ret);
- ~: y5 A0 [9 u4 E- J- V#endif! {- D4 k! L# P) A$ D1 i. Y( B/ ?+ q
ret = platform_device_register(&da850_evm_tl_leds_device);
6 ~( H' {. O/ h if (ret)
, }. [& Q# @1 t8 E: p ^" w& T pr_warning("Could not register som GPIO expander LEDS");9 R9 @$ J6 t- M% d1 U8 i, d
else3 F4 @( n I0 Q I4 ]
printk(KERN_INFO "LED register sucessful!\n");
! ^# J; Y" c$ J0 W7 g; n& m
H; j4 s* m, V9 Y: E1 y return ret;9 i5 D# P) `0 T' D$ r
}
; a6 t* F; p1 z E, R
0 }! w+ q. j: ^static void __exit led_platform_exit(void)
, M& ~& o/ A& j6 L S# b{* J; Q* L" V: s3 u+ {- X
platform_device_unregister(&da850_evm_tl_leds_device);
; ^. H! |# o+ t7 b: R% v. q( p( O$ i
printk(KERN_INFO "LED unregister!\n");% l: X( p/ C$ R# {$ K# t- z
}$ ]+ T! F3 b2 {7 B, S2 k- h
! ]( N Y: u/ y1 ~$ ?5 W7 y) c7 e. j
module_init(led_platform_init);
' S& t; Q# k! {7 x: n3 b; `4 h8 Jmodule_exit(led_platform_exit);
- J( I" H) U/ m: \* N1 }' @) L1 s0 f t1 q2 O
MODULE_DESCRIPTION("Led platform driver");
: a$ X# M2 X; H& rMODULE_AUTHOR("Tronlong");
# b% w7 \/ r1 @/ L1 M0 }% UMODULE_LICENSE("GPL");# n; x7 T; a' C* \$ b2 e% |
0 v, _0 X7 }. G& O5 S5 z
|
|