|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 t) D, s: Q. g#include <linux/init.h>
! \8 `) H7 [* N# o& P#include <linux/module.h>
1 k7 k" K6 k# \. D#include <linux/kernel.h>
& |$ R5 b# T& P) L8 z9 l$ @#include <linux/types.h>
! q2 B$ F- z/ R6 h, |* U& Y2 W6 v#include <linux/gpio.h>4 ]9 o" N8 @" G3 S! Z4 C
#include <linux/leds.h>
' R8 c! U7 ^/ _6 ?* `8 f6 i#include <linux/platform_device.h>
2 F. e1 t; H% _; d" W& U6 J5 r# x0 x( q
#include <asm/mach-types.h># Y) ~# Z# H4 x% y6 Y0 \
#include <asm/mach/arch.h>7 {# ]% H/ _* v' c; H* [
#include <mach/da8xx.h>
7 K2 ?4 L. q" ^7 }3 o! f#include <mach/mux.h>
, Z- ]' X- U I! c; e
, s* @" N2 z# a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! ~6 x% p9 D2 f$ ~/ L& X1 \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ I$ ]) b+ g/ t% j4 ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* t" ]2 m* _" [+ [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 e- K# a$ R8 o
3 E+ ]- P4 v5 q) H$ U4 D( \4 B/* assign the tl som board LED-GPIOs*/% t& _& r! @6 `% |5 S" M
static const short da850_evm_tl_user_led_pins[] = {8 |$ f3 m! l/ p2 a6 z3 V
/* These pins are definition at <mach/mux.h> file */
. k8 p+ n$ L9 x! o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 C" b! {+ w) g$ M* I
-1
R% [ X: }& U% H! z& n2 q c6 y};2 b% M; ]! [3 g+ ^1 U/ o) t& ]
4 ^# X3 j/ E' V6 @static struct gpio_led da850_evm_tl_leds[] = {
; y U) B5 A; q {4 Q) d# G% B6 \' `0 Q8 p. t5 Y
.active_low = 0,
" ?5 K( {* ~6 U8 Y" `) x .gpio = DA850_USER_LED0,2 [, `. U9 Q$ U7 J2 X( k
.name = "user_led0",
: Z; I6 `/ f( b5 j0 ?7 K& `, t0 ] .default_trigger = "default-on",0 J* u* i' E: a2 K8 f4 I& D
},
4 v2 R+ |* ~' [ {; I* j6 W) B4 N2 d
.active_low = 0,2 r c) @: `8 R/ g+ w9 t
.gpio = DA850_USER_LED1,3 k6 [9 V* U* x; e$ R1 K" p2 e6 M
.name = "user_led1",
O, s& ^+ z( Z. W' V/ X3 I .default_trigger = "default-on"," x. u+ h% z" ?' u. h4 p
},
7 G9 R% J9 T' n8 I5 t {( D, e' Y' R- w. \) G: P
.active_low = 0,# `9 Y3 ~ \4 U# m1 ~
.gpio = DA850_USER_LED2,
+ X% l C6 s [6 t* A" u, i$ m- O+ ?5 Y .name = "user_led2",* l. e \! e* W B% h
.default_trigger = "default-on",
! ~3 r- [+ \3 x },7 \1 T5 U a+ ^: j( E* r7 v
{; `9 Y9 n; m$ ]& P% G5 r
.active_low = 0,
) d& M8 e) v3 s5 I% Y .gpio = DA850_USER_LED3,9 u2 c4 D0 j8 \& _8 u
.name = "user_led3",
6 d/ Q0 h6 d+ v2 x( V7 r: h) t .default_trigger = "default-on",
% N# n, A" a# _9 C# B },
: l3 E% k, ]7 J7 p9 }9 g; @};
4 J. [# z L* _) q
/ M$ B$ f7 X- }3 Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' N# a$ X" m( t6 g
.leds = da850_evm_tl_leds,0 d8 O) E, K8 |0 q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 [, I* T) g3 V
};; G) U1 l7 w# `% r; x( Z$ Z
! {! j3 Z8 S8 G, x7 U- e3 R* U' K
static void led_dev_release(struct device *dev)3 ^, Q3 e9 E0 j: T: w; X
{
/ K) ?$ h0 ]4 ?( x/ H& A- u};- h. G, X1 c% u W# j9 a7 a( }
& Q0 f1 }( V. `! b- b! c
static struct platform_device da850_evm_tl_leds_device = {$ e( |% A. {; _2 `
.name = "leds-gpio",* E( Y) z1 `) ?5 h& T( a
.id = 1,
, t6 z- M$ x- i3 r .dev = {/ H0 {- C* N& | L6 ]. r3 h2 ^$ h
.platform_data = &da850_evm_tl_leds_pdata,
/ o z6 K! \) k0 A. x0 V- ^- M .release = led_dev_release,
+ {( H4 s" l! M# j Y8 D }
- a+ A" x4 K8 @( p% T' M- k};
$ A5 Y$ S. e1 f: k. V3 m' E3 T- a" w; I
static int __init led_platform_init(void), x9 ~: N# Q% A. ^
{; v- _" G1 [- f% c5 M2 K* w% B
int ret;0 J' K+ v: i; j4 j3 ?: u7 b/ {
#if 0
/ x. `' z4 Z, Z$ F9 X m, a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- {; V7 p* t! ]# j: V# A if (ret)
y% K. {2 Z3 q' k6 z3 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! G2 o* g1 D' x0 T
"%d\n", ret);# y' y6 z* C/ x" ^5 k# V5 B
#endif
* k s; g) k" R8 S7 R5 ]$ B ret = platform_device_register(&da850_evm_tl_leds_device);
: T6 l! v" B9 K; p) i! Y' X+ U% I if (ret)/ G+ [8 E; d7 y0 h. O- T
pr_warning("Could not register som GPIO expander LEDS");& Z% d% t9 M. H: |
else
) f' K/ y7 @- g$ ^* L printk(KERN_INFO "LED register sucessful!\n");. C* L6 k% x7 C: L
/ L; U$ o9 | F
return ret;8 E! B# i& P" P k3 G; i$ C/ a
}4 x8 K8 A) k4 ?$ G2 Q/ y
4 `* A8 _/ v! i3 f0 C9 T9 |
static void __exit led_platform_exit(void)" R) J' s- {; k; c
{
. y5 P4 G1 l0 j% B* k) S: o platform_device_unregister(&da850_evm_tl_leds_device);8 b2 I# u% Y8 x4 }# M$ x
1 w- \1 u% g* z T$ T8 h, d, \0 \ printk(KERN_INFO "LED unregister!\n");5 V% h8 T; j' o, Y! f: ~1 ?
}- F0 G3 i9 e6 _0 n0 T3 A; ^; Q$ c
4 x% K; g# z7 J# v
module_init(led_platform_init);) o3 b! H: p% T+ T
module_exit(led_platform_exit);# F8 S( A) b3 o, P
4 k' Q; F+ W: ~6 |/ j
MODULE_DESCRIPTION("Led platform driver");+ k1 _! w! G$ ?: [- {7 Q# A7 P
MODULE_AUTHOR("Tronlong");% Y% m, b& H* Q! ^9 p
MODULE_LICENSE("GPL");: c1 |& C" D! F
" B$ ~2 u5 P! q1 t. p. P2 Q |
|